--- project: work-index-dashboard type: project-plan status: active path: Tech/Projects tags: - pbs - homelab - dashboard - mcp - trello - obsidian created: 2026-04-27 updated: 2026-04-27 --- # Work-Index Dashboard A queryable index over the vault, Trello, and (later) Claude Code session logs. Static HTML dashboard for daily use, MCP read/write API for agents to use the same data layer. ## Why The vault is already unwieldy at ~20 files. Frontmatter is invisible in the default file list, sorting and filtering aren't possible, and nothing connects the vault to live project state in Trello or Claude Code sessions. The result: "what did I commit to next" can't be answered without opening multiple tools and reading individual files. This project closes that gap with a single dashboard surface, joined on `project` slug across all three sources, plus an MCP server so agents can read and write through the same layer. ## Primary use case **"What did I commit to next."** Open the dashboard at the start of a work session, see the current project list with active commitments, pick something up. Commitment tracker, not activity feed. Secondary use cases (v2): "I'm lost, what was the last decision" and "what loose threads have I left in session notes that never made it to Trello." ## Architecture Three-source join on project slug: - **Vault** — frontmatter (`project`, `status`, `type`, `tags`, `created`, `updated`, `path`) read directly from `.md` files - **Trello** — single board, one label per project slug, cards as commitments - **Session notes** (v2) — markdown files under each project, written by Claude Code sessions The data layer is plain Python. The dashboard renders it as HTML. The MCP server exposes it as tools. Same functions, three surfaces. ## Stack - Python managed via `uv` - FastAPI (long-running process; MCP server eventually shares it) - Jinja2 templates - HTMX for interactions without a JS framework - Tailwind for styling - `py-trello` for Trello API (swap to `httpx` direct calls if it gets in the way) - `.env` for credentials - In-memory cache for Trello responses (~60s TTL) so refreshes feel instant ## Phasing ### v1 — dashboard - Data layer: read vault frontmatter, read Trello cards by label - Dashboard view: current project list with status, last vault update, open Trello cards, links out to vault folder and Trello board - On-demand refresh (no cron, no event-driven) - Develop on bare metal on herbys-dev - Deploy to Docker behind Traefik for the v1 cutover ### v2 — session notes integration - Extend data layer to read session notes from each project - Add "recent sessions" column to the project list - Add "loose threads" view: `- [ ]` checkboxes in session notes that have no matching Trello card - Add search across session notes for the "I'm lost" case ### v3 — MCP server - Wrap the same data layer as MCP tools - Read tools: `get_projects`, `get_project_sessions`, `get_trello_cards`, `search_sessions` - Write tools: `log_session`, `update_project_status`, `create_vault_note`, `update_card_status`, `create_card` - stdio transport, local Claude Code only - Closes the loop: sessions write structured logs and Trello updates through MCP, dashboard reads the new state on next refresh ## Out of scope (v1) - Graph visualization (revisit once queries are validated) - Live updates (websockets, file watchers) - Auth (homelab-internal, behind Traefik) - Write-back from the dashboard UI ## Tasks ### v1 - [ ] Scaffold FastAPI project with uv - [ ] Implement vault frontmatter reader - [ ] Implement Trello client wrapper using py-trello, label-based filtering - [ ] Build join layer keyed on project slug - [ ] Build project list view with Jinja + Tailwind - [ ] Add HTMX-based refresh interaction - [ ] Add in-memory cache with TTL for Trello calls - [ ] Write Dockerfile - [ ] Add Traefik labels and deploy to herbys-dev ### v2 - [ ] Extend data layer with session note reader - [ ] Add recent-sessions column to project list - [ ] Build loose-threads view (unfiled `- [ ]` items) - [ ] Add session search view ### v3 - [ ] Scaffold MCP server alongside FastAPI app - [ ] Implement read tools wrapping the data layer - [ ] Implement write tools (vault, sessions, Trello) - [ ] Configure Claude Code to use the MCP server - [ ] Update CLAUDE.md conventions to call `log_session` at end of sessions ## Open questions - Trello label naming — exact slug match, or prefixed (e.g. `proj:work-index-dashboard`)? - Where session notes live in each project repo — `docs/sessions/YYYY-MM-DD.md` vs. another convention - Dashboard hostname once Traefik routing is set up ## Success criteria v1 ships when: - Dashboard loads in under a second on herbys-dev - It correctly shows every active project with its Trello commitments - It's used at the start of a work session at least three times in the first week If it isn't opened, it isn't earning its keep, and the design is wrong before more layers get added on top. ...sent from Jenny & Travis