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

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