All projects
Crowd runner
2026

Fish & Gates

A 30-second underwater crowd runner: grow the shoal, clear the gates, ram the shark.

A/B variants

Each variant is a separate file with a single change. Pick one to play it.

The baseline, nothing changed.

The player steers a shoal of fish with one finger. The shoal absorbs fish along the way and grows, gates grant a bonus only if the shoal is big enough, and a 100 HP shark waits at the end: every fish takes off one point.

There is no early fail — the shoal never drops below one fish, so every player reaches the finale and the install button. The outcome stays open until the last moment as the shoal and shark counters melt towards each other.

The whole creative is a single HTML file with no game engine and no external requests. Sound is synthesised with WebAudio, graphics are drawn in code and swapped for art one sprite at a time.

Tech

Build size
97.2 KB
Orientation
Portrait and landscape
Stack
TypeScript
Canvas 2D
WebAudio
Vite
vite-plugin-singlefile
Ad networks
AppLovin
Unity Ads
ironSource
Meta

Highlights

  • No game engine or runtime dependencies: a custom fixed-timestep loop
  • One universal build: the adapter detects the ad network from WebView globals
  • The build enforces a budget: single file, zero external requests, size limit
  • A/B variants are built with one command — a separate file per hypothesis
  • Deterministic simulation: a debug panel with rewind and fast-forward
  • Portrait and landscape, pause when hidden, mute on the MRAID volume signal

Campaign results

Demo: simulated figures

This creative has not run on ad networks. The block shows what a campaign report looks like.

Installs per mille (IPM)
13.25+64%
was 8.10
Cost per install (CPI)
$0.57−32%
was $0.84
CTR
21.7%
Day-1 retention
38%+4 pp
was 34%
ROAS D7
22%+3 pp
was 19%
Average session
24.6 s

14 days, four networks, 3.05M impressions, compared against the video creative of the same campaign. Key takeaway: a near-miss defeat sells better than a win — 48% end-card clicks versus 40%.