Inspiration

I fell in love with star-battle puzzles: one rule, endless depth. But every app I tried felt like homework. Gray grids, ticking timers, an ad after every board. I kept thinking: this puzzle deserves to feel like a warm meal, not an exam.

So the stars became dumplings. The sky became a galaxy where every planet has its own dumpling species, from Planet Bao to the Ravioli Riviera. I wanted a game my whole family could open at the end of a long day and feel a little lighter. That is Dumpling Galaxy.

What it does

The whole game rests on one rule: place a dumpling in every row, every column and every colored zone, and never two side by side. You can learn it in under a minute. Months later it is still surprising you.

Around that rule I grew a small universe:

  • Twelve worlds with grids that start at a gentle 4x4 and grow to a properly hard 12x12. Every board is generated fresh on your device, so the game never runs out of levels and works entirely offline, on a plane, in the metro, anywhere.
  • One daily challenge, the same board for every player in the world, feeding leaderboards and seven leagues from Bronze to Celestial.
  • A three-minute Blitz mode: chained small boards against the clock, where solves buy time and mistakes burn it, with its own daily ladder.
  • A streak you keep alive by solving one puzzle a day, with shields that save it when life gets busy. I never want the game to punish someone for having a bad week.
  • 33 badges that pay out in stars, and a wardrobe of 28 dumpling skins: seasonal ones that only visit during their season, and one mythic skin no amount of stars can buy. You earn it or you don't.
  • A soft cream sky by day, deep plum after dark, in French and English. No account, no email, nothing to sign.

How I built it

One React and Vite codebase, wrapped with Capacitor so the same heart beats on iOS and Android. All the game logic, the puzzle generator, the solver, scoring, streaks and leagues, lives in pure modules with Vitest tests watching over every push. A red suite blocks any store build. That discipline saved me more times than I can count.

Puzzles are born and checked entirely on your device, which is how the game stays fully offline. The only things that leave your phone are scores, because leaderboards need a referee: Supabase edge functions validate every submission server-side so nobody can cheat their way to Celestial.

Even the store listings are code. A Playwright pipeline regenerates every screenshot, phone and tablet, French and English, whenever the app changes its look. I got tired of screenshots lying about the app, so I made lying impossible.

Challenges I ran into

  • Trustworthy leaderboards with no accounts. I refuse to ask players for an email, but scores feed real rankings. Validating everything server-side, and closing a sneaky replay-farming hole on both sides, took real care.
  • Two platforms, one person. Every release means a signed Android bundle and an iOS archive from the same commit, both tested on phones and tablets. Twice the checklists, twice the surprises.
  • App Review. Getting the iOS in-app purchase approved took five submissions. Each rejection stung, and each one taught me how a stranger sees my app in the first ninety seconds. Painful, priceless.

Accomplishments that I'm proud of

Dumpling Galaxy is live on Google Play and App Store today. Everything in the shop can be earned by simply playing; the mythic skin can only be unlocked by clearing all eleven prestige badges, and I hope the first player to earn it feels like they touched a star (might created an announcement for this achievement). And the hold-to-aim gesture, which took three full rewrites, finally makes a 12x12 grid feel comfortable under a thumb.

What I learned

Retention is not a feature list. It lives in tiny moments: the haptic tick of a correct placement, the win animation that makes you smile, the shield that quietly saves your streak while you sleep. Polish is not the bonus. Polish is the product.

I also learned the humbling part: building a good game is half the journey. Helping people find it is the other half, and that half has no compiler.

What's next

A cozy first level called "First batch" that teaches by baking, boss encounters when you reach milestone levels, and a new seasonal skin every season, so the galaxy always has a reason to celebrate.

Built With

Share this project:

Updates

posted an update —

1.8 "Bao's Counter" is in review: four horizons of quests, outfits that cannot be bought, and a difficulty curve that was backwards

Well... Week is not over :D

Two things shipped in this build. One is a tab I rebuilt from scratch because nobody was touching it. The other is a number I had wrong since launch.

The quest tab asked nothing of anyone

The old Quests tab held three fixed objectives that never changed. Two of them completed themselves after about three boards. The third just repeated the daily challenge card already sitting on the home screen. Stars landed automatically on the win screen, so the red badge on the tab led to a page where there was nothing left to do.

And eighteen days a month, outside the festival window, the whole thing was three lines and a link. That is twenty percent of the navigation bar spent on a dead end.

Four horizons instead of a list

The day. Three orders drawn from a pool of seventeen by the day's key, one per tier, identical for every player at the same stage. You collect them by hand. The badge now means something is waiting.

The week. A menu of five steps fed by the orders you collected. The fourth step stays reachable after two missed evenings, which is the entire point of having this horizon at all. A streak that punishes one bad Tuesday is a streak people quit.

The month. The festival, unchanged, but with a countdown where the emptiness used to be.

The whole life. Three outfits earned by delivering 75, 250 and 500 orders.

The outfits are the load-bearing idea. The skin catalogue is priced against a finite wallet, so paying a brand new horizon in stars would quietly shorten every price in the shop. These cost no stars at all. They are not for sale at any price, they are delivered, order after order. A reward with zero inflation.

The difficulty curve was backwards

This one is less fun to write. The board grows as you climb, from 4x4 up to 12x12. I checked how long each size actually lasted:

before after
levels per size 2, 4, 5, 6, 14, 15, 20, 20 4, 6, 9, 12, 14, 17, 19, 21
12x12 reached at level 70 103

Two levels on 4x4. An 8x8 board by level 15. Five difficulty cliffs inside the first fifteen boards, and then fourteen to twenty levels parked on a single size once the player was already an expert. Tight exactly where a beginner needs room, generous where nobody was asking.

A size step is a real cliff, not a nudge. An 8x8 star-battle is a different puzzle from a 6x6, not a bigger one. So every size now gets a longer run than the one before it, and the last one lands at level 103.

That also makes the store listings honest. All four of them have promised boards "past level 100" since version 1.2, while the code was handing over the 12x12 at level 70.

The part I could have hidden

Players past level 82 will see their board drop a size on their next game. That is a design fault being corrected, not a preference, so it goes in the changelog in both languages rather than being sprung on anyone. Six lines instead of five.

Where it stands

Android is approved. I am holding the rollout manually until Apple clears the iOS build, because the two have to light up together: the in-app update banner is driven by a single build number for both platforms, and shipping one first would send half the fleet toward a version that does not exist yet.

Log in or sign up for Devpost to join the conversation.

posted an update —

1.7 "First Batch" is in review a playable lesson, a fairer ladder, and a boss eclipse

Big week. The update is sitting in review at Apple and Google, and it's the densest one yet.

The tutorial is now a real game. Our store listing promises "no tutorial to sit through", so the lesson had to BE play: three real 4x4 grids, about 45 seconds, and you win your first one within seconds. Each concept is taught by doing it with the real gesture code paths, never by reading. Mistakes flash softly and cost nothing. Skippable with one tap, replayable anytime. I hand-picked the three boards by scripting against the actual puzzle engine so every teaching moment is provable: the "trap" cell in chapter 2 is wrong ONLY because of the diagonal-touch rule, and there's a unit test asserting exactly that.

I found and closed a points exploit. Replaying an already-beaten level kept paying leaderboard points, forever. Fixed on both sides: the client no longer counts replays, and the server got a lifetime unique index per (player, level) plus a cleanup of historically farmed points. I'm announcing the cleanup to players before it happens, because a leaderboard that tells the truth is worth a few awkward rank drops.

The ladder now shows every player's max level, ratcheted server-side from validated wins only, never client-declared. And boss grids finally feel like an occasion: a golden eclipse crowns the board, guardian stars twinkle, the grid lands with a soft rumble. All CSS, opacity-only animation, prefers-reduced-motion respected.

Verified the whole lesson twice: pixel-level in the browser, then finger-level on the iOS simulator on a fresh install. 700 unit tests green.

Next: release day choreography, the database cleanup, the edge function redeploy and both store releases have to land in the same five minutes, so the rank changes arrive together with the in-app note that explains them.

Log in or sign up for Devpost to join the conversation.

Submission history