-
-
Ten days to bank 150 leaves and finish the fence
-
Radish, bean, or pumpkin — each trades grow time against payout
-
Pull ripe crops; what you planted days ago decides today's leaves
-
Bees pollinate for bonus yield while the fence rises section by section
-
A merchant wants three pumpkins by Saturday for double pay — deal, or too risky?
-
Season's end: leaves banked, fence built, and how this run stacks up
-
The last dusk — the final pick before the season closes
-
Every other dusk offers two gifts. Take one; the other returns another night
-
Saturday market: the whole week's harvest cashes out at once
-
Every fortnight run leaves something behind — run 1 banked 699 leaves and unlocked a garden lantern
Inspiration
Story of Seasons: Grand Bazaar and Hades. Grand Bazaar for the rhythm of growing all week and cashing out at a market, Hades for runs that reset but leave something behind. We added Stardew Valley's energy bar, which we took a lot further: in our game the food that gives you energy back is the same produce you sell, so every snack costs you money on Saturday. That one tension is the whole game.
The look came from somewhere older: tiny gnome garden ornaments, which is where the cast and the cozy mound-with-a-round-door aesthetic started.
How we built it
We started with the design intent and the scope, not code — what the one mechanic is, what a five minute play session should feel like, and what to cut. Claude (Fable) turned that into a build plan and the first playable: a pure game state machine that runs in Node with no graphics, a Three.js garden on top, touch input only, and all sound synthesized in code so nothing is loaded from the network. The three gnome characters were designed as concept sheets with image tools, turned into 3D with Meshy, and baked into the page as data.
From there it was loops of playtest, fix, verify. Every change goes through the same battery:
- Syntax.
- The build with its own checks — no URLs, no module code, nothing weird.
- The bot balance sims.
- A full end-to-end play of the game from a
file://URL in headless Chrome.
When we add a test we deliberately break the thing it tests, to prove the test actually fails. Real phone playtests and a couple of outside testers drove most of the polish: the day one lesson, the eat-or-keep card, the market payoff, the fence you watch get built.
The roguelite fortnight was layered on at the end as a mode you reach from the end screen. It swaps in a randomized 14 day season — pest pressure, market rumours, when the bees swarm, which visitors bring gifts at dusk — without touching the classic season's numbers, so the original game stays exactly as tuned. A second AI agent (Codex) did the final preflight passes and the phone-feel polish.
Challenges we ran into
- Making a card or a gift explain itself. The bee card said "+1 on every bean and pumpkin" and a teammate couldn't tell what +1 was, or whether it worked. Fixed with plain words and a little pop on the harvest that credits the bees.
- A finale that wasn't one. The last night of a run used to offer a honey jar against another honey jar. Now each visitor brings a card that pays at that night's market, so the choice reads off the board.
- One gift eating the run. Busy bees on every crop quietly became 63 percent of a run's score. The sim harness caught it, and now no single gift is allowed to be the run.
- The
file://texture problem. Served from a website it looked fine; opened by double click in Chrome, the whole cast went black. Chrome treats textures loaded fromfile://as cross-origin. - Keeping copy human. A tester said the text "reads like an AI wrote it," so we rewrote every line without the tells.
What we learned
- The first 30 seconds matter more than any feature. Our first playtester tapped dead spots for 20 seconds because the weeds didn't look tappable. Most of our time went into making things legible, not adding things.
- Keep the loop small and make it felt. Every time we were tempted by a new system we asked what it did for the eat-or-sell choice, and usually cut it.
- Test like a player, not like a developer. Real touch events on a phone-sized screen caught bugs that unit tests never would — a character's hitbox stealing taps from a plot, a picker opening twice.
- Ship the boring rule early. One
index.html, no network, plain script tags. We still got bitten late by thefile://texture issue above. Now the textures are embedded and a test checks it. - Balance with bots. Three simple bots — a careful one, a greedy one, a sloppy one — run 400 seasons each before every commit, so we always knew a good player wins and a spammy one doesn't.




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