Skip to content

Repository files navigation

Chancellor — UK Fiscal Simulation

A quarterly fiscal simulation set in 2026. You are the UK Chancellor of the Exchequer. You have twenty quarters (five years) until the next general election. You must hold your coalition together, balance the books (or get the deficit below 2% of GDP), and survive the markets, the press, and your own backbenchers.

Built with React + Vite + Tailwind. Deploys as a static site to GitHub Pages.

See ROADMAP.md for ideas that have been raised but not yet started.


How to play

You inherit the UK in Q1 2026 with a deficit of roughly £133bn (4.3% of GDP) and debt at 95% of GDP. Each quarter:

  1. Adjust budget levers — income tax bands, corporation tax, VAT, and departmental spending.
  2. Propose reforms — multi-quarter projects with upfront costs, prerequisites, and per-field forecast bands (cited; ±25% fallback where not yet authored). Pass OBR Independence to narrow every band by 60%.
  3. Watch the risk register — events roll quarterly with probabilities modified by your policy choices.
  4. Advance the quarter — see what changed, allocate any surplus, handle whatever the country throws at you.

Three ways to win, three ways to lose. Coalition cohesion below 22% — government falls. Bond yields above 8% — markets revolt. Lose the election at Q20 — opposition takes power.

The block above is regenerated by npm run sync-docs from live PARAMS in src/model/params.js. Don't hand-edit values between the markers — change the PARAMS instead and re-run the script. CI fails if it drifts.


Local development

npm install
npm run dev

Then open http://localhost:5173

Deploy to GitHub Pages

  1. Create a new GitHub repo (any name works).
  2. Push this project to the main branch.
  3. In repo settings: Settings → Pages → Source → GitHub Actions.
  4. The workflow at .github/workflows/deploy.yml builds and publishes on every push.
  5. After ~60 seconds, your site is live at https://YOUR_USERNAME.github.io/YOUR_REPO/.

Vite's base: './' config means the build works at any subpath without further configuration.

Architecture

The simulation is split into a pure-function model layer and a thin React orchestrator. Every numeric assumption traces back to an entry in a citation registry that records the source, the value used, and the confidence level.

docs/
  model/         macro engine reference (start with README.md)
  superpowers/   design specs and implementation plans
src/
  model/
    citations.js   single source of truth for every numeric assumption
    params.js      every tunable constant, wrapped via cited(value, citationId)
    blocs.js       voter bloc definitions
    reforms.js     REFORMS map; every numeric field carries a citationId
    events.js      EVENT_DEFINITIONS + cross-event REFORM_RISK_MODS
    sources.js     bibliography for the About tab
    engine.js      pure calculation functions; reads only from PARAMS
    index.js       convenience re-exports
  components/
    primitives/    Slider, BlocBar, ReformCard, CitationLink + ConfidenceBadge
    modals/        Intro, EventModal, QuarterSummary, SurplusAllocModal,
                   InspectReform, Reelect, FinalModal
    OverviewTab.jsx, BudgetTab.jsx, ReformsTab.jsx,
    RisksTab.jsx, LedgerTab.jsx, AboutTab.jsx
  ChancellorSim.jsx  state, useEffects, advanceQuarter, header + tab switching
  main.jsx

Confidence levels

Every entry in citations.js carries a confidence tag:

  • sourced — directly verified against the cited publication
  • extrapolated — sourced reasoning applied / consistent-but-not-verbatim, or a derived calculation from a sourced parameter
  • judgement — designer judgement with documented reasoning

The About tab's Confidence summary shows the live percentage breakdown across all parameter-level citations (currently 382 entries: ~31% sourced, ~25% extrapolated, ~45% judgement). Borderline classification decisions and their reasoning are recorded in CLASSIFICATION_LOG.md at repo root.

Adding a new reform

Append one entry to REFORMS in src/model/reforms.js. Every numeric field is wrapped via cited(value, citationId). If the citation doesn't exist yet, add a corresponding entry to src/model/citations.js. No other code changes needed — the UI iterates the map automatically, and the inspect-reform modal walks the reform tree to surface every citation.

myReform: {
  name: 'My Reform', branch: 'revenue',
  cost: cited(2, 'my_citation'), quarters: 4, prereq: [],
  passReq: { coalition: cited(30, 'bloc_methodology') },
  blurb: 'Short description.',
  citationId: 'my_citation',  // primary evidence base
  onComplete: {
    revBonus: cited(5, 'my_citation'),
    log: 'My reform delivered.',
  },
  blocEffects: {
    workingClass: cited(3, 'bloc_methodology'),
  },
},

Tuning a parameter

Edit src/model/params.js. Every leaf is { value, citationId }. Change the first argument to cited(); the engine reads the new value automatically. Behaviour-affecting threshold constants (corp 22%/28%, NHS boost above £210bn, etc.) live in PARAMS.thresholds.

Adding a new citation

Add an entry to src/model/citations.js. Required fields: parameter, confidence, title, note. Optional: value, unit, publisher, authors, year, url, quote. The validator in params.js throws on load if any citationId referenced by a cited() call doesn't resolve to a real entry.

Adding new reforms (legacy note)

The pre-refactor monolith documented its reform schema inline in src/ChancellorSim.jsx. That file is now ~500 lines of thin orchestration; the schema lives in src/model/reforms.js. Same idea, just a better home.


Bibliography & Sources

This simulation tries to ground its numbers in real, citable research. The figures aren't exact — fiscal modelling is genuinely uncertain — but the rough magnitudes and behavioural assumptions come from the sources below. Where the literature is contested (rent controls, top-rate effects, immigration), the simulation reflects the contestation rather than picking a side.

Public finances — overall

Macroeconomics & monetary policy

  • Bunn, Anayi, Barnes, Bloom, Mizen, Thwaites & Yotzov, How Curvy is the Phillips Curve?, Bank of England Staff Working Paper 1107 / NBER WP 33234 (October 2025). Cross-country macro Phillips slope = 0.19 (positive output gap) vs 0.06 (negative) — 3.2× asymmetry. Covid natural experiment: inflation 5× more sensitive to demand on the way up than on the way down. Convexity strongest under high trend inflation (menu-cost mechanism). Anchors the simulation's asymmetric Phillips slope and trend-inflation modifier. https://www.bankofengland.co.uk/working-paper/2025/how-curvy-is-the-phillips-curve
  • Coibion & Gorodnichenko, Why Are Target Interest Rate Changes So Persistent?, AEJ: Macroeconomics 4(4) (2012). Empirical quarterly Taylor-rule smoothing coefficient 0.7–0.8 across advanced economies. Anchors monetary.bankRateInertia = 0.75. https://www.aeaweb.org/articles?id=10.1257/mac.4.4.126
  • Auerbach & Gorodnichenko, Measuring the Output Responses to Fiscal Policy, AEJ: Economic Policy 4(2) (2012). GDP multipliers of government purchases ~1.7× larger in recession than expansion. Anchors fiscalMultipliers.recessionModifier. https://www.aeaweb.org/articles?id=10.1257/pol.4.2.1
  • Federal Reserve, Fiscal Positions and Government Bond Yields in OECD Countries, International Finance Discussion Paper 1011 (2010). G-7 panel: 1pp rise in the structural deficit/GDP ratio boosts long bond yields by ~15bp. Anchors monetary.deficitYieldCoef = 0.006. https://www.federalreserve.gov/pubs/ifdp/2010/1011/
  • Holston, Laubach & Williams, Measuring the Natural Rate of Interest after COVID-19, FRB NY Staff Report 1063 (2023). NY Fed has explicitly discontinued HLW UK estimates: "model does not provide a good fit for the data". Sim now uses survey-based UK r* instead. https://www.newyorkfed.org/research/staff_reports/sr1063
  • Mercatus Center, Survey Measures of the Natural Rate of Interest (2025). Survey-based UK r* clusters at 1.5–2.0% real; with the 2% inflation target this implies a nominal neutral rate of 3.5–4.0%. Anchors monetary.neutralRate = 4.0%. https://www.mercatus.org/
  • Joyce, Tong & Woods, The UK's Quantitative Easing Policy: Design, Operation and Impact, Bank of England Quarterly Bulletin 2011 Q3. First £200bn UK QE programme lowered medium- to long-term gilt yields by ~100bp ≈ 0.5bp per £bn. Anchors monetary.qeYieldEffectPerBn and the LDI doom-loop QE response. https://www.bankofengland.co.uk/quarterly-bulletin/2011/q3/the-uks-quantitative-easing-policy-design-operation-and-impact
  • Taylor, Discretion versus Policy Rules in Practice, Carnegie-Rochester Conference Series on Public Policy 39 (1993). The canonical inflation-and-output-gap reaction function. Anchors the Taylor-rule coefficients. https://web.stanford.edu/~johntayl/Papers/Discretion.PDF

Taxation — specific reforms

  • CGT alignment: Adam, Advani, Miller & Summers, Capital Gains Tax Reform (IFS / CenTax, 2024). Estimates ~£13bn pa from full alignment with income tax. https://ifs.org.uk/publications/capital-gains-tax-reform
  • Non-dom abolition: Advani, Burgherr & Summers, The UK Non-Dom Regime: Implications of Reform (CenTax / LSE / Warwick, 2025). Found 2017 reform caused only ~4.9% departures while tax paid rose >150%. https://centax.org.uk/research/
  • Top-rate elasticities: Diamond & Saez (2011), The Case for a Progressive Tax: From Basic Research to Policy Recommendations. Revenue-maximising top combined rate ≈ 73% under standard assumptions. Journal of Economic Perspectives. https://www.aeaweb.org/articles?id=10.1257/jep.25.4.165
  • Top-rate behavioural response (UK): HMRC, Estimating the elasticity of taxable income. ETI estimates ~0.25 for additional rate taxpayers.
  • Updated top-rate ETI: Browne & Phillips, Updating and Critiquing HMRC's Analysis of the UK's 50% Top Marginal Rate of Tax (IFS WP 17/12, 2017). Refines the additional-rate ETI to ~0.31 after fuller post-reform data and forestalling allocation. https://ifs.org.uk/
  • VAT pass-through: Crossley, Low & Sleeman, Using a Temporary Indirect Tax Cut as a Fiscal Stimulus: Evidence from the UK (IFS WP W14/16, 2014). UK 2008-09 VAT cut: central pass-through ≈ 75%; volume of retail sales rose ~1% → +0.4% total expenditure. https://ifs.org.uk/publications/using-temporary-indirect-tax-cut-fiscal-stimulus-evidence-uk
  • Corporate tax elasticity: Devereux, Maffini & Liu, The Elasticity of Corporate Taxable Income: New Evidence from UK Tax Records (Oxford CBT WP 12/23, 2012). UK elasticity of corporate taxable income with respect to (1 − statutory rate) ≈ 0.13–0.17 from bunching at kinks 2001–08. https://oxfordtax.sbs.ox.ac.uk/
  • Wealth tax: Advani, Chamberlain & Summers, A Wealth Tax for the UK (Wealth Tax Commission, 2020). https://www.wealthandpolicy.com/
  • Inheritance tax reliefs: IFS, Death and Taxes (2024). APR/BPR cost ~£3bn pa, predominantly benefit estates >£2.5m. https://ifs.org.uk/
  • Charity tax expenditure: HMRC, UK Charity Tax Relief Statistics 2024–25. Total reliefs £6.7bn; higher-rate Gift Aid relief £820m. https://www.gov.uk/government/statistics/cost-of-tax-relief
  • Trickle-down: Hope & Limberg, The Economic Consequences of Major Tax Cuts for the Rich (LSE/KCL, Socio-Economic Review, 2022). 50 years of OECD data — no significant growth effects. https://academic.oup.com/ser/article/20/2/539/6500315

Migration and tax-flight

  • Millionaire migration (US): Young, Varner, Lurie & Prisinzano, Millionaire Migration and Taxation of the Elite, American Sociological Review 81(3), 2016. 45m IRS records; migration semi-elasticities <0.1. https://journals.sagepub.com/doi/10.1177/0003122416639625
  • UK non-dom departure data: HMRC published statistics following 2017 and 2024 reforms; Tax Justice Network analysis. https://taxjustice.net/
  • Fiscal effects of immigration: Dustmann & Frattini, The Fiscal Effects of Immigration to the UK, Economic Journal (2014). EEA migrants 1995–2011 made a positive net fiscal contribution; non-EEA broadly negative. Skilled migration ~£40k/yr net positive; low-skill ~–£10k/yr. https://onlinelibrary.wiley.com/doi/10.1111/ecoj.12181

Public services and austerity

  • Marmot Review at 10 / Marmot 2024: Institute of Health Equity, UCL. Estimates ~148,000 excess deaths attributable to austerity 2010–2019; over 1 million premature deaths in the poorest 90% of England. https://www.instituteofhealthequity.org/
  • Walsh, McCartney et al. (2022). Excess mortality in England & Scotland 2012–2019. https://pubmed.ncbi.nlm.nih.gov/
  • Loopstra, Reeves et al. (Journal of the Royal Society of Medicine, 2016). Each 1% cut in Pension Credit → 0.68% rise in mortality among those 85+.
  • NHS productivity / agency spending: NHS England Annual Report. https://www.england.nhs.uk/
  • ONS, Public Service Productivity Review (revised March 2025). Total public-service productivity rose ≈ 0.5% pa on average 2010–2019 (≈5% cumulative). Education productivity has been volatile but not declining — contrary to popular narrative. https://www.ons.gov.uk/economy/economicoutputandproductivity/publicservicesproductivity

Housing

Labour market and minimum wage

Migration and growth

Green investment and climate

  • Climate Change Committee, Net Zero and Carbon Budgets. Insulation programme costs (~£15bn/5y, ~£300 household savings). https://www.theccc.org.uk/
  • CCC, The Seventh Carbon Budget — Advice for the UK Government (26 February 2025). Budget 2038–2042: 535 MtCO2e (87% below 1990 incl. international aviation/shipping). Net cost ≈ 0.2% of UK GDP/yr on average; required investment ~£26bn/yr to 2050. https://www.theccc.org.uk/publication/the-seventh-carbon-budget/
  • CEBR, Full Fibre: Economic Impact (2022). Full fibre could add £59bn to GDP by 2025. https://cebr.com/

Banking and financial stability

Risk events & base rates

Fiscal/political philosophy

  • Reich, Rob, Just Giving: Why Philanthropy is Failing Democracy and How It Can Do Better (Princeton, 2018). Foundational case against treating charitable giving as a substitute for taxation. https://press.princeton.edu/books/hardcover/9780691183497/just-giving
  • Hacker & Pierson, Winner-Take-All Politics (2010). On the political economy of why tax cuts persist despite weak growth evidence.

Methodological note

Reform and event effects carry per-field forecast bands declared on each cited() call. Each leaf can specify its own asymmetric band, sampled triangular with the mode at the cited central value; leaves without an explicit band fall back to ±25%. Passing "Strengthen OBR Independence" scales every band's width by 0.4 (the single global narrowing knob). This isn't fudge — it's an attempt to capture that fiscal scoring is meaningfully uncertain, that some lines (avoidance yield) are much more uncertain on the downside than the upside, and that institutional credibility (the OBR's whole reason for existing) matters.

Bloc reactions to policy are illustrative rather than measured. They draw on YouGov, Ipsos, and British Election Study survey patterns but the per-policy numbers are designer judgments calibrated to feel right, not estimated from data.

Event probabilities are likewise designer-set, modified by reasonable mechanisms (NHS pay deal cuts strike risk; deregulation raises financial-crisis risk).

This is a game that tries to be informative, not a forecasting tool. If you want forecasts, the OBR is real and free.


Tech stack

  • React 18
  • Vite 5
  • Tailwind CSS 3
  • lucide-react (icons)
  • localStorage save games (per-browser, one slot, auto-saves)

License

MIT. Do whatever you want with this. Attribution appreciated but not required.

About

You have been named the Chancellor of the Exchequer of the United Kingdoms of Great Britain and Northern Ireland. Balance the budget, or don't; make your mark and see if you could do it better.

Resources

Contributing

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages