182
yard signs tracked on one shared map
6
statuses, from pending to installed
Photos + notes
attached to each sign on the map

The situation

Yard signs are a logistics problem: requests come in from supporters, signs go out in batches, some get moved or stolen, and the team needs to know what is standing where, and what each spot looks like.

Tracking that in a spreadsheet meant nobody could see the map, nobody could see the yard, and every planning conversation started from scratch.

What I built

  • A shared satellite map where the team places and moves signs by type and status (pending, ready, installed, at risk, needs repair, removed), with a live count for each layer.
  • Tap a sign to see its photo, its notes, and who placed it. Volunteers add the photo and note from their phone right when they put the sign in the ground.
  • Markup tools for planning: draw routes and areas (with acreage), drop text labels, and measure distances, with a live readout as you draw. They work on a phone, too.
  • Everyone sees who is online and a running feed of every sign added or moved. When it is delivery day, a companion route tool puts each driver's stops in order with one click.

Photos load only when someone opens a sign, so the map stays fast on a phone even with a photo on every placement.

For your business

The same shared map with photos and markup works for job sites, property inspections, or equipment out in the field.

Why custom

Generic mapping apps don't know what a yard sign is. This one tracks the campaign's own sign types and statuses, keeps a photo and notes on every placement, lets the team mark up the map to plan, and runs on a simple Google Sheet. No per-seat fees, no workarounds, and nothing the team had to learn that they didn't need.

Built with

Leaflet · Google Sheets + Apps Script · OSRM routing · GitHub Pages

Sign photos: Editor B, jlwelsh, and garryknight on Flickr (CC BY 2.0), and rawpixel (CC0). Faces, addresses, and real names are never shown.

Have a workflow like this?

Most projects scope in a 30-minute call. Tell me where the time goes.