Real Estate Renewal Financial Calculator
  • JavaScript 87.4%
  • CSS 6.2%
  • HTML 5.9%
  • Shell 0.5%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
Me Here ae71c28fa9
All checks were successful
image / build (push) Successful in 16s
Give the schedule a full-screen mode and compact figures
Thirty line items by thirty years is a 2,500px table. On the page it
showed roughly thirteen rows and ten columns; the rest was scrolling
in two directions at once.

Maximize expands controls and table together to the viewport, with the
tighter cell padding that mode can afford. Compact figures round to two
units — $1.09M against $1,092,901, a third the width — which is the only
lever that fits more years on screen without hiding a row or a year.
The CSV stays at full monthly precision regardless.

Together: 26 rows and 22 of 34 columns visible at 1440x900, against 13
and 10 before. Not everything — thirty years by thirty rows does not fit
a laptop screen at a readable size, and claiming otherwise would mean
shrinking it past the point of being worth reading. Line item and Total
stay pinned, so scrolling the rest never loses the row you are on.

The controls hint is allowed to shrink: at full width it claimed its own
flex line and pushed the maximize button onto a second row, costing a
row of table in the mode that exists to show more rows.
2026-08-19 10:10:48 -05:00
.forgejo/workflows Correct a false public warning; ship verified IL QAP; genericize deploy 2026-07-31 08:18:49 -05:00
circumstances Say what the model has been validated against, and what it has not 2026-08-18 17:24:24 -05:00
content Put the newcomer's path through the site first 2026-08-19 05:48:13 -05:00
engine Put the newcomer's path through the site first 2026-08-19 05:48:13 -05:00
jurisdictions Bring every document back in line with the tree it describes 2026-08-04 17:37:17 -05:00
persist Fix the seams the audit found between UI and engine 2026-08-04 17:37:17 -05:00
reference Bring every document back in line with the tree it describes 2026-08-04 17:37:17 -05:00
test Give the schedule a full-screen mode and compact figures 2026-08-19 10:10:48 -05:00
tools Bring every document back in line with the tree it describes 2026-08-04 17:37:17 -05:00
ui Give the schedule a full-screen mode and compact figures 2026-08-19 10:10:48 -05:00
.gitignore Bring every document back in line with the tree it describes 2026-08-04 17:37:17 -05:00
build.sh Post the three-seats concept brief, unlinked, at /circumstances 2026-08-14 20:32:49 -05:00
Chicago Property Development.pdf Ship the research report and link it from the intro 2026-08-04 17:37:17 -05:00
CLAUDE.md Record the headless IntersectionObserver gap in the UI verification notes 2026-08-19 05:48:37 -05:00
DEPLOY.md Ship the research report and link it from the intro 2026-08-04 17:37:17 -05:00
financial_model_spec.md Add cashflow and metrics engines: operations, returns, risk flags 2026-07-31 06:11:16 -05:00
flow.html Put the whole step inside the money diagram, and let it fill the screen 2026-08-19 09:58:50 -05:00
guide.html Put the newcomer's path through the site first 2026-08-19 05:48:13 -05:00
index.html Lay the screener out full width, with the results at the bottom 2026-08-19 09:44:05 -05:00
jurisdiction.json Add the flow animation, and split engine from jurisdiction 2026-07-31 19:11:16 -05:00
LICENSE Rewrite concepts for communities; fix and extend the flow animation 2026-07-31 19:29:43 -05:00
package.json Add a browser smoke test; fix the two real things it found 2026-08-01 10:00:15 -05:00
README.md Bring every document back in line with the tree it describes 2026-08-04 17:37:17 -05:00
schedule.html Give the schedule a full-screen mode and compact figures 2026-08-19 10:10:48 -05:00
STACK.md Bring every document back in line with the tree it describes 2026-08-04 17:37:17 -05:00

Renew

0.0.1 beta · AGPL-3.0-or-later

A feasibility screener for adaptive reuse — converting vacant or underused buildings into mixed-income housing with retail, work, and community space.

Enter a building and it returns a verdict: what it costs, what funds it, what the gap is, whether the debt covers, and what would block it. The whole model runs in your browser. Nothing you type is sent anywhere.

This is a screening estimate, not underwriting. It is a first-pass filter for whether a building is worth investigating further — not a pro forma, not a credit application, and not advice.

Scope

Subsidy is modelled as a list of programs, not a mode. An empty list is an ordinary market-rate deal running the identical cost, income, debt, and return machinery. Low-Income Housing Tax Credits (IRC §42) and the federal historic rehabilitation credit (IRC §47) are two programs it knows about, and they stack. Others can be added without touching the rest of the model.

That is the point of the name: the tool is about bringing buildings back, whatever combination of capital gets it done.

Running it

No dependencies, no build step, no install.

npm test        # the model, the statute, and the published figures
npm run smoke   # builds, then renders every page in headless Chrome
./build.sh      # assemble the publishable site into dist/

npm run smoke needs google-chrome on PATH. It checks the rendered page rather than the arithmetic: console errors, failed requests, horizontal overflow, whether the app booted at all, and whether any control is too small to operate — at desktop, tablet and phone widths. It exists because three inputs once laid out at zero pixels wide while every unit test then in the suite passed. Add --keep to write screenshots to dist-smoke/.

To preview locally:

./build.sh && (cd dist && python3 -m http.server 8531)

Layout

Path What it is
engine/ The model. Pure functions, no DOM, no I/O — shared by every interface.
ui/, persist/, index.html The public screener.
jurisdictions/ Everything location-specific, one directory per place. Copy TEMPLATE to run your own city — see jurisdictions/README.md.
test/ Golden-file tests against hand-checked figures.
financial_model_spec.md The specification the engine implements, with its corrections recorded.
STACK.md, DEPLOY.md, CLAUDE.md Architecture decisions, deployment contract, working notes.

How this was built

Most of the code in this repository was written by an AI agent (Claude), working from financial_model_spec.md under human direction and review. That is stated plainly here because it bears on how the repository should be read.

  • The specification came first, and it is human-owned. The engine implements a written spec. Where the spec turned out to be wrong, the correction is recorded in the spec rather than patched silently into the code, so the two cannot quietly diverge.
  • The arithmetic is checked against published figures, not against itself. The rent derivation reproduces the Illinois allocating agency's own published tables 84 out of 84. The golden-file tests exist because the failure mode that matters in a model with hard regulatory gates is a plausible-looking wrong number, which no amount of code review catches on its own.
  • A person maintains it and answers for it. Scope, correctness and publication are human decisions. The agent does not decide what is true or what ships.

That is a different thing from bulk-generating code and publishing the output unreviewed. Judge it on the spec and the tests, which is the same standard any feasibility model should be held to.

Licence

GNU Affero General Public License v3.0 or later.

The Affero clause is the point. If you run a modified instance for your own city — which you are encouraged to do — the people using it are entitled to the source that produced their numbers. A feasibility tool whose arithmetic cannot be inspected is a tool asking to be trusted rather than checked, and this one is meant to be checked.

Status

Beta. The engine is tested, and its rent derivation reproduces the Illinois allocating agency's own published figures — every county schedule, income band, and bedroom count IHDA publishes, 15,540 figures in all. It has not been checked against a completed transaction. Do not rely on it for a decision that costs money.