# Africa Alert PWA — Project Memory This file is the project-level memory for the Africa Alert PWA. Reins write here only when a lesson is **specific to this repo** and would be re-discovered painfully without it. Cross-project lessons go to the relevant agent's memory (`mavis memory append `); user-level preferences go to user memory. ## Conventions - See `.harness/docs/conventions.md` for the SQL contract, controller template, store template, **the frontend page template (5-file checklist for adding a new page — store, page, route in App.tsx, nav entry in Nav.tsx, changelog)**, the multi-context store pattern, auth/RBAC, sync contract, Paynow flow, and env vars. - See `.harness/docs/testing.md` for the test stack, manual recipes, and CI plan. - See `.harness/agent.md` (orchestrator) and each rein's `agent.md` for routing and scope. ## Project facts (don't re-discover) - Dev branch: `dev`. Main branch: `main`. Origin: Gitea at `https://git.techarvest.co.zw/fchinembiri/next-gen.git` (this is NOT GitHub). - Branch model (Git Flow, main = production): work and test on `dev`; merge to `main` only after tests pass; `main` MUST always be deployable. No direct commits to `main`. See root `AGENTS.md` §7.1. - Demo accounts (dev only, seeded by `server/src/database/init.js`): admin@school.com / admin123, teacher@school.com / teacher123, student@school.com / student123, parent@school.com / parent123. - SQLite file is `server/data/school.db` (WAL mode → `-shm` and `-wal` files alongside it). - PWA service worker is built by `vite-plugin-pwa` from `vite.config.ts`; the dev server doesn't ship a real SW (production `npm run build` does). - Docker Compose mounts `data/` and `uploads/` as volumes — both are gitignored. - The `exams` module is the canonical reference implementation for new modules (controller, store, page, route, nav) — see `IMPLEMENTATION_SUMMARY.md` and `server/src/controllers/exams.controller.js`. - `client/src/store/api.ts` is the single axios instance. Don't create a second one. ## Open follow-ups (capture here, not in agent memory) - Test framework not yet chosen / installed — `tester` rein's first sprint. - No CI yet — `tester` rein owns it when the user asks. - `npm run build` for client currently ships the dist bundle into Docker; verify the production SW registration path hasn't drifted (the orchestrator should ask `tester` to add an offline-load smoke test). - `outputs/` and `logo/` directories at the repo root are unused artifacts (likely from an earlier build) — don't import from them.