Node Ops Dashboard

One page that tells you your Dogecoin node is healthy.

Beginner An evening Python 3 + FlaskDogecoin Core RPC

A single-file Flask dashboard for the node you built in Track 1: sync status, peers, mempool, wallet balance, and recent transactions, auto-refreshing. The "hello world" of Dogecoin ops - and the monitoring seed the production checklist asks for.

What you'll have when it works

  • A dashboard: chain, block height, headers, sync %, peer count, mempool size, wallet balance
  • Recent wallet transactions table with confirmation counts
  • Health verdict logic: OK / SYNCING / STALLED with plain-language explanations
  • Auto-refresh every 30 seconds, dark theme, zero client dependencies

The prompt

Paste this into Claude Code in an empty project folder. It's a full spec, not a wish – the constraints in it (integer koinu, idempotent crediting, testnet asserts) are the difference between a demo and something trustworthy. Read what comes back before you run it.

claude-code prompt · node-dashboard
Build a single-file Dogecoin node dashboard in Python 3 + Flask. One file (dashboard.py), no database, no frontend framework, templates inline via render_template_string. Read the whole spec first.

CONTEXT
- Dogecoin Core node on localhost. RPC port, user, and password come from env vars DOGE_RPC_PORT (default 44555), DOGE_RPC_USER, DOGE_RPC_PASS. JSON-RPC via the requests library: POST with basic auth, body {"jsonrpc":"1.0","id":"dash","method":M,"params":P}; raise a clear error if the response's "error" field is set; handle connection-refused with a friendly "node not reachable" page rather than a stack trace. Treat RPC error code -28 as "node starting up" and show that state.

DATA (one /api/status JSON route the page polls)
- getblockchaininfo: chain, blocks, headers, verificationprogress
- getnetworkinfo: subversion, connections, relayfee
- getmempoolinfo: size, bytes
- getbalance, and listtransactions "*" 10 for the table (category, amount, confirmations, time, abbreviated txid)
- Health verdict computed server-side: SYNCING if verificationprogress < 0.9999 and headers > blocks; STALLED if blocks unchanged for 10+ minutes while not syncing (track last-change in module state); else OK. Include a one-sentence plain-language explanation with each verdict.

PAGE (route /)
- Dark background (#16110b), cream text, one gold accent (#E8B93B), monospace numbers. A header row of stat cards (height, peers, mempool, balance), the health verdict as a colored pill with its explanation, then the transactions table. Auto-refresh by fetching /api/status every 30s and updating the DOM (no full page reload). Everything inline: CSS in a <style> block, JS in a <script> block. It should look genuinely good, not engineer-default.
- Footer line: node subversion + chain name + "local dashboard - do not expose to the internet".

SECURITY
- Bind Flask to 127.0.0.1 explicitly and print a warning if run with 0.0.0.0. The dashboard is read-only: never call sending/wallet-unlocking RPCs.

DELIVERABLES: dashboard.py, requirements.txt, README (env vars, run command, what each verdict means). Then walk me through reading each stat while my testnet node syncs.

The walkthrough

  1. Point it at the testnet node from Track 1 and watch a real sync progress bar.
  2. Stop dogecoind and confirm the dashboard degrades gracefully instead of crashing.
  3. Leave it running while you do Track 2 - you'll feel the node's heartbeat while your apps talk to it.

Before this touches real DOGE

  • Keep it localhost-only; if you must view remotely, SSH-tunnel the port instead of exposing Flask.
  • This is the seed of the monitoring the production checklist requires - add alerting (email/webhook on STALLED) as your first extension.
On the map

Built something on Dogecoin? Put it on the map.

The directory is the page people link when someone says Dogecoin has no developers. If you maintain a library, wallet, tool, or app – even a small one – it belongs here.