🦈 ParkShark: Mapping every spot.

Inspiration

Drivers at Duke circle lots for 10+ minutes looking for a spot. Google Maps shows one pin per lot, not where the spots actually are, which ones are accessible, which have EV chargers, what permit you need, or what it costs. On-street parking isn't mapped at all. We wanted the map that should already exist: every spot, every rule, every price, and an honest answer to "where do I park right now?"

What it does

  • 309 real parking lots around Duke (77 with official Duke names) and 16,012 spot layouts, built only from open and public data, no Google-derived inventory
  • On-street parking, which no major map shows: curb segments with rules and prices, plus 22 traced bays on Lewis Street and 3,885 Durham parking signs
  • Click any lot to open its exact spot layout: open, taken, ADA and EV stalls, entrance, deck roof levels, plus permit zones, visitor rates, hours and a source link for every fact
  • Live occupancy with honest confidence tiers: 🟢 measured (radar + plate), 🟡 counted (magnetometers), ⚪ estimated (our Tier-3 AI model, backtested)
  • Parking Concierge agent: tell it "arriving at 9:30 for 3 hours, SUV, $10 budget" and it calls our ranking, pricing and lot-detail tools, then opens the best lot on the map
  • Driver needs built in: wheelchair, EV, large-vehicle and cheapest filters, game-day awareness, your live location, light and dark mode
  • Anything we can't source says "Not published." We never invent a price or a spot.

How we built it

  • Hardware: 24 GHz gate radar, 60 GHz in-lot radar, magnetometer counters, Raspberry Pi, LoRa (WM1302 gateway) ⚠️
  • AI: Tier-3 occupancy model with backtests and a Duke traffic model; Gemini concierge agent with function calling; computer-vision verification of curb parking on public-domain aerial imagery; privacy-first plate hashing
  • Data: OpenStreetMap (ODbL), Duke Parking & Transportation public tables, Durham parking signs, NC OneMap orthoimagery
  • Stack: Google Maps JS + Places, Gemini via Vertex AI, Vercel serverless (keys never reach the browser), Supabase (Postgres) schema, GitHub with auto-deploy

Challenges we ran into

  • The map wouldn't load, three times. OpenStreetMap's tile servers blocked us, then our basemap demanded a key, then the CDN serving our map library was blocked on our network. We ended up vendoring the library locally so the app has no single point of failure.
  • Where are the spots, really? Open data gives lot outlines, not stalls. Our first grids came out rotated and spilling onto roads, so we rebuilt the generator to align rows with each lot's dominant edge, subtract buildings and setbacks, and fit aisles that actually fit.
  • On-street parking barely exists in open data. OSM had zero curb segments and only 3 chargers within 3 km. We had to generate candidate curbs from road geometry and verify them with computer vision, which became our strongest argument for physical sensors.
  • Three teammates, three pipelines, one site. Our spot map, the official-data atlas and the Tier-3 occupancy model lived on separate branches with separate dashboards. We merged them into one app with a single rule: official data beats community data, and unsourced fields stay empty.
  • Our AI model was retired mid-hackathon. At 2:30 am the concierge started returning 404s: the model we built on had just been shut down on Vertex AI. We switched to its replacement and added an automatic fallback chain so a retired model never breaks the demo again.
  • Doing it legally. Using Google imagery to derive inventory would violate its terms, so every spot comes from open or public sources, with provenance in the data.

Accomplishments that we're proud of

  • 309 real lots and 16,012 spot layouts mapped in one weekend, with every fact traced to a source
  • On-street parking and spot-level layouts, which Google and Apple Maps don't show
  • An honest confidence system that tells drivers what is measured versus estimated
  • A working AI concierge that reasons over real prices, distances and accessibility
  • Shipped live with auto-deploy, a privacy page and zero API keys in the repo

What we learned

  • The moat isn't the sensor, it's the data, and clean, sourced data is the hard part
  • Being honest about uncertainty builds more trust than a confident wrong number
  • How to ship as a team: branching, merging, deploying and keeping secrets out of git

What's next

Sensor pilot with UNC Parking in Spring 2027, then Duke and Triangle cities, then the Southeast. Integration talks with navigation and ride-share apps so ParkShark data reaches drivers where they already are.

Privacy

No personal data stored. Plates are salted and hashed on-device, images are deleted right after OCR, and your location never leaves your browser.

Team

  • Monica Macaes: dashboard, spot mapping, agents, concierge, deploy
  • Jacob Brodsky: Tier-3 AI occupancy model, backtests, traffic model
  • Anne Amalong: Duke Parking Atlas: official facilities, rates, permits, signs, on-street
  • Ishan Joshi: founder; hardware and product direction
Share this project:

Updates

Submission history