HoffDesk Web — Project Plan
Date: 2026-04-19
Status: Approved by Director Matt on 2026-04-19
Owner: Matt (Director), Wadsworth (Coordinator)
Objective
Build and deploy a web presence at hoffdesk.com — starting with a family dashboard that surfaces calendar, weather, and household status in a fast, zero-cloud-dependency, mobile-first experience.
Architecture Decisions (Pre-established)
| Decision | Choice | Rationale |
|---|---|---|
| Hosting | Cloudflare Pages | Git-push deploys, free tier, already on CF DNS |
| Frontend | HTMX + Tailwind CSS | Sovereign stack per Daedalus charter; no SPA frameworks |
| Backend API | FastAPI on Beelink | Existing infra, zero-trust, localhost/Tailscale |
| Auth | Cloudflare Access (public pages) + Tailscale (admin) | Zero-trust, no OAuth complexity |
| Dark mode | "Functional Luxury" aesthetic — default, not a toggle | Daedalus doctrine |
| Mobile-first | Primary device = phone | High-WAF design principle |
Subdomain Architecture
| Subdomain | Purpose | Deployment |
|---|---|---|
hoffdesk.com |
Public landing / family dashboard | Cloudflare Pages |
cal.hoffdesk.com |
CalDAV (existing) | Beelink, Tailscale-only |
hook.hoffdesk.com |
Webhook receiver (existing) | Beelink, Tailscale-only |
api.hoffdesk.com |
REST API for dashboard data | Beelink → Cloudflare Tunnel or Tailscale Funnel |
Socrates Day 1 Priority: Stand up Cloudflare Tunnel + CF Access (Email OTP). Proof of life required before API spec.
Sprint 1 — Family Dashboard MVP
Goal: A live dashboard at hoffdesk.com showing today's calendar, current weather, and household status. One glance. Phone-sized. Done fast.
Socrates Deliverables (Backend)
| # | Deliverable | Description | Depends On | Status |
|---|---|---|---|---|
| S1 | API spec: GET /api/today |
AGGREGATE endpoint — single payload: calendar + weather + health | — | P2 — WAIT for tunnel |
| S2 | API spec: GET /api/calendar/upcoming |
Structured calendar events with time, title, location | S1 approved | — |
| S3 | API spec: GET /api/weather |
Current conditions + 24h forecast for Green Bay, WI | S1 approved | — |
| S4 | API spec: GET /api/health |
Gateway status, Ollama status, disk usage | S1 approved | — |
| S5 | FastAPI endpoints wired to real data | Implement all Sprint 1 endpoints with live data | S1–S4 specs approved | — |
| S6 | API deployed on Beelink | Bound to localhost, exposed via Cloudflare Tunnel + CF Access (Email OTP) | S5 complete | — |
Socrates note: All API specs go in shared/api-specs/sprint-1/ as OpenAPI YAML. Daedalus builds against these contracts.
Daedalus Deliverables (Frontend)
| # | Deliverable | Description | Depends On |
|---|---|---|---|
| D1 | Design system foundation | Color palette, typography scale, spacing tokens, dark mode palette in shared/design-tokens/ |
— |
| D2 | Component library | Calendar card, weather card, health status card — Tailwind + HTMX | D1 |
| D3 | Dashboard layout | Mobile-first single-page, sections: calendar (top), weather (middle), health (bottom) | D2 |
| D4 | Static mock with API contracts | Deploy to Cloudflare Pages, HTMX pulls from API endpoints | S1 spec approved |
| D5 | Connected dashboard | Real data flowing, auto-refresh via HTMX polling (30s) | D4 + S5 + S6 |
Daedalus note: Start D1 (design tokens) immediately — unblocked. Wait for S1 spec approval before D4 integration.
Wadsworth Deliverables (Coordination)
| # | Deliverable | Description |
|---|---|---|
| W1 | Cloudflare Pages project setup | Create project, connect to Git repo, configure builds |
| W2 | Cloudflare Tunnel for API | Route api.hoffdesk.com → Beelink localhost FastAPI |
| W3 | CI/CD pipeline | Git push → Cloudflare Pages auto-deploy |
| W4 | Sprint tracking & blocker resolution | Keep the board informed, escalate blockers |
Definition of Done — Sprint 1
- [ ]
hoffdesk.comloads in <2s on mobile - [ ] Calendar shows next 24h of events, auto-refreshes
- [ ] Weather shows current + forecast for Green Bay
- [ ] Health section shows gateway + Ollama + disk status
- [ ] All behind Cloudflare, zero-trust on admin routes
- [ ] No third-party JS, no CDN dependencies
- [ ] Dark mode default, mobile-first layout
Out of Scope — Sprint 1
- User authentication / login flow
- Multi-family support
- Push notifications
- Calendar event creation via web UI
- Historical data / analytics
- Desktop-first layout refinements
Risks
| Risk | Mitigation |
|---|---|
| Cloudflare Tunnel latency | Test early; fall back to Tailscale Funnel |
| CalDAV API response time | Cache aggressively, 5-min TTL |
| HTMX polling overhead | 30s interval, lightweight payloads |
| Both specialists blocked on each other | Contract-first: specs before implementation |
Approval
Director Matt: Approve / Modify / Reject → tag @hoffmann_butler_bot in The Hoffmann Board
This document is the source of truth for Sprint 1. Updates go here first, then propagate to specialist workspaces.