I Shipped A Card Game in A Weekend
I built a browser version of Prší. This is a Czech card game. It is a 1v1 game against a simple AI. You can play it using a mouse or touch.
Play here: https://czsoftcode.github.io/prsi/
Most people call this vibe coding. I do not agree. Vibe coding often means you describe an app and accept whatever the AI gives you. I used a different method.
I used Claude Code to drive the build through 10 explicit phases. Each phase had a specific goal and a verifiable output.
The phases included:
- Setting up the Vite and TypeScript scaffold
- Building the game engine data model
- Adding basic moves and special cards
- Creating the AI opponent logic
- Building the UI and interaction loop
- Running 200 end-to-end AI simulations
- Deploying the site
I planned and reviewed each phase before moving to the next. This kept the code clean. I wrote around 300 unit tests. When the AI made a mistake, my tests caught it immediately.
The hardest part was not the code. It was the game rules.
- Stacking sevens: Players can stack up to four sevens to force an opponent to draw 8 cards.
- Queen wildcards: The queen changes the required suit. I had to ensure the engine handled this correctly.
I also faced technical hurdles:
- Deployment: My images broke on GitHub Pages because of path errors. I fixed this by using Vite's base URL.
- Versioning: I forgot to update my package.json after tagging a release.
I kept the AI simple. It only plays legal moves. The goal was a correct AI, not a smart one. I used 200 simulated games to prove the game always ends in a win or a stalemate.
Building phase-by-phase instead of relying on vibes allowed me to ship a product I actually understand.
Source: https://dev.to/stkremen/i-shipped-a-card-game-in-a-weekend-but-i-didnt-really-vibe-code-it-34g9
Optional learning community: https://github.com/czsoftcode/prsi
