Imagine a library built not of bricks but of ideas—walls lined with shared knowledge instead of books, and a checkout desk powered by code. This is NoteHub-Mānoa, a platform where UH Mānoa students can upload and access course notes, review and rate them, and earn points for sharing valuable academic resources. But building this digital library isn’t just about writing code—it’s about crafting structure, ensuring maintainability, and allowing for growth. That’s where design patterns come in. Just as architects rely on blueprints passed down through generations to design homes that are safe, efficient, and beautiful, software engineers rely on design patterns—reusable solutions to recurring software problems. These patterns aren’t libraries or frameworks; they’re more like mental models, time-tested techniques for structuring software in a way that makes it easier to read, maintain, and extend.
In NoteHub-Mānoa, several design patterns quietly shape the platform’s architecture. The Factory Pattern appears in the backend, abstracting the creation of Note
objects associated with Contacts
and course data. This allows flexibility for future features without rewriting core logic. On the front end, the Observer Pattern is mirrored through React hooks that update the user interface as new notes are added. Although we don’t use sockets, this reactivity mimics real-time collaboration. For ratings and comments, we employed the Strategy Pattern, which lets us define modular logic for calculating scores or filtering visibility—giving us freedom to evolve features independently. Finally, the entire project follows MVC (Model-View-Controller) principles. Models are handled via Prisma schemas, views through React components, and control logic through API routes and server actions. This structure improves code organization and scalability.
Design patterns are the scaffolding of serious software—the architectural DNA behind apps that last. In NoteHub-Mānoa, they helped transform a collaborative student project into a well-structured, extensible platform. Knowing when to reach for a pattern is what turns good software into great software.
“Each pattern describes a problem which occurs over and over again in our environment, and then describes the core of the solution to that problem.” — Christopher Alexander