Aquapop

By (@salami) ·

Aquapop - image 1

Tech stack

  • Antigravity

Prompt

RECIPE: AQUAPOP
A glossy bubble-popping puzzle with a chain of satisfying splashes. Serves: one thumb, as many rounds as it takes. Prep time: the whole job, in one sitting. No stopping to taste halfway: cook it start to finish, test it yourself, fix what is off, and plate it up finished with an honest note on what you tried and what you couldn't.

INGREDIENTS (the pantry rules)
Plain static files: HTML, CSS, JavaScript. No build step, no frameworks, no libraries, no backend, no accounts.
It must run from a double-clicked index.html and on any static host.
No image files and no audio files. Every bubble, sky, splash and sound is made in code. One Google Font is allowed with a proper fallback.
Pure game rules go in a file with no DOM so Node can run them.
Fresh words only: short, bright and friendly. Never use em dashes or en dashes anywhere, including in code comments.
MISE EN PLACE (set out your files)
File	What goes in it
index.html	page, styles, screens, controls
bubbles.js	all rules as pure functions (no DOM, loads in Node)
aqua.js	the drawing: sky, glass, bubbles, splashes, effects
drops.js	synthesized sound
widget.js	the share image
test/bubbles.test.js	Node tests
THE FLAVOR (what the whole thing should taste like)
This is Y2K aqua, the glossy, optimistic, translucent look of early 2000s software and a sunny desktop wallpaper. Think glass, water and light. It is bright and airy, never dark and never neon.

Sky: a sunny gradient from deep sky blue at the top to pale aqua and near-white at the bottom, with soft layered clouds, faint light rays from the upper left and a few slow floating bokeh circles. A rolling green-and-turquoise hill or water line sits low behind the board.
The board: a rounded glass panel with a frosted translucent fill, a bright top edge highlight, a soft inner glow and a long diagonal reflection streak across it. It floats with a gentle shadow. Subtle water caustic light ripples drift across its surface.
The bubbles: glossy translucent spheres in five colors: aqua #27D3E6, lime #A6E22E, coral #FF6B6B, sunny #FFD93D, orchid #B26BFF. Each has a radial gradient (lighter center, deeper rim), a bright white specular highlight at the top left, a small secondary highlight at the bottom right, a thin lighter rim and a soft colored glow underneath. They look wet and full of light.
Buttons and badges: glossy pill-shaped "aqua" buttons with a top gloss band, a thin darker outline and a soft glow, like early 2000s UI. Score and labels sit on small frosted-glass plates.
Type: a rounded, friendly sans ("Quicksand" or "Nunito", system fallback) in white with a soft blue drop shadow for headings, and dark teal for small text on glass.
Motion: liquid and bouncy. Bubbles wobble like jelly when they fall and settle. Pops burst into a ring of tiny droplets with a quick expanding ripple. Everything eases softly, nothing snaps.
Colorblind help: a toggle that puts a small distinct symbol inside each bubble (drop, star, heart, diamond, moon). Remember the setting.
THE DOUGH (how the game works)
A classic bubble-breaker puzzle on a 10 by 10 grid. Tap a bubble that is part of a group of 2 or more same-colored bubbles that touch (up, down, left, right, never diagonal) to pop the whole group.

Pop: the group disappears.
Fall: the bubbles above drop to fill the gaps.
Slide: if a whole column empties, the columns to its right slide left to close the gap.
Score: a popped group of n bubbles scores n x (n - 1) points. Bigger groups are worth far more.
Chain bonus: pop groups in quick succession (within 1.5 seconds of each other) and a chain counter climbs. Each extra chain step adds 10 percent to the next pop, up to 50 percent. Show the chain as a stack of little glowing droplets.
Finish: the game ends when no group of 2 or more remains. Clearing the whole board gives a +1,000 Splash Bonus. Otherwise each leftover bubble costs 5 points (the score never drops below zero).
Helps (a few per game, shown as icons):

Undo: 3 per game. It restores the board, the score and the chain exactly.
Peek: 3 per game. It makes the biggest available group glow and shows its worth.
Wand: 2 per game. It pops any single bubble, even alone, scoring nothing for it but not breaking your chain.
Tapping: on touch, the first tap on a bubble highlights its group and shows the points it would give in a floating tag ("x7 = 42"). A tap on the same group pops it, and a tap elsewhere changes the selection. Desktop does the same on hover and click. A setting called Quick pop turns on one-tap popping. Respond on pointerdown. No double-tap zoom, no scroll, no text selection.

Modes:

Classic: 5 colors, a random board.
Deep: 6 colors (add a teal-blue), harder.
Daily: everyone gets the same board that day, from a seed based on the UTC date, with its own best score.
The board generator: every board must be playable. It must start with plenty of groups (at least 12 groups of size 2 or more and at least 2 groups of size 5 or more), so a board that would be a dead start is rejected and rolled again from the same seed stream.

Ranks (by final score): under 400 "Puddle", 400 to 899 "Splasher", 900 to 1,499 "Wave Rider", 1,500 to 2,299 "Tidal Master", 2,300 and over "Ocean Legend". Tune the numbers with the tests so a decent first Classic game lands around Splasher.

THE GLAZE (finish and polish)
Pop feel: the instant you tap, the group scales up slightly, flashes brighter, then bursts into droplets that arc and fall with a splash ripple at the bottom of the glass. The bigger the group, the bigger the burst and a brief glass-shake and light bloom across the sky.
Falling: use soft physics with a tiny bounce and a jelly wobble when bubbles land, so it feels like water balloons. Everything moves by delta time, holds 60 fps on a mid-range phone, and queues input so a quick second tap is never lost.
Scores: the points float up from the popped group as glossy numbers.
Title screen: the logo "AQUAPOP" built from five glossy bubble letters bobbing on a wave, the mode picker (Classic, Deep, Daily), a big aqua Play button and your best score on a glass plate. On the very first play (remembered locally) a one-line hint: "Tap groups of matching bubbles."
End screen: the remaining bubbles shake loose and float away upward, the score counts up on a glass plate with the rank and a row of stats (biggest group, longest chain, helps used), and a NEW BEST gets a burst of sparkles.
Respect prefers-reduced-motion: reduce the wobble, ripple and bloom.
THE SEASONING (sound, all synthesized)
Water and glass, not beeps and not a marimba:

Tap and select: a soft, short water-drop "plip" (a sine with a quick upward pitch glide).
Pop: a wet "bloop" (sine glide down plus a touch of filtered noise), with the pitch rising a step for each chain level. Bigger groups sound fuller, layering two or three bloops.
Splash: a soft filtered-noise swish when droplets land.
Chain milestones: a glass wind-chime glissando.
Splash Bonus (clearing the board): a bright shimmering chord and a long wave swell.
No moves left: a gentle descending glass sound.
Ambience: a very quiet looping ocean and breeze bed made from filtered noise, plus soft bubbles now and then. Keep the music light, or none, and keep effects clearly on top.
A mute button, remembered. Audio starts only after the first tap and must work on iOS Safari. A short vibration on large pops if supported, with a toggle.
THE TASTE TEST (what the tests must prove)
Run node test/bubbles.test.js and make it print a clear pass or fail summary. It must show, over thousands of random boards and a table of hand-made cases:

Group detection finds exactly the connected same-color cells (4-neighbor, not diagonal), including snakes and groups touching the edges.
Popping removes exactly that group, gravity drops bubbles correctly, and empty columns collapse to the left in order.
Scoring n x (n - 1) is right for every size, the chain bonus caps at 50 percent, and the Splash Bonus and leftover penalty are exact.
A single bubble cannot be popped except with the Wand, and the Wand does not break a chain.
Undo restores everything exactly, three times and no more.
The same seed makes the same board, and every generated board meets the playability rule.
A "no moves left" board is detected correctly, including a board with only single bubbles left.
Rank boundaries are right.
Have a greedy bot (always pop the biggest group) and a random bot play thousands of games and print the score spread, then use it to tune the ranks. Run the tests after every change.
PLATING (screens and sharing)
Share image: drawn on a canvas like a desktop widget from 2003: a glossy glass panel with a sunny aqua wallpaper behind it, a small mock window title bar reading "AquaPop", the score in big glossy numerals, the rank, a mini picture of the final board in glossy bubbles, and a few stat lines. Include sparkles and a soft lens flare. Output 1080 by 1350 and 1200 by 630. Buttons: Save image, Copy result text, Play again.
Copy text: AquaPop: 1,860 pts, Tidal Master. Longest chain x6, biggest group 17. Pop better than that: <link>
Challenge link: ?seed=<n>&mode=<classic|deep>&beat=<score> loads the same board and shows a "Beat 1,860" badge. Daily mode needs no link.
Play again starts a new board in one tap, with no reload.
SERVING NOTES (quality for every guest)
Works from 360 px wide and up, in portrait and landscape, with no horizontal scroll. Bubbles are at least 30 px so they are easy to tap, and the grid scales to the screen.
No console errors. Pause when the tab is hidden. Scores and settings live in localStorage inside try and catch, and the game works without it.
Page title, Open Graph and Twitter tags, and a small inline SVG favicon of a glossy aqua bubble.
SERVING IT UP (what to hand back)
The finished game in its folder, with all tests passing, checked at 360, 768 and desktop widths and with no console errors.
A _deploy folder holding only what the live site needs, and the exact command to deploy it to Vercel from inside that folder as a new project named aquapop. Don't log in or deploy it yourself.
A short write-up for sharing: a punchy title under 70 characters, a caption of a few lines, the tools list, this recipe condensed to under about 1,500 characters, and three believable follow-up prompts.
An honest report: what you tested and the results, and what you couldn't verify (real-phone feel and tap accuracy, how the water sounds actually come across, and how the glass effects look on a real screen).
Chef's notes: don't add dishes nobody ordered. If time runs short, cut breadth and never polish. Don't call it done until you've run it. And if the board ever looks like a flat grid of colored dots instead of glossy water bubbles, fix that before anything else.

Comments (1)

  1. Hadi ·

    i think it's better to write a caption mate

1 like · 1 comment

Explore more on Prompted

Loading