Splitty is an Expo and React Native app targeting Android and iOS. It uses TypeScript and Expo Router, with a prepared environment contract for a future Supabase backend.
Campaign and daily shapes are selected from an offline catalogue covering all 345 categories in the
Quick, Draw! Dataset using versioned seeds in
src/lib/levels.ts. Only the closed polygon following each drawing’s outermost border is displayed
and used for area measurement. The 1,000 campaign levels are assigned by a deterministic shuffle
without replacement, so categories can recur but Quick, Draw! contribution IDs cannot. Rebuild the
bundled catalogue with npm run quickdraw:build.
The Quick, Draw! source drawings are provided by Google under the Creative Commons Attribution 4.0 license. The generated catalogue retains each contribution’s original dataset key ID.
npm install
npm start
The default start command targets an Expo development client, which supports every native module
used by Splitty. From the Expo terminal, press a for Android, i for iOS (macOS only), or scan
the QR code with a previously installed development build. You can use Expo Go when its installed
version supports this project’s SDK by running npm run start:go.
You can also use the platform scripts directly:
npm run android
npm run ios
npm run web
src/
app/ Expo Router screens and layouts
assets/ Icons, splash screens, and other static media
app.config.js Shared Android, iOS, and Expo configuration
eas.json Preview and production cloud-build profiles
.env.example Future client-side environment variables
The native android/ and ios/ directories are intentionally not committed. Expo generates them
from app.config.js when a native build needs them.
npm run typecheck
npm run lint
npm run doctor
When the Supabase project exists:
.env.example to .env and fill in the project URL and publishable key.Install the Expo-compatible client dependencies:
npx expo install @supabase/supabase-js react-native-url-polyfill expo-sqlite
src/lib/supabase.ts and initialize the client with persistent auth storage.Never put a Supabase secret key or legacy service_role key in an EXPO_PUBLIC_ variable. Values
with that prefix are included in the client app and are visible to users.
Install/login to EAS CLI, link this repository to an Expo project, then build either platform:
npx eas-cli@latest login
npx eas-cli@latest build:configure
npx eas-cli@latest build --platform android --profile development
npx eas-cli@latest build --platform ios --profile development
npx eas-cli@latest build --platform android --profile preview
npx eas-cli@latest build --platform ios --profile preview
Use the production profile when you are ready to produce store binaries. Before the first release,
replace the placeholder com.sachakefif.splitty Android package and iOS bundle identifier in app.config.js
if that identifier is not owned by your team, and replace the generated placeholder icon and splash
assets with final Splitty artwork.