Tech Stack
Last updated: February 2026
Frontend​
| Technology | Version | Purpose |
|---|---|---|
| React | 19.1.1 | UI framework |
| Vite | 7.2.2 | Build tool and dev server |
| TypeScript | ~5.9 | Type-safe development |
| MUI (Material UI) | 7.x | Component library (migrating from Shadcn/UI) |
| MUI X DataGrid Pro | 8.x | Advanced data grid with server-side filtering |
| TanStack Query | 5.x | Data fetching, caching, and mutations |
| TanStack Table | 8.x | Headless table utilities |
| React Router | 7.x | Client-side routing |
| React Hook Form | 7.x | Form state management |
| Zod | 4.x | Schema validation |
| Emotion | 11.x | CSS-in-JS (MUI styling engine) |
| Chart.js + react-chartjs-2 | 4.x / 5.x | Dashboard charts |
| @react-pdf/renderer | 4.x | PDF report generation |
| jose | 6.x | JWT token utilities (client-side) |
| Motion (Framer Motion) | 12.x | Animations |
Backend​
| Technology | Version | Purpose |
|---|---|---|
| NestJS | 11.x | Application framework |
| TypeScript | ~5.7 | Type-safe development |
| TypeORM | 0.3.21 | Database ORM with entity decorators and migrations |
| PostgreSQL | 16 | Primary relational database |
| Redis (cache-manager-redis-yet) | 7.x | API response caching |
| Passport + @nestjs/jwt | 11.x | Authentication (custom JWT, no Auth0) |
| CASL | 6.7.3 | Attribute-based access control (RBAC) |
| Brevo SDK (@getbrevo/brevo) | 3.x | Email campaign delivery |
| AWS SDK (S3) | 3.x | Document storage (S3/R2-compatible) |
| ExcelJS | 4.x | Excel export generation |
| Swagger (@nestjs/swagger) | 11.x | OpenAPI documentation |
| class-validator / class-transformer | 0.14 / 0.5 | DTO validation and serialization |
| nestjs-cls | 6.x | Request-scoped context (tenant isolation) |
| nest-commander | 3.x | CLI commands (import, seed, migrations) |
Testing​
| Technology | Version | Purpose |
|---|---|---|
| Vitest | 3.x | Frontend unit and integration tests |
| React Testing Library | 16.x | Component testing |
| Jest | 29.x | Backend unit tests |
| Supertest | 7.x | Backend HTTP integration tests |
| Playwright | (via apps/e2e) | End-to-end browser tests |
Tooling & Infrastructure​
| Technology | Version | Purpose |
|---|---|---|
| Yarn | 4.12.0 | Package manager (Corepack-managed) |
| Turborepo | 2.8.9 | Monorepo build orchestration and caching |
| Docker | Multi-stage builds | Containerized deployment |
| Dokploy | Self-hosted VPS | Deployment platform |
| Traefik | (via Dokploy) | Reverse proxy, SSL termination |
| GitHub Actions | (CI only) | Linting, type-checking, test runs |
| ESLint | 9.x | Code linting (flat config) |
| Prettier | 3.x | Code formatting |
| Husky + lint-staged | 9.x / 16.x | Pre-commit hooks |
| Changesets | 2.x | Version management |
| Knip | 5.x | Unused dependency detection |
Key Architectural Decisions​
- No Auth0 — authentication is fully custom using Passport local strategy + JWT tokens issued by the NestJS backend.
- TypeORM over Prisma — migrated to TypeORM for decorator-based entities, repository pattern, and better NestJS integration with tenant filtering.
- React + Vite over Next.js — migrated from Next.js 14 to a pure React SPA with Vite for simpler deployment (static files served by Nginx).
- MUI over Shadcn/UI — ongoing gradual migration from Shadcn/UI to MUI for a richer component set and DataGrid Pro.
- Dokploy over Render.com — self-hosted deployment on a VPS with Dokploy for cost control and full infrastructure ownership.
- Yarn 4 + Turborepo over npm workspaces — better monorepo performance with caching and parallel task execution.