Work Bandpit

Bandpit

A songbook for bands, and a stage view that scrolls the same song in tempo on every member's phone at once. Live in production, self-serve end to end, and still short of bands.

Founder · Product & Engineering Live in production bandpit.app

The Bandpit home page: a heading reading 'Your band's songbook, in sync', two buttons, and a live stage view showing chords above lyrics with the tempo in the corner.
The home page. The panel underneath is the stage view, scrolling at the song's own tempo.

A band's material lives in a notes app, a folder of printouts, and one person's memory of how the second chorus goes now. Bandpit puts the catalogue in one place, with lyrics, chords and tabs, and keeps every arrangement as its own version of the song rather than overwriting the last one.

Then it does the thing a folder cannot. In a rehearsal or on stage, one person starts a session and every phone in the room scrolls the same song in tempo, together. That is the part the rest of the product exists to serve.

I have been making record sleeves, posters and merchandise for bands for twenty years, which turned out to be the research. I built this one end to end: data model, realtime service, billing, public pages, and the copy.

On start or resume, the realtime service broadcasts one absolute timestamp from the server's clock, together with the tempo and the content. After that it sends nothing. Each device works out its own scroll position on every animation frame from now() - startedAt.

The consequences are the point. Network jitter cannot move anybody, because nobody is being told where to be. A phone that drops off re-syncs the instant it reconnects, by asking for the same anchor again. And the session is written to the database, so restarting the service in the middle of a rehearsal does not lose it.

The obvious build is the other one: stream a scroll position from the server every frame. It degrades exactly where this product gets used, which is a room with bad wifi and six phones in it.

A purely linear tempo scroll drifts away from what a band actually plays, so the person running the session can tap a section to snap everyone to it. That snap re-anchors the timestamp, which is right, but it carries the tapper's own layout offset in pixels, which is not. A follower reading on a much wider screen lands slightly off.

The real fix is per-section beat durations, or scrolling against a click track instead of against the clock. It is known, it is written down in the decision log, and it has not been built.

The subscription belongs to the band

Not to the person. Bill per user and a band can slip the ten-song free cap by spreading its catalogue across free accounts. The plan is a property of the band, the cap counts the band's total songs, and any member of a paying band gets the paid features without paying separately.

A setlist pins a version, not a song

Each item in a set references a song id and a version id. Editing the song afterwards does not change what the set points at, so a gig list built in March still holds the arrangement it was built with in September.

The public address is chosen, not derived

A band's page lives at bandpit.app/<handle>, and the handle is its own globally unique field, claimed first-come, rather than a slug made from the band's name. Plenty of real bands share a name. A reserved-word list stops anyone claiming an address the app itself needs.

The lineup is text

Members are typed in by the band rather than joined to user accounts. That lets a band list a player who has never signed up, and it means no member's email address is ever exposed by a public page.

Six themes, not a colour picker

The public page offers six hand-tuned themes mapped onto CSS variables. Every one of them stays legible. An arbitrary colour picker guarantees that some pages will not be.

Bandcamp stays a link

The featured player turns a pasted URL into an inline embed for Spotify, YouTube and SoundCloud, because those three work from the public address alone. Bandcamp's embed needs a numeric album id that is not in the URL, so guessing it would fail quietly on some albums. Bandcamp gets its icon and stays an ordinary link.

Free bands get ten songs and lyrics, and they can still run a real single-song live session. You cannot sell tempo-sync in a sentence. The free session is there so a band can put four phones on a table and watch them move. Paying unlocks unlimited songs, the chords and tabs panes, playing a whole setlist live, and the per-instrument views.

The price went up rather than down. It started at €2,99 a month and €19,90 for a lifetime licence and was raised to €4,99 and €39,90 in July 2026, after working the unit economics out properly. Both prices were around 98% margin, so cost was never the lever. Everyone already subscribed stayed on the price they signed up at.

Every gig a band adds to its own page also appears in a public directory, grouped by city, by venue and by genre, with structured event data so it can show up in search as an event rather than a page. The Finnish city pages are written by hand so the grammar is right: the Lahti page is titled Keikat Lahdessa, not a machine-assembled Keikat Lahti. The twenty largest Finnish cities have a page whether or not anything is on. Every other city gets one only once it has a gig, so there are no empty pages sitting in the index.

Gig posters and share cards are composited from the band's own uploaded photographs, in four aspect ratios, and never from generated imagery. The line on the home page — no AI slop, just your songs, your photos, your words — is a constraint in the renderer, not a claim in the marketing.

The page analytics a band sees are a beacon: page views and which buttons visitors pressed, counted on the band's own record. No cookies, nothing personal.

A city page in the Bandpit gig directory, headed 'Keikat Lahdessa', listing one upcoming show with its date, venue and time.
A city page in the gig directory. One upcoming show is what it says, because one upcoming show is what there is.

Web on Vercel, the realtime service on Fly.io, the database on MongoDB Atlas. All three are pinned to Stockholm, and that pinning is the fix to a real problem: an early beta had the web functions defaulting to a US region while the database sat in Stockholm, so every query crossed the Atlantic and came back. Sign-in, live payments, transactional email and image uploads all run against real services, so anyone can sign up, start a band, publish a page and upgrade without me touching anything.

  • 1 timestamp per session is all the realtime service sends
  • €4,99 a month for the whole band, not per member. Or €39,90 once.
  • 10 songs on the free tier, with a real live session among them
  • 3 services, one region: web, realtime and database all in Stockholm

The software is finished enough to use. The supply is not there yet: on 29 July 2026 the public directory listed three upcoming shows. The discovery loop only pays once bands are publishing pages and adding gigs, so the next job is not a feature. It is finding five to ten real bands.

Not on this page yet

Sign-ups, paying bands, revenue. There is no figure here I would stand behind in a room, so there is no figure. This block comes out when there is one.

Kallio — One Day in Paradise

A narrative point-and-click game about one day in Helsinki's Kallio, in a city that refuses to react to you.

Back to work