Have you ever wanted to listen to Harry Styles' "Music for a Sushi Restaurant" while eating your favorite sushi? How about drink wine listening to Adele's "I Drink Wine"? With mywaves, now you can!

Inspiration

I love when I'm shopping in a store or eating at a restaurant and one of my favorite songs starts playing. It's an immediate mood booster. On the flip side sometimes it can be a bummer listening to songs a store has to play that you're not a fan of. So what if there was a way to close this gap and make musical experiences at stores better for everyone! And the way I think about requesting a song for an appointments is kind of like how baseball players have walk-up songs when they get ready to bat. We should all get to have our own walkup songs and feel special!

What it does

Customers can request a song to play at their appointment. This is done either by emailing them a link after they schedule an appointment (using webhooks to detect an appointment has been scheduled) or trough a snippet on the business's Square Online website. The customer clicks this link, chooses their song, and copies a code into the "Appointment Notes" section of the appointment form. Then, regardless of how the customer does it, when their appointment starts, their song will automatically be added to the top of the request list and the business owner can approve it right away.

This website also allow "live requesting" of songs. The customer simply scans a QR code or goes to mywaves.xyz/go and types in the store's nickname. Then they're able to request a song they want to hear.

Additionally, this flow works with both Spotify and Soundtrack Your Brand (SYB). SYB's songs are all licensed for commercial use so it's recommended that businesses use this service. However, I recognize most people are more familiar with Spotify so it's a good way to play around with mywaves before committing to a SYB account.

How we built it

I used the Square Location API, Booking API, Snippets API, Sites API, OAuth API and webhooks. I used the ruby on rails web framework which uses ruby, html, css, bootstrap, and javascript. In terms of the database, I used postgresql because it's pretty standard to use with ruby on rails. The website is deployed through Heroku. To connect to Spotify and Soundtrack Your Brand I used the https://developer.spotify.com/documentation/web-api/ and https://developer.soundtrackyourbrand.com/api/#docs-that-don-39-t-suck. Also used lots of blood, sweat, and tears πŸ˜…

In terms of process, I messed around with the Square API for a while doing the tutorials on Square's website. Then I gradually shifted into turning that tutorial knowledge into my own project. The original way I implemented the project was as a paid jukebox. So customers could scan a QR code and then pay a number of ways (including Cash App Pay). However, as I'll get more into with "Challenges we ran into", SYB's songs aren't licensed for jukebox use, just for commercial use. To get songs licensed for jukebox use you have to keep track of how much money you make charging people to use the jukebox, and give a portion of that to the various artists. So, after consulting with the SYB team, I changed plans and made it a free jukebox which they said followed licensing laws because 1) it didn't charge money and 2) the customer doesn't directly control the music, the business owner still has to approve or deny the songs.

Challenges we ran into

The first big challenge I ran into was the fact that the SYB API doesn't have a queueing functionality. Apparently this is partially due to the fact that they don't want to make it easy for developers to make jukeboxes when in reality that violates the licenses. And part of it is it's just not a functionality used as frequently in business purposes as in personal purposes. So, I had to create a workaround where each time the business owner approves a song, that song gets added to an array of song objects in the database. One song at a time is in a special playlist called mywavesxyz and is set to play next (this was the closest thing to a queueing function in the API). Then I have a job running every couple seconds in the background checking if the queued song has started playing or not, and as soon as it is, then I move a new song from my database queue to the mywavesxyz playlist and set it to play next. And so on. And then once all of the songs in my database queue are gone, it randomly selects a song from the playlist that was playing before any of the queued songs started playing (I have to save this playlist ID manually). Looking back at it I think there are a few optimizations I can make as I've learned more and more about the API, but unfortunately it's just not as straightforward as Spotify's queueing functionality. Apparently they're working on implementing it soon though so looking forward to that!

The other main challenge was the licensing as described earlier which meant I could no longer charge customers to request songs.

Accomplishments that we're proud of

It works! Really happy I got the Soundtrack your brand integration to work because I think SYB has a lot of potential and love to see more companies switch to it.

I'm happy with the frontend a lot too. I focused so much on getting the functionality to work, that I waited until the last couple days to really shape up the frontend and while there's a lot of ways I think it could still be improved it's miles better than what it looked like before.

I'm really happy with how seamless the switch between Spotify and SYB is as well. Because behind the scenes the APIs are very different but I'm glad from a user perspective that they don't have to deal with that complexity.

What we learned

A lot about ruby. A lot about APIs and how different companies implement them. I liked Spotify's API a lot, although I do have to say that it was nice that SYB has a Slack channel and will respond really quick to questions.

Non code related I learned a lot about music licensing as well. I never realized how many different types of licenses there were and the intricacies between all of them. It's also a pretty cumbersome process to try to manually get licenses yourself. The website is really outdated and it's an area I'd love to try to disrupt. That's one thing I like about Tidal is how it integrates with Cash App to tip artists. I think more forms of revenue for artists that are direct to them and not intermediated by third parties is going to be awesome.

What's next for mywaves.xyz

Analytics around what type of songs bring back the most returning customers. This will give some sort of gauge of what songs people like. Can break it down by genre, artist, album, song, etc.

Also I'm looking to implement a way for customers to connect their spotify account to a business's mywaves account that way they don't even have to request songs, songs will automatically be requested for them based on the songs that they like on Spotify.

Share this project:

Updates

posted an update

If the judges would like a test account (test mywaves account, test spotify account, test soundtrackyourbrand account, and test square acccount) please reach out to me and I can provide you with these credentials! Thanks!

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

posted an update

Saw that john@example.com signed up for an account and unfortunately you won’t be able to get email notifications from this email because it’s not a real email. However, the rest of the functionality of the website should work. Please reach out if you have any questions thanks!

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

posted an update

Realized while cleaning up my 1Password account today that I accidentally deleted my Spotify account associated with the Spotify API keys for the mywaves app because I thought that account was just a throwaway testing account but turns out it was where I was keeping my API keys. So, today I recreated the API keys on my primary Spotify account and pushed those updated keys to the website.

However, it's worth noting that if you create a mywaves account and try to connect it with Spotify it won't work right now anyways because my Spotify app is in "development mode" meaning that only accounts I specifically approve (up to 25) can use this app.

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