4.6 KiB
4.6 KiB
Technology Stack
Analysis Date: 2026-04-30
Languages
Primary:
- TypeScript (ESM) - Backend and frontend application code in
backend/src/**/*.tsandfrontend/src/**/*.{ts,tsx} - SQL (SQLite migrations) - Schema evolution files in
backend/drizzle/*.sql
Secondary:
- CSS - UI styling in
frontend/src/**/*.cssand CSS modules such asfrontend/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-sliminbackend/Dockerfile,frontend/Dockerfile;actions/setup-node@v6withnode-version: '22'in.github/workflows/test.ymland.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.jsonreferenced by workflow cache in.github/workflows/test.yml)
Frameworks
Core:
- Fastify 5 (
fastify,@fastify/*inbackend/package.json; app bootstrap inbackend/src/index.ts) - React 19 (
react,react-dominfrontend/package.json; app entry infrontend/src/main.tsx) - Vite 8 (
viteand@vitejs/plugin-reactinfrontend/package.json; config infrontend/vite.config.ts) - Drizzle ORM + libSQL client (
drizzle-orm,@libsql/clientinbackend/package.json; DB init inbackend/src/db/client.ts) - Mantine 8 UI system (
@mantine/*infrontend/package.json; provider infrontend/src/ui/providers/AppUiProvider.tsx)
Testing:
- Vitest 4 (
vitest,@vitest/coverage-v8in backend/frontend package manifests; configs inbackend/vitest.config.ts,frontend/vitest.config.ts) - Playwright (
@playwright/testinfrontend/package.json; configs infrontend/playwright*.config.ts; CI run in.github/workflows/e2e.yml) - Testing Library (
@testing-library/*infrontend/package.json)
Build/Dev:
- TypeScript compiler (
tscscripts inbackend/package.jsonand frontend type-check viafrontend/package.json) - TSX watcher for backend dev (
tsx watch src/index.tsinbackend/package.json) - Biome for lint/format (
biome.json, lint/check scripts across package manifests) - Drizzle Kit for DB migration generation (
drizzle-kitinbackend/package.json, config inbackend/drizzle.config.ts)
Key Dependencies
Critical:
fastifyand@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_URLinfrontend/vite.config.tsand 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.jsonscripts) - 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.ymlreferencesghcr.io/danielvolz/medassist-ng-backend:latestandghcr.io/danielvolz/medassist-ng-frontend:latest) - Backend persistent filesystem for SQLite/data in mounted
./data(docker-compose.yml, DB path resolver inbackend/src/db/path-utils.ts)
Stack analysis: 2026-04-30