<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Dharmendra Jagodana</title>
    <description>The latest articles on DEV Community by Dharmendra Jagodana (@dharmendra_jagodana).</description>
    <link>https://dev.to/dharmendra_jagodana</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4000544%2F325a8f7c-d1d4-48bc-9c48-037b999a1f24.png</url>
      <title>DEV Community: Dharmendra Jagodana</title>
      <link>https://dev.to/dharmendra_jagodana</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/dharmendra_jagodana"/>
    <language>en</language>
    <item>
      <title>I rebuilt the same SaaS backend five times. So I turned it into one SDK.</title>
      <dc:creator>Dharmendra Jagodana</dc:creator>
      <pubDate>Thu, 09 Jul 2026 14:20:32 +0000</pubDate>
      <link>https://dev.to/dharmendra_jagodana/i-rebuilt-the-same-saas-backend-five-times-so-i-turned-it-into-one-sdk-bok</link>
      <guid>https://dev.to/dharmendra_jagodana/i-rebuilt-the-same-saas-backend-five-times-so-i-turned-it-into-one-sdk-bok</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;I build SaaS products with my brother. After shipping five of them, I realized I'd rebuilt the exact same backend (auth, Stripe, multi-tenancy, workflows, email, webhooks) five separate times. So I extracted it into one SDK for React/Next.js. It now runs all five products in production. This is the honest version, including what it still can't do.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The fifth time I sat down to write sign-up and login, I stopped.&lt;/p&gt;

&lt;p&gt;It wasn't hard. That was the problem. I'd done it four times already, and I could see the next three weeks laid out in front of me like a checklist I'd memorized: auth, then Stripe, then workspaces, then roles and permissions, then usage limits, then transactional emails, then webhooks. Weeks of plumbing before I could touch the one feature that was the actual reason I started the project.&lt;/p&gt;

&lt;p&gt;I build software with my brother. Five of our products are live right now:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Imejis&lt;/strong&gt; - a template-based image-generation API&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;AgentCenter&lt;/strong&gt; - mission control for AI agents&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;PlugNode&lt;/strong&gt; - a visual AI workflow builder&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;RemoteWait&lt;/strong&gt; - a virtual queue system&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;LinkTracer&lt;/strong&gt; - creator analytics&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Five completely different products. Every single one needed the exact same backend before it could do anything interesting.&lt;/p&gt;

&lt;h2&gt;
  
  
  The backend tax
&lt;/h2&gt;

&lt;p&gt;There's a tax you pay on every SaaS product before you write a single line of the thing that makes it special.&lt;/p&gt;

&lt;p&gt;Users, so you build auth - and not just email/password, but social login, magic links, sessions, resets. Revenue, so you wire up Stripe, including a whole metering layer if you're doing anything usage-based. Teams, so you build workspaces, roles, invitations. Then email. Then feature flags. Then webhooks.&lt;/p&gt;

&lt;p&gt;None of it is novel. All of it is necessary. And all of it stands between you and the actual idea.&lt;/p&gt;

&lt;p&gt;The first time, it's fun, you're learning. By the third time, you're copy-pasting from your last repo and quietly resenting it. By the fifth, you're maintaining five slightly different versions of the same bugs.&lt;/p&gt;

&lt;p&gt;The first rebuild feels like progress. The fifth one feels like a warning.&lt;/p&gt;

&lt;h2&gt;
  
  
  From copy-paste to a platform
&lt;/h2&gt;

&lt;p&gt;After the third product, I stopped copy-pasting and started extracting - pulling the shared pieces into their own package with a hard boundary between what was truly generic and what was product-specific.&lt;/p&gt;

&lt;p&gt;After the fourth, the package had opinions. It knew how billing should attach to a workspace. It knew each org should get its own physically isolated database. It had a workflow engine, because I was tired of gluing cron jobs and automation tools together just to send a welcome sequence.&lt;/p&gt;

&lt;p&gt;After the fifth, it wasn't a package anymore. It was a platform, running all five products in production every day.&lt;/p&gt;

&lt;p&gt;That's BuildBase.&lt;/p&gt;

&lt;h2&gt;
  
  
  What it is
&lt;/h2&gt;

&lt;p&gt;The whole SaaS backend for React and Next.js, in one SDK.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm &lt;span class="nb"&gt;install&lt;/span&gt; @buildbase/sdk
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Not just auth. Nineteen integrated modules that actually talk to each other, because they were built together for real products rather than stitched together from a marketplace of disconnected services:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Auth&lt;/strong&gt; - email/password, magic link, passkeys (WebAuthn), Google, GitHub, Microsoft, LinkedIn, plus a full OAuth 2.0 authorization server so your app can become an identity provider&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Billing&lt;/strong&gt; - Stripe with your own account, usage-based metering, quota enforcement, credits, seats, multi-currency&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Multi-tenancy&lt;/strong&gt; - an isolated workspace and isolated database per org, with RBAC&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Workflows&lt;/strong&gt; - a real event-driven engine (triggers, actions, conditions), queue-backed&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Communication&lt;/strong&gt; - email through your own sender (SMTP, Google, Microsoft, Mailgun) plus event-driven Slack alerts&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Growth&lt;/strong&gt; - feature flags, audience/CRM, short links, webhooks, analytics&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Global&lt;/strong&gt; - i18n across 8 locales and 22 currencies&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Headless&lt;/strong&gt; - an API layer, so you can use any of it without our UI&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The point isn't the length of the list. It's that these pieces work as one system. Billing knows about your workspaces. Workflows can read your audience. Feature flags can target a plan. That coherence is the part you can't copy-paste from five different vendors.&lt;/p&gt;

&lt;h2&gt;
  
  
  How it actually runs
&lt;/h2&gt;

&lt;p&gt;Under the hood it's MongoDB + Redis + Docker. The defining architectural choice is &lt;strong&gt;a physically isolated database per organization&lt;/strong&gt; - not a shared table with a &lt;code&gt;tenant_id&lt;/code&gt; column, but real per-org isolation. That's the single biggest cost driver, which is also why the pricing is per-app rather than per-seat (more on that below).&lt;/p&gt;

&lt;p&gt;Being honest about the tradeoff: per-org isolation is great for data separation and terrible if you pretend it scales infinitely. It doesn't yet. There's a known connection-pool ceiling I'm not going to hand-wave past, so I'm not making big scale claims.&lt;/p&gt;

&lt;h2&gt;
  
  
  The three decisions I care most about
&lt;/h2&gt;

&lt;p&gt;A feature list tells you what a product does. These tell you what it believes.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Bring your own Stripe, and I take 0% of it.&lt;/strong&gt; Your customers pay you, directly, into your own Stripe account. I never sit in the middle of your revenue. The norm in this space is that your bill climbs as &lt;em&gt;you&lt;/em&gt; grow. I built the opposite on purpose, because I've been the founder watching that line item climb.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. You own your data, three ways to run it.&lt;/strong&gt; Shared (isolated DB per app on our infra), Dedicated (dedicated infra per app), or Self-hosted (run our Docker images on your own servers with your own MongoDB and Redis). No lock-in by design.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Per-app pricing.&lt;/strong&gt; One app = one org = one isolated database. You pay for what you actually run, not per-seat and not per-MAU. Three plans: Launch, Grow, Scale.&lt;/p&gt;

&lt;h2&gt;
  
  
  Let me be straight about where it stands
&lt;/h2&gt;

&lt;p&gt;This is the part I'd want to read first, so here it is.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;React and Next.js only, today.&lt;/strong&gt; No Vue, Svelte, or native mobile SDK yet.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Not open source.&lt;/strong&gt; I know this matters most to this crowd, so I'm not going to bury it. Self-hosting means running our &lt;em&gt;compiled&lt;/em&gt; Docker images on your own infrastructure - you don't get the source code. What you get instead is no vendor lock-in: your infra, your database, your Stripe. I'm not going to dress up "self-hostable" as "open source," because it isn't, and you'd catch it in five minutes anyway.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Early and bootstrapped.&lt;/strong&gt; It's me and my brother. The SDK is young (0.x). But it isn't a landing page with a waitlist - five real products depend on it in production every day. When something breaks, it breaks for me first.&lt;/p&gt;

&lt;h2&gt;
  
  
  Who it's for
&lt;/h2&gt;

&lt;p&gt;Solo founders, indie hackers, and small teams building SaaS on React or Next.js who are sick of wiring the same backend together for the tenth time and want those weeks back for the product that actually matters.&lt;/p&gt;

&lt;h2&gt;
  
  
  Try it, or tear it apart
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Website:&lt;/strong&gt; &lt;a href="https://www.buildbase.app" rel="noopener noreferrer"&gt;https://www.buildbase.app&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Live demo:&lt;/strong&gt; &lt;a href="https://demo.buildbase.app/" rel="noopener noreferrer"&gt;https://demo.buildbase.app/&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Docs:&lt;/strong&gt; &lt;a href="https://docs.buildbase.app/introduction" rel="noopener noreferrer"&gt;https://docs.buildbase.app/introduction&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Self-host starter:&lt;/strong&gt; &lt;a href="https://github.com/buildbase-app/self-hosted-starter" rel="noopener noreferrer"&gt;https://github.com/buildbase-app/self-hosted-starter&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The feedback I most want, especially from this audience: what would make you trust a backend SDK enough to build your next SaaS on it? And what's the one thing missing for your stack?&lt;/p&gt;

&lt;p&gt;Reach me anytime at &lt;a href="mailto:dharmendra@buildbase.app"&gt;dharmendra@buildbase.app&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;I built this because I got tired of paying the backend tax. If it saves you even one of those rebuilds, it did its job.&lt;/p&gt;

</description>
      <category>startup</category>
      <category>nextjs</category>
      <category>buildinpublic</category>
      <category>webdev</category>
    </item>
  </channel>
</rss>
