Skip to content
← All work

01 · Personal · Game

Tortuga

A real-time multiplayer strategy game played on a hexagonal board: hop, capture and resurrect turtles against friends in live lobbies, or take on three levels of AI.

Role
Designer & developer
Client
Personal project
Timeframe
2025 — ongoing

Overview

The story

Tortuga is a two-player strategy game fought out on a hexagonal board. Each player commands a squad of turtles racing to land one on the tiki goal hex on the far side — wiping out the enemy team wins too.

The movement system is where the strategy lives: turtles only move by hopping over an adjacent turtle into the empty hex beyond. Hop an opponent and it flips belly-up — dead, but not gone, because hopping over a dead turtle resurrects it onto whichever team you choose. Hops chain, with one catch: every live turtle you cross in a single chain must belong to the same team, while dead turtles chain freely.

Under the hood it's a TypeScript monorepo: a Next.js/React client, a shared types package keeping both sides honest, and a Socket.IO server embedded in a Next.js API route. The multiplayer rules engine — captures, resurrections, win conditions, rematch flow — runs server-side, with live lobbies, a challenge/accept flow and real-time move sync between players.

Single-player runs against one of three hand-built AI opponents, from a friendly Easy to a Hard that punishes loose play. The whole game ships as a multi-stage Docker build, self-hosted on a VPS behind nginx, with CSP frame-ancestors headers scoped so it embeds securely in this portfolio's iframe.

Highlights

What makes it tick

  • Real-time multiplayer with lobbies, a challenge/accept flow and live move sync over Socket.IO
  • Capture and resurrection mechanics layered onto a hex-grid race game
  • Chained multi-hop moves — live turtles must share a team in one chain, dead turtles chain freely
  • Three hand-built AI difficulties, from friendly to ruthless
  • TypeScript monorepo with shared game-logic types across client and server
  • Dockerised, self-hosted on a VPS behind nginx, with a CSP-scoped iframe embed into this site

Stack

Built with

  • Next.js
  • React
  • TypeScript
  • Socket.IO
  • Node.js
  • Tailwind CSS
  • Docker
  • nginx

Gallery

In the wild

Tortuga title screen: carved red and teal turtles flank a wooden menu offering multiplayer and single player
The title screen — challenge a friend, take on the AI, or learn the ropes.
Hexagonal board with a selected red turtle and its legal hops highlighted in aqua
Pick a turtle and its legal hops light up.
Mid-game board with red turtles advancing up the middle and the blue AI's last move shown as a trail
Mid-game against the AI — the golden trail marks its last move.
How to Play panel listing the objective, movement, capturing, resurrection and hop-chaining rules
The full rules live in-game on a carved How to Play panel.