Merchsheet

React
Express
MongoDB
Firebase
Merchsheet screenshotLive link

What does it do?

When groups of musicians go on tour they take merchandise to sell. Things like: CDs, t-shirts, songbooks, all sorts of stuff. At some point, they have to add up the proceeds from their merch sales and split it between all the people who have an entitlement. And that list of people generally extends beyond just band members: record labels, publishers, promoters.

Often, it's not a simple equal split: different items need to be split between different people in different ratios. Imagine the merch stand at a Nick Cave & The Bad Seeds gig - some albums made by the whole band, some made by just Nick & Warren, some solo albums. The different permutations & combinations mean that, when it comes time to divvy up the proceeds, the calculation can be pretty complex.

In the interests of transparency I have to tell you that Nick Cave & The Bad Seeds have never used Merchsheet. Frankly, it's their loss!

That's where Merchsheet comes in.

  • At the start of a tour, the band can log the items of merchandise that they plan to take.
  • For each item they detail who has what entitlement.
  • Then, for each gig, they simply record how many of each item they sold.

At any point, they can see how many items they have sold, how much money they have taken and how that money should be split.

Why did I build it?

I have musician friends who tour as a duo and as members of larger bands. They used to keep track of merch sales by hand until I suggested a spreadsheet. Even maintaining the spreadsheet grew to be an onerous task. So I built Merchsheet for them.

Also, it was an opportunity to play around with MongoDB after a senior engineer at work suggested I take a look at it.

Geeky details

Back end

  • Express.js API connected to MongoDB Atlas

Front end

  • React

Authentication

  • Firebase using email & password
  • Three levels of permission: owner, editor & viewer.
    • logins with viewer permissions can be set up for, say, an accountaant. Saves having to print details.