All projects

SpotTrove

Street parking legality and garage pricing, on one map. Live in NYC, expanding across the US. Phase 1 ships on 79,650 block faces with parsed signs, 561,642 legality rules, 10,955 metered block faces with posted DOT rates, 1,837 indexed garages, and 263 with real posted rates — per-zone legality live across all five boroughs. On top of the map: street meter prices on the block (with the ParkNYC zone number to pay from the car), an AI sign scanner that reads any pole you photograph, soon-illegal alerts, a real ringing alarm before your block turns illegal, and a nearest-garage fallback when a block says no. The same engine — parser, legality solver, scrapers, OCR validator — generalizes to every U.S. city with open sign data. Boston, Chicago, San Francisco, and LA are next.

What it does

  • No account needed to look — the map, legality, search, and the garage fallback all work as a guest, and signing in is asked for at the point of use rather than at the door
  • Parses the signs on 79,650 block faces into 561,642 machine-readable legality rules, solved per sign zone in NYC-local time across all five boroughs
  • Tells you whether a given curb is legal to park on right now — and when it stops being legal
  • AI sign scanner — photograph any pole and Claude parses it server-side to answer "can I park here, and until when?"
  • Street meter prices on 10,955 metered block faces — the posted DOT rate appears while the meter is actually running, and tapping the block gives the full-stay ladder, the time limit, and a tap-to-copy ParkNYC zone number
  • Indexes 1,837 garages, 263 with real posted rates; when a block says no, the sheet surfaces "from $X · N nearby", price-sorted
  • Alternate-side suspension banner — when ASP is suspended today, the map says so; every other state renders nothing, so it can claim a suspension but never that rules are in effect
  • OCR validator cross-checks parsed rules against the source sign image
  • Saved spots (3 free, uncapped on premium), and community reports surfaced as a trust signal
  • Premium alerts before a block turns illegal, plus a real ringing alarm via Apple AlarmKit (iOS 26+) — an actual alarm, not just a notification
  • Save a vehicle size class (sedan / SUV / oversized), captured in context rather than at onboarding
  • iOS 1.5 live on the App Store; the Android submission kit is ready, pending store accounts

Architecture

Monorepo with three apps and one service: a Next.js 14 marketing site on Vercel, a React Native + Expo mobile app shipping via EAS to the App Store, a single-file Mapbox GL web demo, and a FastAPI service on Railway backed by Supabase (Postgres + PostGIS) for the API. A shared TypeScript types package keeps mobile and web in sync, and the AlarmKit alarm lives in a local Expo native module. CI runs API tests and mobile typechecks on GitHub Actions, with EAS build and submit on tag push.

Tech stack

Backend: FastAPI, Pydantic, SQLAlchemy + GeoAlchemy2, APScheduler, Supabase (Postgres + PostGIS, Auth, Storage), Claude API for the sign scanner (claude-haiku-4-5, swappable by env var), Sentry.
Mobile: Expo SDK 55, React Native 0.83, RNMapbox, Sentry, Supabase auth, RevenueCat, expo-notifications, Apple AlarmKit via a local native module.
Marketing: Next.js 14 App Router, Tailwind, Instrument Serif / DM Sans / Overpass / JetBrains Mono via next/font/google.
Data: Tesseract OCR, custom NYC sign parser, NYC Open Data + DOT permits ingest, garage-rate scrapers (iPark, GMC, GGMC, ProPark, NYC DOT), Yelp.