Inspiration
The hackathon asked for a game people open again tomorrow. We looked at what works on Reddit already — dailies, streaks, shops, and community-made levels you can race inside a post. Wobblit is our take: a wobbly 3D ball on floating docks. Stay up, reach the boat, beat the clock.
What it does
Wobblit is a 3D ball-balance game that runs inside a Reddit post (Devvit Web).
- Official campaign — 4 dock levels (elevators, tilting bridges, climbs, stems). Lives, checkpoints, boat goal, 1–3★ from how many lives you keep, personal bests on level select, and restart mid-run.
- Today's Dock — each calendar day (same day worldwide) uses one rotating official layout (L1–4 cycle) with a separate daily leaderboard, so the race resets every morning without wiping campaign times.
- Build Level — in-app editor (beams, stems, tilts, lifts, arrows, saws, climb pieces, spawn, boat). You must Test-clear the level yourself before Publish. Then pick title + difficulty (easy/medium/hard/insane) and it posts as its own Reddit post.
- Community posts — open a published level → play that course. Main menu on that post shows Play again plus Campaign for official levels. HUD 🏆 opens this level’s board.
- Leaderboards (BOARD) — tabs for Daily, official Level 1–4, and This level when you’re on a community post. Rank / player / ★ / time, with your own best noted. UGC posts also get a stickied comment that updates with top times.
- Explore — in-app Top 10 community levels by unique clears; tap a card to load and race that level.
- Seeds + shop — seeds on every clear (Daily pays most; first official clear beats grinding repeats; UGC in between). Daily quests (+30 / +20 / +20) and streak milestones at 3 / 7 / 14 days add more. Spend seeds on 8 ball skins (
0 → 10,000); equipped skin shows in play. - Daily quests + streak — three quests per day: clear Today’s Dock, set a personal best, play a community level. Streak counts consecutive days with at least one clear.
- Mobile + desktop — phone: circle-wheel + jump (only while playing). Desktop: arrows + Space, short tip, drag to turn camera. Menus/editor are responsive on both.
How we built it
Client is Three.js + Rapier3D (WASM) in a Vite bundle inside Devvit Web. Server is Hono on Devvit with Redis for profiles, leaderboards, quests/streaks, and the Explore index. Official and community levels share one LevelJSON schema — that’s what lets the editor publish a real playable Reddit post instead of a one-off scene.
Challenges we ran into
The hard part wasn’t drawing a ball — it was making the seed economy actually push people toward “come back tomorrow.” Early on, replaying an easy official level paid almost as well as Daily, so the lazy path was grind, not return. We reworked payouts so first clears and Daily matter, repeats pay little, and streak milestones are the big bonuses. On top of that we had to make phone controls actually usable for precise 3D balance, and keep community-post context when you leave a UGC level for the main menu.
Accomplishments that we're proud of
- A real loop: Daily → quests → streak → seeds → shop, plus Build → publish → board → sticky race — connected, not bolted on.
- One level format for both our campaign and community builds.
- A full mobile pass without breaking desktop play.
What we learned
This was our first time shipping a real game on Reddit’s platform. We learned Three.js/Rapier physics, Devvit’s web + Redis model, and the limits of an iframe on phone (touch targets, layout, when not to show on-screen controls). Soft currency taught us the same lesson the hard way: if the math rewards grind, players will grind — you have to design the payouts for the loop you want.
What's next for Wobblit
- More official levels — including harder, more addictive layouts with new surprises so the campaign doesn’t end at 4.
- More builder pieces (ice, boosters) so creators can invent wilder community levels.
Built With
- devvit
- hono
- javascript
- node.js
- rapier3d
- redis
- three.js
- typescript
- vite
- webassembly
- webgl
Log in or sign up for Devpost to join the conversation.