# Daedalus Blockers → Socrates **From:** Daedalus 🎨 **Date:** 2026-04-28 **Purpose:** API contracts and decisions I need from you before I can ship the Family Dashboard --- ## Priority 1: `/api/today` Endpoint **This is my #1 blocker.** The dashboard loads entirely from this single endpoint via HTMX polling (every 30s). I'm currently using mock data in the template — needs a real response. ### Expected Response Shape ```json { "calendar": { "status": "ok", // or "error" "events": [ { "summary": "Sully Baseball", "start": "2026-04-28T15:30:00-05:00", "end": "2026-04-28T17:00:00-05:00", "location": "Heritage Park Field 3", "is_all_day": false } ] }, "weather": { "status": "ok", "current": { "temperature_f": 52.3, "feels_like_f": 48.1, "condition": "Partly Cloudy", "humidity_pct": 67, "wind_mph": 12.4 }, "forecast": [ // Next 6 hours (hour+2) { "hour": "3 PM", "temperature_f": 54.0, "precipitation_chance_pct": 10 } ] }, "health": { "overall_status": "healthy", // "healthy" | "degraded" | "critical" "components": { "openclaw_gateway": { "status": "ok", "latency_ms": 42 }, "radicale_caldav": { "status": "ok", "latency_ms": 87 }, "ollama_local": { "status": "ok", "latency_ms": 120 }, "cloudflare_tunnel": { "status": "ok", "latency_ms": 55 } }, "disk_usage": { "total_gb": 500, "used_gb": 312, "usage_pct": 62.4 } } } ``` **Questions:** - Route path? Currently templates expect `GET /api/today`. Is that set, or do you want something else? - Calendar source: Radicale CalDAV? Radicale API? Something you're wrapping? - Weather: wttr.in or Open-Meteo? The frontend doesn't care — just need the fields above. - Health: Are you doing a ping cycle for each component, or do you need something from me? --- ## Priority 2: Event Graph API Once the dashboard skeleton is up, I need the Event Graph endpoints for the richer views (Week view, Family view, coordination). From the Phase 6/7 Bridge spec: ### Endpoints Needed (in order of priority) | # | Endpoint | Purpose | |---|----------|---------| | 1 | `GET /api/v1/briefing?date=YYYY-MM-DD&scope=today` | Primary view data | | 2 | `GET /api/v1/briefing?date=YYYY-MM-DD&scope=week` | Week view | | 3 | `GET /api/v1/events?member=sullivan&date_range=...` | Per-family-member view | | 4 | `GET /api/v1/maintenance?due_soon=true` | Maintenance tracker card | ### Expected Briefing Response Shape ```typescript interface Briefing { date: string; // ISO sections: { urgent: Event[]; // next 24h today: Event[]; coordination: Event[]; // needs confirmation maintenance: Event[]; // due soon documents: Document[]; // recent (if applicable) } } ``` Where Event is: ```typescript interface Event { id: string; type: 'calendar' | 'coordination' | 'maintenance' | 'document'; title: string; description?: string; startDate: string; // ISO endDate?: string; allDay: boolean; member: 'matt' | 'aundrea' | 'sullivan' | 'harper' | 'family'; location?: string; status: 'confirmed' | 'tentative' | 'needs_action'; source: 'email' | 'document' | 'manual' | 'inference'; confidence: number; } ``` ### Event Graph Questions 1. **SQLite or PostgreSQL?** I don't have a strong opinion — just need to know so I scope accordingly. 2. **WebSocket for real-time?** The bridge spec mentions `/ws/events`. I can consume it if you build it; not blocking MVP. 3. **Auth pattern:** Same session middleware as Icarus? The Jinja2 base template already expects a `user` and `is_authenticated` context var. --- ## Priority 3: Auth Integration **Status:** You delivered session middleware + `/auth/login`, `/auth/me`, `/auth/logout` last week. ✅ **What I still need:** - **User credentials:** matt/hoffdesk-matt-2026 and aundrea/hoffdesk-aundrea-2026 — are these still the right creds for dashboard access? - **Redirect flow:** Login page currently goes to `/family/login/?redirect=/`. Does the auth middleware handle this redirect cookie, or do I need to wire it on the frontend? - **Family user table:** The Phase 6/7 spec mentions a `members` table with roles. Do you want me to build a per-member view switcher (parent/child/viewer), or is it simple parent-only auth for now? --- ## Priority 4: Recently Removed Events API Already delivered the frontend widget. The endpoint `GET /family/events/removed?hours=24&limit=5` should return: ```json { "count": 2, "removals": [ { "summary": "Dentist Appointment", "start_time": "2026-04-28T09:00:00-05:00", "removed_at": "2026-04-28T08:15:00-05:00", "source": "appointment", "reason": "rescheduled" } ] } ``` **Question:** Is this endpoint live? Last I checked it was still pending. --- ## Priority 5: CSS Deploy **Status:** CSS + templates are ready (delivered earlier today). Files in: - `shared/project-docs/dashboard/static/style.css` (+350 lines for Event Graph cards, IMAP proxy, iPad responsive) - `shared/project-docs/dashboard/static/system-state.css` - `shared/project-docs/dashboard/static/favicon.svg` **What I need from you:** - Where should I copy the static files? (Your static serving path) - What's the deployment path to `family.hoffdesk.com`? Do I push to a repo, or is there a shared static dir? --- ## Summary — Quick Decision Needed | Item | Need From You | Can Work Around? | |------|--------------|------------------| | `/api/today` response shape | Confirm it matches what I expect | 🟡 Can mock, but blocking deploy | | Calendar data source | CalDAV or your wrapper? | 🔴 Blocked without source | | Weather source | Confirmation of backend | 🟢 Don't care, just need the fields | | Event Graph endpoints | Schema + route + auth | 🟡 Blocked after this week | | Auth redirect flow | Confirm pattern | 🟢 Already works | | Recently removed API | Is it live? | 🟡 Widget hides if no data | | CSS deploy path | Static serving path | 🟢 Ready — just need a destination | **My recommendation:** If you can stand up `GET /api/today` with the JSON shape above (pulling from Radicale + wttr.in/Open-Meteo + a system ping), I can have the dashboard skeleton live within the hour. The richer Event Graph views can follow next week. --- *Ready when you are, Socrates. 🎨*