Voter file management, report generation (PDF/XLSX), and committee membership governance. Import BOE voter files, run designated petition and absentee reports, and manage committee membership.
- Frontend: Next.js, Prisma
- Report server: Node/Express, Puppeteer (PDF generation)
- Storage: Cloudflare R2, Neon Postgres
- Realtime: Ably (report status)
apps/
├── frontend/ # Next.js app (Vercel)
└── report-server/ # PDF/report generation (Lightsail)
packages/
├── shared-prisma/ # Prisma types
├── shared-validators/
├── voter-import-processor/
└── xlsx-tester/
- Local development → docs/LOCAL_DEVELOPMENT.md
- Deployment → DEPLOYMENT_GUIDE.md, infrastructure/DEPLOYMENT_SETUP.md
- Shared Prisma → docs/SHARED_PRISMA_ARCHITECTURE.md
- SRS implementation roadmap → docs/SRS/SRS_IMPLEMENTATION_ROADMAP.md
- SRS ticket index / status → docs/SRS/tickets/README.md
- 1.R.1 Leader Privilege Escalation (P0)
- 1.R.2 requestAdd Resubmission for Non-Active Memberships (P1)
- 1.R.3 Replacement Flow Not Implemented in handleRequest (P1)
- 1.R.4 Bulk Import Incompatible with Phase 1 Schema (P1)
- 1.R.5 Source-of-Truth Split (P1)
- 1.R.6 Audit Tests Fail (P2)
- 1.R.7 Capacity + Seat Assignment Non-Atomic (P2)
See docs/LOCAL_DEVELOPMENT.md for setup. Run pnpm run build:packages from root before starting the report-server.