USC Integrated Media Systems Center (IMSC), with Dr. John Krumm · 2025 - 2026
POI Game
A gamified labeling platform that turns GPS visits into ML training data.
- React
- TypeScript
- FastAPI
- PostgreSQL + PostGIS
- OAuth 2.0
- Docker
Overview
Players see a GPS visit on a map and pick the point of interest the person most likely visited. Independent answers are aggregated into locked, consensus-labeled training data for POI attribution research at USC IMSC.
The problem
Location research needs ground truth for which place a GPS visit belongs to, and that label is expensive to collect. Raw crowd answers are noisy, and a dataset is only useful for training if every label is traceable and stable once it is exported.
Architecture
- React 19 + Vite + Leaflet (Vercel)
- FastAPI, async SQLAlchemy, JWT in HttpOnly cookies (Render)
- PostgreSQL 16 + PostGIS on Neon, Overture Maps places
- Admin exports: raw annotations and consensus dataset (CSV / JSON)
Key engineering decisions
Consensus as a state machine
Each question collects a base number of independent answers, escalates to a higher target when it is dense or contested, then locks as consensus_reached or no_consensus. Locked questions are immutable so exports never drift.
Never leak the answer key
Candidate POIs sent to the browser omit true distances. Only the server sees them, and they are kept as an ML covariate rather than used for scoring.
Scoring that rewards quality
Players earn base participation points plus a retroactive bonus when their pick matches the final consensus, and a difficulty bonus on dense questions.
Safe account linking
The Google callback requires a verified email and refuses to auto-link onto an existing password account, which closes an account takeover path.
Results
- Live in production on Vercel, Render and Neon
- H3 dedup stops players from re-labeling cells they already answered
- Pytest suite, Alembic migrations and a documented dev log
What I would do next
- Active learning: route ambiguous questions to the most reliable players first
- Inter-annotator agreement metrics in the admin dashboard