Inspiration

Most "slice the shape" games stop at cutting in half. We wanted the whole game to live in one question: can you draw a single straight line that splits this shape 63 / 37? The target changes every round, the shapes start to move, and the line you drew a second ago is already gone. One mechanic, no tutorial longer than one sentence, and a depth ladder that never ends.

What it does

One Cut shows a shape and a target ratio. You draw one line across it. The closer the two pieces are to the target, the better the grade: PERFECT, GREAT, CLOSE or MISS. It starts at 50 / 50 and it does not stay there.

  • Rules stack as you go deeper. Shapes spin, drift, breathe and shrink. Bombs land on the shape: cut beside them, never through them. Fog, mud that bends your line, an armored edge, lights that go out. New rules unlock at stages 3, 5, 7, 9, 11 and on, and up to three run at the same time.
  • Bonus rounds. Blade Rush: three sharp cuts in a row and the blade takes over the next two shapes. Double Cut: two cuts, three equal pieces.
  • Clutch. Land the cut in the last half second and the whole game slows down, blade and music included.
  • Three modes. Classic (stage after stage until your lives run out), Time Attack (a PERFECT adds time, a MISS takes it away), Daily (the same sequence for everyone, one official attempt per day, a streak to keep).
  • Earned by playing. Helpers you win in play (guide, freeze, slow time, extra life), goals that unlock blades and music, and boxes that fill as you play and open into new looks. Boxes are never sold, for money or for shards.
  • 15 languages, no account, no sign-up.

How we built it

  • The game is a Phaser 4 + TypeScript web game (Vite). It runs inside an Expo / React Native shell through a WebView bridge; the shell owns everything native: purchases, ads, notifications, analytics, haptics, store rating, OTA updates for the shell itself.
  • RevenueCat powers every purchase:
    • Shards (the game currency) are a RevenueCat Virtual Currency (TOKEN). Shard packs are consumables on both stores (onecut_tokens_5, onecut_tokens_15); RevenueCat credits the balance on purchase and the shell reads it.
    • Remove Ads and Blade Pack are non-consumables mapped to entitlements (remove_ads, blade_pack). The shell restores them silently on launch.
    • Spending goes through a tiny server endpoint (POST /spend) that only ever subtracts from the Virtual Currency with the RevenueCat v2 API, so a leaked key can never mint shards. A purchase is counted as spent only when the server says 200. Earned shards (from goals) live locally, purchased shards live in RevenueCat, so a delete-and-reinstall keeps paid balance and can never double-credit it.
    • Remote flags live in the default Offering's metadata JSON: shard prices, daily ad-shard cap, interstitial pacing, kill switches for ads, reminders, the rating prompt and shop items, and a minimum version. Changing a value in the RevenueCat dashboard reaches players on the next launch, no deploy.
  • Ads are rewarded ads the player chooses plus an occasional short break between runs; no banners. Remove Ads also turns the "watch an ad to continue" into a free continue.
  • Music: 14 original tracks generated with Suno (licensed), tempo-locked at 130 BPM, looped and loudness-matched with a Python pipeline; the track pool is split into drive, heavy and dark moods that follow the stage and the player's last life.
  • Store assets are produced by a reproducible headless-Chrome pipeline: seeded runs, frozen frames, 7 screenshots × 15 languages × 2 platforms, and the preview video, all from the real game.
  • Sentry for crashes, PostHog for anonymous analytics, Hono on Coolify for the token endpoint.

Challenges we ran into

  • Shards without a backend of our own. We did not want a user database. Keeping the paid balance in RevenueCat's Virtual Currency and making the only server endpoint subtractive solved reinstall double-credit, cheating and offline edge cases at once.
  • Cutting performance on low-end Android. Profiling showed text textures, not geometry, were stalling the cut. Fixing that and adding device performance tiers (plus a player-selectable quality setting) made the slice feel instant everywhere.
  • iOS 27 and WebView audio. Xcode 27 builds crash on iOS 27 without UIScene support, and WKWebView audio is muted by the silent switch unless the page asks for a playback audio session. Both were found in TestFlight and fixed before launch.
  • Music licensing. The first track pool came through a third-party API without a commercial license. We regenerated the whole pool through Suno directly so every track in the game is licensed.
  • Shipping in 15 languages with titles in each language's own words, right-to-left Arabic, and CJK fonts that actually reach weight 900.

Accomplishments that we're proud of

  • A game you understand in one sentence that still has a rule ladder, two bonus rounds, three modes and a daily.
  • Fair monetization: nothing you buy changes your score, and the boxes are never for sale.
  • Both stores, 15 languages, a store-asset pipeline and a reproducible preview video, built by one developer.
  • A RevenueCat setup that doubles as our backend: entitlements, virtual currency and remote config, with a 60-line spend endpoint as the only server code.

What we learned

  • RevenueCat Offering metadata is a great remote-config channel for a small team: it rides on a call the app already makes.
  • Make the server subtractive only. It removes a whole class of security and sync problems.
  • Measure before optimizing: the slow part of "cutting a polygon" was the score text, not the polygon.
  • The store preview video and screenshots must not show prices or shop UI; they change. Keep that for the demo, not the listing.

What's next

  • A larger shard pack and seasonal looks, all driven by Offering metadata.
  • More hazards and a weekly challenge next to the daily.
  • Watching retention and the daily streak numbers in PostHog, then tuning the rule ladder from real runs.

Why Best Game

One mechanic, infinite depth. The grade system (PERFECT / GREAT / CLOSE / MISS), the stacking rule ladder, Blade Rush and Double Cut, the Clutch slow-down, Time Attack and the shared Daily give the game a short loop that keeps changing. Monetization fits the game instead of fighting it: shards buy continues, blades and looks, never score; Remove Ads is one purchase; boxes are only earned.

Why Design Award

The game has its own "cut corner" design language carried through the UI, the icon and the store assets: five palettes (paper, sand, mint night, violet night, ember) with moving motifs that rotate by stage, a round clock that thickens and catches fire as time runs out, piece-flight and shred effects on every cut, a slow-motion Clutch with the music pitch dropping, and an ember app icon with a beam cutting through it. Store screenshots and the preview video are captured from the real game with a seeded, reproducible pipeline.

Testing instructions for judges

  • The game is free on both stores. No account is needed; everything in the demo is reachable in the first minute.
  • Shards can be earned from goals and optional rewarded ads, so the shop works without paying.
  • Promo codes for the 15 Shards pack and Remove Ads: see the "Additional info" step of this submission.
  • To see RevenueCat in action: Menu → SHOP (shards, Remove Ads, Blade Pack). Restore Purchases is at the bottom of the shop.

RevenueCat details

  • Products: onecut_tokens_5, onecut_tokens_15 (consumable → Virtual Currency TOKEN), onecut_remove_ads, onecut_blade_pack (non-consumable → entitlements remove_ads, blade_pack)
  • Offering: default, metadata used as remote config
  • SDK: react-native-purchases (Expo / React Native)

Built With

Share this project:

Updates

Submission history