Design Methodology
Technology Stack
Here's the software we use:
Backend
- Database: PostgreSQL
- Keystore: Redis
- Code: NodeJS / NestJS
- Role Management: Casbin (RBAC / ACL)
- Local Development Environment: Devbox (wrapper for Nix)
Frontend:
- Framework: SvelteKit
- Build Tool: Vite
- CSS Framework: TailwindCSS
- UI Components: DaisyUI
To understand the structure of our backend and frontend, take a look at these architecture diagrams:
Endpoint Design
Our endpoints and code follow Domain-Driven Design principles, which means:
- We use Object-Oriented Design as much as possible.
- We have well-defined subdomains, objects, and bounded contexts.
- Endpoints are designed to be RESTful whenever possible.
Thin Onion Structuring
We use the thin onion approach with MVC (Model-View-Controller) to organize our code:
- Controller / Route: Parses the request and prepares the response.
- Service: Contains logic to manipulate the service object.
- Repository: A thin layer on top of a database table.
For the repository model, we use GORM as our ORM (Object-Relational Mapping) tool.