Skip to main contentOverview
Launch uses OneSignal for push notifications and Twilio Verify for SMS OTP.
During onboarding, SMS OTP is optional and can be disabled via the feature
registry. When enabled, the app collects a phone number, sends an OTP via the
API, and verifies it before moving on.
Feature registry
OneSignal is registered as a feature module in
apps/mobile/features/one-signal/feature.ts and toggled via the oneSignal
flag in apps/mobile/features/feature-registry.tsx.
When this feature is disabled, the onboarding flow skips the phone and OTP
screens and continues directly to the push notification step.
How SMS OTP works
The onboarding screens call user endpoints on the API:
user.savePhoneNumber
user.sendPhoneOtp
user.verifyPhoneOtp
These endpoints live in apps/api/src/routers/user.ts and use the Twilio
client in apps/api/src/lib/twilio.ts to send and verify OTPs.
Required environment variables
Mobile:
API (Twilio Verify):
TWILIO_ACCOUNT_SID
TWILIO_AUTH_TOKEN
TWILIO_SERVICE_SID
Optional dev-only flag:
SKIP_TWILIO_OTP_VERIFICATION (useful for local testing when Twilio is not
configured)
Where it is used in the app
- Onboarding screens:
apps/mobile/app/onboarding/phone.tsx,
apps/mobile/app/onboarding/verify-otp.tsx
- Push permissions:
apps/mobile/app/onboarding/push-notifications.tsx
- Flow control:
apps/mobile/lib/hooks/useAppNavigation.ts