Work / Hyperlocal activity app / 2025

Looper

A social app for finding people nearby who want to do the same thing right now, with real-time discovery and chat.

Role
Mobile engineer. Auth, typed API layer
Status
MVP, team project
Stack
React Native, Expo, Firebase Auth and Chat, React Query, OpenAPI
Link
Looper-App on GitHub

The boundary

Stays inside

  • Firebase auth session
  • Server-side activity data
  • Env config, EXPO_PUBLIC only where public

Allowed to cross

  • Typed requests generated from the OpenAPI spec
  • Chat messages through Firebase

The API contract is generated, not hand written.

Context

Location social apps live or die on trust: who sees where you are, and whether the app talks to the backend it thinks it does.

Idea

Generate the client types from the OpenAPI contract so every request is checked at compile time, and keep only deliberately public values in the bundle.

Craft

  1. Feature folders for auth, feed, activities, chat and profile.
  2. Typed fetch clients and React Query hooks over generated types.
  3. Firebase authentication screen as the first gate.

Threat model

AssetThreatControl
SessionsUnauthenticated accessFirebase auth gate before any feed
Config secretsShipping in the bundleOnly EXPO_PUBLIC values are client side
API driftClient calling stale endpointsCodegen from the spec

Outcome

An MVP scaffold with auth merged and the contract-first client in place, built with the Looper team.