Send a message
Overview
Classic snake, rebuilt for head-to-head play
The Snake n Friends pixel logo beside three phone screens: the sector map, a game grid with the snake and a core, and a head-to-head arena with game history

Snake n Friends

My approach to a mobile game where every score can be checked.

See how it works

I designed and built Snake n Friends, a mobile snake game with a 60-sector campaign and ranked 1v1 arenas. Explore my approach to a deterministic engine the server can replay, head-to-head series, and rewards that are granted exactly once.

  • Expo
  • React Native
  • TypeScript
  • React Native Skia
  • Reanimated
  • Expo Router
  • Firebase Auth & Firestore
  • Cloud Functions
  • RevenueCat
  • App Store Connect API
  • react-i18next
  • Sentry
  • EAS Build

My contribution and decisions

I designed and built the game end to end: the engine and renderer, the campaign and arena, the Cloud Functions behind them, purchases, notifications and the admin tools for the store.

The central decision is a deterministic engine. Because a run is just a seed and a list of turns, the server can replay it to settle scores and rating changes, and the same tests that pin the engine down protect both the app and the backend.

What it does

The grid

A game you can check.

The engine is a seeded, tick-based simulation: a run is its seed plus the turns you made. Firewalls flash a warning before they go live. Play a round and watch it get replayed. Try it.

  • The same seed always produces the same grid
  • The server re-runs every run before the score counts
  • Drawn on a Skia canvas, glows and all
The sector map for season 1: Grid Engine cleared with three stars, Byte Lane highlighted as the current sector, and Circuit Path, Node Zero and Pulse Gate locked
Campaign

Sixty sectors, one at a time.

The campaign climbs through easy, medium, hard and expert tiers. Each sector has its own firewall layout, earns up to three stars, and unlocks the next.

  • Firewalls, glitches and decoy cores raise the stakes
  • Stars and best scores saved to your account
  • Seasons with a live countdown
An arena between two players: 2 wins to 3, scores 7 to 11, a 32-point rating gain, a Start game button for game 6, and the history of games 1 to 5
Arena

Head to head, a game at a time.

Challenge a friend with an invite code or get matched by rank, then play a series of games in the same arena. Ranked games move your skill rating from Bronze up to Iridescent and the Top 250.

  • Wins, score and rating change for both players
  • Ranked and casual games in one series
  • Matchmaking within your rank band
The home screen: player name and sector, a 6 of 180 star count, the pixel logo, Rewards and Challenges buttons, and a large Play button above the Home, Sectors, Arena and Store tabs
Friends & rewards

Reasons to come back tomorrow.

Daily rewards and challenges sit one tap from Play. Playing a friend every day builds a streak with milestone rewards, and calling cards, themes and power-ups fill out your loadout.

  • Friend streaks with milestone rewards
  • Calling cards on weekly, monthly and seasonal rotation
  • In-app purchases granted on the server, once
FAQ

Why it’s built this way.

How do you keep scores honest?

The game engine is deterministic. The app sends a run’s seed and inputs, and a Cloud Function replays them on the same engine. The score that counts is the one the server gets.

How do arena games work?

Two players share an arena and play a series of games in it. Each game is settled on the server, and ranked games adjust both players’ skill rating with an Elo-style formula.

Why Skia instead of plain React Native views?

The grid redraws every tick with glows, particles and shaders. Skia draws it on a GPU-backed canvas, and Reanimated runs the animation off the JavaScript thread, so effects don’t wait on game logic.

How are purchases handled?

RevenueCat handles the store. The app asks a Cloud Function to grant the item, and the store’s webhook is a backstop; both write to one ledger, so a purchase is never granted twice.

Which languages does it support?

Nine: English, Spanish, French, German, Portuguese, Japanese, Korean, Chinese and Arabic.

Who built it?

Nicholas Howell, designed and built end to end. It’s how I’d build your product, too.

Have an app that needs finishing?

Next productCoverly

More of my work and thinking

Explore another product here, or get in touch about the work.

Talk to me about the work →