# 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.