Files
medassist-ng/.planning/codebase/STACK.md

4.6 KiB

Technology Stack

Analysis Date: 2026-04-30

Languages

Primary:

  • TypeScript (ESM) - Backend and frontend application code in backend/src/**/*.ts and frontend/src/**/*.{ts,tsx}
  • SQL (SQLite migrations) - Schema evolution files in backend/drizzle/*.sql

Secondary:

  • CSS - UI styling in frontend/src/**/*.css and CSS modules such as frontend/src/features/schedule/TimelineSurface.module.css
  • YAML - CI/CD and compose configuration in .github/workflows/*.yml, docker-compose.yml, docker-compose.dev.yml
  • Shell - Container/runtime entrypoints in backend/docker-entrypoint.sh, frontend/nginx-entrypoint.sh

Runtime

Environment:

  • Node.js 22 runtime baseline (node:22-slim in backend/Dockerfile, frontend/Dockerfile; actions/setup-node@v6 with node-version: '22' in .github/workflows/test.yml and .github/workflows/e2e.yml)

Package Manager:

  • npm (scripts in root package.json, backend/package.json, frontend/package.json)
  • Lockfile: present (backend/package-lock.json, frontend/package-lock.json referenced by workflow cache in .github/workflows/test.yml)

Frameworks

Core:

  • Fastify 5 (fastify, @fastify/* in backend/package.json; app bootstrap in backend/src/index.ts)
  • React 19 (react, react-dom in frontend/package.json; app entry in frontend/src/main.tsx)
  • Vite 8 (vite and @vitejs/plugin-react in frontend/package.json; config in frontend/vite.config.ts)
  • Drizzle ORM + libSQL client (drizzle-orm, @libsql/client in backend/package.json; DB init in backend/src/db/client.ts)
  • Mantine 8 UI system (@mantine/* in frontend/package.json; provider in frontend/src/ui/providers/AppUiProvider.tsx)

Testing:

  • Vitest 4 (vitest, @vitest/coverage-v8 in backend/frontend package manifests; configs in backend/vitest.config.ts, frontend/vitest.config.ts)
  • Playwright (@playwright/test in frontend/package.json; configs in frontend/playwright*.config.ts; CI run in .github/workflows/e2e.yml)
  • Testing Library (@testing-library/* in frontend/package.json)

Build/Dev:

  • TypeScript compiler (tsc scripts in backend/package.json and frontend type-check via frontend/package.json)
  • TSX watcher for backend dev (tsx watch src/index.ts in backend/package.json)
  • Biome for lint/format (biome.json, lint/check scripts across package manifests)
  • Drizzle Kit for DB migration generation (drizzle-kit in backend/package.json, config in backend/drizzle.config.ts)

Key Dependencies

Critical:

  • fastify and @fastify/* - HTTP API runtime, security middleware, docs middleware (backend/src/index.ts)
  • drizzle-orm + @libsql/client - SQLite data access and migration execution (backend/src/db/client.ts)
  • openid-client + jose - OIDC SSO and token operations (backend/src/routes/oidc.ts, backend/package.json)
  • nodemailer - SMTP notification delivery (backend/src/services/notifications/delivery.ts)
  • react, react-router-dom, @mantine/* - SPA UI shell, routing, and component system (frontend/src/main.tsx, frontend/src/App.tsx)
  • i18next + react-i18next - Localization runtime (frontend/src/i18n/index.ts)

Infrastructure:

  • dotenv + zod - env loading/validation (backend/src/plugins/env.ts)
  • sharp - image processing pipeline support (backend/package.json, image route usage in medication flows)
  • @fastify/swagger + @fastify/swagger-ui - OpenAPI docs on /docs (backend/src/index.ts)

Configuration

Environment:

  • Runtime env schema and validation in backend/src/plugins/env.ts
  • Example variable inventory in .env.example
  • Frontend proxy target via BACKEND_URL in frontend/vite.config.ts and compose files

Build:

  • Backend TS build config: backend/tsconfig.json
  • Frontend TS + Vite config: frontend/tsconfig.json, frontend/tsconfig.node.json, frontend/vite.config.ts
  • DB migration tooling config: backend/drizzle.config.ts
  • Quality tooling config: biome.json

Platform Requirements

Development:

  • Node.js 22 with npm for local runs (backend/package.json, frontend/package.json scripts)
  • Optional Docker Compose local stack (docker-compose.dev.yml)
  • Browser runtime for frontend and Playwright browser binaries for E2E (frontend/package.json, .github/workflows/e2e.yml)

Production:

  • Containerized deployment using prebuilt images from GHCR (docker-compose.yml references ghcr.io/danielvolz/medassist-ng-backend:latest and ghcr.io/danielvolz/medassist-ng-frontend:latest)
  • Backend persistent filesystem for SQLite/data in mounted ./data (docker-compose.yml, DB path resolver in backend/src/db/path-utils.ts)

Stack analysis: 2026-04-30