Files
oikos/DESIGN.md
T
Rafael Foster 22ec13e559 feat: add housekeeping module for household staff management
* Adding flexible reminder options to birthdays

* Fix database migration merge conflict

* Truncate calendar popup descriptions

* Log app version on backend startup

* Add host-mounted data and backup folders

* feat: add housekeeping module

* fix: align housekeeping UI and add task creation

* refactor: rebuild housekeeping experience

* feat: support multiple housekeeping staff

* feat: integrate housekeeping visits with calendar

* feat: refine housekeeping visits and payments

* feat: add housekeeping staff visit logs

* feat: add housekeeping receipts and document folders

* feat: localize housekeeping folders and chores

* feat: refine housekeeping tabs and document folders

* fix: sync housekeeping tab active state

* feat: use configured app name in onboarding and manifest
2026-05-08 20:14:51 +02:00

4.0 KiB

Housekeeping Design

Goal

Housekeeping adds a simplified mobile/PWA module for the cleaner workflow in Oikos. It keeps the existing private-network, authenticated-session security model and exposes no public endpoints.

User Experience

The /housekeeping route is a focused module that follows the same toolbar, tab, card, and chip patterns used by the rest of Oikos:

  • Dashboard: staff-specific check-in/check-out actions, visits this month, last visit, pending/finished chores, pending payments, and a compact monthly payment chart.
  • Tasks: suggested chore templates, custom chore creation, urgency-sorted recurring tasks, and one-tap completion.
  • Reports: camera upload plus text description for maintenance occurrences.
  • Staff: one or more housekeeper people, contact data, profile pictures, daily rates, and payment schedules.

Accessibility constraints:

  • Primary actions are at least 44px high.
  • Check-in/out is a compact top-toolbar action, matching the small action pattern used elsewhere in the app.
  • Status is communicated by text and color, not color alone.
  • Inputs and buttons have explicit labels or accessible names.
  • Icons use the locally bundled Lucide runtime; no external CDN is introduced.

Data Model

housekeeping_work_sessions

Stores point/finance records:

  • id
  • worker_id
  • check_in
  • check_out
  • daily_rate
  • extras
  • calendar_event_id
  • created_by
  • created_at
  • updated_at

Monthly amount is calculated as SUM(daily_rate + extras) for sessions whose check_in belongs to the requested month. Each check-in creates a linked local calendar event for the selected staff member. Check-out updates that event end time.

housekeeping_decay_tasks

Stores dynamic recurring cleaning tasks:

  • id
  • name
  • area
  • frequency_days
  • last_completed
  • created_by
  • created_at
  • updated_at

Urgency is computed at read time:

urgency = (now - last_completed) / frequency_days

Status mapping:

  • overdue: due date is before today.
  • today: due date is today.
  • ok: due date is in the future.

Rows with no last_completed are treated as overdue.

housekeeping_supply_requests

Stores quick supply requests and links each request to an Oikos shopping item:

  • id
  • name
  • quantity
  • shopping_item_id
  • created_by
  • created_at

The supply request transaction always appends an item to the main shopping_items table. If no shopping list exists, the backend creates a private authenticated list named Housekeeping.

housekeeping_maintenance_log

Stores maintenance occurrences:

  • id
  • description
  • photo_url
  • created_by
  • created_at
  • updated_at

photo_url accepts self-contained data:image/png|jpeg|webp;base64,... values only, keeping uploaded camera photos inside the authenticated Oikos database boundary.

housekeeping_workers

Stores housekeeper-specific employment/payment settings while keeping the person unified with Oikos user/contact/birthday data:

  • id
  • user_id
  • daily_rate
  • payment_schedule
  • calendar_color
  • notes
  • created_at
  • updated_at

The linked users row is excluded from normal Family Management and Family APIs through the housekeeping_workers association, but remains synchronized with contacts and birthdays. Multiple housekeepers can be registered; each has its own linked users row. calendar_color controls the default color used for housekeeping visit events. Visit events use the cleaning icon (sparkles).

REST API

All endpoints are mounted under /api/v1/housekeeping and inherit the existing requireAuth and CSRF middleware.

  • GET /summary?month=YYYY-MM
  • GET /dashboard
  • GET /task-templates
  • GET /worker
  • GET /workers
  • POST /worker
  • GET /work-sessions?month=YYYY-MM
  • POST /work-sessions/check-in
  • POST /work-sessions/check-out
  • GET /decay-tasks
  • POST /decay-tasks
  • PATCH /decay-tasks/:taskId
  • POST /decay-tasks/:taskId/complete
  • DELETE /decay-tasks/:taskId
  • POST /supply-requests
  • GET /maintenance-log
  • POST /maintenance-log