Inspiration

This project idea originally spawned from the IGN game https://www.ign.com/20-questions. The game is now somewhat broken, so I had figured I should try to rebuild it with support for free tier users, so that my friends can play it.

What it does

I've built 2 20-questions style games as part of an online web arcade. The first game is akinator-style 20 questions game where the AI must guess a game you're thinking of. The second is the reverse, where there is a daily game which you must guess by only asking 20 questions. The questions refresh daily, and there is support for sharing and streaks.

How we built it

The project was built with a full-stack architecture. The frontend is a web application, providing the user interface for the game. The backend is a Node.js server that acts as the core logic engine. I used Firestore as the primary database to store the list of games and manage the game state.

A key part of the implementation was setting up strict and secure Firestore security rules to prevent any direct client-side access. I configured the rules to allow read/write operations only from the backend, which is authenticated via the Firebase Admin SDK. This ensures that the data is protected and that game integrity is maintained. The backend is responsible for serving the daily game, processing the user's answers, and validating their final guess, making it a secure and scalable system.

Challenges we ran into

One of the main challenges was architecting the Firestore security rules. Initially, I considered more complex, fine-grained rules, but I quickly realized that the most secure and scalable approach for this specific application was to lock down the database entirely from the client and centralize all data operations through a trusted backend. This required a fundamental shift in how the application flow was designed, ensuring that every user interaction—from asking a question to making a guess—was routed through the server.

Another challenge was difficulty. I found it exceedingly important that a user must win most games for them to come back day after day, so we needed to ensure that the games weren't too obscure.

Accomplishments that we're proud of

The art for this app is all hand created in aseprite. This was my first time ever creating art, let alone for a game.

What we learned

I learned all about OAuth authentication, using the gemini API and libraries like Zod, and how to do some digital art!

What's next for QuizBot 9000's Arcade

I may create some more games underneath the domain that are video-game themed. I might also try to partner up with sites like Howlongtobeat.com who have their own dedicated video game API.

Built With

Share this project:

Updates