User guide
Dashboard
On this page
invoiceguard dashboard # http://127.0.0.1:8000/
invoiceguard dashboard --port 8080
A small FastAPI + Jinja2 web UI that shares the CLI's SQLite database. Binds to 127.0.0.1 by default (localhost only). The API docs (/docs, /redoc) are disabled.
Pages
GET /— invoice list with status filters (draft,sent,partially-paid,paid,overdue,void), totals (outstanding / overdue / collected), and per-status counts. Each row shows the invoice kind, amount, project, due date, current escalation stage — and, for partially-paid invoices, how much has been paid and what is left.GET /invoices/{id}— invoice detail: amount, paid and outstanding balances, status, Stripe payment link, due date, a payments ledger (every recorded payment with date, method, and note), and a chronological timeline of dunning events and payments.GET /healthz—{"ok": true}, for uptime checks.GET /sign/{token}— the client's one-time contract signing page: renders the contract, collects a typed name and a drawn signature (see Contracts).POST /sign/{token}— records the signature; returns a signed-receipt page. Unknown or already-used tokens return 404 / 400.POST /webhooks/stripe— the Stripe webhook receiver (see Webhooks).
Unknown status filters and missing invoices return a 404 page.
Screenshots
Captured from the real dashboard running locally against seeded demo data (every sample name is labeled (demo)):

Invoice list — status filters, totals, and escalation stages.

Invoice detail — timeline of dunning events.

Invoice detail — a partially-paid invoice: Paid/Outstanding amounts, the payments ledger, and payment events in the timeline.
Notes
- The dashboard never inserts data on startup — it creates empty tables if the DB is fresh, nothing more.
- It reads and writes the same tables as the CLI; column names and types are frozen (additive migrations only). See Database.
- Webhook verification needs the signing secret — resolution order is documented in Webhooks. Without a real secret,
POST /webhooks/stripereturns HTTP 500. - Totals, defined: Outstanding = sum of outstanding balances over
sent/overdue/partially-paidinvoices; Overdue = the same overoverdueinvoices only; Collected = sum of all rows in the payment ledger. (Since v0.2.0; for older databases the ledger backfill makes the numbers identical to the old definitions.)