Open Net Worth
Open Net Worth is an open-source personal AI wealth assistant you run yourself: one ledger for your whole financial life, worked by an AI agent you control.
翻訳待ち
Open UK public finances dashboard: income, spending, borrowing, debt and taxpayers, auto-updated from official sources
翻訳待ち
Loading the full README.
Read the full README ↗Open UK public finances for budget.vahaah.com. Receipts, spending, borrowing, debt, gilts and taxpayers, taken from the publishers' own files.
The site renders committed snapshots captured on 28 October 2026. A Vercel cron starts one Workflow per source, which writes a new snapshot to Blob only after zod accepts it. A failed file keeps the newest earlier Blob version that still validates, then the fixture, and shows up on /api/health. Derived figures are CC BY 4.0. Upstream statistics keep the publisher's licence.
npm install
npm run dev
npm test
npm run publish-check
| Name | Purpose |
|---|---|
CRON_SECRET | Bearer token Vercel Cron sends. Required for /api/cron/*. |
BLOB_READ_WRITE_TOKEN | Snapshot store. Without it, pages read fixtures/snapshots. |
INDEXNOW_KEY | Public IndexNow key, served at /{key}.txt. |
INDEXNOW_HOST | Defaults to budget.vahaah.com. |
OBR fallback upload, when obr.uk returns 403:
vercel blob put manual/obr-public-finances.xlsx ./public-finances-databank.xlsx --allow-overwrite
Story charts (/budgets/<event>/explained, the long-run charts on topic pages, and the home page "What is happening in the UK" panel) come from the latest EFO "charts and tables" workbooks and the latest Forecast evaluation report charts workbook. After each EFO, upload them under manual/obr/efo/ (any names, .xlsx) and replace the previous event's files. Sheets are matched by chart title, so renumbered charts still load. Then force the daily cron.
for f in efo-*-charts-and-tables-{executive-summary,chapter-2,chapter-3,chapter-4,chapter-5,chapter-6}.xlsx Forecast-evaluation-report-*-charts-and-tables.xlsx; do
vercel blob put "manual/obr/efo/$f" "./$f" --allow-overwrite
done
HM Treasury's distributional analysis ("Impact on households") is published as a PDF of charts with no data table. Its decile figures are read from the chart geometry and shown on the event page, /taxpayers and linked from the explained page, captioned "Values read from HM Treasury's published charts; not an official table." After each Budget:
scripts/hmt-distributional/budget-2026.spec.json to a new spec. Set the event slug and name, URLs, publication date, and for each figure its page number, frame (0 for the upper chart on a page) and the top and bottom y-axis tick labels. Check figure numbers and titles against the PDF.python3 scripts/hmt-distributional/digitise.py Impact_on_households.pdf <spec> > budget-YYYY.json (needs poppler-utils and numpy). Each row's check is the sum of segments minus the Overall marker; it should be near zero. If a chart's colours or layout change, update the script.vercel blob put manual/hmt/distributional/budget-YYYY.json ./budget-YYYY.json --allow-overwrite. Keep earlier files; the newest by publication date is used. Then force the daily cron.Preview locally from files on disk: npx tsx scripts/obr-local-snapshot.ts out.json historical=… measures=… evaluation=… efo=… efo=….
Do not deploy from this repo's automation. Wire the project in Vercel separately.
ONS public sector finances (September 2026 release), HMRC receipts, PESA 2026 chapters 4 and 6, Bank of England Bank Rate and the 10-year par yield, HMRC income tax tables 2.1 and 2.4, and the DMO portfolio totals from GetSalesData.
obr.uk returned a Cloudflare challenge. The workflow tries again from Vercel and otherwise reads the manual Blob workbook. The forecasts page shows ONS outturn only until then.GetSalesData on each run.J5II and JW2T are negative in the ONS download when the bulletin says borrowing or a deficit. Charts use the negation. See ARCHITECTURE.md.
Production deploys from main on Vercel (project uk-public-finances, team Comonad, https://budget.vahaah.com). PRs get preview deployments.
To cut a release: git tag vX.Y.Z && git push origin vX.Y.Z. The release workflow creates a GitHub Release with generated notes.
After a release that changes pages, run the indexnow workflow (Actions → indexnow → Run workflow; tick "all" for the first submission).