Inspiration
Finding parking in San Francisco and Berkeley is a nightmare. We've all driven in circles for 20 minutes, missed appointments, and gotten street cleaning tickets. Google Maps shows you 5 parking lots — not the 200+ street spots that actually exist. We wanted to build something that actually works: real data, real-time, and hands-free while you're driving.
What it does
ParkSmart is like Waze, but for parking. It shows you real available parking spots on a live map, lets you navigate to them with turn-by-turn directions, and lets you control everything with your voice while driving. Key features:
- Voice AI : say "find me free parking near the City College of San Francisco" and Claude AI searches 200+ spots, picks the best one, and starts navigation — all hands-free.
- Real parking sign data : we integrated official SFMTA data (7,760 blockfaces) so every spot shows the exact posted sign: time limits, street cleaning schedules, permit zones.
- 3 smart modes : Driving (find a spot), Parked (manage your time, get warned before street cleaning), Walking (switch to foot navigation) .
How we built it
- Frontend: React + TypeScript + Vite + Tailwind CSS + Mapbox GL JS
- Backend: FastAPI + Python
- AI: Claude Sonnet 4.6 with real tool use — Claude actually calls our parking search API, routing API, and availability API rather than just generating text
- Data sources: OpenStreetMap (street parking), Google Places (parking lots), SFMTA Open Data (official SF parking regulations + street sweeping schedules)
- Database : SQLite with 7,760 parking regulations and 37,856 street sweeping records downloaded from SF Open Data
Challenges we ran into
- Data accuracy: OpenStreetMap has street parking data but it's inconsistent. We built a geometry-based estimation algorithm to calculate available spots from road length, then layered official SFMTA sign data on top for SF streets.
- Voice AI latency: A full voice round-trip (speech → Claude → 2 API calls (Mapbox and Claude) → response) takes 11-12 seconds in the real world, not the 2-3 seconds we expected. We redesigned the UI to show clear "thinking" states so users know the AI is working.
- GPS on mobile: Safari on iPhone blocks GPS on HTTP connections. We built a smart fallback system that detects your city (Berkeley vs SF) and falls back gracefully when GPS is unavailable.
- Marker clutter: Our first version showed 388 parking markers in Berkeley — it looked like a bug. We built density controls and distance-based filtering to keep the map clean and readable.
Accomplishments that we're proud of
- Claude AI doesn't just talk about parking — it actually controls the app. Say "navigate to the closest free spot" and NavigationPanel launches automatically with a real route.
- We're showing more parking options than Google Maps in SF — 200+ spots vs their typical 5-10 lots.
- Real SFMTA government data means we can tell you exactly when street cleaning happens on your specific block, not just "check the signs."
- Built a fully functional PWA that judges can install on their phone in 30 seconds.
What we learned
- Real-world AI latency is 5-10x slower than sandbox testing. Always build for the real number.
- Government open data is incredibly powerful when you know where to find it. SF's SFMTA dataset has every parking sign in the city — we just had to download and query it.
- Voice UX is completely different from text UX. Users need visual feedback at every step because they can't see what's happening.
What's next for parkSmart
- AI Parking Agent: proactive spot recommendations that update every 30 seconds, spoken aloud while you drive
- SpotAngels integration: crowdsourced parking data from millions of real users across the US
- React Native mobile app: reuse 80% of the web logic for a real App Store app
- Berkeley parking data: partner with the City of Berkeley for official sign data like we have for SF
- Predictive availability: use historical crowdsource data to predict which spots will be open before you arrive
Built With
- claude-ai-(anthropic)
- fastapi
- mapbox-gl-js
- openstreetmap
- python
- react
- sfmta-open-data
- speech
- sqlite
- tailwind-css
- typescript
- vite
- web
Log in or sign up for Devpost to join the conversation.