Inspiration
We wanted to build something that avoided every cliché the hackathon explicitly warned against — no space shooter, no clone app, no platformer, no trivia quiz, no collaborative storytelling. Reddit's own guide to community games kept coming back to one idea: give people a small daily ritual, and let the community's collective effort be visible, not just individual competition. That's where Pulse Garden came from — a daily rhythm mini-game where your flower joins everyone else's in a shared, growing garden.
Play it live: https://www.reddit.com/r/PulseGardenDaily/?playtest=pulse-garden
Every day, an entire subreddit gets the exact same ~45-second pulse pattern, deterministically generated from that day's date and post ID — like a daily puzzle, but a rhythm-tapping run instead of a word guess. Tap in time with the glowing pulse ring, grow a flower, earn a grade from S to D. You get one attempt per day per post (enforced server-side). Every finished flower — win or lose — adds "blooms" to a shared community garden meter that levels up through five visual tiers (Seedling → Budding → Blooming → Radiant → Starlight) as more people play that day. The garden is visible right in the Reddit feed card, so an active subreddit's post visibly looks more alive than a quiet one.
How we built it
Devvit Web (Hono server + Redis) with a Phaser 4 client. The most important piece of the architecture is src/shared/rhythm.ts — a pure, deterministic scoring function shared verbatim between client and server. The client uses it for instant tap feedback; the server independently re-derives the canonical beat pattern from the date+postId and re-scores every run from the raw tap timestamps before persisting anything. The client's own displayed score is never trusted. Every visual — the pulse ring, the growing flower, the particle bursts — is generated procedurally at runtime with Phaser's Graphics/Particle APIs, so there are zero external art assets.
Challenges we ran into
Real playtesting caught real bugs. A Georgia serif font rendered "0 blooms today" as "o blooms today" — switched the whole app to sans-serif. A bigger one: the Game scene positioned every element once at creation time using whatever the viewport size was at that exact instant, with no correction on resize — while MainMenu and the Results screen accidentally avoided this because they render after an async network round-trip, which gives the iframe time to settle. Game's scene transition is synchronous, so it was uniquely exposed. We also learned the hard way that Devvit's ?playtest= URL always points at one fixed developer-preview post, not "whatever you most recently created" — so retesting during development meant deliberately creating fresh posts to get a clean per-day state.
Accomplishments that we're proud of
The anti-cheat design: because scoring is a pure function shared between client and server, and the server recomputes from raw timestamps instead of trusting a submitted score, there's no way to game the leaderboard or the community garden total from the browser.
What we learned
How much of "does this feel like a game" comes down to legibility, not mechanics — the original pulse ring was functionally correct but too subtle to register as the interactive element at a glance. Adding a persistent beat counter and a clearer countdown mattered more than any scoring-logic change.
What's next for Pulse Garden
A gallery of past days' gardens, and exploring Devvit's push-notification beta so players get a gentle daily nudge instead of relying on remembering.
Built with (tags, um por vez): typescript, javascript, phaser, devvit, redis, hono, vite, reddit, node.js
Try it out (link): https://www.reddit.com/r/PulseGardenDaily/?playtest=pulse-garden
Built With
- devvit
- hono
- javascript
- node.js
- phaser.js
- redis
- typescript
- vite
Log in or sign up for Devpost to join the conversation.