Card Night
Free multiplayer card games with a coach that teaches you as you play

Why it exists
My family is scattered across time zones and card night stopped happening. The existing Euchre apps are stuffed with ads and play by nobody's house rules.
What I built
Built a card game platform at cards.mikegrowsgreens.com and shipped three games on it: Yoochre (Euchre), Malice (Spite & Malice), and Muggins (Cribbage). Each game is a pure rules engine with seeded deals, a bot coach that explains every recommendation, a daily deal everyone shares, and async multiplayer where turns wait for you and a push notification taps you when it's your move. Crews, weekly leaderboards, streaks, badges, and Midwest house rules like farmer's hand and defend-alone. Muggins counts every hand out loud, line by line, with the front and back pegs advancing as each score is said. The suite's front door for new players is Card Night Daily (daily.mikegrowsgreens.com): five puzzles drawn from all three games, one vetted board per puzzle per day, Wordle-style, generated by a seeded candidate search and frozen 60 days out by a snapshot test so a rules tweak can't re-deal a board people already played. Streaks get one free monthly repair, and every finish produces a numbered spoiler-free emoji grid built for the group chat.
What it does
- Three games and a dailies hub on one platform: the multiplayer, social, and coaching layers port to each new game in days, not weeks
- Solo with a coach, daily challenge, and async multiplayer in all three games
- The dailies hub went scaffold to live in one day (11am to 7:30pm) because the rules engines were byte-identical ports of the full games, not rewrites
- 1,904 automated tests across the four codebases, including random-play sweeps that hammer each rules engine on every commit
- Five daily puzzles drawn from all three games, each frozen 60 days out by a snapshot test so a rules tweak cannot re-deal a board someone already played
- Realtime play over server-sent events with no websocket server, verified through Cloudflare
- Push notifications with a per-move throttle, so a slow table never spams anyone
What broke
The trick animation. When the fourth card hit the table, React unmounted all four cards for a single frame and replayed every entrance animation. Two plausible fixes failed before the real one: derive the displayed trick from game state during render instead of echoing it through effect state.
Want something like this built for your team?
Start a project