Tic-Tac-Toe
The first game I added. Async means one of us can play a move and the other sees it when they open the app. Scoreboard tracks how many we've each won. (Megan has won more.)
Five games, all turn-based, all async, all synced through Firestore. Megan plays a move on her commute. I play one on my break. The board is wherever we last left it. There's a scoreboard. There are rules modals. There are little animations on win. The whole hub was an evening project that turned into a month.
The first game I added. Async means one of us can play a move and the other sees it when they open the app. Scoreboard tracks how many we've each won. (Megan has won more.)
Same async model. Drop a token, opponent's turn. The first version didn't handle gravity correctly and I got a few choice screenshots from Megan demonstrating tokens floating in mid-air. Fixed in version two.
One five-letter word per day, the same word for both of us. Hard mode (must reuse hints). A partner grid that shows me Megan's progress without showing me her letters. Stats. A share card. Megan is much better at this than I am.
Built on chess.js. Full move validation. Pawn promotion modal with the right piece choices. The current check highlight glows soft amber on the king's square. I am slightly better at this. Slightly.
Mandatory capture, multi-jump chains, kings that move backward. I tested it for a week on my own before letting Megan touch it. Megan won the first game we played.
All-time, since the day the games went live. The scoreboard is on its own little screen in the app. It is, by a wide margin, the screen that gets opened the most when Megan is on her lunch break.
Because Megan and I were already passing a chess game back and forth on a different app, and I realized I had an excuse to write five better ones. Because the app should be more than a tracker. Because the small piece of joy that happens when she opens her phone and sees that I made a move at lunch is worth a month of evenings.