
AAR: Branch
I built a social network on top of GitHub in two days, demoed it once, and then paid to keep it running for a year without touching it. Here's the after action review.
A year ago this month I built Branch, a social network on top of GitHub, in about two days. On Tuesday the company that hosted it, Railway, told its customers that someone may have read their environment variables and that everything should be rotated. That was the first time I’d thought about Branch in months, and after a bit of nostalgia I decided I’d shut it down. And so… as is my process, here’s my after action review.
What is an AAR?
The after action review is a process I learned in the Army. It asks three things: what happened, what worked, and what about next time. Most people I’ve worked with avoid it because it puts the flaws next to the wins, in writing, and people (especially people in charge) hate that. Since KmikeyM is a market in one person (me), there’s no one to get cold feet (except me), so I can do them in public.
What happened?
What was supposed to happen
On October 13, 2025 I was thinking about an older project, a GitHub graph spider, and wrote a question in my notes: “how do I layer something social on top of GitHub?” GitHub already holds the graph. Who follows whom, who forks whom, who builds with what. It just doesn’t act like a social network (for good reason!). Branch was going to be that layer. Sign in, it reads your followers and the people you follow, walks outward through their networks, and shows you the developers your circle has in common that you haven’t met. It tags people by the tools in their public repos, with a special eye on who is building with AI (what I was interested in then, now it’s safe to assume that is EVERYONE).
The plan after the build was a short video about making it with Bun, which I’d just learned about, then a little launch to see if this was interesting to anyone else.
What actually happened
I built it on October 13 and 14 of 2025 with Claude Code, Bun, and a SQLite file. Seventy-four commits over four days. This was my first build of working code on the internet!
The first test, on the 14th, lasted four minutes. I sent the link to a friend and the GitHub login screen asked him for organization access and read-write permission on private repos. His answer was “that’s a total no.” Ha ha, fair enough. I fixed it to read-only on public data that afternoon.
I demoed it on the 15th to some co-workers and friends. The same day I spun off a second project that seemed useful, Vibe Scout. If I could tell which developers were AI-assisted, could I find people like me? And yes, that kind of worked! So the next day I rolled the idea of Vibe Scout into Branch to focus on finding early vibe-coders. And then about a week later I wrote the outline for a video about Branch, but deferred it “until the tool is ready for launch.”
How early this was
It seems like both forever ago, and also not that long ago. So it’s worth looking at what the tools were when I built Branch, as it was as much an exploration of these tools and platforms as it was a product.
- Claude Code 2.0 had shipped on September 29, 2025, two weeks earlier, alongside Claude Sonnet 4.5. Every one of the 74 commits is co-authored by Claude. I was still figuring out what it meant to describe a feature and watch it appear.
- Bun 1.3 came out on October 9, 2025. I built Branch on it four days later. It was my first time using Bun at all: one runtime for the server, the SQLite database and the web layer, no build step.
- Cloudflare. The spider that came before Branch was built on October 9 as a Cloudflare Worker with a D1 database, the same night I had the idea, while I thought I was still planning. I’d used Cloudflare Pages for static sites before; Workers and D1 were new to me. Branch moved off them because the spider needed a long-running process, which is why it landed on Railway, also a first.
- Firecrawl and the GitHub Archive arrived on October 15, for Vibe Scout, to search the public record of GitHub activity instead of waiting for people to sign in.
Five new tools in one week, most of them days old. That’s a lot of the reason it was fun! Every one of those tools was a thing to learn, and the next one was always more interesting than finishing the last. This continues to be an exciting time. :)
What the spider found
Branch’s own database died with its hosting, so I can’t show what Branch saw. But the spider that came before it, the Cloudflare Worker from October 9, kept its database, and that is the graph Branch was rebuilt on four days later. In one evening, running one hop out from my own account, it saw 3,607 GitHub accounts and recorded 3,926 follow relationships between them, pulled profiles for 233 of those people, and crawled 66 follower lists in full.
Table view
| GitHub followers | Developers |
|---|---|
| 0 to 9 | 33 |
| 10 to 99 | 69 |
| 100 to 999 | 82 |
| 1k to 9k | 41 |
| 10k or more | 8 |
Table view
| Location | Developers |
|---|---|
| Portland | 21 |
| Edmonton | 16 |
| New York | 15 |
| San Francisco | 9 |
| Istanbul | 5 |
| Los Angeles | 4 |
| No location listed | 66 |
Here’s the evening itself, replayed in the order the spider found things. Every dot is a GitHub account, every line is one person following, and the big dandelions are the people whose follower lists it pulled in full.
The thing I wanted most, the “hidden influencer” recommendation (people most of my network follows that I don’t), barely worked at one hop. The best candidate was followed by two of my 49 follows. The graph needed to be two or three hops deep before that signal meant anything, and two hops at GitHub’s rate limit is an overnight job, not an evening. That’s the real reason the feature never shipped, and I only see it now, from the data.
The tool was never declared ready (by me), so the video was never made, so the launch never happened. Branch stayed online at branch.quarterly.systems for twelve months at five dollars a month, with nobody signing in that I know of, because I never looked. When Railway’s breach notice arrived on October 21, 2026, it was a reminder that this even existed! The app is now shut down and the repository is archived (and public under CC0).
What worked?
- The build. Two days from a note in my journal to a working app with login, scanning, a social graph and tech tagging. A year earlier that would have been impossible.
- Testing on a real person in the first hour. The permissions problem would have sunk the launch, and a four-minute call found it.
- The hook. Detecting who builds with AI tools, from their repos, was the part people reacted to in the demo. It became its own project.
- The shutdown. Because the code was already public and the landing page was plain HTML, retiring it was easy and nothing is lost that mattered.
What about next time?
- Define “ready” before building. The video waited on a launch and the launch waited on the video. Neither had a date or a definition, so both waited forever.
- Put a timer on a side project when it ships. Something like ninety days with no commits and no users and me not checking it or using it means shut it down and write up the AAR. A tool that runs unattended for a year isn’t alive, it’s just billed.
- Look at the hosting bill as a list of things that exist! Branch was on it every month but I didn’t bother because it was very cheap.
- Keep the plaque. A retired project should leave a page that says what it was. This is the first one that does!
- The idea still holds. GitHub is a social graph that does not behave like one. I’m now thinking about what a real version of Branch should be! And the code is there for when I’m ready to go back and explore that idea (or if anyone else does).
Branch ran from October 2025 to October 2026. The page that replaced it is at branch.quarterly.systems and the code is at github.com/kmikeym/branch.