OrvexCore logo
OrvexCore
DevelopersArchitecture

Architecture

NestJS. Event-driven. Multi-tenant.

OrvexCore is built with Domain-Driven Design principles on a NestJS microservice architecture — with dedicated background workers, a multi-schema Prisma database, and an event-driven domain model.

NestJS + DDD architecture
BullMQ event workers
Prisma multi-schema PostgreSQL
Turborepo build pipeline

What's covered

Monorepo structure

Turborepo monorepo with @orvexcore/api (NestJS HTTP), @orvexcore/workers (BullMQ consumers), and orvexadmin (Next.js 16) apps.

Domain modules

Isolated domain modules: auth, tenancy, fees, academics, notifications, audit. Each owns its controllers, use cases, and repositories.

Port / adapter pattern

Use cases depend on port interfaces injected via NestJS DI — no direct database access from business logic.

Multi-tenant context

Organization context injected at the framework level via ContextPort — every use case calls getOrganizationIdOrFail().

Event-driven workers

Domain events published after state changes, consumed by BullMQ workers in named queues per domain.

Prisma multi-schema

PostgreSQL with 8 isolated schemas. Migrations managed by Prisma Migrate with checksum-protected migration files.