This is a submission for the GitHub Finish-Up-A-Thon Challenge
What I Built
MQuiz is a gamified mobile quiz app built to make learning, trivia, and exam-style practice more engaging.
The project started as an older quiz app idea, but it needed a serious rebuild to become something that could feel like a real mobile product. For this challenge, I revived MQuiz by moving it into a new Flutter app, rebuilding the experience with a cleaner structure, and connecting it to a modern backend.
The new MQuiz app is built around the idea that quizzes should feel more like a game. Instead of only answering questions, users can progress, earn rewards, manage lives, use boosters, compete with others, join leagues, enter contests, and track their performance.
The current version includes:
- Flutter mobile app built in a new
apps/mobile/project - NestJS API integration
- Firebase authentication
- Google sign-in
- Apple sign-in
- Phone OTP login
- Guest mode
- Profile setup flow
- Game-style home dashboard
- Category and subcategory quiz flow
- Lives system
- Coins system
- XP and stage progress
- Daily challenge card
- Booster system
- Booster store
- Countdown timer during quizzes
- Multiple-choice questions
- Fun & Learn question mode
- Guess the Word question mode
- Image-supported questions
- Quiz result screen
- Share result feature
- Mystery box reward trigger
- Progress map
- Leaderboard
- Profile screen
- Badges display
- Referral code and native share
- Coin history
- Paystack payment flow
- Apple in-app purchase setup
- Live battle mode with Firestore sync
- Battle result screen
- League list, detail, quiz, and leaderboard
- Contest list, detail, quiz, and result flow
- Sponsor banner support
- Active contest banner
- Clean Material 3 design system
- Light and dark theme support
The goal of MQuiz is to turn learning into a fun, competitive, and repeatable experience for students, quiz lovers, and casual learners.
Demo
APK Download: Download MQuiz APK
Demo Video: Watch MQuiz Demo
GitHub Repository: View Source Code
Screenshots:
The Comeback Story
MQuiz was not originally in the shape I wanted it to be.
The older version was based on an existing CodeCanyon-style app structure. It gave me a starting point, but it was not the clean, scalable, original product I wanted to submit or continue building long-term.
The old version had several limitations:
- The structure was not ideal for a full product rebuild
- The app did not fully represent the experience I wanted for users
- Some features were either incomplete or not connected properly
- The user experience did not feel modern enough
- The codebase needed a cleaner architecture
- The app needed a stronger game-like flow
- It was not ready as a primary mobile product for both Android and iOS
For the GitHub Finish-Up-A-Thon Challenge, I decided not to just polish the old app. I used the opportunity to properly revive MQuiz by rebuilding it as a new Flutter mobile app.
The new app now lives inside apps/mobile/, while the older lib/ app is being retired. The new Flutter app is now the primary delivery version for both Android and iOS.
That was the real comeback: MQuiz moved from an unfinished and older-style quiz app into a more complete, modern, game-like mobile experience.
What Changed
The biggest change was rebuilding the app around a cleaner product experience.
Instead of only having a basic quiz flow, I rebuilt MQuiz around the kind of features that make users come back:
- Lives
- Coins
- Boosters
- Streaks
- XP
- Stage progress
- Daily challenges
- Leagues
- Contests
- Leaderboards
- Battles
- Profile stats
- Badges
- Referrals
- Rewards
I also connected the app to backend endpoints so the experience can become more server-driven and scalable.
The new backend integration includes endpoints for:
- Lives
- Boosters
- Progress
- Payments
- Quiz data
- User profile
- Leaderboard
- Leagues
- Contests
- Battle flow
The mobile app now uses a more organized feature-based structure, including:
- Auth
- Home
- Quiz
- Progress Map
- Lives
- Boosters
- Battle
- Leaderboard
- Profile
- Store
- Leagues
- Contests
This made the project easier to maintain and easier to continue after the challenge.
Core Features
Authentication
MQuiz supports multiple ways for users to get started:
- Google sign-in
- Apple sign-in
- Phone OTP
- Guest mode
- First-time profile setup
This makes onboarding easier because users can choose the sign-in method that works best for them.
Game-Like Home Dashboard
The home screen was rebuilt to feel more like a mobile game dashboard.
It includes:
- Greeting header
- Coins counter
- Lives counter
- XP progress
- Stage label
- Category grid
- Daily challenge card
- Active contest banner
- Sponsor banner
- Battle call-to-action
The goal was to make the app feel exciting from the first screen.
Quiz Experience
The quiz feature supports different question experiences, including:
- Standard multiple choice
- Image-supported questions
- Fun & Learn mode
- Guess the Word mode
- Countdown timer
- Booster usage
- Result summary
- Score
- Accuracy
- Coins earned
- Share result option
The quiz experience is designed to be simple enough for casual users but structured enough to support future exam practice and competitive learning.
Lives and Boosters
To make the app more engaging, MQuiz includes a lives system and boosters.
Users can lose lives, restore lives, use coins, and access boosters during gameplay.
Boosters include features such as:
- Add more time
- Skip question
- 50/50 support
This makes the quiz experience more strategic and less flat.
Battle Mode
One of the biggest additions is live battle mode.
The battle feature uses Firestore sync so users can enter a competitive quiz experience with another player.
The battle flow includes:
- Find opponent screen
- Matchmaking state
- Live battle screen
- Real-time opponent progress
- Quit guard
- Auto-advance timer
- Battle result screen
- Win, lose, or draw result display
This feature helps MQuiz move beyond a normal quiz app into a more competitive game-based learning platform.
Leagues and Contests
MQuiz now supports leagues and contests.
The league feature includes:
- Active league list
- League detail screen
- Join league flow
- Daily league quiz
- League quiz result
- League leaderboard
The contest feature includes:
- Contest list
- Contest detail
- Prize banner
- Live contest status
- Contest quiz
- Contest result
These features are important because they give users a reason to return regularly and compete for progress.
Profile and Progress
The profile and progress features help users track their growth.
Users can view:
- Quiz stats
- Accuracy
- Streak
- Badges
- Referral code
- Coin history
- Stage progress
- Locked and unlocked stages
This helps turn quiz activity into a visible learning journey.
Store and Payments
MQuiz includes a store flow for coin packs and payments.
The app supports:
- Coin pack listing
- Paystack payment initialization
- Paystack verification
- Apple in-app purchase setup
- Server-authoritative payment verification
This creates a foundation for monetization while keeping payment handling more secure.
My Experience with GitHub Copilot
GitHub Copilot helped me move faster while reviving MQuiz.
Because this was not a small one-screen app, I had to work across many areas: Flutter UI, Cubit state management, API services, Firebase auth, Firestore battles, payment flows, routing, models, and feature-based architecture.
Copilot helped me most when I used it as a coding assistant for focused tasks instead of asking it to build the entire app at once.
I used GitHub Copilot to help with:
- Refactoring Flutter screens
- Creating reusable widgets
- Improving Cubit state flows
- Writing model classes
- Cleaning up API service methods
- Improving feature folder structure
- Debugging routing issues
- Building UI states for loading, success, and error flows
- Creating quiz interaction logic
- Improving battle flow structure
- Reducing repetitive code
- Reviewing implementation patterns
- Speeding up boilerplate work
Some of the most useful prompts were specific prompts such as:
- “Refactor this Flutter screen into smaller reusable widgets.”
- “Create a Cubit state structure for this feature.”
- “Help me clean this quiz flow so the timer and answer selection are easier to manage.”
- “Create a model class with Firestore serialization.”
- “Improve this UI so loading, empty, and error states are handled clearly.”
- “Help me structure this feature so it follows the same pattern as the rest of the app.”
Copilot helped me finish faster, but I still had to guide the product direction, review the code, test the flows, and make sure the app matched the MQuiz vision.
The main lesson was that Copilot is strongest when the developer already has a clear goal. It helped me move from unfinished work to a more complete product by speeding up the repetitive and structural parts of development.
Tech Stack
Mobile App
- Flutter
- Dart
- GoRouter
- Flutter Bloc / Cubit
- Equatable
- Dio
- Material 3
- SharedPreferences
- Share Plus
- URL Launcher
- In-App Purchase
Backend and Services
- NestJS API
- Firebase Authentication
- Firebase Firestore
- Paystack
- Apple In-App Purchase
- Firebase configuration for Android and iOS
Development Support
- GitHub
- GitHub Copilot
- Flutter Analyze
- Feature-based architecture
Quality and Status
The new Flutter app has been organized as the primary mobile delivery version.
Important progress includes:
- New Flutter project created
- Android and iOS bundle ID set to
com.togafrica.mquiz - Firebase files added for Android and iOS
- GoRouter configured
- API client connected to the NestJS backend
- Design system implemented
- App icon added
- Splash screen implemented
- Authentication screens implemented
- Home dashboard implemented
- Quiz flow implemented
- Lives, boosters, progress, leaderboard, profile, store, leagues, contests, and battle features implemented
- Firestore rules added for battle room access
- Flutter analysis completed with no issues found in the new code
Some remaining production tasks are still outside the scope of this challenge submission, such as final App Store assets, TestFlight testing, and final store submission preparation.
What I Learned
This project taught me that reviving a project is sometimes more valuable than starting a new one.
MQuiz already had a vision, but it needed better execution. The challenge pushed me to turn it into a cleaner, more scalable, and more complete mobile app.
I also learned that gamification is not just about adding points. It is about designing a reason for users to continue.
For MQuiz, features like lives, boosters, leagues, contests, battles, leaderboards, and progress maps make the quiz experience feel more alive.
The biggest technical lesson was the importance of structure. Once the app was separated into clear features, it became easier to build, debug, and improve.
What’s Next
Next, I plan to continue improving MQuiz with:
- Real device testing
- More automated tests
- Final app store assets
- Privacy policy page
- App Store Connect setup
- Google Play release preparation
- AI-powered question generation
- Wrong-answer explanations
- Exam prep mode for WAEC, JAMB, and NECO
- Audio question support
- Math question support
- More original illustrations and lifeline icons
- Stronger analytics
- School/classroom challenge mode
- More contest formats
- More league seasons
- Better reward balancing
MQuiz started as an unfinished quiz app, but it is now moving toward a full gamified learning and trivia platform.


Top comments (0)