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.

The idea
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.
How the sync works
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.
What it still gets wrong
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.
Decisions that are load-bearing
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.
The free tier gives away the good part
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.
Getting found
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.

Where it runs
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.
Where it stands
- 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.
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.