Enzo Furlan

vibe coding soundtrip

One of those ideas I kept starting and never finishing, until I tried building it with Codex.

Soundtrip artwork with a green route crossing a map and a vinyl record.
Soundtrip. Your next trip starts with your ears.

A few months ago I started paying for ChatGPT Plus. I was already using Go and wanted a few more features, and one of the first things I saw was Codex. I had a bunch of ideas I wanted to build, and I had actually started some of them before, but they never ended up exactly how I wanted.

Sometimes the project was too big and I could not reduce the scope. Sometimes the frontend looked too simple and that made me lose motivation. Sometimes I got to the deployment part, had no idea what to do and stopped there. And so on.

This time was different. I put everything I wanted into Codex. It asked questions, I answered them, then it asked more questions. We kept doing that until the idea became something real, useful and, honestly, much better looking than most of my unfinished prototypes.

the idea

Soundtrip is one of the ideas I had during a trip to Los Angeles. When I arrived, I started looking for local shows. Not only shows happening locally, but shows by artists from that region. I discovered Santigold there. She is not from Los Angeles, but it really catches the vibe, lol.

The idea was simple. When I travel somewhere, I want to discover artists from that place and connect their music to the trip. It makes sense to listen to music with some context instead of finding it through another random playlist after I get home.

As a Brazilian, this way of talking about music was less familiar to me. The scenes from different states here can be completely different, but I did not grow up hearing every band described through its city in the same way. When I read or talked to someone from the United States about local bands, they would say things like, “oh, they are an Ohio band” or “they are from Baltimore.” The cities were part of how they explained the sound, even when the bands played similar genres. I wanted to understand more about that.

building it

Technically, Codex handled almost everything. I was mostly responsible for being annoying and specific about what I did not want. No login, no user accounts, no database, no tracking and nothing that needed to persist after the trip was generated. I wanted a small public tool, not the beginning of another platform.

The frontend is mostly HTML, CSS and JavaScript, served through Vinext and the Next App Router. The user chooses a destination, a period, a genre and how many tracks they want. There is also a surprise button for when even that feels like too much work.

On the server, the OpenAI Responses API researches the scene using web search and returns structured JSON. I asked Codex to request more candidates than the final playlist needs, because the model can return a track that sounds right but does not exist in the exact form it described. Spotify checks every title, artist and release period, removes duplicates and provides the final cover and link. If there are not enough confirmed tracks, Soundtrip researches another set once instead of quietly returning a bad playlist.

Research can take longer than a normal web request, so it runs in the background. The browser receives an opaque job identifier and keeps checking the API until the result is ready. After the response reaches a final state, the server asks OpenAI to delete the stored response. That was another thing I explicitly wanted: use the result, return only what the app needs and clean up the API response afterwards.

Publishing to Spotify has its own protection. The credentials stay on the server, and the browser only receives a temporary signed token connected to that exact playlist. Changing a track invalidates it. The publish endpoint also checks the songs with Spotify again before creating anything. I did not design any of this before opening Codex. I just kept asking questions about what could go wrong, and it kept turning the answers into code.

And boom, it was running.

Deployment also stopped being the point where the project died. It runs on OpenAI Sites, with the OpenAI key and Spotify credentials configured as server secrets instead of ending up in the frontend or the repository. I connected a custom domain and suddenly one of those ideas had a real public URL.

the part that did not work perfectly

My only real problem was the Spotify API. I hit its limits while getting the project ready for people to use. That is fine for now. Soundtrip is simple, it is my first public project built this way, and I am pretty happy with where it ended up.

There are other limits I already know about. The cache and usage limits live in memory, so a serverless instance can restart and forget them. It is enough for a small beta, but I would move that state to durable storage before trying to scale it. For once, though, I do not feel the need to turn the small project into a big project before sharing it.

one thing I learned

By the way, did you know that Frankie Knuckles moved from New York to Chicago in 1977 and became the DJ at The Warehouse, the club that helped give house music its name? He became known as the Godfather of House Music.

I did not know that. I learned it from Soundtrip.

Soundtrip is still small and stateless. It does one thing, and for now I like it that way. You can try it here.