My Personal Single Pane of Glass Dashboard

I wanted one screen that surfaces everything I care about during the workday: without juggling tabs, picking up my phone, or sending my data to anyone else's cloud. So I built one. Here's what's in it, the caveats, and who it's actually for.

I built a local-only personal dashboard for myself. Sharing in case it's useful to anyone else.

I've been wanting one screen that shows me everything I actually care about during the workday — without juggling tabs, without picking up my phone, and without sending my data to anyone else's cloud. So I built one.

It's called ds-dash. A small Python daemon polls a handful of providers on a schedule and writes their state into memory; a single static HTML page renders it as a cinematic ops console that I leave open on a second monitor. No build step, no database, no auth. Everything runs on localhost.

What it currently shows me:

  • - GitHub — PRs awaiting my review, my open PRs, assigned issues, recent activity, contribution heatmap
  • - Calendar — today's events with NOW / NEXT markers (via ical-buddy on macOS)
  • - Tasks — Motion's queue
  • - Linear — one panel per workspace, with the current cycle's progress
  • - Claude Code usage — 5-hour and weekly burn against rate limits, plus live/idle session counts
  • - Service status — Anthropic, OpenAI, GitHub, Linear, Vercel
  • - System — CPU/mem/disk plus a net-throughput oscilloscope (via psutil)
  • - Network — WAN IP, ISP, region, VPN state
  • - Weather — current temp for a zip code (via Open-Meteo)
  • - Scratchpad — local notes that autosave

It's stupidly easy to extend with AI tooling.

The repo ships with a CLAUDE.md that documents the polling pattern, the STATE shape every provider writes into, the status vocabulary the frontend understands, and the conventions for ticker events, polling intervals, error handling, and secrets — essentially an instruction manual for an AI agent.

There's a companion docs/ FRONTEND.md for the UI side, with the design tokens, palette, and render conventions.

In practice, "add a provider that shows my AWS billing" or "add a panel for Jira tickets assigned to me" or "give me a new theme that looks like a 90s amber CRT" is usually one Claude Code (or Codex, or Cursor) prompt away from a working implementation. No build step + single static frontend + panels that render defensively against missing data = the iteration loop is instant. Most of the existing providers were built that way.

It feels less like programming and more like dictation.

The honest caveats — this is built for my workflow, on my laptop:

  • - No authentication. It binds to 127.0.0.1 by default. Anyone who can reach the host can read everything (including the scratchpad endpoint, which is also writable). Don't expose it to the open internet.
  • - macOS-first. Calendar reads via ical-buddy; Claude OAuth has a macOS Keychain fallback. It runs on Linux but the calendar panel is dark there.
  • - Opinionated providers. If you don't use Motion or Linear, those panels just show OFFLINE.
  • - Personal-scratch project. Issues and small PRs welcome, no SLAs implied.

So: probably not the right tool for your team. Probably the right tool for someone who wants a single-pane-of-glass for their own stuff on a trusted machine, likes the no-build / no-DB "it's just a Python process" model, and doesn't mind editing a TOML config to wire it up.

Repo, screenshots, and setup: https://github.com/devondragon/ds-dash

If you do try it and something's broken, tell me. If you don't, that's totally fine — sharing because I use it every day and figured someone else might find it useful too.

No comments yet