wiki-vault/Sources/Dev/work-index-dashboard.md
Travis Herbranson 34a268d8dc migration: copy 62 notes from pbs-projects and homelab-projects
Two-layer structure: Sources (raw notes) + Wiki (compile output)
Four domains: Dev (40), Venture (3), Homelab (23), Reference (0)
Includes CLAUDE.md spec, index pages at all levels, compile log

Co-Authored-By: Lovebug <lovebug@herbylab.dev>
2026-05-08 17:21:13 -04:00

4.9 KiB

created path project status tags type updated
2026-04-27 Sources/Dev work-index-dashboard active
pbs
homelab
dashboard
mcp
trello
obsidian
project-plan 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