PRISM-INSIGHT
13개의 특화 AI 에이전트가 한국·미국 주식을 실시간 분석합니다. 오픈소스, 무료
해머스미스·풀햄 의회의 재정·공약을 독립적으로 알기 쉬운 영어로 제공: 구역별 세금·예산·올해 격차 해소·내년 균형 도구
An independent, plain-English account of Hammersmith & Fulham Council's money and promises: your council tax bill by band, the budget, how this year's gap was closed, a tool to balance next year, and
금융TypeScript · PythonGitHub @xternal온라인운영자 미확인
써 보셨어요? 한 번만 눌러 주세요. 로그인은 필요 없어요.
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기BoroughBook.UK: an independent, resident-facing view of Hammersmith & Fulham's money and promises
저장소 README에서 가져옴
README 전체를 불러오는 중입니다.
README 전문 보기 ↗An independent, open view of a London borough's money and promises, built for residents. Live as a public alpha at https://boroughbook.uk: your council tax bill by band, the council's budget, how this year's gap was closed, a tool to balance next year, 18 manifesto pledges from both parties with their status, your ward and its councillors (find it by postcode), and every payment over £500 the council publishes. Every figure links to its source. Not run by or affiliated with the council.
Corrections, and replies from anyone named on a promise card: [email protected]. Made by Pavel Guzhikov. Separate project from LedgerGov.UK (the national version), sharing its ideas and later its code. Called Borough Ledger until 8 Oct 2026; the code packages and Vercel project keep that name. The repo is xternal/boroughbook.uk since 20 Oct 2026 (xternal/boroughbook.uk before; the old address redirects).
Where things stand and what is still open: docs/PRE_SHIP_REVIEW.md. The reference prototype in prototype/ still runs on test data; the site does not.
Your council tax bill is the only statement most residents ever get from their council, and it says almost nothing. BoroughBook.UK turns it into a readable account:
/bill). Pick your band, see what you pay, how much goes to the council and how much to the Mayor of London, and what your share pays for./budget). Where the council's money comes from (council tax, business rates, government grants, reserves) and what it pays for./gap). Each year costs rise faster than funding. One chart shows what opened the gap and how it was closed: council tax, savings, reserves./balance). Next year's gap, with the real levers a council has. Residents see the trade-offs councillors face, including the 4.99% referendum limit and the one-off nature of reserves./promises, each card at /promise/<id>). Every pledge from the administration and the opposition, costed per Band D home, with a timeline that ends in delivery or in silence./payments). The council's monthly transparency files, searchable.| National (LedgerGov.UK) | Borough (this project) | |
|---|---|---|
| The gap | Borrowed, adds to debt | Must be closed every year by law. Failure means a section 114 notice |
| Visual of the gap | Hatched borrowing flow | Waterfall: pressures → gap → council tax, savings, reserves |
| Who controls the levers | Government (and Bank of England) | Council controls council tax (capped), fees, savings, reserves. Government controls most funding |
| Your share | Income tax and NI | Council tax by band, with single person discount |
| Promise cost unit | £ per household | £ per Band D home and % of the council's budget |
| Opposition pledges | Costed | Costed and marked "Opposition pledge": cannot be delivered from opposition |
| Extra modules | Demography, macro | Payments over £500, ward view, council decisions, the building programme and council homes, more boroughs |
In:
Out for v1: ward view (postcode → ward, councillors, local spend), council decisions tracker, other boroughs, accounts.
| Stage | Time | Result |
|---|---|---|
| M0 | 3 days | App scaffold, prototype ported, engine tests |
| M1 | 1 week | Real budget data: budget report tables, government revenue returns, council tax, settlement |
| M2 | 3 days | Balance-it with 3-year view and shareable scenarios |
| M3 | 1 week | Promise ledger with both manifestos and councillor pages |
| M4 | 4 days | Payments explorer on real monthly files, supplier pages, redaction rules |
| M5 | 4 days | Follow and Contribute (leaflet photos) |
| M6 | 4 days | Ward view: postcode lookup, councillors, ward promises, local reports |
| M7 | 4 days | Council decisions tracker from committee papers, linked to promises |
| M8 | 3 days | Second borough from the government returns alone |
Estimates are low-confidence until M0 is done.
| File | For | What |
|---|---|---|
HANDOVER_PROMPT.md | Claude Code, designer | The kick-off prompts to paste or send |
CLAUDE.md | Claude Code | Rules, stack, invariants |
docs/PRE_SHIP_REVIEW.md | Everyone | What must change before public launch |
docs/PRD.md | Product, engineering | Users, features, acceptance criteria |
docs/DATA_MODEL.md | Engineering | Schemas |
docs/MODEL.md | Engineering | Council finance rules and the balance-it engine |
docs/DATA_SOURCES.md | Engineering | Where every dataset comes from |
docs/PROMISE_STANDARD.md | Editors | How local pledges become cards |
docs/PRIVACY.md | Product, legal | Personal data, follow, contribute |
docs/DESIGN_HANDOFF.md | Designer | Screens, components, tokens |
docs/BUILD_PLAN.md | Claude Code | Milestones with prompts |
docs/SHARED_CORE.md | Engineering | What to share with LedgerGov.UK, and when |
docs/BOROUGHS.md | Engineering, owner | Adding boroughs: what each gets first, what adding Kensington and Chelsea found, the address decision, and a first run of the checks across all 32 |
data/seed/*.json | All | Prototype data, mostly test |
prototype/ | Design, engineering | Clickable prototype; index.html is built by build_prototype.py |
Node 22 (.nvmrc) and pnpm (version pinned in package.json).
pnpm install
pnpm dev # http://localhost:3000, test data allowed and marked
pnpm test # schema, engine and web tests
pnpm typecheck
pnpm build:preview # production build that may render test data, each value underlined in red, noindex
pnpm build:prod # fails while any rendered value has quality "test"
pnpm --filter @borough-ledger/schema report:test-values # every test value still in the data
pnpm --filter @borough-ledger/schema content:build # compile content/ (promises, councillors) into data/build
python3 etl/councillors.py # refresh councillors and wards from the council's ModernGov service
python3 etl/ward_map.py # ward boundaries from the ONS, drawn as SVG for /wards and each ward page
python3 etl/capital_wards.py --draft # new building schemes into data/manual/capital_scheme_wards.csv, located for review
python3 etl/capital_wards.py # building schemes by ward into data/build/ward_spend.json
python3 etl/decisions.py # Cabinet and Full Council decisions from the council's ModernGov web service
pnpm --filter @borough-ledger/schema decisions:suggest out.json # ask Claude about decisions not yet assessed (needs ANTHROPIC_API_KEY)
pnpm --filter @borough-ledger/schema decisions:apply out.json # add suggested links and events to content/ (for a pull request)
pnpm --filter @borough-ledger/schema digest out.md [YYYY-MM-DD] # the weekly digest draft (Claude with ANTHROPIC_API_KEY, else a plain version)
python3 etl/payments.py --fetch # spend files: download archived ones, record hash, rows and total of new ones
python3 etl/payments.py --draft-map # add new service areas to data/manual/payments_service_map.csv for review
python3 etl/payments.py # build data/build/payments (redacted, mapped, reconciled to each file)
| Path | What |
|---|---|
apps/web | Next.js app. Every number renders through <Num>, which carries its quality and blocks test values in build:prod |
packages/schema | Zod schemas for data/seed and data/config/rules.json, cross-checks, quality helpers |
packages/engine | Bill, budget identity, waterfall, balance-it and costing. Pure functions with Vitest tests |
etl/payments.py | The council's quarterly spend files: privacy rules (docs/PRIVACY.md), service mapping, a JSON file per month and per-supplier totals in data/build/payments/, reconciled to every file |
content/ | Promise cards, parties, councillors and wards in YAML, edited by pull request; see content/README.md |
data/config/rules.json | Band ratios, single person discount, balanced budget rule, referendum limit, instalments, each with its legal source |
Vercel: set the build command to pnpm --filter @borough-ledger/web vercel-build. Production deployments run build:prod; previews run build:preview. NEXT_PUBLIC_SITE_URL on production is the site's own address (https://boroughbook.uk): it sets canonical links, the sitemap and feeds, and when it names a host other than borough-ledger.vercel.app every request to that old address is redirected to it (next.config.ts). NEXT_PUBLIC_GOOGLE_SITE_VERIFICATION is optional: Search Console can verify the whole domain with a DNS record instead.
Page views. apps/web/proxy.ts counts how often each of the site's reading pages is opened, one number per page per UTC day (boroughbook:views:<date> → path → count) in Upstash Redis, after the page is sent, and stores nothing about the reader (apps/web/lib/views.ts; docs/PRIVACY.md "Page views"). The totals are public at /views.json (the last 30 days, the same format as LedgerGov.UK's and RussiaLedger.com's, cached ten minutes) and on /most-read. To switch it on, connect a free Upstash Redis database to the Vercel project (Storage, Upstash, Redis, Production only); Vercel then sets KV_REST_API_URL, KV_REST_API_TOKEN and KV_REST_API_READ_ONLY_TOKEN; redeploy. Without them (previews, laptops) nothing is counted and /most-read says so. Check after the deploy: open a page in a browser, wait ten minutes, and curl -s https://boroughbook.uk/views.json lists it under today's UTC date.
Search and AI search. Every page has its title, description, canonical link, share image and structured data; pledges also have a Markdown version at /promise/<id>.md, and /llms.txt and /llms-full.txt describe the whole site for AI tools. After each production deploy, scripts/indexnow.mjs tells search engines which pages changed (.github/workflows/indexnow.yml).
Alpha. The public site at https://boroughbook.uk is the Alpha: a production build (no test values, open to search engines and AI crawlers, with llms.txt and a sitemap), marked "Alpha" next to the name (STAGE in apps/web/lib/site.ts). Every merge to main deploys it. Switches in "Balance it" whose cost is still a test value are held back by etl/build.py and named on the page as coming later (next_year.pending_toggles); they return once their cost is sourced. Pull request previews stay behind Vercel login.
Code: MIT (LICENSE). Our own text and data tables: CC BY 4.0, credit "BoroughBook.UK (Pavel Guzhikov)". Council, government, ONS and Democracy Club data keep their own licences, and manifesto quotes are not relicensed: see LICENSE-CONTENT.md.