Inspiration

I've been playing in bands since high school, which is long enough ago that we were using cassette tapes to record our practices (before cassettes became cool again). Since then, I've shared recordings of songs with my bandmates by passing out cassettes, then burning CDs, then setting up an FTP folder to upload MP3s from some ancient MP3 recorders I had... Dropbox helped a bit with that, but you still needed to get your recordings into Dropbox. Voice Memos on the iPhone became the go-to way to record our practices a few years back, and it is fantastic... but the recordings only live on the phone of the person who recorded them. When you want to send a good idea around or a take of the latest evolution of a song, we typically send it via group text, which is great until a month later you're scrolling back through hundreds of texts to find that one recording. And the audio is kept separate from everything else that makes up your song- the lyrics, tempo, key, and notation.

I've known for a long time I wanted something that kept all of your band's files organized in one place, easily shared with only your bandmates, and grouped in a logical way that makes sense for a band: around the song. And after years of waiting for the right app to come along and a handful of false starts of me trying to build this in my spare time, I finally made it happen. Thank you, RevenueCat, for giving me that kick in the pants to finally push this over the finish line!

What it does

Bandysh is free to download and to set up one band for yourself (or accept an invitation to an existing band). You can create as many songs as you want for that band and it lets you manage the songs and all the recordings of ideas you've had for that song in one simple place.

When you're ready to share your ideas with others, upgrade to the All-Access plan. That lets you invite members to join your band and it seamlessly syncs the songs as well as up to 200 hours of recorded audio (22GB of cloud storage) so you can track all your ideas from strumming on the couch to the first time you rehearse it all the way through to a completed studio recording.

And hey- there is a pretty big chance that your band will end some day. That's ok! Life happens. You can keep Bandysh around forever and when you have a hankering to listen to that demo you recorded with that cool band you were in in NYC in the early 2000s or that live recording of your ska band from high school... Bandysh is the place for all that.

How we built it

In fits and starts.

A year ago, my current band (Bandette) was starting to work on an album. I also decided after well over a decade (!) of thinking of this idea- the first github repo I made around this idea says I made it 14 years ago!- that it was time to ship this app. I used it as an excuse for learning SwiftUI, which I wasn't able to use at my day job yet, and I also heard that Firebase was a great way to ship mobile apps without having to worry much about the backend. After watching a few YouTube videos, I was hooked on Firebase.

That version of the app worked ok! My band used it and enjoyed it, and I learned a lot about what was really important versus what I simply assumed was important. I also collaborated with a friend who put together an early version of an Android port for this.

But taking this proof-of-concept app with a duct taped together backend that I had to make some big concessions in the app experience to get to work the way I wanted it to and making something production ready... took some time. And a big rethink.

Then the day job got busier and I found myself with less space in my head to be able to focus on this when I was off work. Having a kid with an active schedule didn't help the situation, either.

At some point this spring I found something that helped supercharge my development- ChatGPT. No, the code it generates isn't perfect, and sometimes it will dig itself into a hole with a very wrong answer and you're forced to - gasp! - figure things out yourself, but being able to describe a screen or upload a scribble of what that screen should look like and have it give you at least the scaffolding of that screen and some reusable networking code saved me VAST amounts of time.

ChatGPT also helped me completely rewrite the backend to be more purpose-built for Bandysh, using Ruby on Rails- a platform I used to make a living off of but had largely not touched for at least a decade. I was quickly able to spin up a database schema and APIs to power the Bandysh platform that don't involve bending the app to conform to what you get out of the box with Firebase. (Firebase is still fantastic, and I still use it for authentication and will likely use it for push notifications as well).

I got another beta out to some friends a few months ago, and since then it's been polishing and incorporating the paywall bits. RevenueCat made setting up the IAPs and a remotely configureable and fully functionaly paywall a weekend's worth of work- the hardest part was figuring out which parts of my app would require a subscription to use.

Challenges we ran into

Conceiving of, designing, and then building an app and a platform to power it in your spare time while you have a full-time job (and a family!) isn't the easiest thing. It's also hard to keep the motivation up when you're the sole person working on a project. So just getting this all together was a challenge.

All that being said... this deadline happens to be a couple of days after Apple's latest iOS update, on which I tested my app... and it immediately crashed. Turned out the way I was using SwiftData (the persistence layer) didn't behave very well with iOS 18, and I had to make some fairly massive last-minute code changes to get my persistence stack working again. iOS 18 is so new too that StackOverflow'ing / ChatGPT'ing to find answers didn't pull up much. Fun fact: it doesn't look like you can have a SwiftData-backed class named Member now (I renamed it to BandMember after hours of trying other things and lo and behold my app just started compiling again). Good times!

Accomplishments that we're proud of

See the previous answer. Just getting this out the door! Scratching an itch for something I've not just wanted to build for a while but something that I've found useful in my real life. My band (Bandette), who I almost named the app after used an earlier version of this app while we were writing songs for our album (which will come out any month now).

Dusting off my Ruby on Rails skills. No, it's not the new backend hotness anymore. No, it also really hasn't changed much since I last was very immersed in it more than a decade ago. But it still powers a whole lot of the platforms you use every day.

What we learned

Your app may make total sense in your head but you really don't know anything until you've seen how a regular person uses it.

Apple has a lot of arcane rules for app approval- especially when IAPs are involved. (Thankfully this isn't my first App Store rodeo.)

The world of LLMs is moving incredibly fast. After a couple months of using GPT 4o to help coding, I tried out Anthropic's Claude- and the code it generated was vastly superior. Often GPT's generated code wouldn't compile without some tweaks and it'd lose track of some of the things you had just told it- but I've had those problems much less with Claude. And last week OpenAI announced a new GPT model that actually takes its time to 'think' even more- I haven't had a chance to check that out yet.

If the tools you know can get the job done, there is no shame in sticking with what you know. Do not be distracted by the new shiny.

What's next for Bandysh

So much! One of the biggest challenges for this project was really focusing on shipping an MVP... even if I'd spend some of my precious spare time going down some side quests of features I knew I wasn't going to be shipping with 1.0. Beyond the obvious post-launch bugfixes and adding missing platforms (web, Android):

  • Setlists- before the gig, plan your set with your band. After your gig, memorialize that show with a recording and being able to relive your favorite gigs. One of my favorite parts of Bandysh has been revisiting old bands' material.
  • Chord charts (perhaps ChordPro notation)- so you'll never forget how to play that song.
  • CarPlay. I want you to be able to not have to dig through apps on your phone while you're in your car (bad!) to find that last recording of that song you're going to go over while you're driving to practice.

Built With

Share this project:

Updates