The App That Lives Between Shows
“Thank god this app rocks and I can live through the chompers.” (a chomper, in the chat, on a night they could not make the show)
Two months ago I wrote up Goose Spring ‘26. The through-line of that post was that the live show finally worked. Live Activities stayed up, the setlist was seconds behind the room instead of minutes, song calls landed, and forty people spent a tour sending each other 3,737 messages from their couches and their seats. The app was good for the two and a half hours a night that a band was on stage.
That was the easy half. The hard half is the other twenty-one and a half hours, and the days between shows, and the weeks between tours.
Here is the thing nobody tells you about building a live-event app: the event is not the problem. The gap is the problem. The tour ends, the chat empties out, the lock-screen Live Activity goes dark, and everyone drifts back to their normal feeds until the next run gets announced. I said this in the Spring post, in the section about the jam bracket, and then I spent the next two months building against it on purpose. The whole point of a third place is that you can go there when nothing is happening. A bar that only opens during the game is not a bar. It is a stadium.
So this is a post about what we shipped to make Zabriskie worth opening on a Tuesday in the middle of June with no show anywhere. But I want to say the real thing first, because it is the reason the rest of it exists. I am proud of this one. I love this app in a way I have not loved something I built in a long time, and I love it because it is not really mine. It is a small and genuinely growing community of people who love the same bands I do, and we are growing it the slow way, by hand, one person at a time, with no ads, no growth team, and no playbook. Two of us build it. One of us has spent the last few months handing out stickers on the lot and talking strangers into it between sets. That is the entire marketing department, and I will get to him, because he deserves most of this post.
It is also a post about whether the between-shows bet worked, which is a question you answer with numbers, and I am going to be honest about the numbers, including the ones that did not go the way I wanted.
I counted the PRs again, the same way I did in April. Between the last show of Spring tour and today, 787 pull requests merged into Zabriskie. That is more than two and a half times the entire Spring tour, in about the same span of calendar. The app went from build 25-ish to iOS 53 and Android 51, shipped v1.5.0 to the App Store and the Play Store, and grew an entire second client: it runs on your watch now, which Patrick built end to end. And nearly half of those 787 pull requests are his, which is the single most important fact in this post and the one I want to sit on for a minute before anything else.
There was also a real deadline this time. Goose put out a new album, Big Modern!, and took it on the road this summer. The album drop and the tour behind it are the biggest moment a band’s community gets all year, and I wanted every surface of the app ready for it: the live chat, the show page, the home screen, the band’s whole history one tap away. So a lot of what follows is us getting the room ready for the party. And when the Big Modern! tour actually started in June, the room filled. I will show you the chat numbers, because they are the ones I am proudest of.
Start with the room everyone actually lives in during a show: the chat.
The Live Chat Got Rebuilt, and It Is Where Everything Happens
During a show the chat is called the Chomp, and it is the beating heart of the whole app. The big move this window was rebuilding it from the studs into Live Chat V2: a full cinematic redesign, shipped over weeks in May, warmer and bigger and more editorial, less like a database with a skin on it and more like an actual room. That redesign is the real story of this section. The flashiest single piece, the reaction heatbar, was actually the last thing we added, at the very end of June, right as the Big Modern! tour turned the room hot. The commit history is honest about the order: the room got rebuilt first, and the thermometer went on the wall last.
The heatbar sits above the chat and shows the room temperature. It counts the reactions flying right now, so you can feel a jam landing before you have read a single word. It turns out a lot of people want to be in the room without composing a sentence, and a tap of 🔥 is a much lower bar than typing. Around it we shipped set markers (“🎼 Set 1 begins,” a “Set break” vote chip), duration-sized song progress bars, role badges, a spoiler-safe delay for couch viewers so the people in the building do not ruin the song for the people on the stream, and, because we are on the App Store now, report-and-block moderation on every message.
One detail I love more than I expected to: the reactions are band-specific. The palette changes depending on whose show you are in. Walk into a Goose chat and your reactions are the band: 🥸 for Peter, 👟 for Rick’s yellow Chuck Taylors, 🕶️ for Trevor, 🌽 for Cotter (yes, a corn). Walk into a Phish chat and it is 🎹 Page, 🎸 Trey, 🌵 Mike, and ⭕ Fishman. Every band we add gets its own kit drawn from its own members, all server-driven so we can hand a new band its reactions without shipping an app update. And there are conditional sit-in reactions, so Stuart Bogie’s 🎷 slots into the Goose lineup, right between Rick’s Chucks and Trevor’s shades, on the nights he actually sits in. This one has a lineage worth naming: Nicole had the original idea, and Patrick built it into the server-driven kit it is now. It is a small thing that tells the regulars we know exactly whose room they are standing in.
The chat noticed the second we shipped it: “New reactions are super cute. Rick, Peter, Trevor, Cotter?”
And the chat is wired into the stats the whole time. Tap any song in the setlist and a stat sheet slides up: when the band last played it, the gap since, its first-time-played, and your own history with the song, including how many times you personally have caught it live.
During the Big Modern! tour that last number turned into a running joke. The album’s songs were suddenly in every setlist, and people watched their personal counts climb show by show, in real time. One chomper, a few nights deep:
“I’ve now seen 27 of 35 Big Modern! ever played 🤣”
That same history powers the feature I am fondest of, the FTP witness. FTP is “first time played,” a song’s debut show. When a song lands in a live setlist, the app quietly checks everyone in the room, and if any of them were RSVP’d to that song’s very first performance, an inline 👀 pill drops into the chat: “2 people in the chomp were at this song’s FTP.” Tap it and it opens the debut show. It is the app reaching back years to tell a room that someone standing in it was there at the beginning, and nothing makes a chat feel more like a community than being reminded, live, that the person you are talking to caught the debut of the song you are both hearing right now.
Here is the honest engagement picture, and it is the number I am happiest about in the whole post. Reactions were basically dormant through May, a handful a week. Then the Big Modern! tour started and the chat went vertical: 312, then 1,067, then 897 reactions in three consecutive weeks. In just the last three weeks of tour, the Goose live chats carried roughly 1,500 messages and 2,300 reactions, about 3,800 interactions total, which rivals the entire fourteen-show Spring tour in a fraction of the nights. When the band finally gave everyone something to be loud about, the redesigned room was ready to be loud in.
The people in it will tell you what it feels like better than I can:
“Still an hour 20 til show time but I opened the chomp.”
“I love the time counter for the song.”
The Lot
When you open Zabriskie now, you do not land on a feed. You land on The Lot.
The Lot is a personalized home. It is the leftmost tab and the default route, and it is built to answer one question the feed never could: what is worth my attention right now, for me. If a band you follow is on stage somewhere, the hero card is that show with a live setlist preview ticking underneath it. If nothing is live, it reaches for the next best thing, and it has a lot of next-best things to reach for: tonight’s shows and who is going to them, last night’s auto-generated recap, the jam bracket that is still taking votes, a new album to go listen to (it pushed the Big Modern! listening party the week it dropped), an “On This Day” card that surfaces a show from your own history or a band anniversary, a historical show worth revisiting, a bookmark to return to, a one-tap RSVP, even a nudge to post to the Flow if you have been quiet for a week. Every card is a real destination, not a placeholder. The Lot’s whole job is to always have one more good reason to stay.
The design principle underneath The Lot is the same one that governs the whole app: it never shows you an empty room. If there is nothing live, it does not say “nothing is live.” It finds the thing about your history, or your friends, or the band’s history, that is worth a tap. An app that opens onto a dead feed teaches you to stop opening it. The Lot is the counter to that reflex, and it is the surface that most of the rest of this post feeds into.
The Show Page Became the Whole Show
Every show now opens into a redesigned, cinematic show detail page, and it is doing a lot of jobs at once. Before the show it is a countdown and a planning surface. During the show it hands off to the live chat. After the show it is the recap and the setlist for good.
The hero is a sunset marquee with a live flip-clock counting down to doors. Under it, three avatar rows show your people sorted into GOING, COUCH (couch touring), and WANT TIX, so you can see the shape of the night at a glance and who to find. You can call the opener right from the show page, days before doors, the same one-tap prediction game that lives on the Lot and in the live room (they all share one store, so your pick follows you everywhere). You can share where you are sitting and see where everyone else is, section and row, so your friends can actually find each other in a shed. There is trip planning for lodging, a “the stage is dark” empty state that flips to a live setlist when the first song lands, and, once it is over, the full setlist with gaps, sit-ins, and a recap blurb built from the room’s own reactions.
That “call the opener from anywhere” detail is a small example of a rule we hold hard: a feature should be one thing with one source of truth, reachable from wherever you happen to be. Your opener call is the same object whether you make it on the Lot four days out, on the show page the morning of, or in the live room as the lights drop. People noticed. One night in the chat: “we should build a closer call feature for pre show lol.” That is the app working, when the users start designing it with you.
The Bracket Is the Bridge Between Tours
This is the feature I care about most for the actual between-shows problem, because it is the one that reaches into the dead weeks and keeps people listening.
When a tour ends, the app seeds a March Madness style bracket of that tour’s best jams. The seeding is not editorial: we run sentiment over every show’s live chat, weight it by song, cross-reference the historical setlist data for bustouts and rarities, and the top sixteen jams become the bracket. Then the rounds release on a schedule, Round of 16, Quarters, Semis, Final, and the community votes each one. Ties break by seed. Followers get a push when a new round opens.
The part that makes it work is the audio. Every matchup card has an inline player for both jams, streaming from Relisten where the recording exists, with a nugs.net “listen on” link as the fallback when it does not. You cannot vote between two twenty-minute jams without hearing them, so voting in the bracket means re-listening to the tour you just watched, one jam at a time, for weeks after the lights came up. By the time we crown a Jam of the Tour, the next run is already on the calendar and nobody ever fully left.
The gap between tours is where most music apps quietly die. The bracket is the deliberate answer: it turns the dead weeks into a reason to open the app every few days, re-listen to a jam, and argue about it in the chat, right up until the next tour makes the argument moot.
A Reference Library You Browse for Fun
The other way to earn a Tuesday open is to be worth reading when nothing is happening. So a big chunk of the 787 went into turning Zabriskie into a browsable reference for the bands themselves, and this is the part where the usage numbers actually show up.
The Songbook. We rewrote the old song-search box into a full catalog directory: every band’s entire songbook, browsable, with a band-switcher rail so you can jump from Goose’s book to Phish’s to Billy’s. It is styled as a “Gold Ledger,” with letter headers and per-song play counts, and it marks the songs you personally have caught live so your own book fills in as you tour. There are 17,326 songs in it across every band we track. It is the thing you open in a hotel room at 1am to settle a bet about how many times they have played a song.
The Poster Archive. Every show can carry its posters now, including multiple variants per show (the foil, the rainbow, the artist edition) with proper variant labels and a carousel. Admins get a variant picker and an “add another” flow, and there is an in-app button to sync posters straight from the Goose store, backed by a cron job that refreshes the archive daily. This is the poster-archive goal I have had for a while: not “the one official poster,” but the whole wall of variants a fan might recognize from a show they were at.
Sit-ins and Guests. This one is Patrick’s, top to bottom. When a guest sits in with the band, that is now first-class data: a /guests directory, guest credits on the song page and the setlist with per-instrument icons, band-emoji guest reactions, and a backfill of the guest history across the whole catalog. Phish alone came in at 151 guests over 1,006 appearances, plus JRAD, Greensky, Goose, and more. If you ever wanted to know every time a specific person walked on stage with a band, that list exists now because Patrick built it, and it is the kind of thing only a real fan thinks to build.
None of these three are things you open during a show. They are things you open because you are a fan and it is a slow afternoon and you want to fall into your band’s history for twenty minutes. That is the whole idea, and this is the part people actually did all summer. More on that below.
Goose Mode and the Band Pages
Each band gets a band mode, a tour companion tailored to one band at a time, and Goose Mode got most of the love because Goose is home base. It knows the band’s calendar, colors, and vocabulary. The centerpiece is a tour timeline with a live countdown to the next show, past shows checked off, upcoming shows carrying weather and which of your friends are going, and your friends annotated in and out of the run leg by leg. Every band also has a full band page: recent shows with inline-expand setlists, your personal history with that band, and a jump straight into the Songbook. Adding a band is a whole project (find a setlist source, backfill the history, wire the page and the mode), and we did it more than a dozen times, because the more homes there are, the more nights someone has a reason to open the app.
It Runs on Your Watch (Shipping for Fall)
We built an entire new client this window: the Wear OS and Apple Watch apps, essentially all of it Patrick’s work, from the SwiftUI screens to the WidgetKit complications to the connectivity layer. They are not in the stores yet, and that is on purpose. We ran them on our own wrists through the whole Big Modern! summer tour as a live field test, and they ship for real for Fall tour. Everything below already works. It just is not public yet.
The headline feature is an always-on live show on your wrist. When a band you follow is playing, an OngoingActivity and a watch-face complication put the current song, set, and elapsed time on your watch, persistent, glanceable, updating as the setlist moves. There is a countdown complication for the gap between shows, so even when nothing is live your watch face can tell you how long until the next one. We mirrored the live reaction kit to the watch, so you can react to a song without pulling your phone out of your pocket at all.
The watch is the purest expression of the “be present at the show” argument I keep having with people, turned inside out. The complaint is that the app pulls you into your phone. The watch is the app admitting the phone is too much during the show, and shrinking down to a glance and a tap on your wrist so you can put the phone away and still be in the conversation. It is the app taking the criticism seriously and building the answer.
The Whole App Got Redesigned Underneath All of This
None of this happened in isolation. The Lot, the live chat, the show page, the Flow, profiles, notifications, festivals, and the band modes all got “v2” cinematic redesigns in the same language: warm parchment and sunset gradients, film grain, an editorial serif for the venues, less like a database with a skin on it and more like a thing made by people who love the thing. The whole app changed clothes this window. This is a big deal operationally because of how it ships. Every redesign runs behind a version flag, keyed to the client build, so an old phone that has not updated keeps getting the old design and a fresh install gets the new one, and neither breaks. That is the machinery that lets us redesign a live surface without stranding the person watching a show on a two-month-old binary. It is unglamorous and it is most of why we can move this fast without breaking the people already here.
New Rooms: Cabo, the Festivals, More Bands
The band list kept growing. We backfilled full histories for Widespread Panic (3,114 shows), Eggy, and Dizgo, on top of the dozen bands we added during Spring, each with the full treatment: a source for the setlists, a band page, a band mode, a spot in the directory. There are 102 bands and 38,894 shows in the catalog now.
We built out festivals as their own surface: a multi-stage schedule grid, a plan phase, and a full festival recap that reads the whole weekend rather than one show, with a program block, hero moments, a route map, and per-day bookends. Viva El Gonzo in Cabo got the destination-festival treatment (down to canonicalizing every set to San José del Cabo), and we seeded lineups for All Good Now and Northlands. Every new tour gets wired in the moment it is announced.
The point of all of it is the same: the more bands and the more festivals live in the app, the more nights of the year there is something happening for somebody, and the fewer truly dead Tuesdays there are.
Festival Mode: Plan It Like a Conference
A festival is a different animal from a tour stop, so it gets its own mode. The centerpiece is a multi-stage schedule grid, and the closest honest comparison is a work conference program: stages down one axis, set times across the other, every slot a block you can tap. Except the sessions are sets, the tracks are stages, and, exactly like a good conference app, the schedule is yours. In each timeslot several bands are playing at once across the stages, and you pick the one set you are actually going to. The app assembles those picks into your personal day, one choice per slot, the same way you would star the talks you want at a conference and let it hide the rest.
And because a festival grounds is a place you can genuinely get lost in, it does the other thing a conference app does that you never knew you needed: it tells you where to go. Between sets it surfaces your next pick, points you at the right stage, and tells you how far the walk is, so you are not squinting at a paper map in the sun wondering whether you can make it from the Beach Stage to the Jungle Stage before the band you actually care about starts. It flags your overlaps, carries each day’s weather, and lights up the set happening right now. When the weekend is over, Festival Mode writes a recap of the whole event, not one show but the full arc: a program block, the standout moments, a route map of where the weekend went, and per-day bookends. Viva El Gonzo in Cabo got the full treatment this year, down to canonicalizing every set to San José del Cabo.
Half of This Is Patrick
I need to stop and do this properly, because if you have read this far you have been reading “we” the whole time and the “we” is doing a lot of quiet work.
Patrick McCaughey (he is @blimpalot in the app) wrote nearly half of the 787 pull requests in this window. Not helper commits. Whole features, end to end, that are among the best things in the product. The Apple Watch app is his. The entire sit-in and guest-credit system is his. Group DMs and the Messages hub are his. Birthdays, big chunks of the poster archive, huge swaths of Tour Stats, the band backfills, the reaction kits for new bands. When I said the reference library is the part people actually used all summer, I was mostly describing Patrick’s work.
I said it myself in the chat one night, and I am quoting it because it is both generous and exactly backwards about who actually deserves the credit:
“I might have wrote the app but all the cool shit in the app isn’t me it’s Patrick lol”
He would tell you the opposite. We are both a little bit right, and he is more right than I am.
And here is the part that does not show up in a commit log at all. Patrick made stickers. Actual, physical, die-cut vinyl slaps, and he brings them to every single show and hands them out: on the lot, in the lot line, in the pit, to the person next to him, to the bartender, to total strangers between sets. He is not just leaving them on a table. He is walking up to people, showing them the app on his own phone, and talking them into it one human conversation at a time, night after night, city after city. Every growth chart later in this post that ticks up, ticks up because Patrick stood in a parking lot in the heat and sold someone on a thing he helped build. The man is a mensch. I do not know a better word for it, and I do not think there is one. Half the code and all of the street team, cheerfully, for the love of it.
That is the growth engine. Not a referral loop or a viral coefficient. A person who loves the thing, standing in front of another person, in the place they both love to be. You cannot buy that and you cannot fake it, and it is the entire reason a two-person app has a real community around it at all.
Did It Work? The Honest Numbers
I promised numbers, not vibes, so here they are, including the ones I would have quietly dropped if I were selling something.
Users grew from 251 to 426. That is 70% growth in two months, which sounds great until you look at when it happened.
There is one milestone I am, as the proprietor of a jam band app, contractually obligated to report. Somewhere during the two-night Raleigh run at the end of June, right about the time Goose hit the stage at Red Hat, the registered user count ticked over to exactly 420. We did not plan this. We are, however, precisely the crowd that was going to notice, screenshot it, and refuse to shut up about it. It has since climbed to a spiritually inferior 426, but for one perfect night in Raleigh, the fanbase was, numerically, blazing it.
Signups are event-driven. They spiked during the tour and the week after (the wrap-up avalanche, word of mouth, and Patrick’s stickers), then dropped to single digits a week through June. This is the thing I got wrong going in: I half-expected the between-shows features to keep pulling new people in on their own. They did not. You acquire people at shows, from other people. Nothing I shipped in May moved that needle, and pretending otherwise would be exactly the kind of thing this blog exists to call out.
But I want to be clear that I am proud of that chart, spike and cliff and all. Those 426 people are not a paid-acquisition cohort. Every one of them is someone who was at a show, or in a chat, or handed a sticker, and decided this was worth their time. That is the only kind of growth I actually want. I would rather have 426 people who love it than 40,000 who installed it and forgot, and the shape of that chart is what growing something real and by hand actually looks like.
So if new signups are a tour phenomenon, the real job of everything in this post is not acquisition. It is retention: keeping the people who showed up in Spring around and warm until the next run, so the community is intact when it matters. And on that, the numbers are better and more honest:
- The live chat never went silent. 2,547 messages from 42 people across this window, versus 3,737 from 40 during the concentrated Spring run. Fewer messages, because there were far fewer big Goose nights, but the same size of core showing up, between tours, with no fourteen-show schedule forcing them to.
- People spent the quiet months logging their history. Attendance records went from 1,783 to 4,598, and 2,570 of those were logged in this window, spread across 70 different bands. Cataloging the shows you have been to is the most between-shows activity there is. Nobody logs a 2016 club show during a live set. They do it on a slow Sunday, which is precisely the Tuesday-open I was trying to earn.
- The reference library got used. The Songbook, the poster archive, and the guest directory are the surfaces with real traffic on no-show days, which tracks: they are built to be read when nothing is live.
- And when there was a show, engagement went vertical. As covered up in the live-chat section: reactions went from a handful a week to 1,067 in a single week once the Big Modern! tour started, and the last three weeks of tour drove roughly 3,800 chat interactions, rivaling the whole Spring run. The between-tours job is retention, but the tour itself proved the redesigned room is more alive than it has ever been.
And the numbers I am not going to give you: a clean daily-active-users chart. We record a row when a user opens the app, but that table has multi-week holes in it from May and early June where the logging was broken, so any DAU or “percent active on non-show days” figure I quoted would be built on gaps. I would rather tell you the table is broken than draw a confident line through missing data. Fixing that instrumentation is now on the list, because the between-shows thesis deserves a real measurement and right now I cannot give it one.
The one-line version: we are not going viral, and I do not want to. We are growing a thing I love slowly, by hand, and keeping the room warm between tours. Mostly we did.
What This Stretch Taught Me
- The gap is the product, and it is a retention problem, not a growth problem. Spring proved the show works. This stretch proved that new users arrive on the tour calendar and not otherwise, so the between-shows job is to hold the community you already have. Almost every feature in this post is a bet on retention, and the honest scoreboard is “the core stayed,” not a signup hockey stick.
- Measure the thesis or you are guessing. I built a whole argument about between-shows engagement and then discovered my own session-tracking had holes in it. Shipping the features without fixing the instrument to grade them is a mistake I am writing down so I actually fix it.
- Shipping a redesign is a distributed-systems problem. The version-flag machinery that lets an old build keep its old UI while a new build gets v2 is the least visible work of the whole two months and close to the most important. Without it, moving this fast would mean breaking the exact people who already showed up.
- 787 PRs is still not normal, and most of it is still Claude. Same as April: a lot of this was written by Claude, a lot of it had to be rewritten by Claude after I caught it going sideways, and every sharp edge got logged into the agent reliability dataset I keep publishing from. The failures are the point of the dataset, not something to hide.
- Being on the App Store changes what you build. Report-and-block moderation on chat messages was not a feature anyone in the community asked for. It was the price of admission to the store, and it shipped in the same window as everything fun. Growing up means building the boring safety surface too.
And I should say the obvious thing, the thing under all of it, the reason two people spend nights and tour weekends building a couch-touring app instead of doing literally anything else: Goose fucks. That is the whole premise. The band is that good, the jams are worth talking about at 1am, the bustouts are worth calling from your couch, and the community around them is worth building a home for. Everything in this post is downstream of a band being good enough that people want to be in the same room about it, even when the room is a chat.
Goose Summer is in the books now, and this post is the receipt for it. Phish is up next, then Goose Fall after that. The festivals are seeded, the watch is on my wrist, and Patrick built it. The app is not done, and the real test of everything here is not this recap. It is whether the room stays this alive between now and the next run, while it is still just an announcement away.
If you toured with us this summer, thanks for chomping. If you have been in the chat on the dead Tuesdays, you are one of the 42 who kept it alive, and you are the entire experiment working. If Patrick handed you a sticker in a parking lot and you scanned it, welcome, you are the growth chart. And if you have never tried it and an app that is good company between shows sounds like something you want, come find us. There is probably something worth reading tonight, even if nothing is live.
One housekeeping note, same as last time: the screens in this post are mockups, not real screenshots, drawn to make each feature legible in one frame. The real app looks slightly different on iOS, Android, and the watch (Live Activities vs. ongoing notifications, complication styling, system fonts). The features themselves all shipped, and Patrick’s stickers are real. The growth figures are real production numbers as of June 30, including the unflattering ones. Patrick’s share of the work is real too, and if anything I undersold it.