This checklist provides a sequential, actionable guide to implement Domus v1. Each step references the relevant sections of the Product Requirements Document (PRD), Architecture Decision Records (ADR), and Technical Design Document (TDD). Follow the phases as defined in the PRD milestones.
| # | Task | References | Status |
|---|---|---|---|
| 0.1 | Initialize monorepo with Turborepo + pnpm workspaces | ADR-022, TDD §4 | [x] |
| 0.2 | Configure Biome for linting and formatting | ADR-009, TDD §4.3 | [x] |
| 0.3 | Set up Husky + lint-staged + commitlint (conventional commits) | ADR-009, TDD §4.3 | [] |
| 0.4 | Create package structure: types, util, validators, i18n, core, db, auth, and apps/dash |
ADR-022, TDD §4.1 | [] |
| 0.5 | Implement Result<T, E> in @domus/types |
ADR-022, TDD §10.1 | [] |
| 0.6 | Create environment variable validation with Zod in @domus/util |
TDD §4.3, §13.3 | [] |
| 0.7 | Set up Drizzle ORM with Neon PostgreSQL (local dev and production) | ADR-002, TDD §5 | [] |
| 0.8 | Configure Drizzle Kit for migrations | ADR-002, ADR-009, TDD §5.3 | [] |
| 0.9 | Define base database schema: users, accounts, sessions (better‑auth managed) |
ADR-004, TDD §5.1 | [] |
| 0.10 | Implement soft delete helper (withSoftDelete) and deletedAt filtering |
ADR-008, TDD §5.1 | [] |
| 0.11 | Set up better‑auth with Google OAuth (dev + prod), plugins: admin, organization, multiSession |
ADR-004, TDD §6.1 | [] |
| 0.12 | Create role constants and permission statements in @domus/auth |
ADR-006, TDD §6.2–6.3 | [] |
| 0.13 | Implement withRBAC wrapper for Route Handlers and Server Actions |
ADR-005, TDD §6.4 | [] |
| 0.14 | Bootstrap SuperAdmin via SUPER_ADMIN_EMAIL env var |
ADR-019, TDD §6.5 | [] |
| 0.15 | Configure Next.js 16 with Cloudflare Pages adapter (opennextjs-cloudflare) |
ADR-001, TDD §2 | [] |
| 0.16 | Set up serwist for PWA (manifest, service worker, background sync) |
ADR-001, ADR-014, TDD §9.1 | [] |
| 0.17 | Implement offline detection and connectivity indicator | ADR-014, ADR-025, TDD §9.4 | [] |
| 0.18 | Configure Cloudflare R2 buckets (domus-public, domus-private) |
ADR-003, TDD §3 | [] |
| 0.19 | Set up Google Drive service account and folder structure | ADR-003, TDD §3 | [] |
| 0.20 | Implement file upload handler with Sharp compression (WebP, resize) | ADR-016, TDD §11.5 | [] |
| 0.21 | Create i18n setup with next-intl (locales: id, en) |
ADR-013, TDD §7.5 | [] |
| 0.22 | Configure shadcn/ui with Mira theme and Tailwind | ADR-012, TDD §7.6 | [] |
| 0.23 | Set up health check endpoints (/api/health, /api/health/detailed) |
ADR-025, TDD §14.2 | [] |
| 0.24 | Configure rate limiting in proxy.ts using Cloudflare Workers KV |
ADR-020, TDD §11.2 | [] |
| 0.25 | Set up GitHub Actions workflow (test, build, deploy) | ADR-009, TDD §13 | [] |
| 0.26 | Configure staging environment (staging.dash.pkrbt.id) |
TDD §13.1 | [] |
| # | Task | References | Status |
|---|---|---|---|
| 1.1 | Implement Google OAuth login page and callback | PRD US-AUTH-01, ADR-004, TDD §6.6 | [] |
| 1.2 | Create login/logout UI components (header, buttons) | PRD US-AUTH-02, TDD §7 | [] |
| 1.3 | Implement join link flow: dash.pkrbt.id/join/[slug] |
PRD US-AUTH-03, ADR-007, TDD §6.1 | [] |
| 1.4 | Build pending member approval page for ParishAdmin/OrganizationAdmin | PRD US-AUTH-04, TDD §7.1 | [] |
| 1.5 | Implement account deactivation/reactivation (with session invalidation) | PRD US-AUTH-05, ADR-004, TDD §6.1 | [] |
| 1.6 | Create SuperAdmin module: manage global org types, users, parishes (minimal) | PRD §5.2, ADR-007, TDD §7.2 | [] |
| 1.7 | Build responsive dashboard layout (mobile bottom nav, desktop sidebar) | PRD §7.1, ADR-011, TDD §7.6 | [] |
| 1.8 | Implement parish dashboard cards (total members, income, attendance, org counts) | PRD US-DASH-01, TDD §7.6 | [] |
| 1.9 | Implement unit dashboard for OrganizationAdmin | PRD US-DASH-02, TDD §7.6 | [] |
| 1.10 | Add i18n support for all UI strings (static + dynamic) | PRD §7.4, ADR-013, TDD §7.5 | [] |
| 1.11 | Integrate dark mode toggle (next-themes) |
PRD §7.6, ADR-012, TDD §7.6 | [] |
| # | Task | References | Status |
|---|---|---|---|
| 2.1 | Define members table schema (full name, unit assignment, Google account link) |
PRD §5.1, ADR-010, TDD §5.1 | [] |
| 2.2 | Implement member registration form (admin) – only full name required | PRD US-BIO-01, TDD §7.1 | [] |
| 2.3 | Create member search (by name, unit) with filters | PRD US-BIO-02, TDD §7.1 | [] |
| 2.4 | Build member profile view (basic info, unit, linked Google account) | PRD US-BIO-03, TDD §7.1 | [] |
| 2.5 | Implement edit member (admin) | PRD US-BIO-04, TDD §7.1 | [] |
| 2.6 | Add archive member functionality (soft delete) | PRD US-BIO-05, ADR-008, TDD §7.1 | [] |
| 2.7 | Create family unit schema (family_units, family_members, family_roles) |
PRD §5.1, ADR-010, TDD §5.1 | [] |
| 2.8 | Implement family unit management (create, assign members) | PRD US-BIO-06, TDD §7.1 | [] |
| 2.9 | Add floating member concept (no unit assignment) | PRD §5.1, ADR-007, TDD §5.1 | [] |
| 2.10 | Display family unit on member profile | PRD US-BIO-06, TDD §7.1 | [] |
| 2.11 | Add member photo upload (R2) with compression | PRD §10.5, ADR-016, TDD §11.5 | [] |
| # | Task | References | Status |
|---|---|---|---|
| 3.1 | Implement organizations table with type, parent_id, slug, status |
ADR-007, TDD §5.1 | [] |
| 3.2 | Create organization CRUD for ParishAdmin (zone, missionStation, community, categorical) | PRD US-ORG-01, TDD §7.2 | [] |
| 3.3 | Add categorical organization management for SuperAdmin | PRD US-ORG-02, TDD §7.2 | [] |
| 3.4 | Implement member assignment to organizations (many-to-many) | PRD US-ORG-03, TDD §7.2 | [] |
| 3.5 | Build organizational roster view (members list per unit) | PRD US-ORG-05, TDD §7.2 | [] |
| 3.6 | Add archive organization with grace period (30 days) | PRD US-ORG-06, ADR-007, TDD §7.2 | [] |
| 3.7 | Create join link per organization (/join/[slug]) and toggle |
ADR-007, TDD §7.2 | [] |
| 3.8 | Implement organization tree view (hierarchy) | PRD §5.2, TDD §7.2 | [] |
| # | Task | References | Status |
|---|---|---|---|
| 3.9 | Define attendance_events table (with eventToken, status, etc.) |
ADR-018, TDD §5.1 | [] |
| 3.10 | Create event form (name, type, start time, org, recurrence, visibility, RSVP toggle) | PRD US-ATT-01, ADR-018, TDD §7.4 | [] |
| 3.11 | Generate QR code (PNG + SVG) on event creation using qrcode |
ADR-017, TDD §7.4 | [] |
| 3.12 | Implement event status transitions (draft → open → closed → archived, cancel, reopen) | PRD §5.4, ADR-018, TDD §7.4 | [] |
| 3.13 | Add auto-open/close cron jobs (every minute) | ADR-018, TDD §7.4 | [] |
| 3.14 | Create QR check-in page (/checkin/[token]) – login, confirm |
PRD US-ATT-03, ADR-017, TDD §7.4 | [] |
| 3.15 | Implement manual attendance entry (admin selects members) with offline queue | PRD US-ATT-04, ADR-014, TDD §9.2 | [] |
| 3.16 | Build self check-in from app (list open events) | PRD US-ATT-05 (should-have), TDD §7.4 | [] |
| 3.17 | Implement attendance_records table with unique constraint |
TDD §5.1 | [] |
| 3.18 | Add duplicate check-in prevention | PRD §5.4, TDD §7.4 | [] |
| 3.19 | Create per-event attendance report (list of attendees, method) | PRD US-ATT-06, TDD §7.4 | [] |
| 3.20 | Implement attendance summary per unit (rate) | PRD US-ATT-08, TDD §7.4 | [] |
| 3.21 | Add late entry flag and review workflow | PRD §5.4, ADR-014, TDD §7.4 | [] |
| 3.22 | Implement recurring event generation (weekly/monthly/yearly) via cron | ADR-018, TDD §7.4 | [] |
| 3.23 | Create Google Drive folder per event on creation | ADR-003, ADR-018, TDD §7.4 | [] |
| 3.24 | Add event photo upload (max 10 photos, 5 MB each) to Google Drive | PRD US-ATT-09 (should-have), TDD §7.4 | [] |
| 3.25 | Implement RSVP: schema, UI (attending/not/maybe), window during draft | PRD US-ATT-10, ADR-024, TDD §7.4 | [] |
| 3.26 | Display RSVP count on event cards and detail | PRD §5.4, ADR-024, TDD §7.4 | [] |
| 3.27 | Add RSVP reminder cron (H-1) | ADR-024, TDD §7.4 | [] |
| 3.28 | Implement offline queue for manual attendance (Workbox background sync) | ADR-014, TDD §9 | [] |
| # | Task | References | Status |
|---|---|---|---|
| 4.1 | Define financial_transactions and transaction_categories tables |
PRD §5.3, TDD §5.1 | [] |
| 4.2 | Create transaction category management for ParishTreasurer | PRD US-FIN-04, TDD §7.3 | [] |
| 4.3 | Implement income transaction recording form (date, amount, category, description) | PRD US-FIN-01, TDD §7.3 | [] |
| 4.4 | Add transaction list view (searchable, filterable) | PRD §5.3, TDD §7.3 | [] |
| 4.5 | Implement edit/delete transaction | PRD US-FIN-02, TDD §7.3 | [] |
| 4.6 | Build financial report (income summary for date range) | PRD US-FIN-03, TDD §7.3 | [] |
| 4.7 | Add export to CSV and PDF | PRD US-FIN-05, TDD §7.3 | [] |
| 4.8 | Restrict access: only ParishTreasurer (full), Pastor/ParishBoardMember (read-only) | PRD §5.3, ADR-006, TDD §7.3 | [] |
| 4.9 | Add snapshot fields (recordedByName) for audit |
ADR-008, TDD §5.1 | [] |
| # | Task | References | Status |
|---|---|---|---|
| 5.1 | Complete i18n for all UI strings (verify id and en) |
PRD §7.4, ADR-013, TDD §7.5 | [] |
| 5.2 | Add language switcher in header | PRD §7.4, TDD §7.5 | [] |
| 5.3 | Optimize bundle: dynamic imports for heavy components (QR scanner, charts) | PRD §8.1, TDD §15.4 | [] |
| 5.4 | Implement skeleton loaders for all data-dependent views | ADR-015, TDD §7.6 | [] |
| 5.5 | Add optimistic UI for attendance toggle, biodata update | ADR-015, TDD §10.4 | [] |
| 5.6 | Performance test on NUC6CAYH: index queries, optimize | PRD §8.1, TDD §15 | [] |
| 5.7 | Run full accessibility audit (contrast, keyboard, labels) | PRD §7.5, TDD §7.6 | [] |
| 5.8 | Prepare UAT environment (staging) with realistic test data | PRD §11, TDD §13.1 | [] |
| 5.9 | Create UAT test scripts covering all must-have user stories | PRD §6, TDD §12 | [] |
| 5.10 | Document known issues and workarounds | - | [] |
| # | Task | References | Status |
|---|---|---|---|
| 6.1 | Conduct UAT sessions with parish secretariat and OrganizationAdmins | PRD §11 | [] |
| 6.2 | Collect feedback and prioritize bug fixes | - | [] |
| 6.3 | Fix critical bugs identified during UAT | - | [] |
| 6.4 | Finalize training materials for admins | PRD §11 | [] |
| 6.5 | Verify backup procedure (manual restore test) | ADR-021, TDD §14 | [] |
| 6.6 | Run final smoke tests on staging | - | [] |
| # | Task | References | Status |
|---|---|---|---|
| 7.1 | Deploy to production (Cloudflare Pages + Neon) | TDD §13 | [] |
| 7.2 | Run database migrations on production | TDD §13.4 | [] |
| 7.3 | Verify health check endpoints | ADR-025, TDD §14 | [] |
| 7.4 | Monitor Cloudflare Workers usage during Easter mass | PRD §12 | [] |
| 7.5 | Provide on-site support for first day of attendance | PRD §11 | [] |
| 7.6 | Announce launch to parish community | - | [] |
| # | Task | References | Status |
|---|---|---|---|
| 8.1 | Implement remaining biodata fields (education, occupation, NIK, etc.) | PRD §5.1, TDD §7.1 | [] |
| 8.2 | Add full leadership management (teams, term history) | PRD US-ORG-04, TDD §7.2 | [] |
| 8.3 | Complete finance module: expenses, attachments, full export | PRD §5.3, TDD §7.3 | [] |
| 8.4 | Add per-member attendance recap on profile | PRD US-ATT-07 (should-have), TDD §7.4 | [] |
| 8.5 | Implement ParishMember view own profile | PRD US-BIO-07 (should-have), TDD §7.1 | [] |
| 8.6 | Add notification preferences management | PRD US-NOT-02 (should-have), ADR-023, TDD §7.5 | [] |
| 8.7 | Implement dynamic access control (multi-parish customization) | ADR-006 (future), PRD §3.2 | [] |
| 8.8 | Add mass/activity calendar (planned for next version) | PRD §3.2 | [] |
| 8.9 | Integrate with diocesan systems (future) | PRD §3.2 | [] |
| 8.10 | Set up cold standby server (v2) | PRD §12 | [] |
Notes:
- Each task should be broken down into subtasks as needed.
- References are provided to ensure alignment with requirements and architecture.
- Status column can be used to track progress.
End of Implementation Checklist