product

Family House Map + Maintenance Hotspots (plan)

Status: PLANNED — not built. Requested 2026-07-26. The first slice (a clear "Manage wall devices" entry on /dashboard/family + a personal/shared badge on every device) shipped alongside this doc; the house map and hotspots below are the staged follow-on. Inherits FAMILY_INTENT.md — this is household operations, not surveillance.

The arc

  1. Devices are already located-ish. Each wall device (family_wall_displays) has location_kind (shared | personal) + owner_member_id. That answers whose screen but not which room.
  2. Map of the house. Give the household a simple room model and let a parent place each device in a room — a lightweight floorplan. "The kitchen iPad," "the mudroom screen," "Ava's bedroom screen" become real places, not just names.
  3. Hotspots. Once rooms exist, anchor recurring cleaning + maintenance to them: the spots in a house where upkeep is due — HVAC filter, dryer vent, smoke-detector batteries, fridge water filter, gutters, water-heater flush. Each has a cadence, a last-done date, a next-due date, and can become a chore (assigned to a member, earns credit) or a reminder on the wall.

The through-line: chores are the people half; hotspots are the house half. Both land on the same wall and the same points ledger.

Why this is mostly reuse, not greenfield

  • Floorplan drag/drop — the AisleAsk store map already solved "drag tiles onto a painterly background, persist pos_x/pos_y/pos_w/pos_h/rotation" (migrations 570 + 573, aisleask_sections). A house map is the same primitive with rooms instead of aisles and devices instead of sections. Lift the interaction wholesale.
  • Actionable sidefamily_chores (migration 584, intra-family credit) is exactly the reward mechanic a maintenance task needs; a hotspot that comes due can spawn a chore. Don't rebuild attribution.
  • Scheduling — the family reminders / routines cadence machinery (migration 075 + the one-off family_reminders from the JQ-actions work) covers "every 90 days."
  • Reorder-the-part — the existing Amazon affiliate pattern (the hivejournal-20 tag already used for Open Energy experiment materials) means a "replace the furnace filter" hotspot can carry a one-tap reorder link for the exact filter size — genuinely useful, and it monetizes honestly (a part you already need, not an ad).

Data model sketch (when built)

family_rooms
  id, parent_user_id, name, kind (kitchen|bedroom|bath|garage|utility|outdoor|other),
  pos_x, pos_y, pos_w, pos_h        -- position on the house map canvas
  created_at

family_wall_displays
  + room_id uuid null references family_rooms  -- which room this screen lives in

family_maintenance_items ("hotspots")
  id, parent_user_id, room_id null,
  title,                                  -- "Furnace filter", "Dryer vent"
  category (cleaning|filter|appliance|safety|seasonal),
  interval_n int, interval_unit text,     -- "every N hours|days|weeks|months"
  due_soon_frac real null,                -- per-item yellow threshold (default 0.75)
  last_done_at,                           -- next-due + freshness are COMPUTED, not stored
  assigned_member_id null,                -- who owns it (→ chore attribution)
  reorder_url null,                       -- affiliate part link (filters etc.)
  created_at

Freshness is the Upkeep Freshness engine (upkeep-freshness.ts, pure + golden-tested): last_done_at + interval → { pct, status, color } (green/yellow/red), computed on read so it's always current. Render each hotspot/room in its color; sort "what's due" by ratio (most overdue first). The SAME engine gives family routines (brushing, showers) a freshness dot from their check-in history — one model for personal upkeep and household maintenance alike.

RLS-off / service-role-only, gated by parent_user_id in the route — same posture as every other family table.

Surfaces (when built)

  • /dashboard/family/house — the map editor: rooms on a canvas, devices dragged into rooms, hotspots pinned to rooms with due-status color (green ok / amber soon / red overdue).
  • On the wall — an optional "House" panel (per-device toggle, same as the other show_* flags) showing what's due this week, and a hotspot that's overdue can be tapped-to-mark-done (reuses allow_checkin).
  • Seed catalog — ship a starter set of common household hotspots with sane default cadences (HVAC filter 90d, dryer vent 365d, smoke batteries 365d, fridge filter 180d) so a family isn't staring at a blank canvas. Opt-in per item.

Guardrails

  • Household ops, not a landlord dashboard. This is a family keeping its own home up, not a tool for monitoring someone. No exact addresses required; a room is a label.
  • A hotspot is an invitation, not a nag. Same rule as growth nudges — due items surface calmly; no guilt streaks. (Inherits FAMILY_INTENT.md.)
  • Reorder links are opt-in and honest — shown only where a real consumable exists, labeled as an affiliate link, never injected as an ad.

Sequence

  1. ✅ "Manage wall devices" entry + personal/shared badge (shipped 2026-07-26).
  2. family_maintenance_items + the seed catalog + freshness (migration 586, /dashboard/family/upkeep).
  3. Rooms + house-map editor (migration 588, family-rooms.ts, /dashboard/family/house) — draggable + resizable room tiles (the AisleAsk store-map primitive, reused), hotspots pinned to rooms via room_id (FK added in 588, ON DELETE SET NULL), each room colored by the worst freshness among its items (getHouseView{ rooms: [...worst-of...], unassigned }). Assign items to rooms from the map.
  4. ✅ Wall "🏠 Home upkeep" panel (migration 587) — overdue/due-soon items ambient on the wall.
  5. Follow-on: painterly/floorplan background behind the map (store-map has one), tap-to-done directly on a room tile, chore spawning, affiliate reorder links, and a unified personal+household Upkeep view.
FAMILY HOUSE MAP — Docs | HiveJournal