Snake n Friends
My approach to a mobile game where every score can be checked.
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
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
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
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
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
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.






