A triathlon training app — Runna, but for triathlons.
- Node.js 18+
- Xcode (for iOS builds)
- A Supabase project with the schema applied
-
Install dependencies
npm install
-
Configure environment variables
Copy
.env.exampleto.envand fill in your Supabase credentials:cp .env.example .env
EXPO_PUBLIC_SUPABASE_URL=https://your-project.supabase.co EXPO_PUBLIC_SUPABASE_ANON_KEY=your-anon-key -
Set up the database
Run the migrations against your Supabase project:
supabase link --project-ref <your-project-ref> supabase db push
Google OAuth uses the tria:// custom URL scheme for the redirect, which only works in a native build — not Expo Go.
npx expo run:iosThis installs a development build directly on your device or simulator. Re-run this command whenever native dependencies change.
Once the native build is installed, you only need to restart the bundler for JS changes:
npx expo startThen press i to open in the iOS simulator, or scan the QR code to open on your device.
Note: Expo Go does not support Google Sign-In. Always use the development build.
After any schema changes, regenerate types/database.ts:
supabase gen types typescript --linked > types/database.tssupabase migration new <migration-name> # create a new migration
supabase db push # push migrations to remote
supabase db pull # pull remote schema changes- Framework: React Native + Expo (SDK 54) with expo-router
- UI: react-native-paper (Material Design 3)
- State: Zustand + TanStack Query
- Backend: Supabase (auth, database, storage)
- Auth: Google OAuth via PKCE + expo-web-browser