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

  1. Fetch + enrich. Pull the datasets above; merge OSM phone / website / opening hours into the business records.
  2. Audits. Run enrichment-coverage, OSM-edit-queue, sub-area-coverage audits — written to `audit/` for the maintainer.
  3. Stamp the refresh log. Increment edition number, stamp last_refreshed — baked into the Footer at build time.
  4. Build. Astro generates the static site, then Pagefind builds the client-side search index.
  5. Post-build audits. Run orphans, content-quality, dead-anchors — also written to `audit/` for review.
  6. 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.