# Command Dashboard Family Bucket + Operator Readiness

Use when a JARVIS/command dashboard needs to promote an existing FamilyDashboard from a simple header/link into a first-class operator bucket alongside Health, AutoShorts, Finance, and System.

## Pattern

1. **Make Family a real module, not a loose link**
   - Add `family` to backend and frontend `ModuleId`/contract types.
   - Increase overview/module caps from 4 to 5 where enforced by Pydantic schemas, frontend store slices, tests, and generated JSON schemas/OpenAPI.
   - Add a dedicated Family adapter, even if initially link-only/read-only.
   - Add Family to module registry with `legacy_url_env="FAMILY_LEGACY_DASHBOARD_URL"`, `actions_enabled=False`, and notes such as `adapter_mode=link_only`.

2. **Runtime-configure the FamilyDashboard handoff**
   - Use `FAMILY_LEGACY_DASHBOARD_URL` on the API side and `VITE_FAMILY_DASHBOARD_URL` on the dashboard side.
   - Preserve FamilyDashboard's conventional port `5173`; do not reuse it for Finance or other handoff frontends.
   - In operator handoff scripts, derive `FAMILY_DASHBOARD_URL="http://$HOST:5173"` unless explicitly overridden.
   - Pass `FAMILY_LEGACY_DASHBOARD_URL` to the JARVIS API and `VITE_FAMILY_DASHBOARD_URL` to the JARVIS dashboard.
   - `handoff-status` may check FamilyDashboard as optional: report failure clearly, but do not fail the whole JARVIS handoff if Family is simply not running yet.

3. **Keep JARVIS link-only/read-only**
   - JARVIS may open FamilyDashboard in a new tab; it should not call Family mutation APIs.
   - Treat Family as internal sensitivity by default, but still avoid leaking local paths, DB names, or runtime URLs through safe metadata endpoints.
   - `/api/demo-info`/settings-style endpoints should expose only category status such as `configured|not_configured|blocked`, not full URLs/ports/paths.

4. **Avoid misleading “Demo” language in operator-facing UI**
   - If the handoff is backed by real reachable dashboards and read-only safe summaries, label it `Operator Handoff`, `Sichere Übersicht`, `Read-only`, or `Fallback-Übersicht` rather than `Demo mode`/`Demo-Daten`.
   - Reserve `demo_mock` terminology for internal config/tests when needed, not as the visible operator copy.
   - Update tests that asserted visible `Demo mode` text to assert the operator/read-only label instead.

5. **External links in Vue cards**
   - Do not feed `http://...` links into `<RouterLink>`; Vue Router will warn and treat them as internal paths.
   - For module cards/tiles, branch on `/^https?:\/\//`:
     - external URL → `<a href target="_blank" rel="noopener noreferrer">`
     - internal route → `<RouterLink :to="...">`

6. **Schema/test update checklist**
   - Backend: contracts, runtime config, registry, overview service, adapters, generated schemas, OpenAPI.
   - Frontend: contract types, store module slice, fixtures, home cards, reports/settings pages, module card external link handling.
   - Tests: module counts, registry contents, demo-info legacy link shape, frontend fixtures, read-only banner copy, home page card counts.
   - Run: `python3 scripts/export-openapi.py`, regenerate JSON schemas if the repo stores them, then `make verify`.

## Final-readiness framing

When asked “what is still demo?” distinguish:
- **Link-only/read-only by policy** — deliberate safety boundary, not fake demo.
- **Mock/synthetic summary adapter** — still demo-like and should be replaced by a live read-only adapter.
- **Safe marker/summary without raw data** — production-compatible for sensitive domains if the upstream system writes the marker.

Typical next steps to reach a functional final operator dashboard:
1. Family live-read-only adapter with safe KPIs (open tasks, calendar today/tomorrow, child status, aggregate coins, freshness).
2. Finance live-read-only adapter with review/import/provider status and no exact amounts.
3. AutoShorts live-read-only adapter with queue/review/upload status and no media paths/tokens.
4. Health safe-marker production path for risk/freshness enums, not DB/report scraping.
5. Durable operator handoff service (systemd/user service or equivalent) plus status/restart/log handling.
6. Final mobile/iPad UX pass focused on “what must the operator know now?” rather than technical plumbing.
