# MeshiTrack — Large-Scale Project Plan > **Nutrition, Medicine & Pantry Management Platform** > A self-hosted, multi-user app for medicine tracking, nutrition tracking, pantry/fridge management, recipe management, meal planning, and price surveillance across stores. ## Project Summary MeshiTrack helps households manage medicines and food. Medicine tracking comes first as the simpler domain: catalog medicines, track inventory in a medicine cabinet, define daily regimens, batch-dispense via a pill organizer, compare pharmacy prices, and get automatic refill alerts. Food tracking follows the same architectural patterns: product catalog, recipes, pantry tracking, meal planning, grocery lists, and price comparison. Both domains share infrastructure (auth, households, stores). ## Tech Stack | Layer | Technology | | ------------------- | --------------------------------------- | | **Backend** | Fastify 5 (TypeScript, ESM) | | **DI Container** | Awilix 13 + @fastify/awilix | | **Frontend** | Next.js 16 (React 19, TypeScript) | | **Styling** | Tailwind CSS 4 (CSS-first config) | | **Database** | MongoDB (Mongoose 9) | | **Auth** | Keycloak (OIDC), jose 6 (JWT) | | **Validation** | Zod 4 (shared schemas) | | **Shared Code** | TypeScript package (types, Zod schemas) | | **Testing** | Vitest 4 (unit + integration) | | **Mobile (future)** | React Native | | **LLM** | Abstracted interface (provider TBD) | | **Deployment** | Docker Compose (self-hosted) | | **Monorepo** | Turborepo 2 | | **Runtime** | Node.js 22+ (ESM-only) | ## Phase Completion Criteria (Mandatory) Every phase MUST deliver ALL of the following before being considered complete. No phase may be marked done if any layer is missing. ### 1. Shared Package (`packages/shared`) - [ ] Types defined in `src/types/` - [ ] Enums defined in `src/enums/` with unit tests - [ ] Zod validation schemas in `src/validation/` with unit tests - [ ] Barrel exports updated in `index.ts` - [ ] 100% line/function/statement coverage, 90% branch coverage ### 2. API Package (`packages/api`) - [ ] Mongoose schema in `src/schemas/` - [ ] Repository with `.lean().exec()` on all reads - [ ] Service with business logic - [ ] Route plugin registered in `main.ts` - [ ] Unit tests for repository, service, and routes (100% coverage) - [ ] All queries scoped to `householdId` ### 3. Web Package (`packages/web`) - [ ] API client service in `src/services/` with unit tests - [ ] Page(s) in `src/app/(dashboard)/` implementing the UI spec - [ ] Component tests (React Testing Library) for every page and interactive component - [ ] Server Components by default; `'use client'` only where interactivity is needed ### 4. CI Gate (must pass before phase sign-off) ```bash npm run build # All packages compile npm run test:cov # Coverage thresholds enforced (100/100/100/90) npm run lint # Zero lint errors ``` ### 5. Documentation - [ ] Phase spec updated with `[x]` on completed tasks - [ ] Acceptance criteria verified --- ## Phase Overview ### Medicine Tracking (Phases 1-4) | Phase | Name | Description | Status | Doc | | ----- | ------------------------------ | ---------------------------------------------------------------- | ------ | ----------------------------------------------------------------------------------------- | | 0 | Foundation & Infrastructure | Repo scaffolding, Docker, auth | DONE | [phase-0-foundation.md](phases/phase-0-foundation.md) | | 1 | Medicine Library | Searchable medicine catalog with dosage/form info | DONE | [phase-1-medicine-library.md](phases/phase-1-medicine-library.md) | | 2 | Medicine Cabinet | Inventory tracking with quantity, expiry, low-stock alerts | DONE | [phase-2-medicine-cabinet.md](phases/phase-2-medicine-cabinet.md) | | 3 | Regimens & Pill Organizer | Daily medication schedules, batch-dispense, burn rate | DONE | [phase-3-regimens-pill-organizer.md](phases/phase-3-regimens-pill-organizer.md) | | 4 | Pharmacies, Prices & Refills | Shared store infrastructure, price tracking, refill alerts | DONE | [phase-4-pharmacies-prices-refills.md](phases/phase-4-pharmacies-prices-refills.md) | ### Food Tracking (Phases 5-9) | Phase | Name | Description | Status | Doc | | ----- | ------------------------------ | ---------------------------------------------------------------- | ------ | ----------------------------------------------------------------------------------------- | | 5 | Product Library | Searchable food product catalog with nutrition data | DONE | [phase-5-product-library.md](phases/phase-5-product-library.md) | | 6 | Recipe Management | Recipe CRUD, nutrition auto-calculation, import | DONE | [phase-6-recipes.md](phases/phase-6-recipes.md) | | 7 | Pantry & Fridge Tracking | Track item lifecycle, freshness, spoilage estimation | DONE | [phase-7-pantry.md](phases/phase-7-pantry.md) | | 8 | Meal Planning & Waste Reduction| Suggest meals from pantry, nutrition targets, weekly planning | NOT STARTED | [phase-8-meal-planning.md](phases/phase-8-meal-planning.md) | | 9 | Grocery & Price Tracking | Shopping lists, price analytics, store comparison (reuses Phase 4 stores) | NOT STARTED | [phase-9-grocery.md](phases/phase-9-grocery.md) | ### Shared (Phase 10) | Phase | Name | Description | Status | Doc | | ----- | ------------------------------ | ---------------------------------------------------------------- | ------ | ----------------------------------------------------------------------------------------- | | 10 | LLM Integration & Smart Features | Wire up LLM providers, enable smart features across both domains | PARTIAL | [phase-10-llm.md](phases/phase-10-llm.md) | --- ## Current Status & Gaps ### Phase 8 — Meal Planning (Next Priority) The foundation for food tracking (Phases 5-7) is fully implemented and integrated. The next major milestone is Phase 8, which introduces the meal planning calendar and the algorithmic suggestion engine. **Immediate Goals:** - Implement `MealPlan` and `NutritionTarget` schemas. - Build the `SuggestionEngineService` for pantry-based recipe ranking. - Create the weekly calendar UI with drag-and-drop support. ### Phase 10 — LLM (PARTIAL) The `ILlmProvider` interface and `NoOpLlmProvider` are implemented. Actual provider implementations and smart features are deferred. ### Lessons Learned Previous phases (6 & 7) were completed without finishing Phase 5's full stack (API routes + web UI). This created a gap where the Product Library has no user-facing interface despite being consumed internally. **Going forward, every phase must deliver its complete vertical slice (shared -> API -> web -> tests) before the next phase starts.** ## Cross-Cutting Concerns See [cross-cutting.md](cross-cutting.md) for API versioning, pagination, audit trails, real-time events, testing strategy, and mobile readiness. ## Architecture Decisions See [architecture.md](architecture.md) for key decisions and rationale. ## Monorepo Structure (Target) ``` MeshiTrack/ ├── docs/ # This documentation ├── packages/ │ ├── api/ # Fastify backend │ │ ├── src/ │ │ │ ├── modules/ │ │ │ │ ├── health/ │ │ │ │ ├── users/ │ │ │ │ ├── households/ │ │ │ │ ├── medicines/ # Phase 1: Medicine catalog (generic level) │ │ │ │ ├── medicine-products/ # Phase 1: Purchasable brands/packages │ │ │ │ ├── cabinet/ # Phase 2: Medicine inventory │ │ │ │ ├── regimens/ # Phase 3: Medication schedules │ │ │ │ ├── organizer/ # Phase 3: Pill organizer fills │ │ │ │ ├── stores/ # Phase 4: Shared store infrastructure │ │ │ │ ├── medicine-prices/ # Phase 4: Medicine price tracking │ │ │ │ ├── refills/ # Phase 4: Refill alerts & lists │ │ │ │ ├── products/ # Phase 5: Food product catalog │ │ │ │ ├── recipes/ # Phase 6: Recipe management │ │ │ │ ├── pantry/ # Phase 7: Food inventory │ │ │ │ ├── meal-plans/ # Phase 8: Meal planning │ │ │ │ ├── grocery/ # Phase 9: Grocery shopping │ │ │ │ └── llm/ # Phase 10: LLM integration │ │ │ ├── plugins/ # Fastify plugins (auth, mongoose, etc.) │ │ │ ├── schemas/ # Mongoose schemas │ │ │ ├── common/ # Error classes, shared types │ │ │ └── config/ │ │ ├── vitest.config.ts │ │ └── package.json │ ├── web/ # Next.js frontend │ │ ├── src/ │ │ │ ├── app/ # App Router pages │ │ │ ├── components/ │ │ │ ├── hooks/ │ │ │ ├── services/ # API client layer │ │ │ └── styles/ │ │ └── package.json │ └── shared/ # Shared TypeScript types & validation │ ├── src/ │ │ ├── types/ │ │ ├── enums/ │ │ └── validation/ # Zod 4 schemas │ └── package.json ├── docker/ │ ├── docker-compose.yml │ ├── keycloak/ # Realm export, themes │ └── mongo/ # Init scripts ├── .github/ │ └── workflows/ ├── turbo.json # Turborepo config ├── package.json # Root workspace config └── tsconfig.base.json ``` ## Verification Strategy ### Per-Phase Gate (Blocking) Every phase must pass these checks before sign-off: 1. **Build**: `npm run build` succeeds (all packages compile) 2. **Coverage**: `npm run test:cov` passes with thresholds: - `packages/api`: 100% lines/functions/statements, 90% branches - `packages/shared`: 100% lines/functions/statements, 90% branches - `packages/web`: all component tests pass 3. **Lint**: `npm run lint` reports zero errors 4. **Web UI Exists**: every phase that adds API endpoints also adds corresponding web pages with component tests 5. **Services Tested**: every `*.service.ts` in web has a corresponding `*.test.ts` ### Per-Phase Deliverable Checklist For each phase, the task breakdown must follow this template order: ``` X.1 — Shared Types & Validation (+ tests) X.2 — Mongoose Schema & Repository (+ tests) X.3 — Service (+ tests) X.4 — Routes (+ tests) X.5 — Web: API Client Service (+ tests) X.6 — Web: Pages & Components (+ component tests) X.7 — CI Verification (build + test:cov + lint) ``` ### Integration Testing - Postman/Bruno collection maintained alongside API development - E2E smoke test (medicine): creates user, adds medicines, stocks cabinet, creates regimen, fills organizer, checks refill alerts - E2E smoke test (food): adds products, creates recipe, stocks pantry, generates meal plan, creates shopping list ### Performance - MongoDB indexes reviewed per phase; query profiling before phase sign-off