# HoffDesk Master Roadmap **Last Updated:** 2026-04-25 13:59 UTC **Owner:** Matt (Director) **Agents:** Wadsworth πŸ“‹ | Socrates 🧠 | Daedalus 🎨 --- ## 🎯 Active Projects Overview | Project | Status | Lead | Priority | |---------|--------|------|----------| | **HoffDesk Web Platform** | 🟑 In Progress | All | P0 | | β”œβ”€ Blog Module | βœ… Phase 3 Complete | Socrates/Daedalus | - | | β”œβ”€ Family Dashboard | 🟑 Phase 1.5 In Progress | Daedalus/Socrates | - | | β”œβ”€ Starlette Host Routing | 🟑 Deployed (needs restart) | Socrates | - | | **Project Icarus** | 🟒 Staging Setup Complete | Socrates/Daedalus | P1 | | **Stock Market Daily Brief** | ⏸️ Blocked (awaiting input) | Wadsworth β†’ Socrates | P2 | | **Structured Logging** | 🟒 Phase 1-2 Active | Wadsworth | P3 | | **Appliance Productization** | 🟑 Icarus active | Future | P4 | --- ## βœ… COMPLETED β€” Last 30 Days ### Infrastructure & Security - βœ… Cloudflare Tunnel configured (`*.hoffdesk.com` β†’ Beelink) - βœ… Radicale CalDAV server (port 5232, Tailscale-bound) - βœ… Session-based auth (cookies for humans, Bearer for machines) - βœ… Role-based access (admin vs family) - βœ… UFW firewall (Tailscale-only SSH) - βœ… Backup strategy (daily 7 AM β†’ Gaming PC via Tailscale) - βœ… Auth circuit breaker (3 failures β†’ alert + silence) ### Blog Module (Phase 1-3 Complete) - βœ… 13 API routes + 36 tests passing - βœ… 7 Jinja2 templates + CSS (Daedalus) - βœ… Content pipeline v2 (Magic Wand + Struggle) - βœ… Admin panel with session auth - βœ… RSS, sitemap, image upload - βœ… Deployed to `notes.hoffdesk.com` ### Dashboard (Phase 1) - βœ… Dashboard HTML/CSS (Daedalus) - βœ… Jinja2 conversion (base.html.j2 + index.html.j2) - βœ… Login page for Aundrea - βœ… `/family/events/removed` endpoint (Bearer token) - βœ… Recently removed events widget ### Domain Architecture - βœ… `notes.hoffdesk.com` β†’ blog (port 8000) - βœ… `family.hoffdesk.com` β†’ dashboard (port 8000 via Host routing) - βœ… `api.hoffdesk.com` β†’ JSON API - βœ… `cal.hoffdesk.com` β†’ Radicale - βœ… `hook.hoffdesk.com` β†’ webhooks - βœ… Starlette Host-based routing code (main_v2.py) - βœ… Cloudflare config updated (single port) ### Agent Configuration - βœ… Multi-model architecture (Wadsworth/Socrates/Daedalus) - βœ… Daedalus model: `minimax-m2.7:cloud` β†’ `deepseek-v4:cloud` (just updated) - βœ… Socrates model: `kimi-k2.6:cloud` - βœ… Inter-agent protocol (sessions_send/spawn, shared/ directory) ### Automation - βœ… Email pipeline v2 (smart classification) - βœ… Email Worker v3 deployed (Cloudflare Email Routing β†’ hook.hoffdesk.com) - βœ… Conflict detection (calendar overlap scanning) - βœ… Location cache + Hermes integration (travel time alerts) - βœ… Heartbeat checks (30-min + daily) - βœ… Cron jobs: `heartbeat:check`, `heartbeat:daily`, `family:daily-brief` --- ## 🚧 IN PROGRESS β€” Current Sprint (Apr 24-25) ### πŸ”΄ CRITICAL: Starlette Host Routing Rollout **Status:** Code complete, service NOT switched | Task | Status | Owner | Blocker | |------|--------|-------|---------| | `main_v2.py` with Host() routing | βœ… Complete | Socrates | - | | `hoffdesk.com` apex DNS | βœ… **FIXED** | Daedalus | - | | systemd service update | βœ… **FIXED** | Matt | - | | Import error (`Path` in auth/router.py) | βœ… **FIXED** | Wadsworth | - | | Service restart & verify | ⏳ **NEEDS RESTART** | Matt | sudo access | **Files:** - Code: `workspace-socrates/hoffdesk-api/main_v2.py` - Service: `/etc/systemd/system/hoffdesk-api.service` - Config: `~/.cloudflared/config.yml` ### 🟒 Project Icarus β€” Staging Environment **Status:** Environment initialized, awaiting hard fork | Component | Status | Details | |-----------|--------|---------| | Directory structure | βœ… Created | `services/icarus/` | | Staging config | βœ… Created | `staging.env` with isolated paths | | Model gate | βœ… Created | 3B restriction enforced | | Telegram bot | βœ… Created | @IcarusTestBot (t.me/IcarusTestBot) | | Cloudflare route | ⏳ Pending | `icarus-test.hoffdesk.com` β†’ port 8001 | | Hard fork (copy) | ⏳ Pending | Socrates to copy from `family_assistant/` | | systemd service | ⏳ Pending | `icarus-staging.service` on port 8001 | **Director Mandates:** 1. **Hard fork only** β€” Copy, do not extract or refactor production code 2. **3B models only** on staging β€” Gaming PC via Tailscale, qwen2.5:3b/llama3.2:3b 3. **Route priority** β€” Specific `icarus-test.hoffdesk.com` before wildcard `*.hoffdesk.com` **Files:** - Config: `services/icarus/staging.env` - README: `services/icarus/README.md` - Model gate: `services/icarus/model_gate.py` --- ### 🟑 Dashboard Jinja2 Integration **Status:** Templates ready, router needs update | Task | Status | Owner | Blocker | |------|--------|-------|---------| | Jinja2 templates delivered | βœ… Complete | Daedalus | - | | Dashboard router update | ⏳ **PENDING** | Socrates | Starlette routing deployment | | Template path unification | πŸ“‹ Planned | Socrates | After routing live | **Files:** - Templates: `shared/project-docs/dashboard/templates/` - Handoff: `shared/project-docs/dashboard/JINJA2-HANDOFF.md` ### 🟑 Pipeline Phase 2 Frontend Wiring **Status:** Templates exist, no backend routes | Task | Status | Owner | Blocker | |------|--------|-------|---------| | Phase 2 templates (4 files + CSS) | βœ… Delivered | Daedalus | - | | Backend route integration | ❌ **PENDING** | Socrates | Host routing stable | | `/admin/content/*` endpoints | πŸ“‹ Planned | Socrates | - | --- ## πŸ“‹ BACKLOG β€” Prioritized ### P1: Stock Market Daily Brief **Status:** Spec complete, awaiting Director input **Owner:** Wadsworth (spec) β†’ Socrates (implementation) | Task | Status | Blocker | |------|--------|---------| | Backend spec (yfinance + pandas-ta + phi4:14b) | βœ… Complete | - | | Frontend spec (Tailscale-only dark dashboard) | βœ… Complete | - | | Owned tickers + cost basis | ⏸️ **NEEDS INPUT** | Matt | | Watchlist tickers | ⏸️ **NEEDS INPUT** | Matt | | Delivery time preference | ⏸️ **NEEDS INPUT** | Matt | | Finnhub API key decision | ⏸️ **NEEDS INPUT** | Matt | | Implementation | πŸ“‹ Not started | Above inputs | **Files:** - Backend: `shared/api-specs/stock-brief/SPEC.md` - Frontend: `shared/design-tokens/stock-brief/UX-SPEC.md` --- ### P2: Family Assistant v1.5 **Status:** Scoped, awaiting Phase 1 completion **Owner:** Daedalus (UI) + Socrates (API) | Feature | Status | Notes | |---------|--------|-------| | Week View | πŸ“‹ Planned | - | | Conflict Panel | πŸ“‹ Planned | - | | Undo Toast | πŸ“‹ Planned | - | | Digest Card | πŸ“‹ Planned | - | | Smart scheduling suggestions | πŸ“‹ Future | AI-assisted | **Files:** - Scope: `shared/project-docs/family-assistant/v1.5/SCOPE.md` --- ### P3: Structured Logging **Status:** Phase 1-2 active, Phase 3 deferred **Owner:** Wadsworth | Phase | Status | Description | |-------|--------|-------------| | Phase 1 | βœ… Complete | JSON frontmatter format defined | | Phase 2 | βœ… Complete | Daily logs using structured format | | Phase 3 | ⏸️ Deferred | `log_activity()` helper, query CLI, duration analytics | **Trigger:** After 7 days of usage or when query pain becomes acute. **Files:** - Spec: `memory/LOGGING.md` --- ### P4: Blog Phase 4+ (Future) - πŸ“‹ Image generation pipeline (ComfyUI on Gaming PC) - πŸ“‹ HTMX dynamic loading for long post lists - πŸ“‹ Full-text search (FTS5 promotion) - πŸ“‹ Newsletter subscription flow --- ### P5: Security & Maintenance - πŸ“‹ Weekly security audit (cron: `heartbeat:daily` Mondays) - πŸ“‹ OpenClaw version checks - πŸ“‹ Disk usage monitoring (currently 11%) --- ## πŸ› KNOWN ISSUES & BLOCKERS | Issue | Severity | Status | Notes | |-------|----------|--------|-------| | Service restart after import fix | 🟑 Low | ⏳ **PENDING** | `sudo systemctl restart hoffdesk-api` needed | | Socrates quarantine loop | 🟑 Medium | βœ… **CLEARED** | Cleared 2026-04-24, monitoring | | Compaction Ghost Bug | 🟑 Medium | Quarantined | Upstream OpenClaw issue β€” use @mentions in group chat | | Google service account auth | 🟑 Medium | **BLOCKED** | `invalid_grant: account not found` β€” needs Cloud Console check | | Template fragmentation | 🟒 Low | Acknowledged | Dashboard vs blog templates in different dirs | --- ## πŸ“ KEY DOCUMENTS INDEX ### Architecture & Planning - `shared/project-docs/DOMAIN-ARCHITECTURE.md` β€” Domain routing (single source of truth) - `shared/project-docs/sprint-brief-2026-04-24.md` β€” Current sprint - `shared/project-docs/hoffdesk-web-project.md` β€” Master project plan ### Family Assistant (Appliance-Ready) - `shared/project-docs/family-assistant/v1.5/SCOPE.md` β€” v1.5 features (Undo, Conflicts, etc.) - `shared/project-docs/family-assistant-product-roadmap.md` β€” Appliance productization proposal - `workspace-daedalus/review/hoffdesk-agents-review.md` β€” Full codebase review - `workspace-daedalus/review/dha-and-family-review.md` β€” DHA + Family review ### Handoffs & Coordination - `shared/project-docs/dashboard/JINJA2-HANDOFF.md` β€” Dashboard β†’ Socrates - `shared/project-docs/auth-handoff-daedalus.md` β€” Auth migration notes - `workspace-socrates/research/subdomain-routing-implementation.md` β€” Starlette routing plan ### Agent Status - `workspace-socrates/QUARANTINE-2026-04-23.md` β€” Socrates status (CLEARED) - `~/.openclaw/openclaw.json` β€” Agent configuration --- ## 🏠 Appliance Architecture Principles **Direction:** Build core product now, structure for future appliance deployment | Principle | Current (Cloud) | Future (Appliance) | Status | |-----------|---------------|-------------------|--------| | **LLM** | Ollama Pro cloud + Gaming PC | Local 3B models (M4) | Configurable | | **Data** | `~/.family_assistant/` | `DATA_DIR` env var | πŸ”§ Needed | | **Embeddings** | `nomic-embed-text` on Gaming PC | Same, localhost default | πŸ”§ Needed | | **IMAP** | Primary | Primary (webhook optional) | πŸ“‹ Planned | | **Radicale** | Manual config | Bundled zero-setup | πŸ“‹ Planned | | **Multi-tenancy** | Single-family | Single-tenant by box | βœ… Aligns | | **Auth** | Session cookies | LAN-local / passwordless | βœ… Aligns | ### Refactoring Queue (Appliance-Ready) | Task | Complexity | When | |------|------------|------| | Remove Cloudflare webhook dependency | Medium | v1.5 | | Default OLLAMA_EMBED_URL to localhost | Low | v1.5 | | Add DATA_DIR env var | Low | v1.5 | | Ollama model auto-download | Medium | Appliance phase | | Bundle Radicale config | Low | Appliance phase | | Fix `appointment_retry.txt` | Low | v1.5 | | Refactor pipeline duplication | Medium | v1.5 | | Remove `hermes.py` dual paths | Low | v1.5 | --- ## 🎯 NEXT ACTIONS (Priority Order) ### Immediate (Today) 1. **[Matt]** Restart `hoffdesk-api.service` (`sudo systemctl restart hoffdesk-api`) 2. **[Wadsworth/Matt]** Verify endpoints after restart ### This Week 3. **[Socrates]** Wire dashboard Jinja2 templates to router 4. **[Socrates]** Wire pipeline Phase 2 templates to backend routes 5. **[Socrates]** Start appliance-ready refactors (DATA_DIR, localhost defaults) 6. **[Wadsworth]** Stock brief β€” await Director inputs ### Next Sprint 7. **[Daedalus]** Family Assistant v1.5 UI (Undo, Conflicts) β€” appliance-ready tokens 8. **[Socrates]** `/api/today` aggregate endpoint for dashboard 9. **[Socrates]** Remove webhook dependency, fix pipeline duplication --- ## πŸ“Š Agent Workload | Agent | Current Task | Queue | Status | |-------|--------------|-------|--------| | **Wadsworth** πŸ“‹ | DNS fix + coordination | Stock brief, logging Phase 3 | βœ… Available | | **Socrates** 🧠 | Host routing deployment | Dashboard wiring, pipeline wiring | βœ… Cleared, ready | | **Daedalus** 🎨 | Stand by for URL audit | Family Assistant v1.5, Stock brief UI | βœ… Ready (deepseek-v4:cloud active) | --- *This document is the single source of truth. Update it when tasks complete or priorities shift.*