Skip to main content
2026

Municipal Road Projects Map

A public live map of municipal road resurfacing projects, with an invite-only admin panel the project team updates themselves.

Showcase of Municipal Road Projects Map

Role

Full-Stack Developer

Client

A Canadian municipality (delivered through Concept Dash)

Duration

Apr 2026 – Jul 2026 (~3 months)

A mid-sized Ontario municipality runs dozens of road resurfacing projects each construction season, and before this tool the status of each one lived in spreadsheets and email threads. Residents phoned in to ask why their road was torn up, staff answered the same questions repeatedly, and there was no single source of truth. The brief was to put the whole season on one public map that anyone could open without a login, and — just as importantly — to let the project managers keep it current without a developer in the loop.

The public side is a Leaflet map that draws each project both as a coloured line along the road segment and as a dot marker, coloured by status (Not Started / In Progress / On Hold / Completed). A combobox search covers roads and individual driveway addresses in one list with full keyboard navigation, status filter pills narrow the view with live counts, and clicking anything opens a resizable detail panel. The interesting modelling problem was progress: a road is not simply "60% done" — it moves through a sequence of work activities, and surface-treatment roads follow a completely different sequence (pulverizing, then gravel/grade/compact, then surface treatment) than standard HMA overlay roads. The schema splits that into a road_work_activities child table keyed by activity type, and the detail panel renders one colour-coded progress card per activity with its own percentage and scheduled start/end dates. A third level of granularity tracks individual driveways on each road — around 470 of them, bulk-imported from the GIS department's export with each driveway's parent road resolved from its UID prefix — each carrying an address, surface material, status and completion date.

Architecturally it is deliberately plain: no framework, no build step, no package.json. Three static files (a public map, a self-contained admin page, and a stylesheet) talk directly to Supabase's PostgREST API, with Row Level Security doing the authorization — anonymous reads for the public map, authenticated writes for the admin. Sign-ups are disabled in Supabase Auth so admin accounts exist only by invitation, which means adding or revoking an editor is a click in a dashboard rather than a code change. The admin page offers two editing speeds: debounced inline auto-save on the status table for quick daily updates, and a full slide-in CRUD panel for roads, their activities and their driveways. The deployment is a Bitbucket-to-AWS-Amplify pipeline whose build step substitutes Supabase credentials into placeholder tokens in the source, so the repository is designed to carry no keys. The map also degrades gracefully: if Supabase is unreachable it falls back to a bundled GeoJSON geometry file and a CSV status snapshot so the public map still renders.

A later fix in the repo is a good illustration of the failure mode this kind of stack invites: when three new surface-treatment activity types were added to the admin UI, the Postgres CHECK constraint on the table was never migrated to match, so saves failed silently behind a delete-then-reinsert routine that only console-warned on error. The fix moved to an upsert and surfaced the failure instead of reporting success.

Tech Stack

Leaflet.js 1.9.4PapaParse 5.4.1Supabase (PostgreSQL)Supabase AuthPostgREST REST APIPostgreSQL Row Level SecurityGeoJSONVanilla JavaScript (ES2020, no framework)CSS custom propertiesAWS Amplify (CI/CD + hosting)BitbucketGoogle Maps raster tilesIBM Plex Sans / Source Sans 3 (Google Fonts)

Features

  • Public status map with no loginEvery road project is drawn as a colour-coded line and dot marker on a Leaflet map, with map/satellite tile switching, fit-to-bounds, dark and light themes, and a fullscreen mode.
  • Unified road and driveway searchAn ARIA combobox searches project IDs, road names, statuses and project areas alongside individual driveway street addresses, with '/' to focus and arrow-key navigation through results.
  • Per-activity progress trackingEach road carries up to six typed work activities — resurfacing, pulverizing, gravel/grade/compact, surface treatment, shouldering, driveway adjustments — each with its own percentage and scheduled start and end dates, rendered as colour-coded progress cards.
  • Driveway-level detailIndividual driveways are tracked per road by address, surface material (asphalt, gravel, concrete), status and completion date, appearing as map markers whenever their parent road is selected.
  • Invite-only admin panelA Supabase Auth-gated page gives the project team inline debounced auto-save on the status table plus a full CRUD panel for roads, activities and driveways, with access granted and revoked by email invitation rather than a code change.
  • Keyless deploys and offline fallbackThe Amplify build injects Supabase credentials into source placeholders so the repo is designed to hold no secrets, and the map falls back to a bundled GeoJSON and CSV snapshot if the database is unreachable.
Available for work

Let's create your next big idea.