Behind the Archive

Forty Years of Bass, Finally Written Down

The first band was Uncle Mumford, in high school, in 1985. Then 540 West and Linch Pyn, four nights a week on the road with New Found Daze, and three decades of bands after that. Most of it was never written down.

In November 2025 one prompt started pulling the pieces back together: flyers, setlists, tapes, photos, a spreadsheet. A year later it is this archive.

None of it could have been shared without AI.

Forty years, night by night

Every bar is a documented night. The shaded stretches are shows that happened but were never written down, estimated band by band.

Documented nights per yearPlayed, not documented (Bill's estimate)
One year of building

Eleven eras, from the first prompt to the page you are reading. Each bar is an era (click one to jump to it); the gold lines are the turning points.

DecJan 2026FebMarAprMayJunJulAugSepOctNovEra 1: The Origin1. The OriginEra 2: The Break2. The BreakEra 3: The Pivot3. The PivotEra 4: The Narrative Layer4. The Narrative LayerEra 5: The Replatform5. The ReplatformEra 6: The Operating System6. The Operating SystemEra 7: Infrastructure Grows Up7. Infrastructure Grows UpEra 8: Looking the Part8. Looking the PartEra 9: Checking Its Own Work9. Checking Its Own WorkEra 10: The v2 Redesign10. The v2 RedesignEra 11: BTB27 and Booth211. BTB27 and Booth2
One database, four surfaces

The archive was the first thing built on the database. It was not the biggest. The same events, performances and participants that draw a show page for a fan also book the show, confirm the band, advance the venue, pay the players and tell each musician where to be. That only works because there is one record of every show, and every surface reads and writes the same one.

One database, one API Supabase / Postgres Cloudflare Worker: 373 routes events · performances · participants · venues · songs · money BillTaylorBass.comFans · readsThe archive: shows, setlists, recordings BTAMVenues and bookers · reads and writesThe shingle, plus confirm, advance, guest list BoothBill · reads and writes · 234 routesBooking to settlement, one show at a time GreenroomMusicians · their own data · 51 routesWhere to be, what to play, what they were paid
BTAM
btaylorartistmanagement.com · for venues

A deliberately small shingle for the bands Bill plays in, and the host for the pages a venue or a player actually touches: show confirmation, the venue advance, the guest list, the run sheet, payment confirmation and merch checkout. Each is a link with a token, reading and writing the same show record.

Booth
the operator console · for Bill

Where a show is run from start to finish: the event and its lineup, confirmations sent by text and tracked to a yes, the venue advance, run sheets, ticket pacing against how that room usually sells, settlement, paying the players, newsletters. Close to two thirds of the API exists to serve it.

Greenroom
the musician portal · for the band

Each musician sees their own schedule and run sheets (offline, for load-in with no signal), marks their availability, and sees their own pay and tax documents, never anyone else's. Their year in review is written from their own shows. A separate app on purpose, so an admin control can never appear for a player.

Behind the Greenroom: what it replaced →

Route counts as of October 2026. Greenroom and BTAM were rebuilt in the v2 redesign and moved into place in September (Era 10).

Behind the GreenroomThirty years of booking bands by text thread and spreadsheet, and the musician portal and automated workflows that replaced them.Read it →

The part that isn't on the screen

What I really built over this year was an education.

I've spent my entire career in technology, at software and hardware companies, so none of the vocabulary was foreign: databases, domains, APIs, deploys. But I was always adjacent to the building, never the one doing it. I had never been a hands-on coder or created an application. Modern web design, Google Apps Script, schema design, Cloudflare, backups, how a domain actually resolves. I knew them as concepts, not as things my own hands could make. Every page in the story below was something I built for the first time, in real time, by building it.

And the pattern repeated at every turn: each time the project hit a wall in the data model or the architecture, the only way through was a jump to a more capable technology: a spreadsheet to a real database, a published CSV to an edge API, a single site to two harmonized ones. Each jump solved the old limit and introduced a steeper learning curve than the one before it. The site climbed; so did what I had to understand to keep building it.

This is the part I'm proudest of. Not the platform itself, but that AI finally closed the distance between understanding technology and actually creating it. I spent a career on the near side of that line; this is the first thing I've built across it. What's here could not have been done without AI. That's not a disclaimer. It's the whole point.

Era 1The Origin: A Musician's Personal Record
Google Sheetthe record
Published feedsthe first public site
Supabase / Postgresone canonical database
Cloudflare Worker APIevery page reads it
Booth, Greenroom, BTAMrunning the shows
1.1~2010 – 2025 · the before
The Gig Log

For about fifteen years there was a spreadsheet. A musician keeping a running list of his own shows (original projects, tribute work, sit-ins, one-off bills), mostly so he could stop losing the record. It covered the recent years reasonably well, and honestly, Bill figured that was all he really wanted: a tidy list of where he'd been lately. No platform, no ambition beyond "don't forget." That spreadsheet is the before, the raw seed everything else grew from.

1.2Thanksgiving week 2025
The Spark: "List Every Show I've Ever Played"

Over Thanksgiving week 2025, almost on a whim, Bill opened a ChatGPT prompt and asked it to list every show he'd ever played. Over the next few days the AI kept surfacing little artifacts of his musical past scattered all across the internet: old club flyers, festival listings, setlists, reviews, audience recordings, photos. The fifteen-year spreadsheet he'd thought was "enough" suddenly had a long tail he'd never collected. That's what lit the fuse: not the want for a website, but the want to compile all the orphaned bits (every fragment of a forty-year career, scattered and decaying in a hundred places) into one trustworthy record. Within days the gig log became a public site: BillTaylorBass.com.

Accuracy beats polish. The discipline of pulling scattered fragments into one clean record is what later made Songs, Insights, and Shared Stage possible.

1.3Dec 2025 – Jan 2026
The Insight Era: Treating the Archive as a Dataset

Once the archive was reasonably complete, the obvious question was: what does it tell me? Site build v2 introduced analytics: shows per year, most-played venues, song frequency, band activity over time. For the first time the data was being queried rather than just stored. Deterministic IDs, normalization, and repeatable import pipelines became priorities. Every new page increased the cost of changing the schema.

Features create debt fast. Every new page made it harder to change anything underneath.

Era 2The Break: When the Model Stopped Working
Google Sheetthe record
Published feedsthe first public site
Supabase / Postgresone canonical database
Cloudflare Worker APIevery page reads it
Booth, Greenroom, BTAMrunning the shows
2.1Jan – Feb 2026
The Breaking Point: Multi-Band Show Model

The original data model baked in one assumption: one show, one band. It worked fine for solo-headliner entries. It fell apart the moment the archive reflected real-world live music: multi-band bills where Tribute ABB, The Core, and other acts share a stage the same night. The "stabilization war" of early 2026 forced a structural decision: repeated regressions across the editor, the canonical tabs, and the public site made it clear that patching symptoms wasn't an option.

The multi-band problem wasn't a bug to fix. It was a signal that the model needed to describe live music as it actually works.

2.2Jan – Mar 2026
Data Model v4: Events / Performances / Participants

Data model v4 introduced a properly normalized, time-aware schema: Events (the show), Performances (each band's slot at that event), and Participants (each musician's role in each performance). That separation (event from performance, performance from personnel) is the architectural foundation everything else builds on. With it came deterministic IDs, alias resolution, and a strict contract: canonical tabs are the only write surface; EXPORT_* tabs are generated compatibility views; the public site reads only published EXPORT_* feeds, never directly from canonical.

Separate write complexity from read stability. The public site can be boring and reliable while the canonical engine evolves aggressively behind the contract.

Era 3The Pivot: From Personal Archive to Relationship Graph
Google Sheetthe record
Published feedsthe first public site
Supabase / Postgresone canonical database
Cloudflare Worker APIevery page reads it
Booth, Greenroom, BTAMrunning the shows
3.1Feb – Mar 2026
The Shared Stage Emerges

Something unexpected happened when data model v4 was applied to the archive: the data stopped being a list and started being a graph. When you correctly model who played what, at which event, in which band, alongside whom, relationships between musicians, bands, and venues emerge naturally from the structure. Bill has shared a stage with hundreds of musicians across forty years; the canonical archive doesn't just record that, it maps it. Degrees of separation. Co-occurrence networks. Time-aware band membership.

The archive stopped being a list of shows. It became a map of relationships.

3.2Mar 2026
BTB as the Seed Graph

BillTaylorBass.com isn't the destination. It's the proof of concept and the seed. That network, properly modeled, is the first node cluster in a much larger graph. The vision is additive: other musicians, bands, and venues bring their own documented histories, and the graph grows outward from Bill's network to the broader scene.

Bill's archive is Node Zero. The platform starts here and expands outward from a known, trusted dataset.

Era 4The Narrative Layer: When the Archive Told Stories
Google Sheetthe record
Published feedsthe first public site
Supabase / Postgresone canonical database
Cloudflare Worker APIevery page reads it
Booth, Greenroom, BTAMrunning the shows
4.1April 2026
Stories Embedded in the Data

With the v4 model in place and the public site reading from a stable contract, attention turned from storing the data to surfacing the stories already inside it. Show Significance, Rarity scores, Milestone counters, First/Last flags, Anniversary markers, per-musician shared-stage totals, venue lifecycles. Each is pure derivation from data the archive already had. "10th show with The Core at Smith's." "Bill's 50th show with Kyle Bryant." "Rare lineup: only 2 shows ever." Each pill turns a row of data into a sentence about the work.

An archive becomes a story not when you write narrative on top of it, but when the structure of the data already implies one.

4.2May 2026
Booking Intelligence: Looking Forward, Not Just Back

Up to this point the archive had been almost entirely retrospective. This was the first time it was used as a forward-looking tool: what should we book next, and which dates are at risk? A deep analysis of three years of BTAM touring data revealed that two of the four worst-performing shows were structurally explained by external calendar conflicts nobody had checked for: a top-10 Georgia Tech home game, and a UGA Spring Break / tornado window. Both looked like venue problems; both were calendar problems hiding in plain sight. The same canonical discipline now drives a Trends dashboard, a Conflict Calendar, and a forward-looking Booking Outlook.

The archive stopped only remembering. It started planning.

Era 5The Replatform: From Spreadsheet to a Real Database
Google Sheetthe record
Published feedsthe first public site
Supabase / Postgresone canonical database
Cloudflare Worker APIevery page reads it
Booth, Greenroom, BTAMrunning the shows
5.1June 2026
Why We Shifted: The Scars of Sheets-as-Database

The "database" was a Google Sheet. That was exactly the right call to launch on. It let one person edit anything, instantly, with no deploy, and it turned a fifteen-year gig log into a live site in days. But in the span of a single spring the site had outgrown it: a personal record had quietly become a platform, and the spreadsheet was being asked to behave like a database it was never built to be. By mid-2026 the tell wasn't any single failure. It was the scar tissue: pre-built JSON snapshot files rebuilt on a timer (with a write-allowlist that silently went stale; the pipeline was once broken for 17.8 days before a monitor caught it); a published-CSV cache that lagged reality; mixed date formats every consumer re-parsed defensively; venue-alias plumbing and dedup guards bolted on to compensate for a store with no real keys; rate limits forcing debounced rebuilds. None were bugs, exactly. They were the cost of pretending a spreadsheet was a database.

You don't migrate off a tool when it breaks. You migrate when the work to keep it from breaking outgrows the work it was saving you.

5.2June 2026
The Beta-Parallel Build

The risk in any replatform is the big-bang cutover that takes the live site down with it. The v7 build refused that. A canonical database on Supabase (Postgres) and a read-only Cloudflare Worker API stood up alongside the untouched production site. Every page got a second, DB-backed version served at /beta/, reading from the Worker, never from the Sheet. Production kept running on Sheets the entire time; the beta proved the database against real data, page by page, with nothing to roll back because nothing in production had moved yet.

Build the new engine next to the running one, not under it. Cut over only when the parallel version has already earned it.

5.3June 2026
Porting the Public Site

One by one, every public page was rebuilt to read the database: Upcoming and Archived shows, the show detail page (with a pop-out audio player), Bands and Band pages, Musicians and Musician profiles, the global Songbook, Venues and the On-The-Road map, Discography, Insights, Press, Video, Images, Alumni, the Career Timeline, Play-a-Random-Show, the curated Hall of Fame, and The Shared Stage, the relationship graph that had been the whole point. Each verified against the data before it shipped; each Worker change version-stamped so a deploy could be proven to have landed.

A migration is done right when the reader can't tell it happened, except that everything is faster and nothing is stale.

5.4June 2026
The v7 Build: Unifying the Admin & Harmonizing BTB + BTAM

The public read-side is the easy half. The real definition of the v7 build is the unification of the admin tools and the harmonization of data across BillTaylorBass.com and B. Taylor Artist Management. Two sites and three logins (the BTB archive admin, the BTAM management admin, and the BTAM musician portal) collapse onto one canonical dataset with one set of admin tools: a unified admin for the people who run things, and a separate, lower-privilege musician portal for the people documenting their own history. The Core and Wolves, Lower already live in the shared database; BTAM simply views the same truth through a management lens. The v7 build doesn't go live on either site until the admin is unified, the data is clean, and the portals work.

The archive's last reinvention isn't a feature. It's making two sites, three logins, and forty years of data finally tell one story.

Era 6The Operating System: When the Archive Started Running the Shows
Google Sheetthe record
Published feedsthe first public site
Supabase / Postgresone canonical database
Cloudflare Worker APIevery page reads it
Booth, Greenroom, BTAMrunning the shows
6.1June – July 2026 · cutover complete
The Consoles Go Live: Booth and Greenroom

The cutover landed. With the database proven page by page, the write side finally moved off the spreadsheet and onto two purpose-built consoles. Booth is the operator's cockpit: events, setlists, rehearsals, roster, venues, accounts-payable, confirmations, runsheets, newsletters, dashboards. Greenroom is the musician's portal, a lower-privilege view where each player signs in with Google or a magic link to see their own shows, money, calendar, songs, and a per-band message board. One canonical database now feeds four surfaces at once: the two public sites plus the two consoles. The archive was no longer something kept on the side. It had become the system the band actually runs on.

A record you keep is a hobby. A system people log into to run their week is a platform. The difference is who else depends on it.

6.2July 2026
Ticketing and Settlement Intelligence

The flagship of the summer. The platform learned to watch a show sell, and to pay the band when it was over. A per-show ticket model pulls daily sales from multiple platforms (Freshtix and Ticketmaster, with Eventbrite next), including an automated tracker that reads the venue's daily report email, follows an expiring link to the real file, reads the numbers off it, and files one snapshot a day with no human touch. Those snapshots drive a pacing view that compares a show against the last comparable one, and a cumulative sales curve, the hockey-stick, drawn against the venue's capacity so you can see how much room is left to fill. When the night is done, one click settles it: gross in, house skim and shared expenses out, a penny-accurate split written to the band bank and the payables ledger. The archive that used to only remember shows now helps sell them and closes the books on them.

Data earns its keep when it stops describing the past and starts changing a decision you make today.

6.3July 2026
The Nervous System: Comms, Money, and Fans

An operating platform has to reach people, not just store rows. This phase wired in the connective tissue: show confirmations that go out by text, email, and push and reset themselves when a date moves; mileage and year-to-date earnings with a year-end tax PDF built from the same tax form the platform already had on file; a per-musician calendar feed each player can subscribe to; and a fan side where someone can follow a band, confirm by email, and get alerted when a new date drops. Each one is a small integration on its own. Together they turn a database into something that talks to the people who depend on it.

The last mile of any system is the humans. Storing the truth is half the job; getting it to the right person at the right moment is the other half.

Era 7The Infrastructure Grows Up
Google Sheetthe record
Published feedsthe first public site
Supabase / Postgresone canonical database
Cloudflare Worker APIevery page reads it
Booth, Greenroom, BTAMrunning the shows
7.1July 2026
From FTP and Manual Paste to Git-Push Deploys

Early on, shipping a change meant dragging files over FTP, and for the engine, pasting a 1.5 megabyte script into a dashboard box by hand. That worked until it didn't: a hand paste is a step you can forget, and once the deployed code drifts from the saved copy, you can no longer trust what's live. The fix was real continuous delivery. The public sites now deploy on a git push through GitHub Actions, which syncs the files to the host automatically. And the engine itself, the last thing still deployed by hand, moved to the same model: push to the repository, and a workflow logs into Cloudflare, deploys the worker, keeps every secret and setting intact, then checks the live version against what was shipped before it calls the deploy good. The repository became the single source of truth, and the scariest manual step in the whole operation was retired.

The most dangerous part of any system is the step a human has to remember to do by hand. Automating it isn't polish; it's removing a way to fail.

7.2July 2026
Durability: Backups, Object Storage, and Guardrails

A platform people rely on has to survive its own bad days. Media moved off a third-party image host onto Cloudflare's own object storage, with a direct-upload pipeline from Booth. The database backs itself up to a separate storage bucket on a schedule, so a mistake is recoverable rather than fatal. Health monitors watch the jobs that are easy to forget about, the same class of silent failure that once left a data pipeline broken for nearly eighteen days before anything noticed. Sensitive values, an API token, a signing key, the encryption key that protects a tax ID, live as encrypted secrets, catalogued so it's clear what each one does and what would break if it were lost. None of this shows up on a page. It's the quiet difference between a project and something you can actually depend on.

Backups, monitors, and a plan for the worst day aren't the exciting part. They're what let you sleep while the thing keeps running without you.

Era 8Looking Forward, and Looking the Part
Google Sheetthe record
Published feedsthe first public site
Supabase / Postgresone canonical database
Cloudflare Worker APIevery page reads it
Booth, Greenroom, BTAMrunning the shows
8.1August 2026
Reading the Room Before the Doors Open

Settlement taught the platform to close the books on a show. This phase taught it to call the show before it happens. Every upcoming date now paces against more than one leading indicator: the daily ticket curve where a feed exists, a once-a-day read of each show’s Facebook-event interest, and, for reserved-seating rooms, a seat-map count taken straight off the venue’s chart. Those signals fold into a single projected-attendance grade for each show, weighted toward real ticket sales but leaning on social interest where tickets are thin, or, for a door-only room with no feed at all, standing in as the only signal there is. The grade carries a confidence that tightens as the date nears, and a daily snapshot so you can watch it move. A short morning routine captures the whole set in one pass. The archive that learned to remember, then to sell, then to settle, has now learned to forecast.

A record that only remembers is a library. One that tells you how tonight is trending is a decision you can act on this morning.

8.2August 2026
The Front Door: A Site About the Musician

For its whole life the site led with the shows. It’s a performance archive, so the calendar sat at the top and the person behind it was somewhere a few clicks in. This phase turned that around at the front door. The homepage now opens with a short bio and a rotating carousel of live photos of Bill on stage, managed from Booth like everything else, upload, caption, photo credit, reorder, with the upcoming-shows grid right below. A small change next to a replatform, but it reframes what the site is: not just a ledger of dates, but a portrait of a working bassist and the forty years of playing the rest of the archive documents.

The data was always about the work. The front door finally puts the person who did it first.

Era 9Learning to Check Its Own Work
Google Sheetthe record
Published feedsthe first public site
Supabase / Postgresone canonical database
Cloudflare Worker APIevery page reads it
Booth, Greenroom, BTAMrunning the shows
9.1September 2026
The Day the Checks Started Running

For most of a year the repository carried tests that nothing ever executed. They sat in a folder, passing or failing invisibly, while the deploy pipeline shipped code to the live API without once asking them anything. In September that changed: nine guards now gate every deploy, and a change that breaks one never reaches production. The same week turned up nine real defects, and every one of them had the same shape. A fact would be written once, correctly, and then quietly become false, with no code path responsible for ever revisiting it. A message log said a text was still held when it had been delivered three hours earlier. A daily digest counted forty-one shows as awaiting an answer when thirteen were real. Five confirmations were erased by a routine date change and survived only in an audit trail nobody reads. None of it was broken at the moment it was written. All of it was wrong by the time anyone looked.

A number that was true when it was written is not the same thing as a number that is true.

9.2September 2026
Two Readers, Not One

The harder lesson was about the questions the system could not answer. Asked whether an advertisement was running, it checked the table meant to record ad spend, found it empty, and said no. The buy was real, a hundred dollars of it, fully documented in a file the query never touched. Asked whether a band had ever been filmed at a particular room, it checked the media catalogue, found nothing, and said no. Two hours of footage were sitting on a drive in the next room. In both cases the table held no rows because nothing had ever been responsible for writing to it, and silence read as fact. The response was to stop relying on a single reader. The work now splits three ways: one model with reach across the database, the mail, the browser and the drives; a second working from a terminal, where the code and the tests and the version control actually live; and a third given nothing but read access and an instruction to disagree. The third one, on its first assignment, found that a feature about to be built already existed.

An empty table is not an empty world. Before concluding that something does not exist, find out whether anything was ever responsible for recording it.

Era 10Version Two, and a Year of It
Google Sheetthe record
Published feedsthe first public site
Supabase / Postgresone canonical database
Cloudflare Worker APIevery page reads it
Booth, Greenroom, BTAMrunning the shows
10.1September 2026 · cutover complete
Version Two: BTAM and Greenroom, Rebuilt and Moved In Place

Every surface here was built and then had things bolted onto it, which is how working software actually accumulates. By late summer that was the limit: Greenroom in particular had grown feature by feature until it worked well and hung together poorly. Version two was the answer, and it was a design decision before it was a build decision. BTAM became a proper public-facing site in cream and rust; Greenroom was rebuilt in Midnight, the deep navy this archive has used since the beginning, because the room a musician checks at midnight before a drive home should not be lit like a dashboard.

The harder half was moving in without anyone noticing. Both redesigned (v2) apps went live at the original addresses: BTAM at the root, Greenroom at /greenroom/, the run sheet at its same URL. Every bookmark, every texted link, every emailed confirmation and every home-screen install kept working and simply got the new app. That matters more here than it would on a normal site, because Greenroom is an installed application on the band’s phones, and the one real trap of the cutover lived there: the new app had no notification handler of its own and had been quietly borrowing the old one’s. Replacing the old app wholesale, the obvious move, would have silently killed push for the entire roster with nothing anywhere to say so. So the cutover replaced the markup and deliberately kept the old service worker, manifest and icons underneath it. The same pass made both apps genuinely installable for the first time, including on Android, where BTAM had a manifest and icons but no service worker and so had never once been offered as an install. Sign-in gained a typed six-digit code alongside the emailed link, for the people for whom the link was the thing that kept failing.

A rewrite the users have to be told about is a migration that went badly. The measure of this one is that the band’s phones kept working and nobody had to do anything.

10.2September – October 2026
Writing Down What Someone Else Was About to Delete

Nothing shipped this month that a visitor can see, and it was one of the more consequential months here. The platform had reached the age where its weak points stopped being missing features and started being things it had quietly never owned.

The first was memory it was renting. The newsletter provider’s free plan deletes a campaign’s per-person report after exactly thirty days. One send was already unreadable; the next was three weeks from going the same way. The reading code had existed for months, running on every request, computing an answer and throwing the underlying rows away, so the entire per-person engagement history of this project lived inside somebody else’s retention policy on a timer nobody was watching. Two tables and a capture job later it belongs here, and the capture is checked against the provider’s own published percentages rather than against its own success flag, which is the difference between knowing a job worked and knowing it got everything. The same principle sent the platform after the Facebook guest lists, which have no interface to ask at all: 936 RSVPs across eleven shows, now rows in a database rather than a number on a screen that expires.

The second was subtler and more embarrassing. The system turned out to answer the question is today in the past or the future in several independent places, and on the morning of a show in Athens two of them disagreed with reality at once. The date fell off Upcoming while the band had not played a note, and the archive’s On This Day card announced that night’s show as a past performance and an anniversary of itself. Neither was difficult to fix. Both existed because the same question had been answered more than once, in more than one place, by more than one person-hour of past work. The deploy guards that gate every release went from nine to twenty-seven over the same stretch, and the one still owed is the one that would have caught both of these.

A number you can only read on someone else’s dashboard is a number you do not have. And a question your system answers in more than one place is a question it will eventually answer two different ways.

What’s next

Two rebuilds left, and the hard one is last.

BTB2 is next. This site, the one you are reading, is where all of it started and is therefore the one with the most bolted onto it. The rebuild is a re-shell rather than a rewrite, and that distinction is the whole brief: a year went into getting this content right, and all of it survives. Same forty years, same archive, same plain factual account of a working bassist’s life, in a cleaner and more cohesive frame. A first attempt was paused in late September for drifting away from what BTB actually is. Pausing it was the correct call and the second attempt starts from that.

Then Booth, the behemoth. Booth is the operator’s console: events, setlists, rehearsals, roster, venues, payables, settlement, ticketing, run sheets, newsletters, dashboards. It is by a wide margin the most complex thing built here, it is the entire write side of the canonical database, and unlike every other surface it is in use every day by people who are counting on it. It goes last deliberately. The rebuild you do casually is never the one the band runs on.

Both are timed against the first anniversary of a Thanksgiving-week prompt that was only ever meant to produce a list.

Era 11Proving It: BTB27 and Booth2
Google Sheetthe record
Published feedsthe first public site
Supabase / Postgresone canonical database
Cloudflare Worker APIevery page reads it
Booth, Greenroom, BTAMrunning the shows
11.1October 2026
Every Page, Walked and Signed Off

A year in, the question changed from "does it work" to "is it true." Every public page was walked in a live browser, one at a time, against the data underneath it, and nothing counted as finished until Bill had looked at it himself and signed it off. The walk found real things: dates printing a day early, a 1991 album marked "Coming Soon", a night's recording offered on the wrong band's set, a band page counting years two different ways. Each fix shipped with an automated check that fails the deploy if the problem ever comes back. The check suite went from a handful to 78.

It also changed what the archive keeps. Press clippings now save their own text, a Wayback copy and the article's photo, so a story survives the site that published it. Play a Random Show became a real player. The rig rundown was corrected bass by bass.

A page is done when its owner has looked at it live and said so, not when the code says it should work.

11.2next
Booth2

The operating side gets the same treatment: the events page first, then the rest of Booth, the console that runs the shows.

The AI Evolution: From Prompt to Partner

This project has always been AI-assisted, but what that means changed across the build versions. What shifted was the depth and complexity of what those conversations could handle.

V1 – V3

Early AI Era

ChatGPT for architecture decisions, schema design, and code generation. Effective for isolated tasks and focused conversations.

V4

The Limitations

As complexity grew (multi-file builds, cross-session continuity, architectural consistency), context limits and session-memory gaps created friction that slowed the build.

V5

Claude

Longer context, stronger cross-session consistency, complex multi-file architecture held across a full session. The v5.50 site (all pages, components, and UX) was built in Claude.

V6 – V7

From Build Partner to Migration Engineer

Claude doing systems work: standing up the Supabase schema and the Worker API, porting the entire public site to the database, and writing the verification harnesses that proved each page before it shipped. The replatform became a sequence of verifiable, same-day ships.

V7+ · Cowork

From Migration Engineer to Operations Partner

AI moved from building the platform to helping run it: standing up the CI deploy pipeline, debugging a live deploy through the browser, writing the automated ticketing tracker, answering questions with text-to-SQL, and generating the per-band strategic analyses. The partner that built the system now helps operate it.

V8 · Three Models

From One Partner to a Division of Labor

One assistant doing everything turned out to have a blind spot: it trusted its own reading. Now the work is split. One model reaches across the database, the mail, the browser and the local drives, and holds the thread. A second works from a terminal, where the code, the test suite and version control belong. A third gets read access only and is asked to find the disagreement. The split exists because a single reader kept mistaking silence for absence.

What I Learned to Use: From Zero

A career in technology meant I knew most of these names. I had never actually used any of them to build something. Every item below was learned hands-on by building this, with AI as the teacher and the pair. The list, more than any feature, is the real achievement.

Web & Front-End

HTMLCSSJavaScriptResponsive designPWA: installable + offlineService workersWeb app manifestsD3.jsLeaflet mapsChart.js

Data & Databases

SupabasePostgreSQLPostgRESTSchema designData normalizationDeterministic IDsCSV / JSONRow-level authIdempotent upsertsSQL analyticsPostgres functionsSchema migrations

Back-End & APIs

Google Apps ScriptCloudflare WorkersREST APIsEdge cachingsetlist.fm ingestionJSON feedsCron / scheduled jobsTwilio SMSTransactional emailWeb Push (VAPID)PDF parsing & OCR

Infrastructure & Ops

Domains & DNSWeb hostingFTP deploysBackups & snapshotsVersioned releasesCloudinary CDNGit & GitHubGitHub Actions CI/CDWranglerCloudflare R2Automated DB backupsCI deploy guardsHealth monitorsSecrets & encryption

AI & Workflow

ChatGPTClaudeCoworkPrompt-driven developmentAutomated verification harnessesClaude in ChromeText-to-SQLMCP connectorsScheduled AI agentsClaude CodeSubagent fan-out

The Architecture Today

One canonical database, four surfaces. The public sites read a versioned Worker API; the two consoles write through it. Everything ships on a git push, and the spreadsheet, with every workaround built to prop it up, is retired.

Public Site (read-only)

Both BillTaylorBass.com and BTAM

Every page (shows, bands, musicians, songs, venues, discography, shared stage, insights, media) fetches JSON from the Worker API. No direct database access; no pre-built snapshot files.

↓

bt-canonical-beta-api (Cloudflare Worker)

The read API & public interface boundary

Versioned, edge-cached endpoints: public reads for both sites, the authenticated write API behind the consoles, and the full cron suite. Deployed automatically on a git push now, no longer pasted in by hand.

↓

Canonical Database (Supabase / Postgres)

Single source of truth for BTB + BTAM

Events, Performances, Participants, Venues, Bands, Musicians, Songs, Releases, and Media, with real keys, types, and constraints. Media lives in Cloudflare R2 object storage, and the database backs up to a separate bucket on a schedule. No spreadsheet.

↑

Unified Admin (write layer)

Authenticated · role-gated

Booth, the operator console, and Greenroom, the musician portal, both write to the canonical DB through the authenticated API. Role-gated: one view for the people who run shows, a lower-privilege one for the people who play them.

↑

Jobs & Automation

DB-native

Daily ticketing pulls, one-click show settlement, confirmation and fan-alert dispatch, setlist.fm ingestion, integrity checks, and scheduled backups. DB-native, no longer rate-limited by a spreadsheet.

The same architecture that keeps one bassist's archive accurate at 500 shows scales to a platform at 10,000,000.
BillTaylorBass.com is the proof of concept. The Shared Stage is the platform: a global, time-aware map of who played what, with whom, when, and where. The replatform is what makes it reachable.

How the numbers work. Eras are the chapters; phases are numbered inside them (5.1, 5.2). "Site build v2" through "v8" name the versions of the site itself. "Data model v4" and "v7" name the database design. "The v2 redesign" is the 2026 visual rebuild of all four sites. Worker releases (0.9.x) are the API's own version numbers.