A feature-rich learning app built with Expo + React Native. This repository contains the mobile client for CheFu Academy (Android, iOS and Web via Expo). It integrates Firebase, Ads, payments, and rich media playback.
Quick summary
- Tech: Expo, React Native, TypeScript, Firebase, Sentry
- Targets: Android, iOS, web
- Structure: UI components under
component/, screens underapp/, native android config underandroid/.
Key features
- Content browsing: courses, chapters, videos, quizzes
- Offline downloads and playback
- Authentication (Firebase + Google Sign-In)
- Push notifications and background handlers
- Subscriptions and billing flows
- In-app sharing and deep links
Repository layout (high level)
app/: Expo Router application entry and screenscomponent/: reusable UI componentsassets/: images, fonts, animationsandroid/: native Android project and Gradle settingsapi/,services/,helpers/: backend integration and utilitiesconfig/andconstant/: app configuration and constants
Prerequisites
- Node.js (16+ recommended)
- Yarn or npm
- Expo CLI:
npm install -g expo-cli(optional; project usesnpx expo) - Android Studio (for
expo run:android) or Xcode for iOS builds
Environment & configuration
- Add or verify the following files are present and configured for your environment:
google-services.json(Android Firebase config)key.json(service keys used by the app)config/firebaseConfig.tsorconfig/firebaseConfig.js(client Firebase config)
- Sensitive files should be kept out of source control. See
.gitignoreand your secret manager.
Run from the project root:
npm install
# or
yarn install- Start development client:
npm run start(runsnpx expo --dev-client) - Run on Android:
npm run android(runsexpo run:android) - Run on iOS:
npm run ios(runsexpo run:ios) - Run web:
npm run web(runsexpo start --web) - Reset project (custom):
npm run reset-project - Lint:
npm run lint(runsexpo lint)
- The project uses the Expo Development Client for native modules (
npx expo --dev-client). - Native dependencies (Firebase modules, Google mobile ads, notifee, etc.) require a native build. Use
npm run android/npm run iosfor proper native linking. - If adding native packages, update
android/and rebuild the dev client.
- Place
google-services.jsoninandroid/app/(already present in repo for convenience). - Check
android/gradle.propertiesandandroid/build.gradleforSentryand build configs.
Use Expo's build services or native tooling:
# For managed/expo-updates flows, follow Expo docs for building EAS builds
npx eas build --platform android
npx eas build --platform ios
# Or build locally with native tools after generating a release bundle
npm run android
# then build signed APK/AAB via Android Studio- Lint:
npm run lint - There are no automated tests included in the repository; add unit/e2e tests as needed.
- App entry & routes: app/index.tsx
- Main config: package.json
- Android native config: android/
- Firebase config: config/firebaseConfig.ts
- If native modules fail to load in the dev client, rebuild the dev client after adding the module:
npx expo run:android- If you hit Metro cache problems, clear caches and reinstall:
rm -rf node_modules && npm install
npx expo start -c- Fork, create a branch, and open a pull request with a clear description.
- Keep changes focused and add or update documentation for any public API or behavior change.
For questions about the codebase or architecture, open an issue or contact the maintainers listed in the repository settings.
This repository does not include a license file; add one (e.g., MIT) if you plan to open-source the project.
Generated README for developer onboarding and quick reference.