pbs-projects/Tech/Projects/work-index-dashboard.md

152 lines
4.9 KiB
Markdown

---
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