139 lines
5.7 KiB
Markdown
139 lines
5.7 KiB
Markdown
# Codebase Structure
|
|
|
|
**Analysis Date:** 2026-04-30
|
|
|
|
## Directory Layout
|
|
|
|
```
|
|
medassist/
|
|
├── frontend/ # React + Vite SPA, UI, hooks, page routes, frontend tests
|
|
├── backend/ # Fastify API, domain services, DB schema/migrations, backend tests
|
|
├── backend/drizzle/ # SQL migration files + drizzle meta journal
|
|
├── docs/ # Product/ops docs and screenshots
|
|
├── doku/ # Local-only working notes and reports (ignored)
|
|
├── .github/ # CI workflows, agents, local skill/runtime metadata
|
|
├── .planning/codebase/ # Generated codebase mapping documents
|
|
├── data/ # Runtime/local SQLite backups and scheduler files
|
|
└── package.json # Root workspace scripts for lint orchestration
|
|
```
|
|
|
|
## Directory Purposes
|
|
|
|
**frontend/src:**
|
|
- Purpose: Product UI and client-side app logic.
|
|
- Contains: `pages/`, `components/`, `context/`, `hooks/`, `ui/`, `utils/`, `i18n/`, `test/`.
|
|
- Key files: `frontend/src/main.tsx`, `frontend/src/App.tsx`, `frontend/src/context/AppContext.tsx`.
|
|
|
|
**backend/src:**
|
|
- Purpose: HTTP API, auth, domain services, and persistence access.
|
|
- Contains: `routes/`, `services/`, `plugins/`, `db/`, `utils/`, `test/`.
|
|
- Key files: `backend/src/index.ts`, `backend/src/routes/medications.ts`, `backend/src/routes/planner.ts`, `backend/src/db/client.ts`.
|
|
|
|
**backend/drizzle:**
|
|
- Purpose: SQL migration history for SQLite compatibility.
|
|
- Contains: numbered migration files and `meta/_journal.json`.
|
|
- Key files: `backend/drizzle/0000_init.sql`, `backend/drizzle/0014_add_user_settings_timezone.sql`.
|
|
|
|
**frontend/e2e:**
|
|
- Purpose: Playwright end-to-end scenarios and fixtures.
|
|
- Contains: browser tests + auth fixtures.
|
|
- Key files: `frontend/e2e/fixtures/` and spec files under `frontend/e2e/`.
|
|
|
|
**docs + doku:**
|
|
- Purpose: formal docs (`docs/`) and local-only work tracking (`doku/`).
|
|
- Contains: behavior/spec docs, screenshots, local report/memory logs.
|
|
- Key files: `docs/TECH_STACK.md`, `doku/memory_notes.md`, `doku/report.md`.
|
|
|
|
## Key File Locations
|
|
|
|
**Entry Points:**
|
|
- `frontend/src/main.tsx`: Browser bootstrap; mounts providers and router.
|
|
- `frontend/src/App.tsx`: Route graph and global modal/shell orchestration.
|
|
- `backend/src/index.ts`: Fastify app setup + startup runtime.
|
|
|
|
**Configuration:**
|
|
- `frontend/vite.config.ts`: Dev server, `/api` proxy rewrite, build-time constants.
|
|
- `frontend/vitest.config.ts`: Frontend unit test config.
|
|
- `backend/vitest.config.ts`: Backend unit/integration test config.
|
|
- `backend/drizzle.config.ts`: Drizzle migration configuration.
|
|
- `.gitignore`: Local-only/generated path policy (including `.planning/`, `doku/`, `data/`, coverage/test artifacts).
|
|
|
|
**Core Logic:**
|
|
- `backend/src/routes/`: API contracts and request handlers.
|
|
- `backend/src/services/`: Scheduler, notifications, medication helpers.
|
|
- `backend/src/db/schema.ts`: Source-of-truth table definitions.
|
|
- `frontend/src/context/`: Shared app orchestration state.
|
|
- `frontend/src/pages/`: Screen-level composition.
|
|
|
|
**Testing:**
|
|
- `frontend/src/test/`: Frontend unit/component tests.
|
|
- `frontend/e2e/`: Playwright E2E tests.
|
|
- `backend/src/test/`: Backend route/service/db tests.
|
|
|
|
## Naming Conventions
|
|
|
|
**Files:**
|
|
- React components/pages use PascalCase: `frontend/src/pages/MedicationsPage.tsx`, `frontend/src/components/MedDetailModal.tsx`.
|
|
- Hooks use `use*` naming: `frontend/src/hooks/useMedications.ts`, `frontend/src/hooks/useSettings.ts`.
|
|
- Backend routes/services use kebab-case: `backend/src/routes/medication-enrichment.ts`, `backend/src/services/reminder-scheduler.ts`.
|
|
- Migrations use numbered descriptive names: `backend/drizzle/0012_add_api_keys_and_package_amount_columns.sql`.
|
|
|
|
**Directories:**
|
|
- Feature/layer folders are lowercase: `frontend/src/context`, `backend/src/services`.
|
|
- Test directories stay colocated by runtime side (`frontend/src/test`, `backend/src/test`).
|
|
|
|
## Where to Add New Code
|
|
|
|
**New Feature:**
|
|
- Primary code:
|
|
- Frontend UI route/screen: `frontend/src/pages/` (compose from existing `components/`, `hooks/`, `ui/`).
|
|
- Backend endpoint: `backend/src/routes/` + matching domain logic in `backend/src/services/`.
|
|
- Persistence additions: `backend/src/db/schema.ts` plus migration updates in `backend/src/db/client.ts` and `backend/drizzle/`.
|
|
- Tests:
|
|
- Frontend unit/component: `frontend/src/test/`.
|
|
- Backend unit/integration: `backend/src/test/`.
|
|
- E2E flow: `frontend/e2e/`.
|
|
|
|
**New Component/Module:**
|
|
- Implementation:
|
|
- Shared UI primitive/layout: `frontend/src/ui/`.
|
|
- Domain-specific UI component: `frontend/src/components/` (or nested feature folder).
|
|
- Backend reusable domain behavior: `backend/src/services/`.
|
|
|
|
**Utilities:**
|
|
- Shared helpers:
|
|
- Frontend: `frontend/src/utils/`.
|
|
- Backend: `backend/src/utils/`.
|
|
- DB-specific helpers: `backend/src/db/` focused utility modules.
|
|
|
|
## Special Directories
|
|
|
|
**frontend/dist, backend/dist:**
|
|
- Purpose: build output artifacts.
|
|
- Generated: Yes.
|
|
- Committed: No (`dist/` ignored in `.gitignore`).
|
|
|
|
**frontend/playwright-report, frontend/test-results, frontend/coverage, backend/coverage:**
|
|
- Purpose: test artifacts/reports.
|
|
- Generated: Yes.
|
|
- Committed: No (ignored in `.gitignore`).
|
|
|
|
**data/:**
|
|
- Purpose: runtime/local DB, reminder state, scheduler locks.
|
|
- Generated: Yes.
|
|
- Committed: No (`data/` ignored in `.gitignore`).
|
|
|
|
**doku/:**
|
|
- Purpose: local work memory/reporting and internal notes.
|
|
- Generated: Mixed (manual local notes + artifacts).
|
|
- Committed: No (`doku/` ignored in `.gitignore`).
|
|
|
|
**.planning/codebase/:**
|
|
- Purpose: generated architecture/stack/convention/concern maps for GSD planning/execution.
|
|
- Generated: Yes.
|
|
- Committed: No (`.planning/` ignored by policy in this workspace).
|
|
|
|
---
|
|
|
|
*Structure analysis: 2026-04-30*
|