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
- TypeScriptCanvas 2DWebAudioVitevite-plugin-singlefile
- Ad networks
- AppLovinUnity AdsironSourceMeta
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
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%.