diff --git a/Tech/Projects/work-index-dashboard.md b/Tech/Projects/work-index-dashboard.md new file mode 100644 index 0000000..0fed591 --- /dev/null +++ b/Tech/Projects/work-index-dashboard.md @@ -0,0 +1,152 @@ +--- +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 \ No newline at end of file