Inspiration
I love Formula 1, but most quiz apps feel like something you open once, play for a few minutes, and forget. I wanted to build a smaller, more focused experience: one fresh quiz every day, a two-minute session, and a reason to come back tomorrow.
That idea became F1 Daily Quiz — an independent, unofficial daily game for Formula 1 fans. Instead of endless question packs, everyone receives the same quiz at the same time and competes through streaks, accuracy, and answer speed.
What it does
Every day, players can:
- complete a new Formula 1 quiz;
- build a streak by finishing consecutive quizzes;
- compare their results in national and global rankings;
- compete for the fastest time and highest accuracy;
- review their answers after completing the round;
- play in Polish or English.
The app is designed around a short daily ritual rather than long gaming sessions. A quiz takes only a few minutes, but streaks and seasonal leaderboards give players a reason to return.
How I built it
I built the mobile app with React Native and Expo, using TypeScript and Expo Router. The backend runs on Supabase, with PostgreSQL handling player profiles, quiz content, attempts, streaks, rankings, and entitlements.
The most important game rules are enforced on the server. Questions are delivered without revealing the correct answer, each response is validated separately, and answer time is measured server-side. This keeps the speed rankings meaningful and prevents the answer key from being extracted from the app.
Quiz content and translations are stored separately, so new languages and daily question sets can be added without publishing a new version of the app.
For monetization, I integrated RevenueCat to manage a one-time lifetime purchase rather than a subscription. RevenueCat handles the paywall, purchase restoration, and access across devices, while the server records the player’s entitlement. The monetization is designed to support the game without turning the daily quiz into a collection of interruptions.
Challenges
One of the biggest challenges was making a simple quiz fair.
If the correct answers were shipped to the phone in advance, they could be discovered before playing. If timing were measured only on the device, the speed leaderboard could be manipulated. Moving these responsibilities to the backend added complexity, but it made the competition trustworthy.
Another challenge was defining a “daily” game for players in different time zones. F1 Daily Quiz releases one global quiz at midnight UTC, so everyone competes in the same round. Notifications still respect each player’s local time, including regions where an evening reminder would arrive too close to the global reset.
Purchases also required careful identity handling. Players can start immediately with an anonymous account and secure it later with email. RevenueCat therefore has to remain connected to the same player UUID throughout that journey so purchases and progress are never separated from the account.
Finally, I had to resist adding too much. The product works because it is focused: one quiz, once a day, with clear results and meaningful rankings.
What I learned
I learned that a small daily product can require more careful backend design than a much larger-looking app. Streaks, time zones, rankings, retries, account recovery, and purchase restoration all create edge cases that are invisible when everything works.
I also learned to treat monetization as part of the product experience rather than something added at the end. A clear one-time purchase fits this app better than a recurring subscription, and RevenueCat allowed me to manage that experience without spreading store-specific purchase logic throughout the codebase.
Most importantly, I learned that shipping means making hundreds of small decisions about what not to build. Keeping each session short and understandable became the rule that guided the entire project.
What’s next
The next step is to grow the first community of players, publish new quizzes consistently, and use their feedback to improve question quality, rankings, and the purchase experience. I also want to expand the game carefully without losing the simple daily ritual at its core.
Built With
- expo.io
- postgresql
- react-native
- revenuecat
- supabase
- typescript
Log in or sign up for Devpost to join the conversation.