01 / 06 Mobile Application

RunSphere: privacy-first running

An outdoor running app that gamifies movement through adaptive quests and H3 territory-claim seasons, entirely pace-neutral. Built as a pnpm/Turbo monorepo.

RunSphere App
RunSphere Map
RunSphere Territories

Pace-Neutral Gamification

RunSphere completely reimagines outdoor movement gamification by removing pace as a performance signal. The core philosophy: outdoor movement should feel exploratory, not competitive in a harmful way.

Instead of measuring who runs fastest, the app uses H3 hexagonal cell grids for territory-claim seasons, scoring runners based on their best contiguous 60 minutes per day. This ensures a level playing field, with newcomer divisions and winner concentration guardrails limiting top players' dominance.

  • ✦Adaptive Quests: Server-generated loops (1-10km) adapting to load, time of day, and completion history.
  • ✦Territory Seasons (Turf): Optional 6-8 week seasons resetting weekly with immutable snapshots.
  • ✦No Pace Pressures: Route suggestions never adapt by demanding a faster pace.

Turbo Monorepo Infrastructure

The project is orchestrated using Turbo 2 and pnpm across several packages. The mobile client leverages Expo (React Native) and MapLibre (OpenGL native variant on Android) for fluid, highly responsive map rendering.

The backend is powered by a blazing fast Fastify 5 API server running on Node 22, backed by PostgreSQL 18 + PostGIS managed locally via Docker Compose. Data contracts are strictly typed using TypeBox across the monorepo.

  • ✦Activity Ingestion: Chunked idempotent uploads with offline queuing and GPS sampling.
  • ✦Encrypted Storage: expo-sqlite with SQLCipher for local database caching.
  • ✦Custom ORM: Independent @runsphere/db package handling PostGIS interactions.

Privacy-First Design

Targeting adults (18+) in the Mumbai Metropolitan Region, privacy is an architectural guarantee. The server actively enforces a 200 m privacy blur on all saved routes.

Safety contacts use delayed and coarse location sharing with auto-expiry. Raw coordinates are never exposed in analytics or logs—only derived counters are kept. Nominatim geocoding is strictly proxied server-side to prevent exposing client IPs.

  • ✦200m Privacy Blurs: Server-side route trimming masks exact start/end locations.
  • ✦Coordinate Scrubbing: Crash reports and analytics contain absolutely no raw location data.
  • ✦GPS Quality Gates: Validates accuracy (≤50 m) and rejects spoofing (≤25 km/h limit).
Expo React Native Fastify PostGIS MapLibre Turbo TypeBox Docker