Court Finder is a React + Convex app for finding and validating sports courts from satellite imagery. It combines an interactive Mapbox map, Convex-backed court data, Roboflow inference results, and a feedback workflow for improving court verification.
- Interactive Mapbox map with court markers, clustering, filters, search, and user-location support
- Satellite tile scanning backed by Convex actions, Mapbox tiles, and Roboflow object detection
- Court records linked to ML predictions and filtered by status, confidence, class, and viewport
- Authenticated feedback flow for reviewing detections
- Admin scan review pages for inspecting scan output and tile results
- Progressive Web App support
- React 19, TypeScript, Vite, and Bun
- TanStack Router for file-based routing
- Convex for backend data and functions, with Clerk for authentication and account management
- Tailwind CSS v4 and shadcn/ui
- Mapbox GL JS, Mapbox Search, and
react-map-gl - Roboflow integration for satellite court detection
- Vitest and Testing Library
Install dependencies:
bun installConfigure Convex for this checkout:
bun dev:backend:setupRun the backend and frontend together:
bun devThe Vite app runs at http://localhost:3001.
Frontend env, loaded by Vite:
VITE_CONVEX_URL=
VITE_MAPBOX_API_KEY=
VITE_CLERK_PUBLISHABLE_KEY=Convex/server env:
MAPBOX_API_KEY=
ROBOFLOW_API_KEY=
CLERK_JWT_ISSUER_DOMAIN=
CLERK_WEBHOOK_SIGNING_SECRET=
CLERK_SECRET_KEY=
ROBOFLOW_BATCH=User Contributed
CONVEX_SITE_URL=CONVEX_SITE_URL is optional. Set Convex environment variables in the Convex dashboard or with the Convex CLI for deployed environments.
bun dev- Run Convex and Vite concurrentlybun dev:backend- Run the Convex dev serverbun dev:backend:setup- Configure Convex for local developmentbun dev:frontend- Run Vite on port 3001bun check-types- Generate TanStack routes and run TypeScript checkingbun run test- Run Vitest tests oncebun run test:watch- Run Vitest in watch modebun run build- Build the production frontendbun serve- Preview the production buildbun generate-routes- Regenerate TanStack Router route typesbun generate-pwa-assets- Generate PWA image assets
convex/ Convex schema, queries, mutations, actions, and libs
src/components/ Shared and feature React components
src/components/map/ Map controls, markers, popups, drawers, and filters
src/components/training/ Feedback review UI
src/components/ui/ shadcn/ui primitives customized for the app
src/hooks/ Shared React hooks
src/lib/ Frontend constants, types, geocoding, tile helpers
src/routes/ TanStack Router file routes
src/styles/ Mapbox and global style support
Use the smallest relevant check for the change:
bun check-types
bun run test
bun run buildFor backend or scan changes, also run:
bun dev:backend