Hindi-first streaming app for India, built with React Native. The mobile client renders a curated catalog of titles mapped to legally embeddable YouTube videos. Backend (Laravel CMS + REST API) lives in a separate repo:
- React Native CLI (JavaScript, no Expo)
- Redux Toolkit
- Firebase Auth (Google + Apple sign-in) → Laravel Sanctum bearer
react-native-youtube-iframefor playbackreact-native-mmkvfor local persistence- AdMob via
react-native-google-mobile-ads - Lucide icons
- Node.js >= 22
- React Native CLI environment (guide)
- Xcode + CocoaPods (iOS)
- Android Studio (Android)
- A running Wavee backend (locally or hosted)
- A Firebase project (Google + Apple sign-in enabled)
- Optional: AdMob account (the app falls back to TestIds if you skip this)
git clone https://github.com/<you>/Wavee.git
cd Wavee
npm install --legacy-peer-depsDrop your Firebase project files into the repo (both are gitignored):
# Android
cp android/app/google-services.json.example android/app/google-services.json
# Then replace contents with the real file from Firebase Console
# (Project Settings → Your apps → Android → google-services.json).
# iOS
cp ios/WaveeApp/GoogleService-Info.plist.example ios/WaveeApp/GoogleService-Info.plist
# Then replace contents with the real file from Firebase Console
# (Project Settings → Your apps → iOS → GoogleService-Info.plist).Then fill in three constants in src/services/firebaseAuth.js:
APPLE_SERVICES_ID— Apple "Services ID" (for Sign in with Apple on Android)APPLE_REDIRECT_URI—https://<your-firebase-project-id>.firebaseapp.com/__/auth/handlerGOOGLE_WEB_CLIENT_ID— OAuth 2.0 Web client id from Google Cloud console
Edit src/api/config/buildConfig.js so DOMAINS.local points at your dev backend (use your LAN IP, not localhost, when running on a physical device) and DOMAINS.live points at your production backend.
If you skip this step, the app uses Google's public TestIds in every build (placeholder ads, no earnings).
cp src/config/adConfig.local.example.js src/config/adConfig.local.js
# Edit adConfig.local.js with your real ad unit ids from
# AdMob Console → Ad units. The .local file is gitignored.cd ios && bundle install && bundle exec pod install && cd ..# Metro
npm start
# iOS
npm run ios
# Android
npm run androidsrc/
api/ — HTTP client, endpoints, auth headers, env config
components/ — Shared UI (home rows, posters, action bars, ad banner)
config/ — Ad unit ids
navigation/ — Stack + bottom-tabs root
screens/ — Login, Home, Discover, Watchlist, Profile, Detail, WebView
services/ — Firebase auth, MMKV storage
specs/ — TurboModule JS specs (codegen)
store/ — Redux slices
utils/ — Theme, dayjs helpers, dimensions
- Font: Inter
- Primary:
#aaffdc - Background:
#0e0e0e - Surface tones:
#131313→#191919→#1f1f1f→#262626 - Icons: Lucide (stroke width 1.5)
- Tonal separation, no borders
MIT — see LICENSE.