What it does
Ice Hop is a daily logic puzzle that turns a Reddit post into a tiny frozen playground.
A few penguins are stranded on the ice with seals, rocks, and open water. Tap a penguin to hop over occupied spaces. Drag a seal to slide it out of the way, or into exactly the wrong place. Get every penguin into the water in as few moves as you can.
That's the whole game. It fits in one viewport, plays with a tap or a drag, and has a one-tap how-to if you need it.
Behind every board is a solver that knows the shortest possible solution. That gives each puzzle a real par, so finishing always feels good while finding the cleanest line gives experienced players something to chase. The daily leaderboard ranks by fewest moves, with time only breaking ties.
A new daily puzzle arrives each day, with the week building from easier Mondays toward harder weekends. After the daily, Endless mode offers Easy, Medium, and Hard puzzles whenever you want another. Endless also has a progressive hint: the first tap highlights the piece, and the second shows where it should go. Using it helps you move on, but that solve does not count toward your Endless total.
Players can also build their own puzzles. The editor gives live solver feedback, lets you play-test the board, and refuses submissions that cannot be solved. Accepted puzzles enter a Community stream where other people can play them, upvote them, and see who made them. The My Puzzles screen gives creators a reason to return by showing the live solve and upvote counts for every board they published.
The Reddit thread is part of the game too. Each puzzle post seeds a pinned prompt inviting players to share their score. After solving, a signed-in player can tap Comment my score to post their moves, par, and stars beneath it. Reddit shows each player's username above their result, turning the replies into a real scoreboard without spoiling the puzzle.
Puzzles become posts, and scores become comments.
Why it fits "Games with a Hook"
Delightful UX: The goal reads at a glance. Penguins bob while they wait, squash and stretch through a hop, then dive into the water and float there when they reach safety.
Polish: The game uses one hand-built "arctic at dawn" palette, smooth scene transitions, responsive controls, synthesized effects, ambient music, clear loading states, and recovery buttons when something fails.
Reddity: This is community-first. Players compare scores in the thread, solve each other's boards, and return to see how their own creations performed.
The hook: The daily puzzle, streak, flair, and leaderboard bring players back tomorrow. Endless and Community make sure there is always more to play today.
Phaser: Phaser powers the responsive board, touch and drag input, code-drawn characters, persistent idle animation, hop arcs, particles, splashes, and win effects, not just a static puzzle inside a game wrapper.
Inspiration
I love puzzles that look impossible for the first few minutes.
You stare at the board, try a few ideas, and then one relationship finally clicks. That little "ohhh, that's the line" feeling is one of my favorite things in games.
It gets even better when other people are solving the same puzzle. Someone posts a score, somebody else finds a cleaner route, and suddenly the conversation becomes:
"Wait, you did it in six moves?"
I wanted that feeling to live where the conversation already happens: inside a Reddit thread.
A hopping-and-sliding puzzle worked because it is deterministic. I could write a solver that knows whether a board is possible and what the best solution looks like. That one decision opened the door to fair scoring, procedural puzzles, hints, and player-made boards that can never be published broken.
The theme came from the rules: something that hops, something that slides, something that stays still, and somewhere worth jumping into.
Cold water, penguins, seals. It wrote itself.
How I built it
Ice Hop is built with Devvit Web, Phaser 4, TypeScript, Hono, and Redis.
The game rules and solver live in pure TypeScript, separate from both Phaser and Devvit. A breadth-first search finds the shortest solution, which becomes the board's par. The same solver validates community submissions, grades generated puzzles, and recomputes Endless hints from the player's current position.
The generator does more than ask whether a board is solvable. Its strict pass looks for a clean optimal solution and rejects pieces the player could never even touch. Easier boards require every piece to matter, while harder boards can include fair decoys: pieces you can reach and be tempted by, even though the best line never needs them. Generation has strict time limits and solver-verified fallbacks so an expensive search can never leave the player stuck on a loading screen.
The server is one Hono app running on Devvit's Node runtime. Redis stores daily boards, solves, streaks, rankings, Community puzzles, votes, creator statistics, and the pre-generated Endless pools. One scheduled task creates the daily post, while another keeps the Endless pools stocked away from the player request path.
Community submissions are rate-limited and de-duplicated. Players cannot upvote their own work or vote twice. Each player's stream removes puzzles they have already solved and mixes top-voted boards, new submissions, and a catalog-wide discovery sample so good older puzzles still have a chance to surface.
On the client, every gameplay character and board element is drawn in code. Penguins, seals, rocks, water, ice, particles, and win effects all share the same rounded shape language and calm polar palette. The lightweight feed card stays separate from Phaser and only opens the full game when the player chooses to play.
The hop, slide, splash, and win sounds are synthesized with the Web Audio API. A quiet ambient track sits underneath them and can be muted along with the effects.
Challenges I ran into
Making generated puzzles fun
The first generator produced boards that were technically valid but sometimes felt random. A piece might just sit there with no way for the player to ever interact with it, or the board might have too many equally good answers.
Counting optimal solutions and checking whether each piece actually matters made the difference between a working generator and puzzles that feel designed.
Keeping generation fast
Proving that a board has one clean solution can be much more expensive than finding any solution. Early versions could spend too long searching.
I added hard generation deadlines, graceful fallback passes, scheduled Endless pools, and client-side prefetching. The game still aims for the best board it can find, but it never sacrifices a reliable load for an expensive proof.
Making Community fair
Ranking only by votes would let early favorites dominate forever. Ranking only by recency would bury good work immediately.
The final stream rotates between top-voted puzzles, new submissions, and catalog-wide discovery. Rate limits, duplicate rejection, solved filtering, and no self-voting keep it useful without making creation frustrating.
Finding the game's look
Drawing shapes was easy. Making them feel like one world took much longer.
The connected ice sheet, rounded silhouettes, large eyes, recessed water, and the penguin actually diving instead of standing on its goal were the details that gave Ice Hop its identity.
Accomplishments I'm proud of
One solver supports almost the whole game: par scoring, daily generation, submission validation, difficulty grading, and Endless hints.
The creator loop is complete: build, validate, test, publish, then return to see real solve and upvote counts.
The game reads on a phone: tap to hop, drag to slide, get every penguin into the water.
The comment section really becomes the scoreboard: results appear beneath the pinned prompt under each player's Reddit username.
It is shipped: Ice Hop is approved and live on Reddit, not only running as a local prototype.
What I learned
Choose a mechanic that gives you leverage. Once the optimal solution is computable, scoring, generation, validation, and hints can all share the same foundation.
Solvable and fun are different problems. A solver proves that a board has an answer; quality checks make that answer feel intentional.
User contributions need a reason to return. Publishing is only the first half. Solve and upvote counts make creators care about what happens afterward.
Polish lives in small details. Keeping idle animations alive through a move, prefetching the next puzzle, and always offering a way out matter as much as the larger features.
What's next
A curated puzzle of the week chosen from Community creations.
Seasonal palettes and special weekend boards.
More creator milestones and longer-term competition.
Ice Hop dailies hosted by more Reddit communities.
A note on originality
I built Ice Hop from scratch during the hackathon submission window.
The engine, solver, generator, server systems, interface, and code-drawn visual identity were made for this project. Daily and Endless boards are generated, while Community boards are created by players; no commercial puzzle set is copied.
The rules combine familiar peg-solitaire and sliding-block ideas into a new system with its own name, artwork, scoring, and community features.
How to test it in about 60 seconds
The submitted demo is a Community puzzle post, so every visitor receives a playable board immediately. No sign-in is required to play; an account is only needed for the steps marked (signed in) below.
Tap Play this puzzle.
Tap penguins to hop and drag seals to slide. Get every penguin into the water.
(signed in) After solving, tap Comment my score to add your result beneath the pinned comment.
(signed in) If you are not the creator, upvote the puzzle, or choose Next puzzle to continue through the Community stream.
Open Menu to try Endless, build a puzzle, or view the creator dashboard.
Daily posts add the full retention loop: stars versus par, daily rank, streak progression, spoiler-free sharing, and tomorrow's fresh board.
Everything plays inside Reddit's post experience.
Built With
- devvit
- devvit-web
- hono
- node.js
- phaser.js
- redis
- typescript
- vite
- web-audio-api


Log in or sign up for Devpost to join the conversation.