Stack

Mainstream, typed, testable.

The default per layer, then what each system actually runs on so you can judge maintainability. Client systems are applications, so they get Next.js and NestJS; this portfolio is a static content site, so it is built with Astro and Svelte — the fastest tool for that job.

Defaults

What a new system gets

API
NestJS · Prisma or Drizzle · PostgreSQL · class-validator or zod DTOs · Swagger in development
Web
Next.js 16 · React 19 · TypeScript strict · Tailwind v4 or scoped CSS · TanStack Query / Table · next-intl for FR/EN/AR with RTL
Mobile & field
Expo / React Native for store apps · installable PWAs for kiosks, drivers and offline field tools
Auth
better-auth or httpOnly cookie sessions · separate device credentials for kiosks · permission tokens per resource · audit logs
Storage & messaging
Cloudflare R2 / S3 · Resend · Twilio · Pusher · Expo Push · WhatsApp deep links
Hosting
Vercel for web · Coolify on a VPS you own for API + Postgres · Supabase where it fits · multi-instance from one codebase
Quality
Jest / Vitest / supertest against a real Postgres · GitHub Actions · Sentry · PostHog · Groundwork docs (ADRs, RFCs, feature specs, status board)

Stack × system

What each system runs on

SystemWebMobileAPIDatabaseHosting & CITesting
WageWizardNext.js 16.3 · React 19.3 · TypeScript 5.9No native app by decisionNestJS 11.2 · TypeScript 5.7 · better-auth 1.7.4PostgreSQL · Prisma 7.10 with @prisma/adapter-pg · 26 SQL migrationsNo Dockerfile, CI workflow or hosting config on disk · Deploy notes · Temporary split-domain deploy: Next rewrite `/backend/:path*` → API_PROXY_TARGET keeps the session cookie first-partyBackend unit: Jest 30, 25 spec files, 480 tests — executed 2026-09-12, all passing · Backend API: 18 supertest e2e specs against a real local Postgres · Frontend: Vitest 5 + Testing Library/jsdom, 31 test files
Ultimate FitnessNext.js 16 · React 19 · Tailwind CSS v4Expo SDK 57 · expo-router · React Native 0.86NestJS 12 · Express 5 · Better Auth 1.7PostgreSQL 17 · 74 tables / 31 enums · 31 committed SQL migrations with drift gateTurborepo 2.5 monorepo · Docker multi-stage API image via turbo prune · Vercel config for webVitest unit specs · 32 API integration spec files · Playwright E2E: 5 journey specs, 18 tests
Viandes MetropolitainNext.js 13 · React 18 · TypeScriptDriver-facing PWA inside the dashboardNestJS 10 · Node 20 · Prisma 6PostgreSQL · pg_trgm GIN indexes · Prisma migrationsStorefront on Vercel · Backend containers + Postgres on Coolify · Sentry with sourcemap upload in the build scriptJest · vitest + Testing Library · supertest
Sell My VehicleNext.js 16 · React 19 · TypeScriptNo native app. Mobile evaluator portal is a Next.js route group app/(mobile)/mobile-eval with camera capture, browser-image-compression, guided video captureNext.js route handlers · next/server after() for background side-effects · Supabase JS + @supabase/ssrSupabase Postgres · 169 tables + 3 views · Postgres CHECK-constraint state machines with conditional invariantsVercel · Production migrations run inside the Vercel build under a Postgres advisory lock; preview builds skip them · GitHub Actions: `npm test` on push to main and on PRs in both reposVitest in both repos: CRM 141 *.test.ts files · No DB, no network: suite runs in about a second so the pre-commit hook can run it · Static guard tests in crm/tests/guards
Islamona AcademyNext.js 16 · React 19 · TypeScript 5—NestJS 11 · TypeScript · Prisma 7 with PrismaPg driver adapterPostgreSQL · 32 Prisma models, 34 enums, 44 migrations · DATABASE_SCHEMA.md kept in the same change as every migrationVercel · Coolify · Cloudflare R2Jest 118 suites / 1,595 tests · Vitest 71 files / 961 tests · Playwright learner journey
SuiteChannelNext.js 15 · React 19 · TypeScript—NestJS 11 · TypeScript · Prisma 7 + @prisma/adapter-pgPostgreSQL · 35 Prisma models, 11 enums, 62 migrations · partial unique indexes as the sync concurrency guardCoolify · Vercel-style Next.js host at the dealer portal · same-site cookies on nu-toneco.comJest 35 suites / 472 tests · check:i18n message-key audit · QA test report round 1 + remediation programme
Beit Al KatebNext.js 16 · React 19 · TypeScript 5.7—NestJS 11 · Prisma 7 + @prisma/adapter-pg · better-auth 1.3PostgreSQL · Prisma schema: 45 models, 39 enums, 114 migrations · pg_trgm GIN trigram index on Book.searchTextVercel · Coolify + Nixpacks · Cloudflare in front of VercelBackend only: Jest 30 + ts-jest unit specs with mocked Prisma · No frontend tests
BrandPlusNext.js 16 · TypeScript · Tailwind CSS 4—NestJS 11 · Prisma 7 with @prisma/adapter-pg · Better Auth 1.3PostgreSQL 17 · 24 Prisma models, 7 enums, 15 numbered migrations + 7 archived legacy migrationsClient-owned netcup VPS · Nixpacks build with `prisma migrate deploy` in the build script · VercelJest + ts-jest: 17 backend *.spec.ts · Vitest + Testing Library + jsdom: 11 frontend test files · Supertest is installed but not imported by any spec
Ishtirak HaraNext.js 16.1 · React 19 · TypeScript 5PWA · Serwist 9 service worker · navigator.storage.persist() for IndexedDB durabilitySupabase · Postgres triggers · 5 legacy plpgsql aggregate RPCsPostgreSQL on Supabase · Dexie 4 / IndexedDB local mirror · localStorageVercel · GitHub · No CI workflowVitest 4 · @testing-library/react + jest-dom + user-event · jsdom 28
TeliposNext.js 16 · React 19 · TypeScript 5—NestJS 11 · TypeScript · MongoDB Node driver 7 with multi-document transactionsMongoDB Atlas · ~110 collections incl. event and ledger collections · index sync + migration scriptsVercel · Coolify · MongoDB AtlasVitest 143 files / 1,290 tests on the client · Jest 325 spec files / 2,745 test cases on the server · 18 shell specs for the backup runner
NO-HomeschoolingNext.js 16 · React 19 · TypeScript 5—NestJS 11 · TypeScript · Prisma 7 + @prisma/adapter-pgPostgreSQL with pgvector · 35 Prisma models, 22 enums, 33 migrations · DATABASE_SCHEMA.mdVercel · Docker image for the API · Cloudflare R2Jest 4 suites / 41 tests · LLM-as-judge evals: ~30 curated cases across six dimensions against the live /ai/ask endpoint
FastFeastNext.js 14.0.1 · React 18 · TanStack Query 5.90Expo SDK 52 / React Native 0.76.5 · TypeScript 5 · React Navigation 6Next.js API routes · Prisma 7.5 with @prisma/adapter-pg and generated client in dashboard/generated/prisma · jsonwebtoken 9PostgreSQL · Prisma schema: 10 modelsVercel · EAS Build · EAS Submit—
Quran KhatmiyaExpo 57 · expo-router 57 · TanStack Query 5Expo Go and web verified; expo run:ios / run:android configured but blocked by toolchain · KFGQPC Uthmanic Hafs font bundled via expo-font · QCF v2 page fonts present in assetsNestJS 11 · Node 22 via tsx · Better Auth 1.7PostgreSQL · Drizzle ORM 0.45 + drizzle-kit pushnpm workspaces + Turborepo 2 · GitHub Actions CI with Postgres 17 service · bash dev orchestrationnode:test: 71 tests, all executed and passing during this verification · tsc --noEmit typecheck on every workspace in CI · No mobile tests, no e2e