# 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 <agent>`); 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/seeds/demo.js`): admin@school.com / admin123, teacher@school.com / teacher123, student@school.com / student123, parent@school.com / parent123, principal@school.com / principal123, bursar@school.com / bursar123, hr@school.com / hr123, librarian@school.com / librarian123.
- 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.
