Daily Vibe Challenge

Challenge #009 ·

Lantern Pond: A Cozy Night-Fishing Game with a Field Journal

Beginner2–3 hoursCozy games

Description

Build a calm little night-fishing game for the browser. You sit at the edge of a lantern-lit pond, cast your line, wait for a gentle tug, and play a forgiving one-button reel minigame to land one of a dozen whimsical fish. Every new catch is sketched into a field journal that fills up over time, and the pond changes with an in-game clock and weather. There is no fail state and no timer pressure, just a cozy loop you can finish in an afternoon and keep polishing for weeks.

Starter Prompt

Build "Lantern Pond", a cozy single-page night-fishing game. Use one index.html with vanilla JS and an HTML5 Canvas (CSS for UI panels). No external libraries, CDNs, images or network calls: draw everything with canvas shapes and gradients, and generate any sound with the Web Audio API.

Scene:
- A 960x540 canvas (scaled to fit the window, crisp on high-DPI) showing a dark-blue pond at night, a wooden dock at the bottom, reeds at the edges, a moon with a soft reflection, and 3-5 floating paper lanterns that bob slowly and cast warm glow circles on the water.
- Gentle animated ripples and drifting fireflies. Keep the palette soft: deep navy, teal, warm amber and cream.
- An in-game clock (1 real minute = 1 game hour, from 8 PM to 4 AM, then loops) shown as a small moon icon. Weather rolls every in-game 2 hours: Clear, Mist (fog layer) or Drizzle (falling rain streaks and ring ripples).

Core loop:
1. Cast: hold Space (or press and hold the mouse/touch) to charge a power meter, release to cast. The bobber lands farther with more power; show a small splash.
2. Wait: after a random 3-10 seconds the bobber dips twice (a "nibble") then sinks (a "bite"). Pressing too early during a nibble only scares the fish away with a friendly message, never a penalty.
3. Reel: on a bite, show a vertical meter with a moving fish icon and a player "catch zone" bar. Hold Space/mouse to lift the zone, release to let it fall. Keep the fish inside the zone to fill a progress ring; outside drains it slowly. Fill it to land the fish. Difficulty scales gently per fish (fish speed and zone size), and the easiest fish should be catchable by a 7-year-old.
4. Catch card: show the fish drawn with simple shapes, its name, a one-line cozy flavor text, its size in cm (random within its range) and whether it is a new journal entry or a new size record.

Fish data:
- Define 12 fish in one JS array: id, name, color palette, size range, rarity (common/uncommon/rare), allowed hours, allowed weather, flavor text. Examples: "Lantern Minnow" (common, any time), "Moonlit Koi" (rare, Clear only, 11 PM-2 AM), "Fog Eel" (uncommon, Mist only), "Puddle Pike" (uncommon, Drizzle only), "Dawn Perch" (rare, 3-4 AM only).
- Pick the bite fish by weighted random from fish that match the current hour and weather.

Field journal (press J or tap the book icon):
- A grid of 12 cards. Uncaught fish show a silhouette and a hint ("Seen near the reeds when the fog rolls in"). Caught fish show their drawing, best size, times caught and first-caught game time.
- Show progress "7 / 12 discovered" and a small reward when all 12 are found (the lanterns change color and a shooting star appears).

Feel and accessibility:
- Soft sound effects made with Web Audio: plop on cast, tiny bell on bite, rising chime on catch. A mute toggle (M) saved to localStorage.
- A relaxing ambient loop (quiet filtered noise for water plus occasional cricket chirps) that starts only after the first user interaction.
- Save the journal, records and settings in localStorage. Add a "Reset journal" button with a confirm step.
- Full keyboard, mouse and touch support. Respect prefers-reduced-motion by reducing ripples and firefly movement.
- 60 fps with requestAnimationFrame, delta-time based movement, and no console errors.

When done, explain the game loop structure, how the fish table and weighted spawn logic work, and give 3 ideas for adding an AI model later (for example, generating fresh flavor text for each catch).

Success Criteria

Optional Extensions

Built it? Share your build and get featured in the showcase & weekly roundup: Submit your build →

Plain markdown: 009-lantern-pond-fishing.md

⚡ Get tomorrow's challenge before everyone else

One fresh challenge + copy-paste starter prompt in your inbox every morning, plus a weekly roundup of the best community builds. Free, no spam, unsubscribe in one click.

Or follow on Bluesky · RSS/Atom · Newsletter archive