Inspiration
The idea came to me through my roommate, as he makes amazing music using a sequencer. I thought this can be added in Reddit with a community sense into it rather than individual music creation.
Several key mechanisms of the game are inspired from r/place. I took that core loop of r/place - a shared grid, limited daily actions, emergent collective creativity - and applied it to music.
The constraint of one beat per day isn't a limitation, it's the entire design. It forces every contribution to matter. It creates anticipation between visits. And it tries to emphasize that the track genuinely belongs to the community, not to any individual.
The 3-day cycle structure was inspired by how real music production works: drums first, then melody, then atmosphere. I just spread it across days instead of hours, turning music production into a slow, shared, social experience.
What it does
PulseFM is a playable step sequencer embedded directly inside a Reddit post.
The core loop:
- A shared 8-instrument, 16-step grid is posted to the subreddit
- Day 1 unlocks rhythm instruments (kick, snare, hi-hat, clap)
- Day 2 adds melodic instruments (bass synth, lead synth)
- Day 3 adds atmosphere (pad, FX)
- Each person places or removes one beat per day
- The track loops continuously so you can hear every change in context
- After 3 days, the track is archived and a new cycle begins with a fresh scale
What makes it interesting:
Scale randomization - each cycle deterministically selects from 60 unique scale + root combinations (Dorian, Pentatonic, Lydian, Blues, Japanese, and more). Cycle 1 might be "Sunlit" in C Major, Cycle 2 might be "Temple" in E Japanese. The community rarely lands on the same track.
Removal as a valid action - players can use their daily move to remove a beat that doesn't fit. This creates two equally valued roles: Composers (who add) and Refiners (who enhance).
Pulse Check - a lightweight vibe-voting system where users rate the current track as Fire, Clean, Chaotic, or Flat. This gives the community a shared vocabulary to discuss the track's direction.
How I built it
Architecture:
This project was pair-programmed with the help of AI tools, running on Devvit Web with a React frontend and a Node.js/Hono backend.
Audio engine - Tone.js powers all 8 instruments with real-time synthesis. Drums use
MembraneSynth,NoiseSynth, andMetalSynth. Melodic voices useMonoSynth,PolySynth,AMSynth, andFMSynth. No audio samples - everything is synthesized, keeping the bundle under 300KB.Scale system - A deterministic scale generator maps cycle numbers to musical scales. The function
getScaleForCycle(n)returns a scale definition and root note, thengenerateScaleNotes()maps 16 sequencer columns to in-key notes across the correct octave for each instrument. Bass plays in octave 2, pads in octave 3, leads in octave 4, FX in octave 5.CSS design system - Vanilla CSS with design tokens (spacing, typography, color, animation timing). No Tailwind, no component libraries. The design follows a "no box soup" principle - minimal borders, breathing space, floating text instead of cards.
Tech stack: React, TypeScript, Tone.js, Hono, Vite, Devvit Web, Redis (for persistence)
Challenges I ran into
Making 8 simultaneous synths sound good together. Early builds had instruments clashing due to my inexperience with using music libraries - the hi-hat was inaudible behind the kick, the lead drowned out the bass everything was out of tune. Spent significant time on gain staging, frequency separation, and choosing synth types that naturally occupy different frequency bands.
Scale randomization without breaking existing tracks. While adding the scale system mid-development, had to ensure it was fully deterministic - every client must derive the exact same notes from the same cycle number, with no shared state needed.
Devvit's serverless cold starts. Devvit workers spin down after inactivity and take 1-3 seconds to restart. Early tests felt sluggish because every action waited for the server. The fix was optimistic UI - update the client immediately, confirm with the server in the background, and roll back on rejection. (It was a pain every action had a slow reaction ruining the experience)
Progressive disclosure across page refreshes. To reduce the clutter of components altogether in the game this was a necessary implementation.
Accomplishments that I'm proud of
It actually sounds musical. No matter what cells people activate as not everybody is a musician, the track is always in key. The scale system makes random input sound intentional.
60 unique sonic identities. Each cycle has its own scale and flavor name ("Velvet", "Smokehouse", "Temple", "Cloudwalk"). Players don't need to know what Dorian mode is - they just hear that this cycle sounds different from the last one.
The removal mechanic. Most collaborative tools only let you add. Letting people remove creates a natural editorial process where the community can self-correct bad beats through discussion and action.
Zero audio samples. The entire audio engine is synthesis-based. 8 distinct instruments, all generated in real-time, under 300KB total bundle size.
My own beats. The most proud of I'm are the beats that I have created myself in the game.
What I've learned
Constraints drive creativity. One beat per day sounds limiting, but it's what makes every contribution meaningful. The constraint is the game design.
Music theory can be invisible. Players never see the words "Dorian" or "Pentatonic". They see "Velvet" or "Temple". The theory is there, but it's hidden behind flavor names and deterministic math. Well simplicity makes a level playing field for everyone.
How to create music on web. Not being a music guy myself it was a challenge to make things right and also to put it on web.
Using a sequencer. By making this sequencer simple to use even I am able to create simple melodies that I can hear for fun.
What's next for PulseFM
Studio Sessions (Scalability) - When the community grows beyond what a single 128-cell grid can handle, I thought of introducing instanced studios. Players are randomly assigned to studios of 48 people each (not fixed currently). On release day, all studios publish their track, the community votes on the best one, and the winning studio earns "Hit Maker" etc. status. More players means more studios, more tracks, more competition - the system scales without chaos.
Mashup Mode (Individuality) - Archived tracks become building blocks. Players can browse the archive, pick multiple past community tracks, arrange them into a lineup, and publish the sequence as their own post. No editing of individual beats - your creative input is the selection and order. The mashup plays tracks back-to-back with crossfades, and each cycle's unique scale gives real tonal variety between sections. It turns listeners into curators.
Testing the Game
You can play the live version of PulseFM right now on the test subreddit: https://www.reddit.com/r/pulsefm_dev2/comments/1uxhqr0/pulsefm/
The app is available at: https://developers.reddit.com/apps/pulsefm
Because the game normally unfolds over a real-time 3-day cycle, I have left the Developer Controls [Ctrl+Shift+D] enabled so you can experience the full loop without waiting.
Built With
- css
- devvit
- hono
- react
- redis
- tone.js
- typescript
- vite

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