About · Refresh schedule
Refresh schedule
Every Monday at 8:00 AM Chicago time, a local
launchd job on the maintainer's machine pulls fresh data
from the public sources below, rebuilds the site, and deploys to
Netlify. The result is the edition stamped in the Footer — currently
Edition #1, last refreshed
2026-05-24.
What runs every Monday
- Fetch + enrich. Pull the datasets above; merge OSM phone / website / opening hours into the business records.
- Audits. Run enrichment-coverage, OSM-edit-queue, sub-area-coverage audits — written to `audit/` for the maintainer.
- Stamp the refresh log. Increment edition number, stamp last_refreshed — baked into the Footer at build time.
- Build. Astro generates the static site, then Pagefind builds the client-side search index.
- Post-build audits. Run orphans, content-quality, dead-anchors — also written to `audit/` for review.
- Deploy. Push the `dist/` output to Netlify production.
Sources and their cadence
Most datasets update faster than the Monday cadence — we just pull a fresh snapshot once a week. A few update less often (annual Census, CPS profiles) and are pulled on the same Monday schedule out of consistency, not necessity.
| Dataset | Upstream cadence | When we pull |
|---|---|---|
| Business Licenses — Current Active Chicago Data Portal dataset uupf-x98q. Filtered to neighborhood = WEST LOOP. | City updates daily | Each Monday |
| Special Events Chicago Data Portal xgse-8eg7. Geo-filtered to the West Loop bounding box. | City updates as permits are issued | Each Monday |
| Park District Event Permits Chicago Data Portal pk66-w54g. Filtered to the four West Loop parks. | City updates weekly | Each Monday |
| OpenStreetMap (phone, website, opening hours) Pulled via the Overpass API; matched against active businesses by name + proximity. | Real-time community edits | Each Monday |
| CTA stations + bus stops Chicago Data Portal datasets 8pix-ypme + qs84-j7wh. Bounding box one block wider than the neighborhood. | Rarely changes | Each Monday |
| Food inspections Chicago Data Portal 4ijn-s7e5. Joined to active businesses by license number. | City updates daily | Each Monday |
| Parking permit zones + snow routes Multiple Chicago Data Portal datasets, geo-filtered. | Quarterly updates | Each Monday |
| Chicago Park District park-level data Chicago Data Portal wwy2-k7b3. | Rarely changes | Each Monday |
| CPS school profiles Chicago Data Portal 3dhs-m3w4. Filtered to schools serving West Loop residents. | Updated annually (August) | Each Monday |
| US Census ACS 5-year estimates Census Bureau API for the three West Loop ZIPs and the Near West Side community area. | Updated annually (December) | Annually |
When the schedule slips
The launchd job needs the maintainer's laptop to be
awake (or wakeable) at 8 AM Monday. If the machine is asleep at the
scheduled time, the job fires on next wake. If the maintainer is on
vacation for a week, that week's refresh is skipped — the underlying
data doesn't change fast enough for it to matter. On dataset
failure (e.g. the Chicago Data Portal returns a 5xx), the script
aborts before deploy and fires a macOS notification.
The Footer's Edition #N · Updated YYYY-MM-DD line is the single sitewide signal that the latest refresh succeeded.
Manual trigger
The maintainer can run the same pipeline by hand:
npm run refresh # full pipeline including deploy
SKIP_DEPLOY=1 npm run refresh # dry run — no deploy Used most often to test changes to the build pipeline itself without waiting for Monday morning.
For the full methodology — schema choices, closure mechanism, what this site deliberately doesn't do — see the methodology page. For per-source attribution and dataset IDs, see the about page.