5.0 KiB
5.0 KiB
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
runMigrationsthat 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.