5 Roadmap
claude-code edited this page 2026-04-19 18:33:51 -06:00

Roadmap

Shipped

# Title Merged
1 Initial scaffolding and single-month budget MVP 2026-04-17
3 Monthly budget view with snapshot-from-config and applied tracking 2026-04-17
5 DB backup script invoked before every schema or destructive DB operation 2026-04-17
7 Zero Amount header at the top of budget and month pages 2026-04-17
9 Gitignore the local wiki checkout at docs/wiki/ 2026-04-17
11 Section groups with collapsible headers + Sinking Funds section 2026-04-17
13 Notes field per entry 2026-04-17
15 Month lifecycle: Planning, Active, Closed with reconciliation gate 2026-04-17
17 UI redesign: condensed-sans ledger style with logo in the zero hero 2026-04-17
19 Backing transaction ledger: replace applied field with Postings 2026-04-17
21 Budget-side inline edit of entry name and amount 2026-04-17
26 /healthz endpoint for container healthcheck 2026-04-19
27 Emit structured JSON logs to stdout (Loki-ready) 2026-04-19
28 Dockerfile for quartermaster-web container 2026-04-19
29 compose.yml for home-ctr-onyx deploy 2026-04-19
30 Forgejo Actions workflow for deploy to home-ctr-onyx 2026-04-19
35 uvicorn --proxy-headers so url_for works behind Traefik 2026-04-19

Outstanding

#31 small cleanups from platform-prep code review is non-blocking polish (logger placement in service.py, middleware-vs-router comment in routes_health.py, richer template_entry_updated extras). Fold into whichever follow-up PR naturally touches those files.

#23 MCP proposal for exposing Quartermaster to AI agents is a design discussion, not committed work.

Deferred

Things we have explicitly called out as future work. File an issue when the time comes.

Constrain posting dates to the month

Postings are free-dated today (a May 3 transaction can live on an April entry). Most users would expect the date to fall within the month of the entry. A small validator + UI hint would tighten this without closing the escape hatch for one-off overrides.

Bank-statement reconciliation

A view that ingests a CSV or OFX export and matches rows against existing postings. Would need a "cleared" flag on postings and a match-by-amount + date workflow.

Recurring posting schedules

For regular bills (mortgage on the 1st, subscription on the 15th), let the user register a recurrence rule on a month_entry so the posting appears automatically when activating a new month.

Closed-month "archived" visual treatment

Closed months currently carry a muted state badge and disabled inputs. A deeper treatment would desaturate the page palette, add a subtle "Closed" watermark, and visually retire the closed month from the editing canvas.

Copy-forward month

A "new month" that snapshots a previous month rather than the budget config. Useful when reality has drifted far enough from the plan that last month is a better starting point. Would augment create_month to accept a from_month_id parameter.

Cross-month summary and charts

A view that shows how zero-amount, applied, and category totals have moved over time. Would use the existing month_entry data, no new schema. First pass: a sparkline per category across the last N months.

CSV import / export

Bulk in for seeding a fresh install, bulk out for taxes or external analysis. Month-scoped and budget-scoped variants.

App-level auth (future)

Today auth is Traefik-side (basic auth at the edge). If the app ever needs per-user views or a richer session model, an app-level login would slot in. Until then, there is no login page inside Quartermaster.

localStorage persistence of collapsed groups

Today the open/closed state of section groups resets on every page load. A tiny localStorage hook would remember which groups a given browser last had open.

Browser-rendered-page smoke test

The /healthz smoke in the deploy workflow doesn't exercise template URL generation, which is how #35 slipped past CI and into production. A CI step that loads / through Traefik and asserts every <link> and <img> href is https-scheme would have caught it before the user did.

Rollback automation

Rollback today is manual: set QUARTERMASTER_TAG in the host's .env to a prior SHA, docker compose up -d. A one-line re-deploy job that accepts a tag would be worth ~30 minutes of work once we have a reason to roll back under pressure.

Observability follow-ups

The launch alert set is container-down + TLS expiry + elevated 5xx rate, all wired platform-side. Richer signal (histograms for http_request latency, a Grafana dashboard for Quartermaster events, Prometheus /metrics endpoint) is out of scope for launch. File if the single-user Loki view ever proves insufficient.

Out of scope (probably forever)

  • Multi-currency
  • Multi-user / shared budgets
  • Mobile app
  • Cloud sync