Building & Shipping
Products and SaaS taken from idea to deployed — pricing, build-in-public, the lot.
The Channel That Must Stay Silent
A single routine post in your interrupt channel teaches you to ignore the next real one. Here's the routing rule I use to keep #freebo-urgent honest.
The Three Questions Your Billing Inbox Can't Answer
I built a finance watchdog for my SaaS at 12:30 AM. The design started with one honest observation: a receipt only ever arrives after the money has already left.
I Blamed the Integration. It Was Never Connected.
A charter operator on Freebo had a booking drought. I was sure my Google Calendar sync had broken availability. The real cause was in a rule I'd edited myself two weeks earlier — and the integration I was blaming was never even turned on.
The Ledger That Refuses to Lie
Sentry paged me fifteen times last week with the same error: insufficient funds in an account. The account was not a customer's. It was inside my own ledger.
Auditing a Live Payments Ledger From a Terminal Tab
I have no DevOps team and no admin panel. To reconcile a live week of charter reservations before flying out, I opened three terminal tabs — Railway, Formance, Stripe CLI — and walked the money.
You Don't Launch SMS. You Wait for The Campaign Registry.
Our Twilio brand approval landed overnight after weeks in the queue. The code for SMS in Freebo has been ready since spring. The registration is the feature.
Insurance For A Solo SaaS, Researched In One Claude Session
What I actually needed, what I skipped, and the four questions I made every underwriter answer in writing.
The Reschedule Email That Rendered Nothing
We rebuilt Freebo's confirmation email in July. Its three cousins — reschedule, cancellation, modification — were out of scope. In production they were sending a template that said 'Your reservation details are below,' and then nothing.
The Withdrawal I Didn't Authorize
Stripe pulled a few hundred dollars out of my platform bank account without asking. It was not a bug. Every step is documented Connect behavior. Here is the exact chain, and the five settings that stop it happening again.
Why My Booking Platform Has No Balance Columns
Ask my SaaS what a customer owes and it doesn't run a SELECT. It queries a separate double-entry ledger. Here's why, and what falls out of that decision.
The Booking That Only Exists to Block Time
A charter operator running two booking channels asked me to create a $0 reservation with the notifications suppressed. That request is a category of missing feature every multi-channel booking business runs into.
The Migration Nobody Finishes
Bookings had softened for no reason anyone could point at. Six hours later the answer was a URL on Google Maps that nobody had updated in three years.
The One-Checkbox Feature That Needed Ten Rules to Ship
An operator settled a cancellation on the phone. The automated email was going to fire anyway. The 'just add a checkbox' fix turned into a ten-rule PRD before I let anyone touch the API.
The Read Path Filtered It. The Write Path Didn't.
A booking made it into the system for a slot the availability engine would never have shown. Here's the class of bug that lets that happen — and the guard that closes it.
The First Real Payments Landed. The Dashboard Said Zero.
Two live pay-link payments hit Stripe, hit the ledger, hit the amount-due totals — and never appeared in the dashboard's Payment History card. The bug had been quietly waiting for a real customer to trip it.
The Two-Hour Booking, and Why Your Defaults Are the Product
A live customer booked a tour two hours before it started. The booking platform did exactly what it was designed to do — which turned out to be the problem.
Wiring Sentry Into a Payments SaaS Without Leaking an Email
Every Sentry tutorial ends at 'paste the DSN and go.' That's a fine setup for a blog. It's an accident waiting to happen when your app moves money. Here's what the real config looks like.
Now That Someone Real Is Using It, I Want to Hear the Errors
The difference between a demo and a live operator is that when Freebo breaks now, a stranger's booking breaks. So I wired production up to real error monitoring and started listening.
Two Production Fixes From the Back Seat of a Car
My first live tour operator was taking real bookings when the reschedule flow and a card charge needed fixing. I shipped both from my phone, in minutes, riding through the mountains.
70,000 Candidates Stuck Behind a Rate Limit
A search firm's entire candidate history was trapped behind a brittle homegrown bot and a throttled API. Freeing the data mattered more than any agent I could put on top of it.
The 20 Emails I Sent Myself Before My First Customer Could
Before onboarding my first live operator on Freebo, I ran the entire notification lifecycle at my own inbox. This is the prompt I used to hire an AI to prove it worked.
The Domain Email Is the Front Door
I spent a session turning myself into an ebike media outlet. The real gate between a Gmail hobbyist and a free test bike turned out to be five characters after the @.
My Parity Test Was Comparing the Bug to Itself
I cached Freebo's yacht availability endpoint and wrote a parity test to prove cache == live. It stayed green for weeks while quietly shifting dates by a day. Here's how the test masked the bug — and the two-line fix under it.
I'm Open-Sourcing the SaaS I Just Shipped
Six days from idea to deployed on Cloud Run. The pricing was $10 a year. Then I looked at the math on solo-founded micro-SaaS and decided the better business is to give it away.
The Export Button Is the Whole Product
Feedback tools have existed for ten years. The interesting move now isn't the comment UI — it's the file you hand to Claude Code on the other side.
Firebase Couldn't See Its Own IP
I bought siterevisions.com, pointed it at Firebase Hosting, and waited. Verification kept failing. The bug wasn't DNS propagation — it was Cloudflare answering for itself.
I Built the Pricing Knobs Before I Had Anyone to Turn Them
First paying Freebo tenant negotiated 6% instead of the default 10%. The change took thirty seconds because the system was designed multi-tenant from day one.
Forty Seconds on Ten Million Points
I built a working LiDAR ground classifier in Rust in one Claude Code session. Forty seconds on the Autzen benchmark, 47 cm RMSE against the professional classification, no PDAL, no GDAL, no Windows.
Why Replit Won't Eat My Booking Platform
A friend asked if Replit was going to put Freebo out of business. The honest answer is in five rules I've been writing in production code for months.
I Said Deploy To Vercel. Railway Heard Me.
I had three static HTML mockups, a client waiting on a link, and a deploy target in my head. Railway had different ideas — and it shipped before I finished my sentence.
Launch May 2026 Was Still On My Homepage
The hero said 'Launch May 2026.' It was June. I had a customer waiting. Thirty minutes, one Google Calendar embed, and one duplicated-button bug later, the launch date was gone.
Fifteen Transactional Emails In One Claude Session
Freebo had fifteen Novu workflows all sending the literal string 'set in Novu Dashboard.' One session, one React Email package, fifteen real branded emails in my inbox by morning.
I Asked Claude Where to Put an Imaginary $100k
A five-dimension rubric, twenty-nine projects, and the uncomfortable answer about what I'm actually building.
The First Email on My Waitlist Was a Question
doesthisthingwork@gmail.com signed up for the Freebo waitlist. The full Next.js plus Resend pipeline that delivered them, and the small thing that actually mattered.
When to Bypass Your Own API
I designed ReelForge with immutable brief versions and a clean state machine. Then I needed to fix 30 finalized scripts without triggering a full regeneration — and the right answer was to skip my own API entirely.
The Fifty-Thousand-Dollar Test Booking
I added an AI agent to Freebo. It told me a $500 booking was worth fifty grand. Here's what went wrong and why it matters.
Pointing Cloudflare at Railway Without Breaking SSL
The CNAME-already-exists error, the SSL handshake loop, and the port-8080 magic that finally made freebo.ai resolve. Here's the actual sequence that worked.
A Brand, a Website, and a Rick Burgess Meme
My friend mentioned he sells water filters. A few hours later his company had a name, a site, and a stack of custom video memes on my phone.
Thirty Seats and a USB Drive
I went from a half-formed idea to a fully planned workshop in one sitting. The curriculum, the pricing, the marketing — all of it.
The Machine That Draws While You Read
An open-source idea I can't stop thinking about: a tool that generates illustrations for any book, synced to the audio.
My Startup Is a Folder
Sixteen markdown files. Six layers. Zero incorporation paperwork. The company already has an operating system.
I Shipped a Button That Called Nothing
Seven builds. One missing variable. A perfectly functional button sending requests into void.
We Built the Whole Stack, and It's Only the Beginning
Freebo is a booking platform for tour operators with double-entry accounting, real-time availability, multi-tenant isolation, and async financial pipelines. Built by a team of two. Here's what that means for the industry.
I Locked Myself Inside My Own Desktop
I built a kiosk mode that traps me at my desk until the work is done. On purpose.
Nobody Tells You Pricing Is the Whole Product
I thought the hard part of building a booking platform was the booking. I was wrong by a mile.
The Future of Software: Free, Custom, and AI-Powered
Why I believe all software will be free or dirt cheap within 5 years, and how vibe coding will reshape the entire industry.
Cheap Software, Priceless Value
When B2B software becomes nearly free, where does the real value go?