INSTRUMENTS FOR SOLO OPERATORS · EST. 2026

One dashboard for everything you wake up checking.

Stripe MRR. GitHub CI. Discord mentions. Freescout queue. BTC price. Your own scripts. Every signal you reach for in the morning, as glanceable widgets on your desktop — not in a tab.

windows · macos · linux · ~25 MB · no account required
HOW IT WORKS

Three steps from idle script to live widget.

01

Write a plugin

20 lines of Python. Print a JSON event every N seconds. No SDK, no framework — the host reads stdout.

02

Drop in plugins/

The host auto-discovers everything in your plugins/ directory at launch. Restart, and your plugin polls.

03

Pin a widget

The host renders each event as a typed card — count, status, list, alert. Drag, resize, customize per layout.

PLUGIN PROTOCOL

A plugin is twenty lines of Python.

The host runs each plugin as a subprocess, reads JSON events from stdout, and renders them as typed cards. No SDK. No framework. No server. Write a Python script that prints JSON every N seconds — you have a widget.

  • Four event types: count, status, list, alert.
  • Credentials read from environment — never inlined.
  • Poll interval controlled by your sleep(). Host doesn't care.
  • Crash safely: stderr surfaces in the widget's error state.
plugins/stripe-mrr/main.py
# plugins/stripe-mrr/main.py
import json, os, requests, sys, time

KEY = os.environ["STRIPE_API_KEY"]

def emit_mrr():
    r = requests.get(
        "https://api.stripe.com/v1/subscriptions?limit=100",
        auth=(KEY, ""),
        timeout=10,
    )
    total = sum(s["plan"]["amount"] for s in r.json()["data"]) / 100
    print(json.dumps({
        "type":    "count",
        "label":   "Stripe · MRR",
        "value":   total,
        "unit":    "USD",
    }), flush=True)

while True:
    emit_mrr()
    time.sleep(60)
FEATURES

Built for people who keep tabs on a half-dozen things at once.

Render

Live widgets

Every plugin emits a typed event — count, status, list, alert. Cards render in a responsive grid that collapses to a single column inside the sidebar viewport.

Build

Plugin protocol

Python sidecars. Twenty lines of script, drop it in plugins/, the host discovers and polls it. No SDK to install, no server to deploy.

Organize

Multiple layouts

Pin one dashboard per context — Comms, Revenue, Infra, Personal. Tabs at the top, drag to reorder, right-click to duplicate or unpin.

Dock

Sidebar mode

Dock against the screen edge as a 6 px strip — hover to expand to the full sidebar, click away to collapse. Auto-collapse delay is user-tunable.

Adapt

Three densities

Comfortable cards, Compact column, Minimal single-line feed. Each surface (sidebar / main window) picks independently.

Trust

Local-first

Plugin data lives on your machine. The cloud account is opt-in and only stores layouts + team relay metadata — never the widget values themselves.

DENSITY

Same data. Three different reading speeds.

Comfortable for the main window. Compact for narrow side panes. Minimal when you want a single-line feed of just the deltas. Each surface picks independently.

COMFORTABLE
OPS-S1 · stripe.mrr
Stripe · MRR
$12.4k
+$340 · 30d
COMPACT
OPS-S1 · stripe.mrr
Stripe · MRR $12.4k
MINIMAL
OPS-S1 Stripe · MRR $12.4k
OPS-04 npm 134M
OPS-D1 discord 3 mentions
SIDEBAR

A 6 px strip, until you need it.

Run Ops HUD as a full window on the main monitor, or dock it to the right edge as a thin strip. Hover to expand to the full sidebar, click away to collapse back. Auto-collapse delay is user-tunable from 200 ms to 5 seconds.

  • Docked · 6 px strip pinned to the screen edge · hover to expand · auto-collapse on leave
  • Floating · always-on-top overlay window · no screen reservation
PLUGINS

Sixteen plugins shipped. Hundreds writable in an afternoon.

Each card below is a real plugin in the preview bundle. Same callsign, same rendered shape you'll see in the app. Write your own — the host discovers it on next launch.

OPS-S1 · stripe.mrr
MRR
$12.4k
OPS-ST · stripe.subs
active
284
OPS-05 · crypto.btc
BTC
$77.8k
OPS-04 · npm.downloads
react /wk
134M
OPS-01 · github.status
github.status
OK
OPS-GC · github.failing-ci
1 job
WARN
OPS-03 · github.incidents
recent
45 events
OPS-UP · uptime
all green
OK
OPS-D1 · discord.mentions.bot
mentions
3
OPS-FS · freescout.queue
open
12
OPS-GN · github.notifications
unread
8
OPS-IN · notifications.inbox
inbox
34 items
OPS-06 · system.clock
clock
09:24:11
OPS-02 · hn.top
HN top
500
OPS-FH · focushud.live
running
FOCUS
OPS-CL · calendar.next
today
3 events
Mission patch reading 'Ops HUD · Focus HUD · Observatory · 2026', with the Ops grid mark and Focus reticle paired across a horizon line

One family. Two surfaces.

Ops HUD is the operations dashboard. Focus HUD is the focus timer overlay. They share a brand, a plugin protocol, and a single tray icon family — and they're each their own download. Run one or both.

GET IT

Preview build, free during preview.

Stable releases land when the plugin marketplace ships. Until then, daily snapshots for the OS you run.

FAQ

Questions people ask.

What does Ops HUD run on?

Windows 10/11, macOS 12+, and Linux (x86_64). Native binary — no Electron. ~25 MB download, ~80 MB RAM at rest.

How do plugins work?

A plugin is a Python script (sidecar) that emits widget events via a small stdout protocol. Twenty lines covers the common case. The host discovers everything in your plugins/ directory and polls each one on its declared interval.

Where does my data live?

Locally, by default. The desktop app keeps plugin state on your machine. The optional cloud account only stores layouts and team-relay metadata; the widget values themselves never leave your box.

Is it free?

Free during preview. We're not collecting payment information until the plugin marketplace and team mode ship. A paid tier is planned for team relays and the plugin store, but the solo / single-machine workflow stays free.

How is this different from Focus HUD?

Focus HUD is a focus timer. Ops HUD is an operations dashboard. They share the same brand, the same plugin protocol, and a single tray icon family — but they're separate apps you can run independently. The focushud.live plugin bridges live focus state into an Ops HUD widget when you do run both.

Can I share a dashboard with my team?

Soon. Team relays are designed but unshipped — they'll let a small team subscribe to a shared set of widgets without each member running every plugin. For now Ops HUD is single-machine.