Inspiration

We were inspired by the RecordHacks theme to incorporate music. Once we remembered that Spotify has API endpoints, we decided to make a AI playlist generator.

What it does

Wavelength generates custom Spotify playlists based on your mood, genre preferences, current weather, and calendar availability. You can also enter freeform comments, which GPT uses to further shape the vibe of the playlist. It outputs a playable Spotify link that matches both your emotional state and time constraints.

How we built it

We used React and Tailwind for the frontend and Node.js/Express for the backend. The app integrates with Spotify’s API for playlist creation and track searching, and OpenAI's API for interpreting mood-based prompts into audio filters. We also pulled in real-time weather and calendar data to inform playlist context.

Challenges we ran into

Handling Spotify's OAuth flow was tricky, especially with token persistence. We also had to work around deprecated Spotify endpoints and make sure GPT returned structured, usable responses. Filtering songs accurately based on both mood and duration required some tuning.

Accomplishments that we're proud of

We successfully integrated Spotify and GPT into a seamless end-to-end experience. The playlists it generated genuinely matched our emotional inputs, which felt incredibly validating. We’re also proud of the clean, intuitive UI and the emotional intelligence behind the project.

What we learned

We learned how to use GPT not just for conversation, but to structure emotional inputs into usable data. We gained experience working with multiple APIs in sync and handling OAuth flows securely. Most importantly, we saw how AI can make tech feel more human.

What's next for Wavelength

Next, we want to add support for mood progression — playlists that evolve from one emotional state to another. We’re also considering GPT-generated playlist covers and multi-platform support like Apple Music. Eventually, we'd love to ship this as a Chrome extension or mobile app.

Share this project:

Updates