Valentine's Maze Game
A small maze puzzle game built in Next.js as a fast, polished two-day build to prove execution and shipping speed.
Context
This project was a gift. That mattered because the success criteria were emotional and experiential, not numerical. The game needed to feel personal, work smoothly on first load, and look finished rather than like a prototype.
I kept scope intentionally small so I could prioritise polish. The bar was simple. It should feel coherent, responsive, and complete within two days.
Discovery
This was user-driven in the most literal sense. I already knew the user well. My wife likes puzzles and enjoys small challenges that can be completed in one sitting. A maze matched the moment, fit the time constraint, and supported personalisation without requiring complex systems.
The product framing was to choose a mechanic that naturally supports a satisfying loop. Start quickly, build tension, finish with a clean completion moment, and leave the user smiling.
What I decided to build (and why)
I chose Next.js for speed and familiarity so the time went into the experience rather than infrastructure. The build decisions prioritised finish quality:
- Simple core loop: start, navigate, complete, celebrate, with minimal friction between states
- Custom sprite art: small details that made it feel personal instead of template-based
- Polish over mechanics: smooth movement, clean UI, and clear feedback instead of adding features
- Short feedback cycle: play, notice rough edges, fix, and replay until it felt right
The guiding principle was to avoid building breadth. A small game that feels finished is more impressive than a large one that feels unfinished.
Rejected alternatives
- Full game engine Powerful, but heavy for a two-day build and would shift time away from polish.
- Stock art Fast, but generic. The project needed personal texture, not placeholder vibes.
- More mechanics Tempting, but classic scope creep. Extra features would increase bugs and reduce finish quality.
What shipped
- A working maze with a clear start state, play state, and completion state
- Custom sprites and a cohesive visual style
- A clean game loop with smooth movement and clear feedback
- Polished UI tuned to feel intentional rather than prototype-like
Artifacts & metrics
This project was not built for growth metrics. The proof is in execution artifacts that demonstrate end-to-end delivery:
- PRD defining scope, experience goals, and success criteria
- Ticket list breaking the build into shippable steps
- Screenshots and GIFs showing the finished experience
- What broke and how I fixed it as a short postmortem highlighting debugging and iteration
AI usage
AI helped draft the PRD, break work into tickets, and troubleshoot implementation issues quickly. The main value was speed. It shortened planning and debugging so I could spend time on the feel of the game and the finish quality.
Next steps
- Progression with additional levels or increasing maze complexity
- Mobile input polish such as better touch controls and haptics
- Light replay incentives like timers or collectibles, if extending beyond the original goal
The core goal was achieved. Ship something finished, fast, and personal.