All projects

live ยท Oct 2026 to present

That Dang Grass

A first-person lawn-cutting hunt on Roblox where you snip every blade, sell the haul, and search a giant lawn for a lost ring.

  • Roblox Studio
  • Luau
  • Claude Code
  • Blender (headless, Blender MCP)
  • Roblox Open Cloud publish pipeline
  • DataStore + MemoryStore
  • Roblox Analytics Query API
  • Stud UI kit (licensed)
  • Codex image tool for thumbnails

My role

I directed the game, chose what to build, tested it and made the keep, cut and pause calls. The code, Blender models and publish tooling were built by Claude Code sessions under my direction, supervised by a second 'Architect' Claude session. It is published under the Mr Chow Studios group, and a co-owner of the group helped review the work; read-only research and hourly game monitors.

What it is

That Dang Grass started as a one-line idea on 2026-10-07 (cut grass, find a lost ring), went live as 'Find the Lost Ring!', and was renamed That Dang Grass on 2026-10-11. You start in a shed-style lobby with stalls, step onto a party pad, and teleport to a reserved 'Backyard Run' server where every blade of grass is cut one at a time, the bag fills, a courier sells it, and upgrades unlock bigger tools until the timed run ends at sundown.

It is the flagship of our studio group. The build ran as numbered passes (S1 to S49) in which each pass added one subsystem, was checked in Studio Play, and left a screenshot sheet and a JSON evidence file. Live builds were published one at a time with a metric written down first, so a change could be judged on data instead of feel.

It was the first of our games to get real traffic. The documented record is 539 concurrent players on 2026-10-11, and the main work after launch was fixing first-session leaks (skipped intros, early quits) and raising day-1 retention.

How it was built

  1. Idea to planIntake, concepts, market research and validation were done in one day (2026-10-07). Validation said PIVOT; the owner overrode it as a deliberate bet (decision D-008). Gate records live in the project progress.md phase table.
  2. Kit and architectureBuilt on our own reusable Luau 'forge' kit: one owner module per concern (PlayerData with session lock, ReceiptRouter, Net with validated remotes, Analytics, Economy, UIKit). Game tuning sits in about 70 Config modules under src/ReplicatedStorage/ForgeShared/Config (Tools, Classes, Masteries, Economy, LawnRun, Chapters, Skins and more), so numbers change in data files rather than logic.
  3. Code sync into StudioSource lives on disk. A local HTTP server on 127.0.0.1 is pulled into Studio by an execute_luau script that writes Script and ModuleScript sources (replacing Script Sync, which kept going stale). HttpService is on only in the place being built and off before every publish.
  4. The grass itselfPass S14 rebuilt grass as individual blades (24 per cell, server-side masks, blade-exact deltas). S15 fixed a 100 to 4000 ms hitch on every swing; the cause was a Highlight with no Adornee outlining the whole world. Worst frame dropped to 26.8 ms and p99 to 19.4 ms. Later passes added rare blade types (Lush, Golden, Frost, Rainbow, Lunar) picked from the run's rarity seed.
  5. Art pipelineTools, hedge, lobby stalls, helper skins and the Backyard Run garden were modelled in Blender and exported with calibrated axis settings into a mesh library loaded at boot. Batches were numbered (batch-6 through batch-20). Thumbnails were generated with the Codex image tool from written briefs over five generations (gen to gen4, v1 to v5), with a final set sheet.
  6. Two places, one experiencePass S21 (decisions D-295 to D-300) split the game into the lobby and the 'Backyard Run' place. A pad launches a reserved server through Matchmaking; results return the player to the lobby. A mirror tool keeps run-place code identical to the lobby source: 309 scripts hash-equal at S21, 360 at S49.
  7. Classes, masteries, boardsS25 replaced the ring meta with classes (gem spins, pity, luck, masteries) and S26 added three leaderboards (fastest find, total finds, grass cut) with all-time and weekly views. Each was verified with real input at 16:9 and 844x390 and a two-client StudioTestService run.
  8. MeasurementAnalytics are event funnels plus per-server fast counters in a DataStore, snapshotted from the Roblox Analytics Query API. A keep/kill rule was set beforehand (day-1 at or above 12% keep, below 6% kill; session length 10 and 5 minutes). Quality reports under 03 Games/cut-grass-docs/quality/ record each read.
  9. Test disciplineKit-check suites reached 2,285+ tests per place by 2026-10-28. Rule: scripted tests that call remotes directly do not count for the core verb; it must be driven through real mouse, touch and gamepad input. A tutorial failsafe that fired 199 times in a read was counted as a failure.
  10. PublishingAn autonomous publish tool (tools/publish) sanitises test and debug attributes, checks the HttpService flag and publishes through Open Cloud. Builds were shipped one at a time (the r34.x series) and not judged on a first-hour read because early quits swing 7 to 17% hour to hour.
  11. Live ops and what came nextA Halloween 'Pumpkin Moon' surge event and a weekly 'Meteor Night' look were added. A simpler 'v2' rebuild (2026-10-19 to 23) was paused by me so effort stayed on the live game. A Chapter 2 link was built offline on 2026-10-28.

Decisions and why

Ship one change at a time with a metric chosen in advance.
Hourly quit rates are noisy, so a build can only be judged against a pre-registered number, not a hunch.
Pause the v2 rebuild after four days.
The live game had real traffic and the first-session leaks were still the biggest lever, so improving it beat starting over.
Chapter 2 is a replayable run type, not a story level set.
Replayable runs feed retention without needing hand-authored content for each chapter.
All grass is individual blades with server-side masks.
It makes every cut visible and exact, which is the whole feel of the game, at the cost of heavy performance work.
Same UI at the same visual size on phone and PC.
Roblox UI scaling already makes PC-size UI readable on a phone; separate big mobile layouts kept being rejected in testing.

Hardest problems

A huge hitch (100 to 4000 ms) on every grass swing.
Profiling showed a Highlight with a nil Adornee outlining the entire world each swing. Fixing the highlight target brought the worst frame to 26.8 ms (progress.md, S15).
New players left in the first minutes: about 90% skipped the intro and 25.7% of new players quit under 2 minutes in build r34.25.
Intro, tutorial order and the entrance hallway were reworked across many builds (S49 added a guided hallway and lever); day-1 by install cohort moved from 2.47% to 4.40% by 2026-10-14 and a 6.7% cohort was recorded on 2026-10-26.
A tutorial failsafe fired 199 times (about 9.7% of players reaching the first find).
It was logged as a real-input FAIL and the tutorial steps were rewired and re-verified; remaining exposure is tracked as an open item in the quality metrics.
A mirror backup booted a second copy of the kit inside Backyard Run.
Mirror backups were disabled (D-342) and the mirror tool was changed to export code only.
Biggest funnel drop: 75% of players were lost between the first run ending and their first lobby visit; the ring was found in only 14% of run ends (2026-10-26 watcher read).
Identified from the monitor data and fed into the next builds; not yet closed at the last documented read.

Numbers

Total visits309,236Nov 6, 2026
Favorites4,160Nov 6, 2026
Peak concurrent players (record)5392026-10-11
Visits125,7152026-10-17
Favourites1,6412026-10-17
Daily active users, 7 reads5,756 (10-09) rising to 15,451 (10-14)2026-10-15
Day-1 retention2.47% (10-09 cohort) to 4.40% (10-14 cohort); 6.7% on the Oct 24 cohort2026-10-26
Average session7.17 min (10-09) to 10.21 min (10-15)2026-10-17
Scripts per place (mirrored)360, hash-equal across lobby and run place2026-10-28
Automated kit-check tests per place2,285+2026-10-28
Config modules in srcabout 702026-11-06
Screenshots in the build report folder100+2026-11-06

Timeline

  • 2026-10-07Idea, intake, market research and validation done in one day; build passes begin.
  • 2026-10-09Goal set to reach 1,000 concurrent players; baseline 3,801 visits and 30 favourites.
  • 2026-10-11Renamed That Dang Grass; record 539 concurrent players.
  • 2026-10-13Build r34.9 live (lobby v590, run v274); many r34.x builds follow.
  • 2026-10-19 to 2026-10-23v2 rebuild lane runs, then paused to focus on the live game.
  • 2026-10-28Chapter 2 link built offline (not published at that read).
  • 2026-10-26Monitor read: 7,767 daily players on Oct 25, 21.1 min play time per player.

What I took from it

  • Measure first: one change per build with a number written down beforehand beat judging by feel, because hourly retention is noisy.
  • Performance bugs hide in small things; one misconfigured highlight caused multi-second hitches that no amount of tuning grass would fix.
  • The first five minutes decide everything; most of the post-launch work was first-session leaks, not new content.
  • Pausing a rebuild to improve a live game with traffic was the right trade.

Links