Customize

Feature flags

Turn product features on or off from a single config file.

All product switches live in src/config/features.ts. Types are in src/config/features.types.ts — keep them in sync if you add a flag.

export const FEATURES = {
  googleSignIn: true,
  appleSignIn: true,
  revenueCat: true,
  airbridge: true,
  mixpanel: true,
  oneSignal: true,
  admob: false,
  onboarding: true,
  personalization: true,
  emailVerification: false,
  guestMode: true,
  autoGuestMode: false,
  themeMode: "auto", // "auto" | "light" | "dark"
  languages: { en: { ... }, tr: { ... } },
};

Gate new UI with these flags. Do not hardcode “is this service on?” elsewhere.

FlagEffect
googleSignInGoogle button on login/signup
appleSignInApple button (iOS)
guestModeAnonymous Firebase sign-in
autoGuestModeSkip the auth stack; sign in anonymously after onboarding
emailVerificationSend a verification email after signup

Product SDKs

FlagEffect
revenueCatPurchases, paywalls, subscription context
oneSignalPush init and permission prompt
mixpanelProduct analytics
airbridgeAttribution and tracking links
admobAds (src/lib/admob.ts) — off by default

Each SDK also needs its env var in .env.local. A flag without a key logs an error and no-ops.

First-run UX

FlagEffect
onboardingIntro slides before auth
personalizationSurvey after onboarding

Theme

  • auto — user can toggle light/dark
  • light / dark — forced, no toggle

Languages

languages is the source of truth. The first key is the default.

To add a language:

  1. Add an entry in FEATURES.languages
  2. Add src/i18n/locales/<code>.json (copy en.json)
  3. Add src/i18n/native/<code>.json
  4. Register it in src/i18n/config.ts and in app.json locales / CFBundleLocalizations

For new UI strings, add English in en.json first, then the other locale files.

On this page