Inspiration

Spot 50 started with a sheet of paper and a question: what if we could skip straight to playing?

I had seen the Find the Number Challenge on TikTok: numbers scattered across a page, someone calling one out, and a race to find it. One Sunday evening, a friend started writing the numbers 1–50 so we could play. Somewhere around number 30, I started thinking about turning it into a game on our phones.

The first version was a small web game for the two of us. RevenueCat Shipaton gave me the push to take it further: build the mobile apps, add online play, and introduce a purchase that could support development.

I wanted to preserve the feeling of the paper game: a number can be right in front of you and still seem to disappear as soon as someone else is racing you.

What it does

Find the number you are given and tap it. That simple mechanic becomes six ways to play:

  • Solo: Clear a board against the clock, choosing 50, 100, or 150 numbers.
  • Couch: Share one phone. One player searches while the other scribbles X’s, then swap roles.
  • Race: Both players search at the same time on one device, each chasing their own target.
  • Solo vs AI: Race a bot with four difficulty levels.
  • Daily Challenge: Take on the shared daily challenge, clear all fifty numbers, and build a streak.
  • Play Online: Invite a friend through a room code for server-refereed 1v1 matches with Elo rankings.

Offline modes work without an account. The visual design keeps the original paper-game character through graph-paper backgrounds, handwritten numbers, and ink-like colours.

How I built it

I built Spot 50 with React, TypeScript, and Zustand, then used Capacitor to bring the same core game to Android and iOS.

The board generator varies the size, position, and rotation of each number, with collision checks to keep the scattered layout usable. Seeded randomness makes the daily challenge reproducible and lets online players share a board seed.

A Node.js, Fastify, and SQLite backend handles accounts, online matches, and rankings. Players exchange live game updates over WebSockets, while the server validates moves and maintains match state. Apple and Google sign-in support the account features.

RevenueCat powers Spot 50 Pro, a one-time purchase that unlocks cosmetic pen-colour sets in the mobile app. I integrated offerings, purchases, restoration, and entitlement checks, and connected the RevenueCat identity to the signed-in player. A backend webhook records purchase events.

The purchase changes how the game looks; it does not change a player’s ability to win.

Challenges I ran into

Getting the game running on a phone was only part of shipping it. Store preparation brought a different set of problems:

  • Mobile authentication: Sign-in needed to leave the embedded WebView and return to the app through a deep link.
  • Android release signing: A release configuration fell back to a debug key when the upload-keystore configuration was missing, blocking the upload.
  • Review access: I needed to provide a physical-device recording and clear instructions for reaching the app’s features, including paid content.
  • Account deletion: I added both the in-app flow and the backend support during the review process.
  • Purchase setup: An inactive Paid Applications Agreement became another blocker during purchase review.

These issues were fixable, but discovering them across successive review rounds took more time than I expected.

Accomplishments I’m proud of

I turned a game we were preparing by hand into a playable web and mobile project, with six modes built around the same simple idea.

I am especially proud of completing the RevenueCat integration beyond the purchase button: restoring purchases, checking entitlements, connecting account identities, and recording backend events.

I also kept the original character of the game as its scope grew. It still feels like finding numbers on a page with a friend.

What I learned

A working app and a store-ready app are different milestones.

The purchase SDK was only one piece of the work. Authentication, signing, account deletion, agreements, and reviewer instructions all needed attention before the experience was ready to ship.

If I started again, I would prepare those pieces earlier and leave more time for the review cycle. I would also keep returning to the question that started the project: how quickly can someone get from opening the game to actually playing?

What’s next for Spot 50

Next, I want to build on Spot 50 Pro by exploring optional rewarded ads, giving players a choice to watch a video for a temporary cosmetic reward. The aim is to support development while keeping purchases and rewards separate from competitive results.

I also want to test branded versions for campaigns and events. The same “find the number” mechanic could become “find the product” or “spot the item,” with a customised board for a business or event. A first pilot would help me understand demand and pricing.

For the game itself, I’m planning optional Daily Challenge reminders and seasons for the online rankings. I want to learn what brings players back and make it easier for friends to keep playing together.

Play Spot 50 at www.spot50.com Download on Playstore

Built With

Share this project:

Updates

Submission history