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