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
{
"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
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:
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
- SQLite or PostgreSQL? I don't have a strong opinion — just need to know so I scope accordingly.
- WebSocket for real-time? The bridge spec mentions
/ws/events. I can consume it if you build it; not blocking MVP. - Auth pattern: Same session middleware as Icarus? The Jinja2 base template already expects a
userandis_authenticatedcontext 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:
{
"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. 🎨