Ink-map street maps for Bloomfield and Montclair, NJ (glenridge-map library, town-specific data)
  • Python 71%
  • HTML 29%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
jdg e1af4eff08 Add Open Graph/Twitter Card tags with a real map screenshot as og:image
Same fix as glenridge-map, ported here -- neither town page had any
social-preview metadata before this. og-image.png for each is a real
Playwright screenshot of that town's own map at 1200x630, not a
generic placeholder.
2026-09-15 19:26:17 -04:00
bloomfield Add Open Graph/Twitter Card tags with a real map screenshot as og:image 2026-09-15 19:26:17 -04:00
montclair Add Open Graph/Twitter Card tags with a real map screenshot as og:image 2026-09-15 19:26:17 -04:00
fetch_data.py Clip Local Roads to each town's boundary too, not just Secondary Roads 2026-09-15 18:12:11 -04:00
README.md Add Bloomfield and Montclair ink maps, using the same glenridge-map library 2026-09-15 12:09:43 -04:00

nj-town-maps

Plain reference "ink maps" (boundary + every street, no basemap tiles) for two towns neighboring Glen Ridge, NJ — Bloomfield and Montclair — built with the exact same data pipeline and rendering library as glenridge-map, just pointed at different towns' data.

This repo does not fork or vendor glenridge-map.js/.css — both towns' index.html load them straight from https://map.jonathan.gluck.dev/ (that site already serves them with Access-Control-Allow-Origin: * specifically so other origins can embed them). This repo only contains:

bloomfield/
  data/{boundary,streets}.geojson
  index.html
montclair/
  data/{boundary,streets}.geojson
  index.html
fetch_data.py

Each index.html is a copy of glenridge-map's own reference page (same palette, same "tap or hover a street" behavior), just retitled and pointed at data/ relative to itself for that town's GeoJSON. No data layer is active in either — that's deliberately not this repo's job, same reasoning as glenridge-map's own index.html.

Regenerating the data

Same two-source pipeline as glenridge-map (see that repo's own fetch_data.py for the fuller rationale write-up): OSM/Nominatim for the real boundary polygon (not a bounding box — a bbox around a town this size pulls in neighboring towns' streets), TIGERweb for the street geometry inside that polygon.

python3 fetch_data.py bloomfield "Bloomfield, Essex County, New Jersey"
python3 fetch_data.py montclair "Montclair, Essex County, New Jersey"

Both queries resolved to a single, unambiguous boundary/administrative Nominatim relation each (no same-named-town-in-another-state collision to worry about here) — fetch_data.py still refuses to proceed if a query returns no administrative boundary polygon, or if the winning result's display_name doesn't contain "New Jersey", as a safety net for reuse against other town names later.

Deploying

No container, no CI, same pattern as glenridge-map:

sudo cp -r bloomfield/* /var/www/bloomfield-map/
sudo cp -r montclair/* /var/www/montclair-map/

Live at https://bloomfield-map.jonathan.gluck.dev and https://montclair-map.jonathan.gluck.dev (Caddy blocks in the caddyfiles repo).