Getting started
Overview
What the Starter Kit is, the stack it ships with, and how the project is laid out.
The Starter Kit is a complete Expo app, not a UI gallery. Auth, paywalls, push, analytics, and onboarding are already wired. You rename it, plug in your keys, and ship.
Stack
| Layer | What we use |
|---|---|
| App | Expo ~55, React Native 0.83, TypeScript, Expo Router |
| UI | HeroUI Native, Uniwind (Tailwind v4), Reanimated 4 |
| Auth & data | Firebase Auth, Firestore, Cloud Functions |
| Payments | RevenueCat (react-native-purchases + paywalls) |
| Push | OneSignal |
| Analytics | Mixpanel, Firebase Analytics, Crashlytics |
| Attribution | Airbridge |
| Ads | Google AdMob (off by default) |
Native config lives in app.json. This is an Expo project — prefer app.json / plugins over editing ios/ and android/ by hand.
Project layout
src/
├── app/ # Expo Router screens
│ ├── (auth)/ # login, signup, forgot password
│ ├── (tabs)/ # home, ask-ai, profile
│ ├── index.tsx # onboarding → personalization → auth gate
│ └── _layout.tsx # providers
├── components/
├── config/ # features.ts, firebase.ts, personalization.ts
├── contexts/ # auth, theme, language, subscription, onboarding
├── i18n/
│ ├── locales/ # in-app UI strings
│ └── native/ # iOS/Android display name and permission text
├── lib/ # RevenueCat, OneSignal, Mixpanel, Airbridge, AdMob
└── hooks/First-launch flow
- Onboarding slides (optional,
FEATURES.onboarding) - Personalization survey (optional,
FEATURES.personalization) - Auth (email, Google, Apple, guest) — or skip it with
autoGuestMode - Main tabs
Every product surface is gated from src/config/features.ts. Turn a flag off and the related UI and SDK init are skipped.