# 2026-04-28 — Dashboard Card Fixes ## Issues Found ### 1. Event Graph Card — No HTMX Polling **Problem:** The Event Graph card was static HTML with no `hx-get` trigger. It only rendered when `/api/today` returned data, but there was no polling mechanism to load events independently. **Fix:** Added HTMX attributes to poll `/api/today` every 30s: ```html
``` ### 2. IMAP Card — Auth Required on Dashboard Fragment **Problem:** The IMAP dashboard fragment had `hx-get="/imap/dashboard"` which requires authentication. When loaded on the public-facing dashboard, it returned 401. **Fix:** - Added public endpoint: `GET /api/public/imap/dashboard` - Updated HTML to use: `hx-get="/api/public/imap/dashboard"` - Updated router HTML generation to match ### 3. Server Restart **Problem:** Code changes weren't reflected because server was running old code. **Fix:** Killed old process, restarted uvicorn. ## Verification | Check | Result | |-------|--------| | `GET /api/public/imap/status` | ✅ `{"status": "not_configured"}` | | `GET /api/public/imap/dashboard` | ✅ Returns HTML fragment | | `GET /api/public/imap/metrics` | ✅ Returns metrics JSON | | CSS loaded | ✅ 1202 lines of CSS | | Dashboard HTML | ✅ Returns login page (auth required) | ## Files Modified - `shared/project-docs/dashboard/templates/index.html` - Added HTMX polling to Event Graph card - Fixed IMAP card to use public endpoint - `workspace-socrates/hoffdesk-api/imap_proxy/dashboard_router.py` - Added `@public_router.get("/dashboard")` endpoint - Updated HTML generation to use `/api/public/imap/dashboard` ## Status Dashboard structure is correct. Cards are wired properly. The dashboard requires authentication (by design), so public testing is limited. Once logged in: - Event Graph card polls `/api/today` every 30s - IMAP card polls `/api/public/imap/dashboard` every 10s - Both render with Daedalus' polished CSS **Pending:** Matt to test on iPad after login.