A Flutter application that delivers random content — random numbers, random dog images/videos, and random cat images — with Firebase-powered authentication and hosting.
- 🔢 Random Number — generate a random number on demand
- 🐶 Random Dog — fetch a random dog image or video
- 🐱 Random Cat — fetch a random cat image
- 🔐 Authentication — Google Sign-In via Firebase Auth
- 🌐 Cross-platform — runs on Android, iOS, and the web
| Layer | Technology |
|---|---|
| UI Framework | Flutter / Dart |
| Backend / Auth | Firebase (Core, Auth, Firestore, Analytics, Remote Config) |
| Sign-In | Google Sign-In |
| Networking | http |
| Reactive state | RxDart |
| Video playback | video_player |
| Localization | Flutter Localizations (ARB files) |
| CI / Hosting | GitHub Actions + Firebase Hosting |
- Flutter SDK (Dart SDK
>=3.1.2 <4.0.0) - A Firebase project with Authentication (Google provider), Firestore, Analytics, and Hosting enabled
# Install dependencies
flutter pub get
# Generate JSON serialization code
dart run build_runner build --delete-conflicting-outputs
# Run the app (choose a target device)
flutter runflutter testlib/
├── main.dart # App entry point
├── firebase_options.dart # Firebase configuration
└── src/
├── app.dart # Root widget & routing
├── auth/ # Authentication (Google Sign-In)
├── settings/ # Theme & user preferences
├── random_number/ # Random number feature
├── random_dog/ # Random dog image/video feature
├── random_cat/ # Random cat image feature
├── random_selection/ # Home list & shared selection model
├── video_player/ # Video player component
└── localization/ # ARB localization files
Localized strings live in lib/src/localization/. To add a new language, create an ARB file for that locale and refer to the Flutter internationalization guide.
Pull requests and merges to main are automatically deployed to Firebase Hosting via GitHub Actions.
Releases are isolated to dedicated release/<version> branches (e.g. release/1.0.0). Pushing to a release branch triggers a separate CI workflow that builds and deploys the app to the Firebase Hosting live channel, keeping production releases independent from day-to-day main branch activity.
Creating a release:
# Create and push a release branch (replace x.y.z with the version number)
git checkout -b release/1.0.0
git push origin release/1.0.0
# → triggers the "Deploy to Firebase Hosting on release" workflow
# → builds and deploys to the Firebase Hosting live channelWorkflow summary:
| Event | Branch | Deploys to |
|---|---|---|
| Merge / push | main |
Firebase Hosting live |
| Push | release/** |
Firebase Hosting live |
| Pull request | any | Firebase Hosting preview channel |