Over the past month we distilled the Berkeley reconstruction into a teachable notebook sequence that takes anyone from a city's raw permit spreadsheets to a scored, independently verified Annual Progress Report. The pipeline is seven short Jupyter notebooks, plus a no-coding-required on-ramp for beginners:
To rebuild the Berkeley APR, a student needs nothing but a browser: every notebook opens free in Google Colab and fetches its data automatically from our public archive. Open JN1, run it top to bottom, continue through JN6b — or flip a one-line switch in the setup cell to skip ingestion and start from our cleaned permit table.
To do the same for Oakland, San Francisco, Delano, or Fresno, only JN1's configuration cell changes — two values: the path to that city's permit ledger and the row its column headings sit on. We tested each city's data door (July 3–8, 2026): Oakland exports a full month of permits in one click from its public Accela portal. San Francisco is the easiest of all: its full permit ledger — 1.29 million rows — answers a public API on DataSF, with unit counts, filing and issuance dates, and even an ADU flag already in the columns. Fresno runs the same Accela platform as Berkeley and Oakland, so the same retrieval tooling applies; a single public-records request for its annual building-permit report is the fallback. Delano runs a different platform (SmartGov) with no bulk export, so there the records request is the path — one request, same report. The scoring step needs no change at all: we confirmed HCD's statewide portal carries per-year APR rows for all four cities — for the oracle, only the jurisdiction name changes.
Open the curriculum — every notebook, one click to Colab →An honest caveat: the two-knob claim is literal (it is JN1's configuration cell), but a city whose permit ledger lacks unit counts would need adaptation at JN3. Method & credibility: the Audit page · berkeleybuild.com