
Description
Tic-Tac-Gone is tic-tac-toe with a short memory. Each player can only have three pieces on the board, so placing a fourth removes your oldest one and the grid never fills up into a draw. The piece you are about to lose fades and pulses, and that is where most of the thinking happens because a line you are blocking can open up the moment your own piece leaves. It started as a scrapbook idea from undergrad and now runs in the browser on desktop and phones, against a friend on the same device or against the computer.
Key Responsibilities
Wrote the game design document defining the three-piece FIFO rule, the win condition, both game modes and the original rule-based AI
Designed the faded, pulsing "next to go" cue so players can always see which of their pieces leaves on their next move
Set the art direction of warm low-poly wood against a cool navy backdrop and used Claude Fable to model the board, pieces and background shapes procedurally in Three.js
Wrote large parts of the JavaScript and Three.js code across 7 modules covering rules, AI, rendering, audio, UI, game flow and settings
Refined and extended the codebase with Claude Fable, reviewing each change before keeping it
Playtested builds on desktop and mobile, covering the three AI difficulty levels, the turn timer and touch controls
Prepared the itch.io HTML5 release with a Vite build using relative asset paths and a one-command ZIP script
Technology Used
JavaScript
Three.js
Vite
HTML5
CSS
Web Audio API
Claude Fable
Features
Three-Piece FIFO Rule & No Draws
Each player can have three pieces on the board. Placing a fourth removes that player's oldest piece, so every game ends with a winner. The next piece to go fades and pulses, and the pips on each player card show the same queue.
Three-Tier Computer Opponent
Easy plays mostly at random and spots an immediate win half the time. Normal takes a winning move, otherwise blocks yours, and accounts for its own oldest piece disappearing when it blocks. Hard searches 6 moves ahead early in the game and 9 once the board is full.
Beat-the-Clock Turn Timer
An optional limit of 5, 10, 20 or 30 seconds per move. When it runs out, the game either plays a random move for you or skips your turn, depending on the setting. The timer stops while the game is paused and never applies to the computer.
Tactile 3D Board on Desktop & Mobile
Pieces drop onto a low-poly wooden board, and you can drag to tilt it. On a phone, pressing a tile previews your piece, lifting your finger on the same tile places it, and sliding away cancels. Keyboard players can use 1 to 9 or the arrow keys and Enter.
Fully Synthesized Audio
Every sound effect and the ambient music are generated at runtime with the Web Audio API. There are no audio files in the game. Music and effects have separate volume sliders.
Living Title Screen & Rematch Scoring
A computer-vs-computer game plays behind the main menu. The result screen keeps score across rematches, and settings are saved in localStorage between visits.
Screenshots





Additional Information
This started as a scrapbook idea from undergrad i.e. tic-tac-toe where your pieces do not stay forever. I first pictured it in Unity, but a full engine felt like too much for a 3x3 board, so I built it for the browser instead.
I mainly wanted an HTML5 Three.js project under my belt. It was also my first time using Claude Fable, which I tried through Claude's introductory $100 in credits.
I wrote big chunks of the code myself and used Fable to refine it. Fable made the 3D models, and I was impressed by how well it handled modelling in code.
There are no image, model or audio files in the game. The board and pieces are built from Three.js geometry, and the music and sound effects are synthesized with Web Audio.
The design doc only called for an AI that wins, blocks or plays randomly. That became Normal difficulty, and the finished game also has Easy and a Hard mode that runs a negamax search with alpha-beta pruning.
What I'm proudest of is taking a simple scrapbook game and making it feel fresh. Solo personal project, finished in October 2026.