Because why just draw names when you can earn them through retro arcade games?
Every year I over-engineer our family's Secret Santa allocation. This year: retro arcade games built with Phaser.js. Participants play a randomly selected Christmas mini-game to unlock their Secret Santa assignment. No backend, no accounts, just pure client-side gaming fun.
Tech Stack: React, TypeScript, Phaser.js, Bun
bun install
bun dev # Start development server
bun build # Build for productionEach participant gets a random game challenge. Complete the challenge to reveal your Secret Santa recipient letter by letter!
![]() |
Santa Maze Navigate a peppermint maze, collect 3 ornaments, then reach the present |
![]() |
Reindeer Delivery Dash Fly Santa's sleigh through the sky, collect 4 stars while dodging obstacles |
![]() |
Stocking Fill Match Memory game: match 6 pairs of holiday icons |
![]() |
Gift Stack Challenge Balance and stack 6 falling gifts on a moving platform |
![]() |
Snowball Slingshot Aim and launch snowballs to knock 5 ornaments off the Christmas tree |
- Create your event and add participants
- Set any exclusions (e.g., couples shouldn't get each other)
- Generate unique game links for each participant
- Share the links - each person plays their game to reveal their match
| Event Creation | Generated Links |
|---|---|
![]() |
![]() |
The allocation algorithm ensures valid pairings while respecting exclusions. All data is encoded in the URL, so there's no backend or database needed.
This is part of my annual tradition of over-engineering Secret Santa:
- 2020 - Clojure Secret Santa
- 2021 - Pico Secret Santa
- 2022 - Step Function Secret Santa
- 2023 - Secret Santa PWA
- 2024 - Secret Santa Draw
- 2025 - Secret Santa Draw Arcade โญ | Secret Santa Draw GBC
MIT







