Deploying bat signal...
Curiosia Major
The Debugger
Orion's Fork
The Stack
Deploying bat signal...
A Katamari-style roguelike for the browser. Start as a 1 cm speck under the couch. Finish by absorbing a garbage truck downtown.

Everyone has watched a dust bunny drift out from under a couch and thought, briefly, that it looked alive. Dust Bunny is the game where it is. You roll across the floor, absorb anything smaller than you, and every piece you pick up sticks to your fur and makes you bigger. Bigger means you can absorb bigger things. Keep going and the couch you started under turns into furniture you can eat.
It’s live now at dustbunny.curiouslycory.com. It runs in the browser on a laptop or a phone, there’s nothing to install, and you don’t need an account to play. The winning runs on the leaderboard so far took between 9 and 19 minutes. Your first few runs probably won’t get that far, because the household appliances fight back.
The game measures everything in real centimetres, and a run covers nearly three orders of magnitude. You start with a radius of 1 cm. By the end your radius is over 6 metres. Along the way you grow through nine Tiers in three areas, and each area ends with a boss that you have to absorb to move on.

You start under the couch absorbing lint, crumbs and staples. Each Tier pulls the camera back: coins and LEGO, then socks and toy cars, then shoes and books, until chairs and laundry baskets are on the menu and the whole floor plan fits on screen.

Absorb the Robo-Vac and the front door swings open. Outside, the floor is a whole street: garden gnomes and pinecones first, then mailboxes, bikes and grills, then picnic tables and parked cars. Robotic mowers, sprinklers and leaf blowers patrol the lawns.

Absorb the Street Sweeper and the road barrier lifts. Downtown at golden hour you eat parking meters, phone booths and hot dog carts, then taxis and food trucks, then buses and fire trucks, while floor scrubbers and pressure washers try to clean you off the pavement.
Every run is generated from a seed: the room layout and furniture, the street with its seven houses and park, and the city grid with its avenues, office towers, parking lots and fountain square. A new run means a new floor plan.
The house doesn’t want you there. Roombas wander the floor with a suction ring, lint rollers patrol lanes and peel mass off you, a broom sweeps a telegraphed arc, a spray bottle fires mist from a fixed spot, a mop leaves a slippery trail, and an upright vacuum pulls you into its cone. Outside it’s robotic mowers, push mowers, leaf blowers and sprinklers. In the city it’s ride-on floor scrubbers, pressure washers, litter vacuums and a street flusher truck.

Every Hazard is dangerous until it isn’t. Once you outgrow one, a green ring appears around it and touching it absorbs it instead of hurting you, which is one of the most satisfying moments in the game: the Roomba that chased you around the living room at 2 cm becomes a snack at 25.

Bosses are bigger than you when they arrive. Above, the Robo-Vac 9000 has just lined up a charge: the red lane on the floor is the path it’s about to take, straight through where I’m standing. The HUD says I need a 51.4 cm radius to absorb it, and I’m at 46.8. The way through is to dodge the charge, let it hit a wall, and bump it while it’s stunned. Each bump chips it down and knocks pieces loose for you to eat, so it gets smaller while you get bigger. The Street Sweeper and the Garbage Truck work the same way at street scale, and they summon mini mowers and mini scrubbers to help.
Every run starts with a choice of three Characters, each a different kind of dust:
Balanced. No weak spots, no special strength. The default.
Starts bigger and shrugs off knockback, but it’s slow and turns like a shopping cart.
Fast, with a built-in magnet pull. Fragile, and vacuums pull it 1.5× harder.
Each time you cross a Tier, the game pauses and offers you a draft of three Perks that last for the rest of the run: Thick Fur for an extra heart, Glutton for faster growth, Second Wind to revive once, Spiky Dash to stun Hazards by dashing into them, and eight more. Most of them stack, so a run that keeps picking Aerodynamic ends up very fast and very hard to steer.

On the floor you’ll find glowing Pickups that last a few seconds: Static Charge pulls nearby debris toward you, Sugar Rush makes you faster, Bubble Wrap blocks a hit, Glue Dab doubles your growth, Crumb Cake heals, and Dust Cloud makes Hazards ignore you.
When a run ends you earn Fluff based on how big you got, how much you absorbed and how far you made it. Spend it in the Shop on permanent Upgrades: extra hearts, a head start, a wider Perk choice, a Perk reroll and more.
Casual is the default balance. Arcade makes Hazards faster and more frequent. Hardcore goes further, takes away a heart, cuts Pickups and skips the heal between areas. Harder runs pay 1.25× or 1.6× the Fluff and leaderboard score.
At the end of each run you can post your score to a global leaderboard. You can post anonymously, or sign in with Google or Discord to get a ✓ next to your name and a cloud save, so your Fluff and Upgrades follow you from your laptop to your phone. Signing in is optional; everything else works without it.
As I write this, the top score is mine: 110,815, from a 9-minute Zap run on Casual. Nobody has posted an Arcade or Hardcore run yet, and those pay 1.25× and 1.6× the score. It shouldn’t be hard to take first place from me.
Dust Bunny is TypeScript, Vite and three.js with no game engine and no physics library. The world is a flat floor, so movement and collision are 2D circles and boxes on the XZ plane, and three.js only draws the result. A few decisions that made the game work:
Absorbing something adds its volume to yours, so the radius grows with a cube root. Small debris stops mattering as you grow, which is what pushes you toward bigger targets and gives each Tier its own feel.
Each of the 98 debris types is one InstancedMesh, and lookups go through a spatial hash grid. The target is 60 fps with about 5,000 pieces of debris on a mid-range laptop. A spawner keeps topping up absorbable debris just off screen so there’s always something to eat at your size.
All 60 models, from the sock to the 95-metre glass skyscraper, are generated by Python scripts running in headless Blender and exported as glTF: about 75,000 triangles and 3 MB in total. Every one also has a procedural three.js fallback, so the game still runs if a model fails to load.
The sound effects and the lo-fi music loop are synthesized with the Web Audio API at runtime. The music’s intensity follows your Tier and picks up when a boss arrives.
// What absorbing a piece of debris does to your radius
// (src/systems/absorb.ts). size is the debris radius in cm.
canAbsorb = size <= radius * absorbRatio; // absorbRatio defaults to 0.7
r_new = Math.cbrt(r ** 3 + growthFactor * growthMultiplier * mass * size ** 3);The simulation never touches the DOM or WebGL. A run is a plain object that the browser renders each frame, which means the same code also runs in Node. Vitest drives full runs in the integration tests, and pnpm sim runs a headless bot through seeded runs for each Character and prints how long every Tier took, so a balance change shows up as a number before anyone has to play through it.
The backend is a small set of Vercel functions on Neon Postgres for the leaderboard, accounts (self-hosted Better Auth) and the cloud save. The server recomputes every score from the submitted run stats rather than trusting the number the client sends. If the API is down, the game falls back to a local leaderboard and keeps going.
The first commit landed on the evening of October 20th. The neighborhood, the city, the three Difficulties, the mobile HUD and accounts with a cloud save were all in by the next afternoon: 79 commits in about 23 hours, 71 of them co-authored with Claude.
Working that fast with an agent only held together because the repo is written to be read. A domain glossary in CONTEXT.mdpins down words like Debris, Hazard, Tier and Absorb so they mean one thing everywhere. An architecture doc maps every module, the game loop, the event bus and the step-by-step recipes for adding a Hazard, a Perk or a whole new area. The headless sim, plus 34 test files, checked the work at each step. If you want to see how that’s set up, the repo is MIT-licensed.
Pick a Character, roll out from under the couch, and see how far you get before the Roomba finds you. If you reach the Garbage Truck, post the score. If you find a bug or have an idea for a Hazard, open an issue on GitHub.