Balatro rebuild deck
HARD
Scoring is an ordered pipeline rather than a formula, and the day a joker cares about when it fires, a one-expression implementation stops being a bug and becomes a rewrite.
You will get the loop working. Then the real work starts.
The scoring pipeline is where every clone dies. Agents write it as one expression, which holds up fine until you add a modifier whose effect depends on when it fires, and then you discover order was never modelled and every fix breaks another card. Demand the step log on day one; you will read it several hundred times. The card feel is a weekend on its own and it is not decoration, it is the reason anyone plays for six hours.
- Difficulty
- HARD · 3 of 5
- First playable
- A project
- The original
- 2 team-years
- Released
- 2024 · PC
- Genre
- Roguelike Deckbuilder
Build a poker-hand roguelike deckbuilder as a single self-contained HTML file. Canvas 2D or DOM, Web Audio for sound, no build step, no dependencies. Requirements: - A 52-card deck. Each round you draw 8, select up to 5, and either play or discard them. Four plays and three discards per round. - Scoring is a pipeline, not a formula, and it is the whole game. In strict order: identify the hand type from the selected cards and load its base chips and mult from a table; trigger each scoring card left to right, adding its rank chips; then trigger each modifier left to right in slot order, applying additive and multiplicative effects at the moment they are reached. Multiply chips by mult once, at the very end. Slot order must be able to change the result. - evaluate() returns a step log: every chip and mult change with its source. Render it as rising labels. - Three blinds per ante with escalating score targets, and a shop between them selling modifiers and card upgrades. Fail a target, the run ends. - Hand table, card definitions and modifier effects live in JSON. Each modifier declares a hook (onCardScored, onHandPlayed) plus a small effect object, never bespoke code. - Feel: selected cards lift 12px over 90ms ease-out, the score counter tickers up over 400ms, chips flash blue and mult flashes red as each applies. Definition of done: I can swap two modifier slots, replay the identical hand, and get a different final score that the step log explains line by line.
- The 150 jokers, each one a small designed joke about breaking the rules the game just taught you
- Two years of one person balancing numbers that reach scientific notation without the run going limp
- The CRT wobble, the card snap, the sound design that turns six hours into what feels like twenty minutes
- A shared seed culture where everyone argues about the same run
Ordered effect pipeline with a step log
Scoring written as one expression is fine right up until an effect cares about when it fires, at which point order was never modelled and every fix breaks another card. Effects as data with a hook, plus a log of every change and its source, turns the maths into something you can read a line at a time — and the same shape runs damage formulas, buff stacks and pricing engines.
ScopeA weekend— build just this, not the game
Build a scoring pipeline as a standalone toy, single self-contained HTML file. DOM or Canvas 2D, no build step, no dependencies.
- Input: five items each with a rank and a suit, plus up to five modifier slots in a row the user can reorder by dragging or with arrow keys.
- evaluate(items, modifiers) is pure, touches no DOM, and returns a final number plus an ordered log of every step as {source, op, operand, baseAfter, multAfter}.
- Resolution order is fixed and explicit: base values from a table, then each item left to right, then each modifier in slot order, then exactly one multiply at the very end.
- Modifiers are data, never bespoke code: a JSON object with a hook (onItemScored, onAllItemsScored, onFinal) and an effect ({add: n}, {mult: n}, {addPerSuit: [suit, n]}, {multPerPriorAdd: n}). Ship twelve, at least three of which depend on what fired before them.
- Render the log as a list, each line naming its source, with the running totals tickering.
Definition of done: moving one modifier a single slot left, then replaying the identical hand, changes the total, and the log shows exactly which line diverged.Not a clone — Balatro re-themed and cut down to something you can finish. The angle is the important reel: it is what turns a project into a weekend. 24,360 ways to land.
Build In Public Idle
Balatro, but an idle version that plays while you are away, set in indie hackers building in public. Rendered in oil painting frames.
Build a browser game called "Build In Public Idle". The pitch in one line: a roguelike deckbuilder in the spirit of Balatro, but an idle version that plays while you are away, set in indie hackers building in public. WHAT THIS IS Take the SHAPE of Balatro — its core loop, and whatever makes that loop good — and rebuild it as your own game in a different world at a smaller scope. Use your own names, art and audio, which you want anyway: a reskin of somebody else's game is less interesting than a new one that works the same way. THE ANGLE — this is the important constraint, honour it above everything else An idle version that plays while you are away. Offline progress on load, big-number maths from line one, and a prestige reset. The fantasy survives; the input does not. This is what makes the project finishable. If a decision would push the scope back towards the original's, take the smaller option every time. THE THEME Indie hackers building in public. A tiny product, a public launch, and an audience meter. Every feature is a bet against runway. The theme is not a coat of paint. Let it change what the mechanics mean — a reload, a health pack and a locked door should all be things that make sense in this world and nowhere else. LOOK Oil painting frames. Visible brush strokes, thick impasto on impact frames, and a gallery-light grade with warm shadows. REQUIREMENTS - Runs in a browser with no build step. Canvas 2D unless the angle genuinely requires 3D, in which case three.js. - Fixed-timestep update loop with interpolated rendering, so it behaves the same at 60Hz and 144Hz. - Every tuning constant in one CONFIG object at the top, exposed as live sliders in a debug panel. You will find the feel by dragging those, not by prompting. - All content — levels, entities, balance numbers — in JSON or plain data files, never inline in the logic. - Audio generated with the Web Audio API rather than asset files. - Respect prefers-reduced-motion: keep the fades, drop the shake and the parallax. BUILD ORDER 1. The core loop with placeholder rectangles, at the reduced scope the angle demands. No theme, no art, no audio. Make it fun as rectangles first. 2. The angle's consequences. Cutting to bots, or to turn-based, or to one level changes the design rather than just shrinking it — find out how and rewrite step 1. 3. The theme, as content and data. 4. The look, applied last as a rendering layer over a game that already works. Start by writing a one-page plan: the core loop, what the angle removes and what that frees you to do properly, and what you are deliberately leaving out. Wait for me to approve it before writing code.
Half the time one of these already does what you wanted, and the other half it saves you a week of solving a problem someone documented in 1997.
One count per game. No account — it is tied to a salted hash of your IP, which is not stored in a form anyone can reverse. Every build adds 2 team-years to the counter on the homepage.
Then try these
Questions
How hard is Balatro to rebuild with an AI agent?
Yes — every game is buildable at some scope. The question is how hard, and Balatro is HARD (3 of 5). You will get the loop working. Then the real work starts. Scoring is an ordered pipeline rather than a formula, and the day a joker cares about when it fires, a one-expression implementation stops being a bug and becomes a rewrite. Reckon on a project to something you can actually play — not to something that matches the 2 team-years LocalThunk spent.
What makes Balatro hard to rebuild?
Scoring is an ordered pipeline rather than a formula, and the day a joker cares about when it fires, a one-expression implementation stops being a bug and becomes a rewrite. That is why it sits at HARD rather than a tier either side of it. If you want the idea without the project, the transferable part is ordered effect pipeline with a step log — a weekend of work.
How long does it take to build a Balatro clone?
Wrong question, and it is worth saying why. Nobody rebuilds Balatro — the original took LocalThunk on the order of 2 team-years, released in 2024 on PC. What you can do is reach something playable and genuinely yours in about a project, and then keep going for as long as it stays interesting. Any figure that claims otherwise is measuring a prototype and calling it a game.
What do I lose by building my own Balatro?
The 150 jokers, each one a small designed joke about breaking the rules the game just taught you. Two years of one person balancing numbers that reach scientific notation without the run going limp. The CRT wobble, the card snap, the sound design that turns six hours into what feels like twenty minutes. Those are the parts a prompt will not hand you.
Which AI coding agent should I use to build it?
Any of Claude Code, Codex or Cursor will handle this prompt. Paste it as your first message, let the agent scaffold the project, then iterate on feel — the second, third and tenth prompts are where a game actually gets good. Work in an empty folder or a fresh git branch so you can throw it away cheaply.
One email when new games go on the list. No other reason to email you, ever.