TL;DR: I pivoted from a single backend engine to a multi‑product ecosystem. Here's why and what I learned about horizontal building.
A few months ago, KeelStack was a single product — a backend engine for Node.js/TypeScript. It was good. Production-ready.
But I kept running into the same problem when talking to other solo founders building AI‑powered SaaS: they didn't have one infrastructure problem. They had five. And solving them one at a time, with five different vendors, was its own kind of pain.
So I made a decision. KeelStack isn't a single product anymore. It's an ecosystem.
What changed
keelstack.me is now the hub. Each product lives on its own subdomain:
@keelstack/guard is the first new addition. It wraps three safety gates for AI agent workflows: idempotency, budget enforcement, and risk gating.
The problem: agent frameworks retry by default. App‑level deduplication doesn't exist by default. So you get duplicate emails, double Stripe charges, runaway agent bills. Guard sits between the framework and your app code and stops that.
It's MIT, zero runtime dependencies, 15.3 KB. The core SDK stays free. I'm building a hosted Dashboard on top (replay timeline, budget graphs, audit logs) – that's the paid layer. First 100 founding members lock in the price forever.
Why the ecosystem decision
Honestly, it was partly instinct and partly observation.
The founders I'm building for – solo technical founders shipping AI‑native SaaS – don't want to stitch together ten different tools. They want a platform that grows with them. And I realized the only way KeelStack could be that platform was if I built it that way from the start, not tried to bolt it on later.
The subdomain architecture was deliberate. Every product gets its own URL, identity, landing page – but they all live under keelstack.me. The root domain is the ecosystem entry point.
It means I'm building horizontally, not just vertically. When I ship the next primitive, it has a home to land in.
What I don't have yet (and what I do)
No paying customers. Zero.
But @keelstack/guard got 51 npm downloads in its first 48 hours – builders are trying it.
I have 1 GitHub star (yes, I starred my own repo), a waitlist building, and a few conversations with founders who've described exactly the pain Guard solves. But I haven't closed anyone yet.
That's the honest part of this post. The ecosystem is live. The products are real. The GTM is still the unsolved problem.
I've learned that the ICP for Guard doesn't search for "idempotency" or "budget enforcement." They post in r/SaaS saying "my agent sent the same email 47 times, what do I do." The symptom language and the technical solution language are completely different. I'm still figuring out how to bridge that gap at scale.
Why I'm writing this
Partly to document the repositioning for myself. Partly because I've found Indie Hackers posts like this one – honest ones, not launch announcement posts – more useful than almost anything else when I'm trying to figure out what to build next.
If you're a solo founder building with AI agents (LangGraph, Vercel AI SDK, Mastra, OpenAI Agents SDK) and you've hit the "my agent did something twice and I got charged for it" problem, I'd genuinely love to talk. Not to pitch you – to understand what you're seeing.
A waitlist exists for the hosted Dashboard – I'm building it based on early feedback.
And if you've repositioned a single tool into a broader platform, I'd love to hear how you thought about it.
I know a few solo technical founders building AI-native SaaS who have run into exactly this problem. I bet they'd be happy to answer some questions for you if you want.