This is a submission for Weekend Challenge: Passion Edition.
TL;DR: Boppi turns everyday moments into tiny songs.
Add a photo, a short caption, and a vibe. Gemini understands the feeling behind the moment and creates a musical plan with melody, bass, and rhythm. Strudel then turns that plan into a song you can hear and share.
You can create a Bop alone or invite friends into a private room and combine your moments into one song.
Built with Next.js, Bun, Convex, Gemini, Strudel, and Vercel.
Try Boppi β https://boppi.vercel.app
What I Built
What was one little thing you loved today?
Maybe it was finally making a good coffee.
Maybe it was the rain while you were coding.
Maybe it was playing a game with your friends, seeing a really nice sunset, or finding a song you could not stop replaying.
When I saw the theme of this challenge, I first thought about building a normal music generator. You write a prompt, AI generates a song, and that is it.
But I wanted to make something more personal and social.
I also wanted it to be small enough that someone could understand it immediately and actually enjoy using it.
That became Boppi.
Little moments. One tiny song.
Boppi lets you turn a real moment from your day into a short song called a Bop.
You add:
- One photo
- A short caption
- A vibe
For example:
Photo: my desk while it rains outside
Caption: late night coding
Vibe: calm
Gemini looks at the photo, reads the caption, and understands the feeling behind it.
It then creates a musical direction for the moment:
Mood: focused and calm
Tempo: 88 BPM
Melody: soft and repetitive
Bass: warm and slow
Rhythm: light keyboard-like percussion
Strudel uses that direction to perform the final song directly in the browser.
The result is a short, playful soundtrack made from something that actually happened to you.
The aha moment
The main experience is not just pressing a button and waiting for an AI song.
Boppi shows how your moment is becoming music.
For example:
Your rainy window became the atmosphere.
Your keyboard became the rhythm.
Your late-night energy became the bass.
Your caption inspired the melody.
Each layer appears and starts playing one by one.
Then everything joins together into the final Bop.
That reveal is the part I built the product around.
The song does not need to be perfect or three minutes long. It only needs to create the feeling:
βWait, this actually sounds like my moment.β
Create a Bop alone
Sometimes you just want to capture something for yourself.
In Solo mode, you add one photo, caption, and vibe. Boppi turns it into a personal tiny song.
You can then share it using a public page:
RAINY DEBUGGING
a tiny song by Paul
calm Β· focused Β· 88 BPM
[ Play Bop ]
It is a different way to share a moment.
Instead of only saying:
βThis was my day.β
You can say:
βThis is what my day sounded like.β
Create a Bop with friends
Boppi also has private rooms.
You create a room, send the invite link to your friends, and everyone contributes one moment.
There are no followers, public profiles, likes, or infinite feeds.
Just one small room and one shared song.
For example:
Paul
late-night coding
Andrea
morning coffee
Mateo
football with my dad
Sofia
the sky looked unreal
Gemini analyzes the group as a whole and gives every moment a musical role:
Paulβs coding became the rhythm.
Andreaβs coffee became the bass.
Mateoβs football match became the percussion.
Sofiaβs sunset became the melody.
Strudel combines all four parts into one shared Bop.
The final result is something that only exists because those specific people shared those specific moments.
That is what makes the social part interesting to me.
You are not posting for strangers or trying to get likes. You are making a tiny creative memory with people you care about.
Why this fits the Passion Edition
When we talk about passion, we normally think about big things.
The project you spend every night building.
The team you always support.
The hobby you have practiced for years.
But I think passion also appears in smaller moments.
It is the coffee you keep trying to improve.
The game you always play with the same friends.
The music you listen to while working.
The sunset that makes you stop walking for a second.
The random thing that made your day a little better.
Boppi is about noticing those moments and turning them into something you can keep and share.
It does not ask:
βWhat is the most important passion in your life?β
It asks something much simpler:
βWhat did you love today?β
Demo
Try the live app β https://boppi.vercel.app
Solo Bop
- Add a photo.
- Write a short caption.
- Choose a vibe.
- Watch the musical layers appear.
- Listen to your Bop.
- Share it.
Room Bop
- Create a private room.
- Invite your friends.
- Everyone adds one moment.
- Gemini finds the connection between them.
- Every moment receives a musical role.
- Strudel performs the shared song.
At end you can see the archives of your bops
Code
The source code is available on GitHub:
Repository β https://github.com/pol-cova/boppi
How I Built It
Boppi uses:
- Next.js for the web application and UI
- Bun for package management and local development
- Convex for private rooms, moments, and real-time updates
- Gemini for multimodal understanding and composition planning
- Strudel for generating and performing the music
- Vercel for deployment
The basic pipeline looks like this:
photo + caption + vibe
β
Gemini
β
structured musical plan
β
validated Strudel patterns
β
tiny song
β
shareable Bop
Understanding the moment with Gemini
Gemini receives the userβs photo, caption, and selected vibe.
Instead of asking it to return random music code, I ask it to produce a structured composition plan.
A simplified response looks like this:
{
"title": "Rainy Debugging",
"description": "A calm and focused late-night moment",
"bpm": 88,
"scale": "D minor",
"energy": 0.35,
"mood": "calm",
"template": "cozy",
"layers": {
"melody": {
"density": "low",
"movement": "repetitive"
},
"bass": {
"style": "warm",
"movement": "slow"
},
"rhythm": {
"density": "light",
"texture": "digital"
}
}
}
This was an important decision.
Letting a model generate unrestricted executable Strudel code would make the result less reliable and harder to control.
Instead, Gemini makes the creative decisions while Boppi maps those decisions into tested musical building blocks.
That gives me a balance between AI creativity and consistent output.
Creating the song with Strudel
Boppi contains a small set of handcrafted song templates.
For the first version, I focused on three:
- Cozy
- Playful
- Energetic
Each template has slots for:
- Melody
- Bass
- Rhythm
- Atmosphere
Gemini selects the template and controls values such as tempo, density, note movement, and intensity.
Boppi then generates the final Strudel pattern.
A simplified example:
stack(
note("<d4 f4 a4 c5>")
.slow(2)
.sound("triangle"),
note("<d2 d2 f2 a2>")
.slow(2)
.sound("sawtooth")
.lpf(700),
s("bd ~ hh ~")
.gain(0.7)
)
.cpm(88)
Strudel performs everything in the browser, which also makes the reveal feel alive.
The user can see the layers being constructed while hearing them enter the song.
Combining moments inside a room
Convex manages the room state and keeps contributions synchronized.
Each room contains:
room
βββ invite code
βββ members
βββ moments
βββ generated Bop
When someone contributes, the room updates immediately for everyone else.
Once the group is ready, Gemini receives all the moments together.
It does not create four unrelated songs. It decides how each contribution can become part of one coherent composition.
One moment might provide the melody.
Another might control the rhythm.
Another might define the atmosphere.
This is what turns the room into a collaboration instead of a simple gallery.
Interesting decisions
No full music editor
I did not want Boppi to become a DAW or a complicated music tool.
The user only chooses a vibe.
The rest of the experience is about discovery.
Tiny songs instead of full songs
A Bop is intentionally short.
It is meant to feel like a musical snapshot, not a finished commercial track.
This also makes it easier to listen to, generate, and share.
No traditional social feed
I wanted something social without recreating another feed.
Private rooms are enough for the main idea.
The song is the social object.
Gemini creates meaning, Strudel creates sound
Gemini does not directly generate the final audio.
It understands the moment and creates the musical intention.
Strudel turns that intention into something you can hear.
Both tools have a clear role in the product.
Prize Categories
Best Use of Google AI
I am submitting Boppi for Best Use of Google AI.
Gemini is not used only to generate a title or add a chatbot to the app.
It powers the central transformation:
real moment β emotional meaning β musical composition
Gemini:
- Understands the uploaded photo
- Connects the image with the caption
- Interprets the selected vibe
- Creates the title and description
- Selects the tempo, mood, and scale
- Plans the melody, bass, and rhythm
- Assigns musical roles in friend rooms
- Finds a shared direction between different moments
Without Gemini, Boppi would only be a collection of photos.
Gemini is what turns those moments into music.
What I learned
The hardest part was not generating more music.
It was deciding how little control the product actually needed.
My first ideas included editors, timelines, custom instruments, public profiles, reactions, and many other features.
But the more things I added, the less clear the product became.
The final experience is much smaller:
add a moment
hear its song
share it
That constraint made Boppi feel more like a real product and less like a collection of hackathon features.
What comes next
There are a few ideas I would like to explore after the challenge:
- Recording a short real-world sound with every photo
- Weekly mixtapes made from previous Bops
- More musical styles
- Collaborative reactions that add a tiny sound
- Animated share cards
- Daily prompts for friend rooms
For now, I wanted to keep the first version focused on one simple feeling:
A normal moment can become something special when you hear it differently.
Try it
Try Boppi β https://boppi.vercel.app
View the code β https://github.com/pol-cova/boppi
I would love to know what your first Bop would be.
What was one little thing you loved today? π΅


Top comments (0)