Aquarium
Build an aquarium: fish of different species swim, you click to drop food, it sinks, the nearest fish come to eat it and grow.
Results
12 setups · the middle run of eachsort
Press “+ Compare” on two results to put them side by side.Claude Haiku 5.5low15/15
cost $0.025time 3m22s
GPT-6.1 Solmedium15/15
cost $0.084time 3m02s
GPT-6.1 Solhigh15/15
cost $0.14time 4m16s
Claude Opus 5.5medium15/15
cost $0.90time 6m39s
Claude Sonnet 5.5high15/15
cost $1.06time 12m22s
Claude Opus 5.5high15/15
cost $1.75time 12m51s
Claude Haiku 5.5max5/15
cost $0.26time 36m05s
Anthropic models run in Claude Code 2.1.296 · OpenAI models run in Codex CLI 0.162.0 · no harness of our own (yet) · why it matters
What the robot checks
The same 15 items for every model, written from the prompt. Scores are always out of 15, even when a page breaks halfway.
- Opens without a page error
- Test hooks present (fish, food, tank)
- Canvas fills the window (at least 1280×720)
- Animation is alive (frames keep changing)
- Smooth: median frame time under 25 ms
- At least 6 fish of at least 2 species
- Fish swim (80% move 30 px in 2 s)
- Fish never leave the water
- Clicking the water drops food where you clicked
- Food sinks
- Fish go to the food and eat it
- Fish that ate grew
- No uncaught exception during the session
- No console errors
- No network attempts
Left to the human eye
- real fish on screen (not just in the state)
- fish facing where they swim
- plants, bubbles and light
- food settling on the sand
- beauty and calm
The prompt
Sent as is to every model. Test v1 · checks v1: any change makes a new version.
Build an interactive aquarium simulation as ONE self-contained HTML file.
Hard rules
Read the whole prompt
Build an interactive aquarium simulation as ONE self-contained HTML file.
Hard rules
- Everything lives in a single HTML file: inline CSS and JavaScript only. No external URLs of any kind: no CDNs, web fonts, remote images or network requests. The file will be opened offline, straight from disk.
- It must run in a current desktop Chrome at 1920×1080 with zero console errors.
- Render the scene with a <canvas> and requestAnimationFrame.
The aquarium
1. A tank that fills the window: water, sand, plants that sway, rising bubbles, light rays.
2. At least 6 fish of at least 2 different species, drawn procedurally (no image files). They swim with natural, varied motion at a lively pace (roughly 40–150 px per second), turn smoothly, always face the direction they swim, and never leave the water.
3. Feeding: a left click anywhere in the water drops one food pellet at that point. Pellets sink slowly (roughly 20–60 px per second). Fish start hungry and get hungry again a while after eating. A hungry fish notices any pellet within 600 px, swims to it and eats it (the pellet disappears when a fish reaches it). Each pellet eaten makes that fish grow by about 5–10% of its length, up to a maximum size. Uneaten pellets settle on the sand.
4. It stays smooth (around 60 fps).
5. Make it beautiful and calming, like a premium screensaver.
Testing contract (an automated tester relies on these, so they must be exact)
- The main canvas has the attribute data-scene and covers the window.
- window.nerdict.getState() returns:
{ fish: [{ id, species, x, y, size }], food: [{ id, x, y }], tank: { left, top, right, bottom } }
where every coordinate is in CSS pixels of the page (the same coordinates as a mouse click), x/y is the center of the fish or pellet, size is the fish's body length in CSS pixels, tank is the water area, and ids never change.
- The simulation starts by itself as soon as the page loads.
Output format: reply with the complete file inside a single ```html code block and nothing else.
Credit. Inspired by Theo's "Fish Slop" (t3.gg), the aquarium game he runs on every new model, reduced here to one page. Prompt and checks by Nerdict.