87 lines
4.6 KiB
Markdown
87 lines
4.6 KiB
Markdown
# 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*
|