Interactive map of Greensboro, NC red light and stoplight citations with both a playable 10-day sliding window and a full-dataset Everything hotspot view.
- Ingests
starting_files/citations.csv - Normalizes the source rows, including known malformed column shifts
- Resolves citation addresses to latitude/longitude with the Google geocoding service already used by the project
- Generates
data/citations.jsonfor the frontend - Displays citations on a Google map with a slider + start button that advances a 10-day window through time
- Offers an Everything view that turns those folded 100-foot hotspots into a zoom-responsive heatmap, and you can click hotspot areas to inspect nearby citation counts
npm install
npm run generate-data
npm run devOpen http://localhost:3000.
| Command | Purpose |
|---|---|
npm install |
Install dependencies |
npm run generate-data |
One-time ingestion + geocoding from starting_files/citations.csv into data/citations.json |
npm run dev |
Start the local Vite dev server |
npm run build |
Create a production build |
npm run preview |
Preview the production build |
starting_files/citations.csvis the authoritative source file.starting_files/citations_clean.csvis intentionally ignored.- Citation records at the same address but different datetimes stay as separate map events.
- Rows that cannot be geocoded remain in the generated dataset with unresolved status so they are visible instead of silently dropped.
- The data generator lives at
scripts/generate-citations-data.mjs. - The generated frontend dataset lives at
data/citations.json. - The map UI is driven by
js/app.jsandindex.html.