Mobile Game2025-2026

Giving a Multiplayer Game Its First Opponent

A head-to-head quiz game is only fun if somebody is on the other side. Before launch nobody is, so the first players tap Play, wait, match with nothing, and never come back.

Client: Quizzy
Giving a Multiplayer Game Its First Opponent screenshot
iOS, Android, web
Platforms
10 months
Build Span
Acquired
Outcome

The Challenge

Real-time multiplayer has a cold start problem that has nothing to do with engineering skill and everything to do with arithmetic. The game is built around two people answering the same seven questions against each other, which is a good format and completely dependent on a second person existing. Before launch there is no second person. So the very first players, the ones you can least afford to lose, tap Play, watch a matchmaking spinner, get nothing, and form a permanent opinion that the game is dead. Every new multiplayer product faces this, and most of them lose the users who would have been their early advocates.

What We Built

We built an opponent that is always there. Rather than bolting on a single player mode, which admits the game is empty, the bot joins the same Firestore game room a human would, answers through the same fields, and takes realistic time to do it. From the data model down, a bot match and a human match are the same match. Its accuracy is a tunable number rather than perfect play, so it can lose. Around that sat the rest of the product: apps for iOS, Android and web from one codebase, a CMS for moderating topics and questions, and an AI generation pipeline to build a question bank large enough that players stopped seeing repeats.

Decisions Worth Explaining

The bot plays through the real game path

It would have been simpler to fake a match in the client. Routing the bot through the same game room documents means matchmaking, scoring, results and rematch logic all have exactly one implementation. There is no second code path that quietly rots because nobody is testing it.

An opponent that can lose, and says what it is

Bot accuracy is a parameter, defaulted to answering correctly about half the time, with human-scale delays before each answer. An opponent that never loses is demoralising and one that always loses is obvious. The tunable middle is what makes a match worth playing. Notably it is never disguised: the scoreboard names the opponent as Bot, during the match and on the results screen. The point was to guarantee a game, not to fake a person.

Bots had to be cleaned out of the stats

The honest cost of the approach. Because bot matches are real matches, bot users accumulate real records, which then pollute leaderboards and player statistics. We wrote tooling to strip them out. Worth knowing before anyone copies the pattern.

Three mobile stacks before committing

React Native with Expo and an Ionic build were both taken far enough to judge properly before we settled on SvelteKit with Capacitor. That kept one language and one component model across the app, the CMS and the marketing site, which matters more than framework preference when the same small team maintains all three.

Generated questions, with a human gate

A quiz app needs thousands of questions or players see repeats within a week. Generating them with Gemini solved the volume problem and created an accuracy one, so the pipeline batches to JSON, removes duplicates, and holds everything for review in the CMS before it can reach a player.

The Result

A complete cross-platform game with a moderation backend and a content pipeline, built over ten months. The technology and the question database were sold to a company we are not yet able to name. What we can say is that they understood immediately what the platform was and who it was for, which is not something every acquisition gets right, and we are glad it landed where it did. We think the trivia space will hear more about this before long.

Under the Hood

SvelteKit and Capacitor for the app, Svelte CMS for topic and question moderation, Firebase Functions and Firestore for the game backend, and a Gemini-based generation pipeline with deduplication and a review step before anything reached players.

Technology Stack

SvelteKitCapacitorFirebaseFirestoreGemini

Want Similar Results?

Let's discuss how we can help solve your technical challenges.