Third-party services
Every external provider the platform depends on, and whether it's split between testing and production or deliberately shared.
Payments
| Provider | Used for | Testing | Production |
|---|---|---|---|
| Razorpay | Wallet recharge (UPI/cards/netbanking) | Test mode | still test mode — live keys pending |
| Cashfree | Wallet recharge (third provider, added 2026-09-23) | Sandbox | still sandbox — live keys pending |
| RevenueCat / IAP | In-app purchases (Play Store/App Store) | Test Store key (build-time dart-define) | Real store IAP — no separate URL, store-managed |
Admin selects exactly one active recharge provider at a time (App Config → Payments) — there's no in-app "choose your gateway" screen. Whichever provider is live, real money doesn't move on production until its keys stop being test/sandbox — see Environments.
Identity & push
| Provider | Used for | Split? |
|---|---|---|
Firebase (User project vibeconnect-7c601) | Phone OTP auth, push notifications, Analytics, Crashlytics | Same project shared across testing/production; each build flavor is its own app inside it — see App identifiers |
Firebase (Host project hostvibeconnect) | Same, for the Host App | Same pattern, separate project (always has been, independent of staging/prod) |
| MSG91 | Alternate OTP provider, selectable per-app from Admin Panel | Shared |
A separate Firebase project per environment was considered and explicitly declined (2026-09-24) to keep the setup simple — this is a deliberate choice, not an oversight.
Calls
| Provider | Role | Split? |
|---|---|---|
| Agora | Primary call provider (audio + video) | Shared App ID/certificate |
| Daily Meet WebRTC (self-hosted) | Alternate call provider, backend picks per call | Shared coturn/Cloudflare TURN config |
| Cloudflare TURN | Preferred TURN path for the self-hosted WebRTC provider | Shared |
| GetStream Video | Video calls only, until the self-hosted WebRTC video path is fixed (audio still uses webrtc/Agora) | Shared |
The backend assigns Agora or WebRTC per call and locks it — an in-progress call never switches provider mid-call even if Admin changes the default.
Marketing / analytics
| Provider | Status |
|---|---|
| Meta (Facebook) App Events | One shared Meta app ("Dailymeet", App ID 1402598491976670) for both User and Host apps — Host events are separated by an app param, Host sign-up is a custom host_registered event, never counted as a standard registration. App is currently In development (not Live) — real users' events aren't counted until it's published; Privacy Policy URL/icon/category still need to be filled in on the Meta side. Android/iOS platforms aren't registered yet (Meta verifies the package name against a public Play listing, which doesn't exist yet on Internal testing). |
| Firebase Analytics + Crashlytics | Enabled in both Firebase projects, both apps |
No testing/production split applies to Meta — it's a client-side SDK config, not tied to the backend environment split.
What's genuinely pending
- Razorpay + Cashfree live keys for
production - Meta app: publish to Live, fill in Privacy Policy URL/icon/category, register Android/iOS platforms, decide iOS App Tracking Transparency prompt (not implemented) and Advertiser ID on/off (SDK default: on)
- Play Console Data safety: declare advertising ID / sharing with Meta and Firebase once Meta goes live