Files
sis/docs/plans/2026-07-15-chorequest.md
2026-07-15 21:21:21 -04:00

124 lines
5.0 KiB
Markdown

# Sis Implementation Plan
**Goal:** Build the complete Sis household chore tracker per BUILD_TASKS.md — auth, households, chores/schedules, activity recording, PWA, all styled with NeoBrutalismCSS.
**Architecture:** Monolithic Haskell/Orb backend serving JSON API routes + SQLite persistence. Mithril.js SPA frontend with client-side routing. Session-based auth via httpOnly cookies with PBKDF2-hashed passwords using `crypton`. All household-scoped data is protected by session middleware.
**Tech Stack:** Haskell (GHC 9.10), Orb/Warp, sqlite-simple, crypton (PBKDF2), aeson, Mithril.js v2, TypeScript, NeoBrutalismCSS CDN.
**Product decisions:**
- Any member can manage chores (edit/delete) — collaborative model
- Activity records are append-only (no edit/undo)
- "Anyone" chores: completing an occurrence clears it for the whole household
- Recurring: specific day-of-week/month, not just "every N days"
- Occurrences generated 90 days ahead, rolling window
---
## Phase 0 — Foundation: DB schema + session infrastructure
### Task 0.1: Database schema migrations
- **Files:** `src/Sis/Database.hs`
- Add `runMigrations` that creates all tables on startup: users, sessions, households, memberships, invites, chores, occurrences, activities.
### Task 0.2: Password hashing module
- **Files:** New `src/Sis/Auth.hs`
- PBKDF2 via crypton: `hashPassword`, `verifyPassword`, `generateSessionToken` (32 random bytes hex), session cookie handling.
### Task 0.3: Session middleware
- **Files:** `src/Sis/Server.hs`, `src/Sis/Auth.hs`
- Extract session token from cookie, load user, attach to request context. Auth-required routes check for valid user.
---
## Phase 1 — Auth routes (Milestone 1)
### Task 1.1: Auth route types + handlers
- **Files:** `src/Sis/Server.hs`
- POST /api/auth/signup, POST /api/auth/login, POST /api/auth/logout, GET /api/auth/me
- Validate unique email, password strength, matching confirmation.
### Task 1.2: Frontend auth pages
- **Files:** `frontend/src/components/LoginPage.ts`, `frontend/src/components/SignupPage.ts`
- Signup form with inline validation. Login form with "remember me". Client-side router integration.
### Task 1.3: Password reset
- **Files:** `src/Sis/Server.hs`, `frontend/src/components/ForgotPassword.ts`
- POST /api/auth/forgot-password (generates reset token), POST /api/auth/reset-password (consumes token).
---
## Phase 2 — Households (Milestone 2)
### Task 2.1: Household CRUD routes
- **Files:** `src/Sis/Server.hs`
- POST /api/households, GET /api/households, GET /api/households/:id, PUT /api/households/:id, DELETE /api/households/:id
- GET /api/households/:id/members, DELETE /api/households/:id/members/:userId
### Task 2.2: Invite routes
- **Files:** `src/Sis/Server.hs`
- POST /api/households/:id/invites, GET /api/households/:id/invites, DELETE /api/households/:id/invites/:inviteId
- GET /api/invites/:code (public lookup), POST /api/invites/:code/accept
### Task 2.3: Frontend household pages
- **Files:** `frontend/src/components/HouseholdPage.ts`, `frontend/src/components/HouseholdList.ts`, `frontend/src/components/CreateHousehold.ts`
- Household switcher, member list, invite panel.
---
## Phase 3 — Chores (Milestone 3)
### Task 3.1: Chore CRUD routes
- **Files:** `src/Sis/Server.hs`
- GET /api/households/:id/chores, POST /api/households/:id/chores, PUT /api/households/:id/chores/:id, DELETE /api/households/:id/chores/:id
### Task 3.2: Occurrence generation logic
- **Files:** `src/Sis/Database.hs` (for occurrence queries)
- Generate rolling 90-day window of occurrences from recurring schedules. Recompute on schedule edit.
### Task 3.3: Dashboard routes
- **Files:** `src/Sis/Server.hs`
- GET /api/households/:id/dashboard — returns overdue, due-today, completed-today stats and lists.
### Task 3.4: Frontend chore + dashboard pages
- **Files:** `frontend/src/components/DashboardPage.ts`, `frontend/src/components/ChoreList.ts`, `frontend/src/components/ChoreForm.ts`
---
## Phase 4 — Activity (Milestone 4)
### Task 4.1: Activity record routes
- **Files:** `src/Sis/Server.hs`
- POST /api/occurrences/:id/activity
### Task 4.2: Activity log routes
- **Files:** `src/Sis/Server.hs`
- GET /api/households/:id/activity?member=&status=&page=&perPage=
### Task 4.3: Frontend activity pages
- **Files:** `frontend/src/components/RecordActivity.ts`, `frontend/src/components/ActivityLog.ts`
---
## Phase 5 — PWA (Milestone 5)
### Task 5.1: Manifest + service worker
- **Files:** `frontend/public/manifest.json`, `frontend/public/sw.js`
- Web app manifest, basic offline service worker.
### Task 5.2: Frontend polish, routing, navigation
- **Files:** `frontend/src/router.ts`, `frontend/src/components/Layout.ts`, `frontend/public/style.css`
- Client-side router, nav bar, responsive layouts, all nav links.
---
## Phase 6 — Seed data + tests (Milestone 6)
### Task 6.1: Seed data route
- **Files:** `src/Sis/Server.hs`
- POST /api/seed — creates demo household with sample chores, members, activity.
### Task 6.2: Backend tests
- **Files:** `test/Spec.hs`
- Test auth flow, household CRUD, chore CRUD, activity recording.