Four of these five products I built alone. The fifth I joined as a collaborator on a product somebody else owns, and rounding that up to "solo" would poison every other number on this page.
So here is a solo founder SaaS case study with the figures read back out of my own project records instead of remembered: BookBed, Callidus OS, Pizzeria Bestek, an eight-template FlutterFlow Marketplace portfolio, and Relocate. One of them earns recurring revenue, for the client who now owns it. Another earned a fixed fee and has since saved its owner every order commission they used to pay. The template portfolio sells in small numbers. Two earn nothing at all yet. That distribution is the most useful thing in this article, which is why it sits in the second paragraph rather than under a roadmap heading at the bottom.
What five products cost in calendar time

Build time was never the scarce input. Every one of these shipped inside a window a single person can hold in their head, and the products that went nowhere went nowhere for reasons that had nothing to do with how fast the code arrived.
| Product | Build window | Shape of the build | Recurring revenue today |
|---|---|---|---|
| BookBed | Started 16 Oct 2025, six months active | Flutter, one codebase to iOS, Android, Web, macOS, Linux and Windows | None yet. Billing wired and tested, not switched on |
| Callidus OS | 14 Feb 2026 to late Apr 2026, about ten weeks | React, TypeScript, Firebase, multi-tenant, six roles | Client-owned; first paying clinic live 18 May 2026 |
| Pizzeria Bestek | Fixed-price build, live Sept 2025 | React, Supabase Postgres with RLS, Resend, Netlify | None to me. Zero platform fees to them |
| FlutterFlow templates | May 2025 to Apr 2026, two batches | FlutterFlow plus custom Dart, 40+ widgets | 24 paid sales across two templates |
| Relocate | Phase 1 starter kit, delivered | Flutter 3.38+, Riverpod 3, GoRouter 17, Mapbox, RevenueCat | Client-owned; I was a collaborator |
Callidus is the one that surprises people. Ten weeks, solo, from a design concept to a multi-tenant clinical platform running Stripe Connect, six distinct roles, GDPR-grade audit retention and a bespoke face-mapping editor nobody sells off the shelf. Roughly 1,887 commits, 426 KB gzipped across 37 lazy routes, 100+ Cloud Functions with fifteen healthy cron jobs, and around 1,200 tests between Vitest and Playwright. It inherited a failed FlutterFlow attempt carrying about two hundred unresolved errors, and the fastest way through that debt was to delete it.
Why does a solo founder SaaS case study usually lie by omission?

Because build timelines are easy to measure and revenue is not, so the flattering number gets published and the uncomfortable one gets a roadmap. I have written that roadmap sentence myself. The honest version is a distribution, not a headline.
Put mine next to the market. Freemius's 2025 State of Micro-SaaS report, built on its own payment data, finds that 45.7% of the SaaS makers on its platform are solo founders, and that roughly 70% of micro-SaaS businesses earn under $1,000 MRR. The median profitable micro-SaaS in that data sits near $4.2K MRR. So the honest read on five products is that four of them live in that bottom 70% and one of them, the client-owned one, crossed into real recurring revenue on somebody else's balance sheet.
That is not a failure report. It is the actual shape of the thing, and it maps cleanly onto one lesson: a product with a named human waiting for it converts, and a product built because the architecture was interesting does not. Callidus had a founder waiting. Pizzeria Bestek had an owner who wanted off a commission platform. BookBed had me.
The one decision per product I would unmake

Each of these is documented in the project record, which is the only reason I trust my own memory of it. Where a product has no documented regret I say so rather than manufacture one, because a short honest list is worth more than five invented ones.
- BookBed: the date normalizer. An early version of the overbooking detector normalized dates with
setUTCHours(0,0,0,0)andtoISOString(). Anything stored late in the UTC evening came back as the wrong day, so the importer flagged overbooking warnings on bookings that did not actually overlap. It first showed up on a real Adriagate iCal import and looked exactly like a genuine double-booking until you checked the timezone. The fix wastoLocaleDateString('en-CA', { timeZone: 'Europe/Zagreb' }), iterating at noon UTC to stay DST-safe, plus asave_trimmedaction that imports only the genuinely new date ranges and eight tests pinning the behaviour down. - Callidus: nothing of mine, and that is the answer. The expensive decision was made before I arrived, when the platform was attempted in FlutterFlow. My decision was to stop paying interest on it.
- Pizzeria Bestek: no regret on record. Rare, and I am not going to invent one to round out the list.
- FlutterFlow: I built the first batch one widget at a time. Three standalone templates in May 2025, each solving one gap. Then the marketplace told me something I had not asked it: buyers do not shop one widget at a time. Somebody who needs a chart also needs a chip input. Somebody who needs a rich text editor also needs markdown rendering. The April 2026 batch was rebuilt around thematic clusters because of that, and it should have been designed that way from the start.
- Relocate: a Unicode codepoint. The RevenueCat entitlement ID was
Relocate․app Pro, copied out of a designed mockup. That dot is U+2024 ONE DOT LEADER, not an ASCII period. Visually identical, codepoint-unequal, so the SDK answeredactive: falsein production while the dashboard looked correct. Renamed to a plainpro.
What paid for itself, product by product
One decision per product returned more than it cost, and in four cases out of five it was a decision made in the first week.
Flutter for BookBed is the clearest one. One codebase reached six platforms, and the timeline calendar renders the same on a phone as on native macOS because the cells are locked at fixed pixel dimensions rather than reshuffled by responsive breakpoints. That bet also aged well without me touching it. At Google I/O 2026, Google announced that Canonical is now lead maintainer and strategic steward of Flutter desktop across Windows, macOS and Linux, shipping multi-window support and content-sized views, and moved Material and Cupertino out of the core SDK so an SDK upgrade no longer drags breaking UI changes along with it.
For Callidus it was choosing Stripe Connect Standard with direct charges on day one instead of pooling deposits. Each clinic performs the medical service, so each clinic has to be the settlement account. Stripe's direct charges documentation describes exactly this shape: the payment lands as a charge on the connected account rather than the platform's, and the platform's balance grows only by the application fee, which for Callidus is 0.1%. Retrofitting that after launch would have meant re-onboarding every tenant and rewriting twenty webhook handlers. The same instinct drove writing the Firestore rules as the real gate rather than a formality, which I wrote up separately in how Firestore rules held up under six roles and fourteen tenants.
Pizzeria Bestek paid for itself in a workflow choice, not a stack choice. Three Supabase Edge Functions do the whole admin loop, and the owner never logs into a dashboard. An order arrives, two emails go out, the owner clicks CONFIRM or DECLINE in their inbox, and the customer gets the result in their own language out of four. Five to ten orders a day, seven days a week since September 2025, on infrastructure the restaurant owns outright. Every order is 100% revenue to them now instead of about 70% after aggregator commission.
FlutterFlow's winner was the free one. The PDF Viewer template has roughly 1,500 downloads and four positive reviews, and it exists so the paid templates have somewhere to point back to. Dream Home at $75 has 15 sales and Schedule at $50 has 9. Twenty-four sales. Not a business, but not an accident either, because the free template is what made a first sale possible at all.
Relocate's was Riverpod 3 with code generation, which held a 38,711-line codebase across 27 screens together well enough that the client's own team could pick it up and keep building. Thirty providers and forty Freezed models kept the async boundaries still across 625 commits.
How long does it actually take to ship a SaaS MVP alone?
About ten weeks for a multi-tenant SaaS with billing and compliance, if the scope is settled before you start and nobody moves it. Callidus is my datapoint and the conditions were unusually clean: one decision-maker, plus a design concept finished before the first line of code on top of a spec the failed attempt had already written. Six months for BookBed, which had no external deadline and therefore grew a widget, an admin surface and six platforms. I have written the scoping half of this up in more detail in the SaaS MVP development guide.
AI tooling is real and it is not the whole story. The 2025 Stack Overflow Developer Survey has 84% of developers using or planning to use AI tools, up from 76% the year before, with 51% of professional developers using them daily. The same survey has only 33% trusting the accuracy of what comes back against 46% who distrust it, and 3.1% who highly trust it. That gap is the actual working condition. The generation is fast and the verification is on you, which is why the tests and the rules coverage on Callidus are not decoration.
Five products split attention five ways
Attention is the input that does not scale, and I spent mine five ways. Every hour on a template batch was an hour BookBed's billing stayed switched off. The portfolio is good for a career and bad for a business.
What I would do differently on product six
Pick the one with a person already waiting, and finish the revenue loop before the feature list. Actually, that overstates the tidiness of it. BookBed's billing is wired, tested in Stripe LIVE, and sitting at €9 per month for up to twenty units, and the reason it is not switched on is not technical. It is that turning it on means asking people to pay, and building is more comfortable than asking.
The trial shape matters more than I treated it. Freemius's data puts card-required trials converting near 50% against roughly 18% for no-card opt-in trials and 3–4% for freemium, and I have no first-party conversion number to defend either way because I have not run paid traffic through one. That is the gap, stated plainly.
So the question I would put to anyone reading this as a solo founder SaaS case study rather than a portfolio: how many of your products are sitting at 70% done with the billing switch off? Pick the one with a named human waiting and turn it on this week. Then tell me what happened, because that number is the one nobody publishes.
