<?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: RootCX</title>
    <description>The latest articles on DEV Community by RootCX (@rootcx).</description>
    <link>https://dev.to/rootcx</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.amazonaws.com%2Fuploads%2Forganization%2Fprofile_image%2F13130%2F241f2eac-3c63-4037-a137-93525402cc38.jpg</url>
      <title>DEV Community: RootCX</title>
      <link>https://dev.to/rootcx</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/rootcx"/>
    <language>en</language>
    <item>
      <title>AI Kills Best-of-Breed SaaS</title>
      <dc:creator>Sandro Munda</dc:creator>
      <pubDate>Wed, 22 Apr 2026 15:01:04 +0000</pubDate>
      <link>https://dev.to/rootcx/ai-kills-best-of-breed-saas-dhh</link>
      <guid>https://dev.to/rootcx/ai-kills-best-of-breed-saas-dhh</guid>
      <description>&lt;p&gt;You picked the perfect CRM. Then the perfect marketing automation tool. Then a separate ticketing system, a separate billing platform, a separate analytics stack. Each one is the best in its category.&lt;/p&gt;

&lt;p&gt;This is the best-of-breed philosophy. For 20 years it felt empowering. Pick the specialized tool for each job. Stitch them together. Build a machine from the finest parts.&lt;/p&gt;

&lt;p&gt;It was always an expensive illusion. AI just made it economically obsolete.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Frankenstein stack
&lt;/h2&gt;

&lt;p&gt;Your head of operations calls it "the Frankenstein stack." They spend half the software budget and a quarter of their time keeping the tools talking to each other.&lt;/p&gt;

&lt;p&gt;An account executive updates a record in the CRM. The change fails to sync with the marketing tool. Someone fixes it by hand. You pay for the CRM, then the marketing tool, then the integration layer on top. Then you pay a consultancy when the integration layer breaks.&lt;/p&gt;

&lt;p&gt;The math is brutal. Three best-in-class tools at $10k a year each is $30k. Integration glue code doubles or triples that. We accepted it as the cost of doing business. We shouldn't have.&lt;/p&gt;

&lt;p&gt;High-growth companies brag about their operational efficiency. Their P&amp;amp;L tells a different story: six figures of software spend with diminishing returns. The marginal utility of the fifth, sixth, or seventh tool is close to zero.&lt;/p&gt;

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

&lt;p&gt;An AI is not a human. It has no intuition. It works only on the data you give it.&lt;/p&gt;

&lt;p&gt;Best-of-breed starves it. Your customer's sales history lives in System A. Their support tickets in System B. Their web activity in System C. Their billing in System D. The AI gets a partial story, so it produces a partial answer.&lt;/p&gt;

&lt;p&gt;You paid $10k for an AI-powered sales tool. It's excellent at what it does. But it only sees half the customer journey, so its recommendations are mediocre. You blame the AI. The real problem is your data architecture.&lt;/p&gt;

&lt;p&gt;The "monolith" that everyone derided for a decade suddenly has an unassailable advantage. Every interaction, every touchpoint, every record, in one database. The AI sees it all. The value is not the speed of the prediction. It is the reliability of the full picture.&lt;/p&gt;

&lt;h2&gt;
  
  
  Bolted on versus built in
&lt;/h2&gt;

&lt;p&gt;The AI shift is not about adding a chatbot to your old software. That is a temporary patch. The real architectural change is designing the software around the AI model from day one.&lt;/p&gt;

&lt;p&gt;Why pay an external platform to automate customer service responses when the response engine can live inside the ticketing system itself? Why run expensive sync jobs when the data never has to leave the database?&lt;/p&gt;

&lt;p&gt;Best-of-breed vendors will announce new AI features. They will bolt them onto an architecture designed for the pre-AI era. Their costs will always reflect that complexity. They will always charge an extra $100 per user per month to run an external model on data they do not own.&lt;/p&gt;

&lt;p&gt;A platform designed from the start to house all the data and run a single AI model across it will always be cheaper. It will always be faster. It will always give better answers.&lt;/p&gt;

&lt;h2&gt;
  
  
  The flexibility that never happened
&lt;/h2&gt;

&lt;p&gt;The traditional argument for best-of-breed was flexibility. You could swap out the underperforming email tool for a better one without disrupting the CRM.&lt;/p&gt;

&lt;p&gt;How often did you actually do that?&lt;/p&gt;

&lt;p&gt;The pain of integration deterred the change every single time. Teams stayed on sub-optimal tools for years. We bought the dream of modularity. We ended up with permanent, expensive technical debt.&lt;/p&gt;

&lt;p&gt;What you pay $10k per seat for is not the tool. It is the cost of integration. It is the price of making five self-interested vendors play nicely together.&lt;/p&gt;

&lt;h2&gt;
  
  
  What the unified platform unlocks
&lt;/h2&gt;

&lt;p&gt;Consolidate onto one platform and the math flips. You delete the integration costs. You collapse three licenses into one. You feed the AI a clean, complete story. Every record is native to the same database, so every AI prediction is grounded in the full picture.&lt;/p&gt;

&lt;p&gt;This is the shift happening in internal tools and operational software right now. Teams are consolidating their CRM, billing, task manager, and AI agents onto one server with a shared database. Every new app in the stack makes the existing ones more useful, because the data compounds. This is the same shift we wrote about in &lt;a href="https://dev.to/blog/why-every-ai-coded-app-is-an-island"&gt;Why Every AI-Coded App Is an Island&lt;/a&gt;: the value is not the app, it is the shared infrastructure underneath.&lt;/p&gt;

&lt;p&gt;If you are building or buying internal software in 2026, the question is no longer "which is the best tool in this category?" It is "which platform lets every tool I add share the same data, the same auth, and the same AI?"&lt;/p&gt;

&lt;p&gt;Best-of-breed is not wrong. It is obsolete. The age of the specialized SaaS tool is ending. The platform is back, and this time the AI is the reason.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://rootcx.com" rel="noopener noreferrer"&gt;RootCX&lt;/a&gt; is that platform for internal apps and AI agents. One server. Shared PostgreSQL database. Shared auth. Shared audit trail. Every app and every agent plugs into the same stack, so the AI sees the complete picture from day one. Open source, self-hostable, free to start.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>The AI Bolt-On Fallacy</title>
      <dc:creator>Sandro Munda</dc:creator>
      <pubDate>Wed, 22 Apr 2026 14:55:33 +0000</pubDate>
      <link>https://dev.to/rootcx/the-ai-bolt-on-fallacy-5gj5</link>
      <guid>https://dev.to/rootcx/the-ai-bolt-on-fallacy-5gj5</guid>
      <description>&lt;p&gt;You have seen the sparkle icon. It is everywhere now.&lt;/p&gt;

&lt;p&gt;You log into the software you have used for ten years. The CRM, the project tracker, the help desk tool. There it is: a small, shimmering button that promises to "Generate Summary" or "Ask AI." The vendor issued a press release. They called it a revolution.&lt;/p&gt;

&lt;p&gt;You click it. The result is disappointing. It summarizes an email chain you already read. It drafts a reply that sounds like a robot wrote it while half asleep. It feels thin.&lt;/p&gt;

&lt;p&gt;This is not an accident. It is a structural inevitability.&lt;/p&gt;

&lt;p&gt;The incumbents of the software industry are engaged in a frantic attempt to graft intelligence onto architectures designed for data entry. They are bolting jet engines onto horse carts. They will tell you the cart is now a plane. It is not. It is a faster cart that is liable to shake itself apart.&lt;/p&gt;

&lt;p&gt;To understand why, you have to look at the database.&lt;/p&gt;

&lt;h2&gt;
  
  
  The era of forms
&lt;/h2&gt;

&lt;p&gt;For the last 20 years, business software was built on one premise: humans are data entry clerks.&lt;/p&gt;

&lt;p&gt;Salesforce, HubSpot, NetSuite. At their core, they are fancy relational databases with forms on top. Rows and columns. To get value out of them, a human has to sit down, open a form, and type.&lt;/p&gt;

&lt;p&gt;This architecture assumes data is scarce and structured. You define a "Lead" or an "Invoice" with rigid fields. If the reality of your customer interaction does not fit into those fields, it does not exist.&lt;/p&gt;

&lt;p&gt;These systems were designed as silos. The sales team has their database (CRM). The finance team has theirs (ERP). The support team has a third. We accepted this fragmentation because humans are decent at context switching. We look at Salesforce, tab over to QuickBooks, and our brains fill the gap.&lt;/p&gt;

&lt;p&gt;But an AI agent does not work like that.&lt;/p&gt;

&lt;h2&gt;
  
  
  The lobotomized copilot
&lt;/h2&gt;

&lt;p&gt;When a legacy vendor adds an "AI copilot" to their tool, they are dropping a very smart intern into a room with no windows and one filing cabinet.&lt;/p&gt;

&lt;p&gt;The AI in your helpdesk can read the support ticket. It can write a polite apology. But it cannot see that this customer has an unpaid invoice in the ERP. It cannot see that their project is delayed in the project management tool. It cannot see the conversation the account manager had in Slack last week.&lt;/p&gt;

&lt;p&gt;It lacks context. And without context, intelligence is just text generation.&lt;/p&gt;

&lt;p&gt;In a fragmented stack, AI is lobotomized. It can only reason about the data it can access. If your business runs on what most ops teams call "the Frankenstack" (a patchwork of apps glued together by Zapier, n8n, and custom APIs), your AI is blind to 80% of reality.&lt;/p&gt;

&lt;p&gt;You can try to patch this with integrations. You can build pipelines to shovel data from one silo to another. But API syncs are slow, lossy, and reactive. By the time the data moves, the moment has passed. The AI is always working with a stale, partial picture.&lt;/p&gt;

&lt;p&gt;This is why the bolt-on AI feels like a toy. It is a text generator, not a business operator.&lt;/p&gt;

&lt;h2&gt;
  
  
  From record to action
&lt;/h2&gt;

&lt;p&gt;The real promise of AI is not better summaries. It is agency.&lt;/p&gt;

&lt;p&gt;We are moving from Systems of Record to Systems of Action. A System of Record waits for you to tell it what happened. A System of Action observes what is happening and does the work itself.&lt;/p&gt;

&lt;p&gt;But an agent cannot act if it is blind.&lt;/p&gt;

&lt;p&gt;Imagine asking an AI agent to "follow up with every client whose project milestone was completed this week but who has not been invoiced yet."&lt;/p&gt;

&lt;p&gt;In a fragmented stack, this is a nightmare. The agent needs to check project status in one tool, cross-reference with the billing tool, find the client contact in a third, and send the email through a fourth. Each hop is an API call. Each API call is a potential failure point. Each tool has its own permission model, its own rate limits, its own schema. The agent breaks at every step.&lt;/p&gt;

&lt;p&gt;Now imagine every one of those records lives in the same database. The agent reads the project status, checks the billing record, and sends the follow-up, all in one motion. No API calls between services. No stale data. No permission mismatches. The agent acts because it can see everything.&lt;/p&gt;

&lt;p&gt;This is the difference between a database with forms and a database with a brain.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why bolt-on always loses
&lt;/h2&gt;

&lt;p&gt;The fundamental problem is architectural, not technical.&lt;/p&gt;

&lt;p&gt;A legacy SaaS vendor cannot fix this by adding more AI features. Their data model was designed 15 years ago for human data entry. Their multi-tenant architecture isolates customers by design. Their API surface exposes a fraction of the internal state. None of this was wrong when the software was built. It was built for a different era.&lt;/p&gt;

&lt;p&gt;Bolting AI onto this architecture is like adding voice control to a rotary phone. The interface improves. The underlying constraint does not change. The data is still fragmented. The context is still partial. The agent is still blind.&lt;/p&gt;

&lt;p&gt;The vendors will keep shipping sparkle icons. They will announce "AI-powered workflows" and "intelligent automation." The demos will look impressive. But in production, on your data, with your messy reality, the copilot will underperform because it can only see what one silo contains.&lt;/p&gt;

&lt;h2&gt;
  
  
  What AI-native actually means
&lt;/h2&gt;

&lt;p&gt;An AI-native system is not a legacy app with a GPT wrapper. It is built differently from the foundation.&lt;/p&gt;

&lt;p&gt;The difference is the data layer. Instead of rigid tables isolated by application, an AI-native architecture puts all the data in one place. A customer is not just a row in a CRM table. It is connected to invoices, support tickets, project tasks, agent interactions, and audit logs. They all live in the same database.&lt;/p&gt;

&lt;p&gt;When your internal tools share a single source of truth, the AI can traverse the entire graph. It can see that a client is late on payment and flag the account before the sales team sends an upsell. It understands the relationship between the promise of the sale and the reality of the delivery.&lt;/p&gt;

&lt;p&gt;This is what we built with &lt;a href="https://rootcx.com" rel="noopener noreferrer"&gt;RootCX&lt;/a&gt;. Not another CRM or ERP to add to the stack. The shared infrastructure underneath. One PostgreSQL database, one auth layer (SSO with Okta, Microsoft Entra, Google Workspace, or Auth0), one set of role-based permissions, one immutable audit trail. You build your internal tools and AI agents on top of it. Every app reads from the same data. Every agent acts under the same security rules as your team.&lt;/p&gt;

&lt;p&gt;The AI is not bolted on. It is built in. The agents do not summarize. They &lt;a href="https://dev.to/blog/the-end-of-the-system-of-record"&gt;act&lt;/a&gt;: update records, chase approvals, follow up with customers, trigger workflows. Every action logged.&lt;/p&gt;

&lt;h2&gt;
  
  
  The sunk cost trap
&lt;/h2&gt;

&lt;p&gt;Most companies will try to make the old way work.&lt;/p&gt;

&lt;p&gt;They have spent years on their ERPs and CRMs. The CFO will ask, "Can we just connect these with Zapier?" They will spend the next five years building fragile bridges between islands, wondering why their AI is not delivering the productivity gains promised in the demo.&lt;/p&gt;

&lt;p&gt;Meanwhile, the teams that skip this phase will build on shared infrastructure from the start. They will not integrate tools. They will build their own, on a platform where the data is already unified, the security is already handled, and the AI agents already have the full picture.&lt;/p&gt;

&lt;p&gt;The "best-of-breed" era, where we bought a different tool for every function, created a mess of data fragmentation. Now we have to clean it up. Not by buying more tools. Not by adding more sparkle icons. By building on &lt;a href="https://dev.to/blog/why-every-ai-coded-app-is-an-island"&gt;better infrastructure&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The bolt-on is a dead end. The future belongs to the unified.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>architecture</category>
      <category>discuss</category>
      <category>product</category>
    </item>
    <item>
      <title>The End of the System of Record</title>
      <dc:creator>Sandro Munda</dc:creator>
      <pubDate>Wed, 22 Apr 2026 14:50:01 +0000</pubDate>
      <link>https://dev.to/rootcx/the-end-of-the-system-of-record-3d36</link>
      <guid>https://dev.to/rootcx/the-end-of-the-system-of-record-3d36</guid>
      <description>&lt;p&gt;Most enterprise software is a lie we have agreed to believe.&lt;/p&gt;

&lt;p&gt;We buy "solutions" to manage customers, projects, or finances. In practice, we are buying empty filing cabinets. We pay for the privilege of manual data entry. Then we pay again to connect those cabinets with fragile integrations.&lt;/p&gt;

&lt;p&gt;For twenty years, the height of software utility was the System of Record. Its promise was simple: "If you type it in, we will keep it safe."&lt;/p&gt;

&lt;p&gt;That promise is no longer enough. The passive database is dead. Welcome to the era of the System of Intelligence.&lt;/p&gt;

&lt;h2&gt;
  
  
  The passive database trap
&lt;/h2&gt;

&lt;p&gt;The System of Record era defined early Salesforce, HubSpot, Zendesk, and legacy ERPs. They were built for storage, not action.&lt;/p&gt;

&lt;p&gt;You hired humans to feed the machine. Sales reps spent Fridays updating CRM fields. Support agents tabbed between three windows to find a ticket number. Operations teams copied rows from a spreadsheet into an invoicing tool. The software did not work for you. You worked for the software.&lt;/p&gt;

&lt;p&gt;This model created two hidden costs most finance leaders never bothered to calculate.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The SaaS tax.&lt;/strong&gt; You are not just paying subscription fees. You are paying for the same customer to exist in your CRM, your helpdesk, your billing tool, and your analytics stack. Five logins. Five permission models. Five data schemas that disagree on what "active customer" even means.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The context void.&lt;/strong&gt; AI is only as smart as the data it can see. When your customer's history lives in five different silos, your "AI assistant" is effectively blindfolded. The predictions are generic because the inputs are partial.&lt;/p&gt;

&lt;h2&gt;
  
  
  From "what happened?" to "what should we do next?"
&lt;/h2&gt;

&lt;p&gt;The System of Intelligence flips the equation. It is defined by action.&lt;/p&gt;

&lt;p&gt;In this new era, the software's job is not to store data. Its job is to understand the data and move the goal forward.&lt;/p&gt;

&lt;p&gt;A System of Intelligence does not wait for a rep to update a record. It notices a customer's usage drop, checks their recent support tickets, sees an unpaid invoice, and drafts a contextual renewal email for your review. The record updates itself. The next action is already queued.&lt;/p&gt;

&lt;p&gt;The question changes from "what happened?" to "what should we do next?"&lt;/p&gt;

&lt;p&gt;But here is the hard truth. You cannot build a System of Intelligence on top of fragmented Systems of Record. You cannot bolt a Ferrari engine onto a skateboard.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why integration is not the answer
&lt;/h2&gt;

&lt;p&gt;The industry's current response is to sell you wrappers. AI tools that sit on top of your existing stack, reading data through APIs and pulling context through connectors. Every major CRM and helpdesk has one now.&lt;/p&gt;

&lt;p&gt;It is a band-aid.&lt;/p&gt;

&lt;p&gt;The data is still scattered. The AI still has to reassemble a single customer identity from five API responses, each with its own permission model, rate limits, and schema. The "intelligence" costs more than the underlying tools. And it degrades the moment one of the APIs rate-limits or drifts.&lt;/p&gt;

&lt;p&gt;Real intelligence needs a unified data layer. Not a federation of them. Not a vector copy of them. One database, where every customer interaction is a native record, and every tool is a view on top of that same truth.&lt;/p&gt;

&lt;p&gt;This is why we built &lt;a href="https://rootcx.com" rel="noopener noreferrer"&gt;RootCX&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;We did not build another CRM or a faster helpdesk. We built the infrastructure that lets your team build its own. One shared PostgreSQL database, SSO, role-based permissions, audit logs, integrations, and deployment. Your internal CRM, your billing dashboard, your task manager, your AI agents, all built on the same platform, reading from the same data. The AI sees all of it from day one. No connectors, no glue code, no wrapper.&lt;/p&gt;

&lt;h2&gt;
  
  
  What a unified data layer unlocks
&lt;/h2&gt;

&lt;p&gt;When every internal tool your team builds reads from the same database, three things change immediately.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Context-aware by default.&lt;/strong&gt; An AI agent running inside your custom CRM can read records written by your billing dashboard and your support tracker. It sees the whole movie, not the trailer. No API calls between tools, no stale exports, no "sync failed" emails.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;End-to-end execution.&lt;/strong&gt; The agent does not just suggest a task. It updates the record, chases the approval, follows up with the customer, and logs every action. Same role-based permissions as a human team member. Same audit trail.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Governance at the root.&lt;/strong&gt; Security is defined once, at the platform level. SSO with Okta, Microsoft Entra, Google Workspace, or Auth0. Role-based access on every app and every agent. Immutable audit logs at the trigger level. One security model for all your internal tools, not twelve separate permission configs.&lt;/p&gt;

&lt;p&gt;This is the same pattern we wrote about in &lt;a href="https://dev.to/blog/why-every-ai-coded-app-is-an-island"&gt;Why Every AI-Coded App Is an Island&lt;/a&gt; and &lt;a href="https://dev.to/blog/ai-kills-best-of-breed-saas"&gt;AI Kills Best-of-Breed SaaS&lt;/a&gt;. The age of scattered tools held together by integration contracts is ending. The age of unified platforms that the AI can actually reason over is beginning.&lt;/p&gt;

&lt;h2&gt;
  
  
  The new standard
&lt;/h2&gt;

&lt;p&gt;The future belongs to companies that stop paying for storage and start investing in intelligence.&lt;/p&gt;

&lt;p&gt;We are moving past the era where teams celebrated "successful integrations." The real goal is a system where the integration was never needed in the first place.&lt;/p&gt;

&lt;p&gt;Your software should be your best employee, not your most demanding admin.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://rootcx.com" rel="noopener noreferrer"&gt;RootCX&lt;/a&gt; is the infrastructure for that new standard. Build your own internal tools and AI agents on one shared database, one security model, one deployment target. Every app makes the next one smarter because the data is already there. Open source, self-hostable, free to start.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>database</category>
      <category>saas</category>
      <category>software</category>
    </item>
    <item>
      <title>Why Open Source Wins in the Age of AI</title>
      <dc:creator>Sandro Munda</dc:creator>
      <pubDate>Wed, 22 Apr 2026 14:44:30 +0000</pubDate>
      <link>https://dev.to/rootcx/why-open-source-wins-in-the-age-of-ai-2kh9</link>
      <guid>https://dev.to/rootcx/why-open-source-wins-in-the-age-of-ai-2kh9</guid>
      <description>&lt;p&gt;There is a lot of noise right now about the death of SaaS. The usual argument is that AI makes code cheap, so software loses its value.&lt;/p&gt;

&lt;p&gt;This is true. But it misses the structural point.&lt;/p&gt;

&lt;p&gt;The problem with SaaS is not price. It is opacity.&lt;/p&gt;

&lt;h2&gt;
  
  
  The rental trap
&lt;/h2&gt;

&lt;p&gt;For 20 years, we rented software we could not touch. We accepted this trade-off. We gave up control for convenience. If the software did not do exactly what we needed, we filed a feature request and waited six months. Or we built a clumsy workaround with Zapier and duct tape.&lt;/p&gt;

&lt;p&gt;This was fine when humans were the primary users of software. A human can adapt. A human can click through a bad UI, work around a missing field, copy-paste between tabs. Humans are flexible. Software did not need to be.&lt;/p&gt;

&lt;p&gt;But that era is ending.&lt;/p&gt;

&lt;h2&gt;
  
  
  Agents need to see the wiring
&lt;/h2&gt;

&lt;p&gt;We are moving from humans using software to AI agents using software.&lt;/p&gt;

&lt;p&gt;An AI agent is only as good as its context. To be effective, it needs to understand the database schema, the API logic, the constraints, the business rules encoded in the code. It needs to see the wiring.&lt;/p&gt;

&lt;p&gt;Put an agent in front of a closed SaaS product and it is blind. It can click buttons through a browser automation tool. It can call a limited API that exposes 30% of the functionality. But it cannot engineer a solution. It cannot understand why a field validation exists. It cannot modify a workflow that does not match your business logic.&lt;/p&gt;

&lt;p&gt;Put the same agent in front of an open codebase and everything changes. It reads the schema. It traces the data flow. It understands the constraints. It can modify, extend, and fix the software because the source is right there.&lt;/p&gt;

&lt;p&gt;This is not a philosophical argument about freedom. It is a practical argument about capability. Closed code is a ceiling on what your AI can do.&lt;/p&gt;

&lt;h2&gt;
  
  
  The rise of elastic software
&lt;/h2&gt;

&lt;p&gt;In the previous era, open source was about community or cost savings. In the AI era, open source is about something different: elasticity.&lt;/p&gt;

&lt;p&gt;If the code is open, the AI can read it. If the AI can read it, it can change it. This creates a new category of technology that will define the next decade: elastic software.&lt;/p&gt;

&lt;p&gt;Here is what this looks like in practice.&lt;/p&gt;

&lt;p&gt;Today, you subscribe to a rigid SaaS tool. It solves 80% of your problem. The other 20% is a feature request that will never ship because it only matters to your team. You work around it. You accept the gap.&lt;/p&gt;

&lt;p&gt;With elastic software, you start from a high-quality open-source base and tell your AI: "This billing workflow needs an approval step before invoices go out. Add it." The AI reads the source. It understands the data model. It writes the code. You review it, deploy it, and move on. The tool now solves 100% of your problem because you own the code.&lt;/p&gt;

&lt;p&gt;SaaS forced you to change your process to fit the software. Malleable software changes to fit your process.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why this kills vertical SaaS
&lt;/h2&gt;

&lt;p&gt;Vertical SaaS built a $100B industry on one bet: domain expertise is hard to encode, so customers will pay a premium for pre-built solutions tailored to their industry.&lt;/p&gt;

&lt;p&gt;That bet is breaking.&lt;/p&gt;

&lt;p&gt;When an AI agent can read an open-source codebase, understand the business logic, and adapt it to a specific vertical workflow in hours instead of months, the value of the pre-built vertical solution collapses. Why rent a tool that solves 80% of your problem for $200 per seat per month when you can build exactly what you need on open infrastructure?&lt;/p&gt;

&lt;p&gt;The vertical SaaS vendor's response will be "but we have the domain knowledge." True. But domain knowledge is increasingly available in training data, customer documentation, and industry standards. The moat was never the knowledge. The moat was the code. And the code is the part AI writes best.&lt;/p&gt;

&lt;h2&gt;
  
  
  The maintenance fear is dead
&lt;/h2&gt;

&lt;p&gt;The old fear of custom software was maintenance. We rented SaaS because we did not want to fix bugs, apply security patches, or handle database migrations ourselves. "Just let someone else deal with it" was a reasonable position when the alternative was hiring three engineers to maintain a custom app.&lt;/p&gt;

&lt;p&gt;But the maintenance argument assumed human labor. If an AI agent can monitor the codebase, flag issues, fix bugs, and apply updates on an ongoing basis, the cost of ownership drops to near zero. The risk that kept everyone on rented software evaporates.&lt;/p&gt;

&lt;p&gt;This does not mean every company should build everything from scratch. It means the build-versus-buy calculation has permanently shifted. The threshold where "build" beats "buy" just moved from $500k annual spend to almost any project where the SaaS tool does not fit.&lt;/p&gt;

&lt;h2&gt;
  
  
  What actually matters now
&lt;/h2&gt;

&lt;p&gt;If open source is the architecture that survives, the next question is: what does the infrastructure look like?&lt;/p&gt;

&lt;p&gt;An open-source codebase alone is not enough. You still need a database. You still need authentication. You still need permissions, audit logs, deployment, and a way for your AI agents to act on real data under real security constraints. This is the gap we wrote about in &lt;a href="https://dev.to/blog/why-every-ai-coded-app-is-an-island"&gt;Why Every AI-Coded App Is an Island&lt;/a&gt;. The code is the easy part. The production infrastructure is what takes weeks.&lt;/p&gt;

&lt;p&gt;This is what &lt;a href="https://rootcx.com" rel="noopener noreferrer"&gt;RootCX&lt;/a&gt; provides. One shared PostgreSQL database, SSO, role-based permissions on every resource, immutable audit logs, integrations, and deployment. Build with Claude Code, Cursor, or RootCX Studio. The AI reads and modifies the code because it is open source (FSL-1.1-ALv2, converting to Apache 2.0 after two years). The agents act on real data, under the same RBAC rules as your team, with every action logged.&lt;/p&gt;

&lt;p&gt;The black box had a good run. Twenty years of renting software you could not see, could not modify, and could not hand off. That era worked when humans were the only users. It does not work when agents need to understand the system to operate it.&lt;/p&gt;

&lt;p&gt;The future belongs to the code you can see. The infrastructure you can own. The tools that bend to your business, not the other way around.&lt;/p&gt;

&lt;p&gt;Long live open source.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>discuss</category>
      <category>opensource</category>
      <category>saas</category>
    </item>
    <item>
      <title>AI Kills ERPs</title>
      <dc:creator>Sandro Munda</dc:creator>
      <pubDate>Wed, 22 Apr 2026 14:38:59 +0000</pubDate>
      <link>https://dev.to/rootcx/ai-kills-erps-2cdm</link>
      <guid>https://dev.to/rootcx/ai-kills-erps-2cdm</guid>
      <description>&lt;p&gt;In a previous post, we argued that &lt;a href="https://dev.to/blog/ai-kills-best-of-breed-saas"&gt;AI kills best-of-breed SaaS&lt;/a&gt;. Too many specialized tools, too much fragmentation, the AI starved of context.&lt;/p&gt;

&lt;p&gt;Some readers pushed back: "That is why ERPs exist. One system. One database. Problem solved."&lt;/p&gt;

&lt;p&gt;They are half right. ERPs were built to solve fragmentation. But they solved it by creating a different, arguably worse, problem.&lt;/p&gt;

&lt;p&gt;AI kills ERPs too. For different reasons.&lt;/p&gt;

&lt;h2&gt;
  
  
  The ERP promise
&lt;/h2&gt;

&lt;p&gt;The pitch was compelling. Stop buying separate tools for finance, procurement, HR, inventory, and operations. Buy one system that does all of it. One vendor. One database. One contract.&lt;/p&gt;

&lt;p&gt;SAP, Oracle, NetSuite, Microsoft Dynamics. They built empires on this promise. And for a long time, it worked well enough. The data was in one place. The reports were consistent. The CFO could see a single number.&lt;/p&gt;

&lt;p&gt;The price was rigidity.&lt;/p&gt;

&lt;h2&gt;
  
  
  The customization trap
&lt;/h2&gt;

&lt;p&gt;Every company operates differently. Your approval workflow has four steps. Your competitor has two. Your procurement process routes through legal. Theirs does not.&lt;/p&gt;

&lt;p&gt;ERPs handle this with "configuration." In theory, you adjust the system to match your business. In practice, you adjust your business to match the system.&lt;/p&gt;

&lt;p&gt;SAP implementations take 6 to 18 months. The average mid-market ERP project costs $150k to $750k. Half of that is consultants configuring the system to approximate your actual workflow. The other half is training your team to work the way the ERP expects them to.&lt;/p&gt;

&lt;p&gt;And the moment you upgrade to the next version, half of your customizations break.&lt;/p&gt;

&lt;p&gt;This is the customization trap. The ERP is rigid by design. It has to be, because it serves thousands of companies with the same codebase. Your specific business logic is a rounding error in their product roadmap. You file a feature request. It ships in 18 months, or never.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why AI breaks the ERP model
&lt;/h2&gt;

&lt;p&gt;ERPs assume that business processes are stable and predictable. You define the workflow once, configure it in the system, and it runs the same way for years.&lt;/p&gt;

&lt;p&gt;AI assumes the opposite. AI is useful precisely because processes change, exceptions happen, and context matters more than rules.&lt;/p&gt;

&lt;p&gt;An AI agent that can read your entire business data and act on it needs flexibility. It needs to understand that this particular invoice should be flagged because the client changed their payment terms last week, even though the standard workflow would auto-approve it.&lt;/p&gt;

&lt;p&gt;An ERP cannot give the AI this flexibility. The processes are frozen in configuration. The data model is locked into the vendor's schema. The "customizations" are brittle layers on top of a system that was not designed to be modified.&lt;/p&gt;

&lt;p&gt;Ask an AI agent to do something that falls outside the ERP's configured workflow and it hits a wall. The data is there, but the system will not let the agent act on it in a way the configuration did not anticipate.&lt;/p&gt;

&lt;p&gt;The ERP has the data. But it has it in a cage.&lt;/p&gt;

&lt;h2&gt;
  
  
  The cost of the cage
&lt;/h2&gt;

&lt;p&gt;ERP vendors charge for the cage and then charge again for the key.&lt;/p&gt;

&lt;p&gt;Need a custom report that the standard module does not support? That is a consulting engagement. Need to change how approvals route for one department? That is a configuration project. Need to integrate with a tool the ERP does not support natively? That is middleware, plus a maintenance contract.&lt;/p&gt;

&lt;p&gt;The per-seat costs are just the beginning. SAP charges $100+ per user per month. Oracle is in the same range. Then you add implementation, customization, training, and the annual maintenance fee that is typically 20% of the license cost.&lt;/p&gt;

&lt;p&gt;A 50-person company on a mid-market ERP is spending $200k+ per year, all-in. And they are still working around the system instead of with it.&lt;/p&gt;

&lt;p&gt;The irony: companies adopted ERPs to reduce the cost of fragmentation. They ended up paying more for rigidity than they ever paid for scattered tools.&lt;/p&gt;

&lt;h2&gt;
  
  
  What AI actually needs
&lt;/h2&gt;

&lt;p&gt;The argument for ERPs was "one database, one system." That part was right. AI does need unified data. We wrote about this in &lt;a href="https://dev.to/blog/the-ai-bolt-on-fallacy"&gt;The AI Bolt-On Fallacy&lt;/a&gt;: an agent that can only see one silo is useless.&lt;/p&gt;

&lt;p&gt;But AI does not need the rest of the ERP package. It does not need frozen workflows. It does not need 18-month implementation cycles. It does not need a $500/day consultant to change an approval rule.&lt;/p&gt;

&lt;p&gt;What AI needs is:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;A shared database&lt;/strong&gt; where every record is accessible and the schema is flexible enough to evolve with the business.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Permissions that are structural&lt;/strong&gt;, not configured through a vendor's admin panel. Role-based access defined once, enforced everywhere, for humans and AI agents alike.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The ability to build exactly what you need&lt;/strong&gt;, not configure the closest approximation of what you need from a menu of pre-built modules.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;An audit trail&lt;/strong&gt; that logs every action, human or AI, at the data level.&lt;/p&gt;

&lt;h2&gt;
  
  
  The third way
&lt;/h2&gt;

&lt;p&gt;Best-of-breed gave you perfect tools that could not talk to each other. ERPs gave you one system that could not bend.&lt;/p&gt;

&lt;p&gt;There is a third option: shared infrastructure that you build on.&lt;/p&gt;

&lt;p&gt;Instead of buying an ERP that does everything badly, you build the exact internal tools your company needs. A procurement tracker that matches your actual approval workflow. A billing system that handles your specific invoicing rules. An inventory tool that reflects how your warehouse actually operates. Not a configuration compromise. The real thing.&lt;/p&gt;

&lt;p&gt;Every tool shares the same database. The same authentication. The same permissions. The same audit trail. The AI agent sees all of it and can act across all of it, because there are no frozen workflows blocking it.&lt;/p&gt;

&lt;p&gt;This is what &lt;a href="https://rootcx.com" rel="noopener noreferrer"&gt;RootCX&lt;/a&gt; provides. One shared PostgreSQL database, SSO, role-based permissions on every resource, immutable audit logs. You build your internal tools with Claude Code, Cursor, or RootCX Studio. You &lt;a href="https://dev.to/blog/how-to-deploy-your-ai-coded-internal-app"&gt;deploy with one command&lt;/a&gt;. Every app inherits the infrastructure.&lt;/p&gt;

&lt;p&gt;The difference from an ERP: you own the code, you own the data model, and your AI agent can act on any record without hitting a configuration wall. The difference from best-of-breed: everything shares one database, so the AI sees the full picture.&lt;/p&gt;

&lt;h2&gt;
  
  
  The new math
&lt;/h2&gt;

&lt;p&gt;An ERP costs $200k+ per year for a 50-person company, and you spend the first 6 months configuring it to be 80% of what you need.&lt;/p&gt;

&lt;p&gt;Building on shared infrastructure, you spend the first week shipping the exact tool you need. The second week, you ship a second tool that reads data from the first. By month two, you have an operational stack that matches your business, not a vendor's idea of your business.&lt;/p&gt;

&lt;p&gt;The code is yours. The data is yours. The infrastructure is open source. If you outgrow it, you modify it. No consultant required. No 18-month upgrade cycle.&lt;/p&gt;

&lt;p&gt;ERPs solved fragmentation by replacing it with rigidity. AI needs the opposite: unified data with flexible tools. The ERP era served its purpose. It is time to build what comes next.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://rootcx.com" rel="noopener noreferrer"&gt;RootCX&lt;/a&gt; is the infrastructure for what comes next. Open source, self-hostable, free to start.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>How to Add SSO to Your AI-Coded Internal App</title>
      <dc:creator>Sandro Munda</dc:creator>
      <pubDate>Wed, 22 Apr 2026 14:33:28 +0000</pubDate>
      <link>https://dev.to/rootcx/how-to-add-sso-to-your-ai-coded-internal-app-4cam</link>
      <guid>https://dev.to/rootcx/how-to-add-sso-to-your-ai-coded-internal-app-4cam</guid>
      <description>&lt;p&gt;You built an internal app with Claude Code or Cursor. It works. The logic is solid. Your team wants to use it.&lt;/p&gt;

&lt;p&gt;Then someone asks: "How do our people log in?"&lt;/p&gt;

&lt;p&gt;This is where most AI-coded apps stall. The code is done, but there is no authentication. No way for your team to sign in with their company credentials. No way to enforce who sees what. The app sits on a branch, waiting for "the auth work" that nobody wants to do.&lt;/p&gt;

&lt;p&gt;It does not have to be this way.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why SSO is not optional for internal tools
&lt;/h2&gt;

&lt;p&gt;If your team uses Okta, Microsoft Entra, Google Workspace, or Auth0, they already have an identity provider. Every internal app should authenticate against it. No separate passwords. No shared login. No "just use the admin account."&lt;/p&gt;

&lt;p&gt;Here is why this matters more than it looks:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Compliance.&lt;/strong&gt; Most security frameworks (SOC 2, ISO 27001, HIPAA) require centralized identity management. If your internal tools have separate passwords, you fail the audit.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Offboarding.&lt;/strong&gt; When someone leaves the company, you disable their identity provider account. If your internal app has its own login, that person still has access until someone remembers to delete them manually.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Trust.&lt;/strong&gt; The moment you show an enterprise client or a compliance officer that your internal tools authenticate through their existing SSO, the conversation changes. You are no longer a "side project." You are production software.&lt;/p&gt;

&lt;p&gt;The problem is that adding SSO from scratch is weeks of work. You need to understand OIDC flows, handle token refresh, manage sessions, deal with edge cases like account linking. Most teams either skip it or pay $X,000 per year to an auth provider, then spend another week wiring it up.&lt;/p&gt;

&lt;p&gt;Some platforms gate SSO behind expensive enterprise tiers. Retool, for example, locks SSO and advanced permissions behind their $50/user/month Business plan. For a 30-person team, that is $18,000 a year just to let your people log in with their company credentials.&lt;/p&gt;

&lt;h2&gt;
  
  
  How SSO works on RootCX
&lt;/h2&gt;

&lt;p&gt;On RootCX, SSO is included on every plan, including the free tier. No upgrade required. No separate auth provider to pay for.&lt;/p&gt;

&lt;p&gt;RootCX Core supports any OIDC-compliant identity provider out of the box. Okta, Microsoft Entra (Azure AD), Google Workspace, Auth0, or any provider that speaks OIDC. You configure it once, and every app and every AI agent on your project inherits the same authentication.&lt;/p&gt;

&lt;p&gt;Here is how to set it up.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 1: Get your OIDC credentials
&lt;/h3&gt;

&lt;p&gt;Go to your identity provider and create a new OIDC application. You will need three things:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Issuer URL&lt;/strong&gt;: the OIDC discovery endpoint (e.g. &lt;code&gt;https://your-org.okta.com&lt;/code&gt;, &lt;code&gt;https://login.microsoftonline.com/{tenant}/v2.0&lt;/code&gt;, &lt;code&gt;https://accounts.google.com&lt;/code&gt;)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Client ID&lt;/strong&gt;: the OAuth 2.0 client identifier&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Client Secret&lt;/strong&gt;: the OAuth 2.0 client secret&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Set the redirect URI to &lt;code&gt;https://your-rootcx-url/api/v1/auth/oidc/callback&lt;/code&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 2: Register the provider in RootCX
&lt;/h3&gt;

&lt;p&gt;Option A: use environment variables for automatic provisioning. Set these before starting your Core:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight properties"&gt;&lt;code&gt;&lt;span class="py"&gt;ROOTCX_OIDC_ISSUER&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;https://your-org.okta.com&lt;/span&gt;
&lt;span class="py"&gt;ROOTCX_OIDC_CLIENT_ID&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;your-client-id&lt;/span&gt;
&lt;span class="py"&gt;ROOTCX_OIDC_CLIENT_SECRET&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;your-client-secret&lt;/span&gt;
&lt;span class="py"&gt;ROOTCX_PUBLIC_URL&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;https://your-rootcx-url&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;RootCX picks these up on startup and creates the provider automatically. The client secret is stored in the encrypted vault (AES-256).&lt;/p&gt;

&lt;p&gt;Option B: register via the API (useful if you manage multiple providers):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-X&lt;/span&gt; POST https://your-rootcx-url/api/v1/auth/oidc/providers &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Authorization: Bearer &lt;/span&gt;&lt;span class="nv"&gt;$ADMIN_TOKEN&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Content-Type: application/json"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="s1"&gt;'{
    "issuerUrl": "https://your-org.okta.com",
    "clientId": "your-client-id",
    "clientSecret": "your-client-secret",
    "autoRegister": true,
    "defaultRole": "member"
  }'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;autoRegister: true&lt;/code&gt; means new users get an account on first login. &lt;code&gt;defaultRole&lt;/code&gt; assigns them a starting role. You can also map roles from your identity provider using the &lt;code&gt;roleClaim&lt;/code&gt; field if your provider sends role information in the JWT.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 3: Done
&lt;/h3&gt;

&lt;p&gt;That is it. Your team now sees the SSO login button on the RootCX auth screen. They click it, authenticate with their company credentials, and they are in. First-time users get an account automatically. If they previously had a password account with the same email, RootCX links the OIDC identity to the existing account.&lt;/p&gt;

&lt;p&gt;Every app on your project inherits this authentication. Every AI agent runs under the same identity layer. You did not write a single line of auth code.&lt;/p&gt;

&lt;h3&gt;
  
  
  Optional: enforce SSO-only mode
&lt;/h3&gt;

&lt;p&gt;If you want to disable password login entirely (common for enterprise deployments), set:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight properties"&gt;&lt;code&gt;&lt;span class="py"&gt;ROOTCX_DISABLE_PASSWORD_LOGIN&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;true&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now the only way in is through your identity provider. One place to manage access. One place to revoke it.&lt;/p&gt;

&lt;h2&gt;
  
  
  What you get after SSO is configured
&lt;/h2&gt;

&lt;p&gt;SSO is the foundation, but it is not the whole picture. Once your team authenticates through OIDC, RootCX layers on:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Role-based access control.&lt;/strong&gt; Define roles with namespaced permissions, wildcards, and inheritance. "The finance team can view invoices but not edit them. The procurement team can approve purchase orders. The intern can read but not delete." Every app and every agent enforces the same rules.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Immutable audit logs.&lt;/strong&gt; Every action (human or AI agent) is logged at the database trigger level. Who did what, when, and on which record. This is not application-level logging that can be bypassed. It is structural.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Session management.&lt;/strong&gt; Server-side sessions in PostgreSQL. JWT access tokens expire in 15 minutes. Refresh tokens last 30 days. You can revoke a session immediately by disabling the user in your identity provider.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;AI agents under the same rules.&lt;/strong&gt; This is the part most platforms miss. On RootCX, an AI agent authenticates and operates under the same RBAC as a human user. If the agent should not see salary data, it cannot see salary data. If it takes an action, that action is logged in the same audit trail as everything else.&lt;/p&gt;

&lt;h2&gt;
  
  
  The real cost of skipping SSO
&lt;/h2&gt;

&lt;p&gt;Every week your internal app runs without SSO is a week of risk.&lt;/p&gt;

&lt;p&gt;A shared password gets forwarded in Slack. An ex-employee still has access three months after leaving. A compliance officer asks for an access log and you have nothing to show. An agency hands off a tool to a client and the client asks "can our team log in with Okta?" and the answer is no.&lt;/p&gt;

&lt;p&gt;These are not hypothetical scenarios. They are the reason most AI-coded apps never make it to production. The code is ready. The infrastructure is not.&lt;/p&gt;

&lt;p&gt;SSO is the first step from prototype to production. On RootCX, it takes &lt;a href="https://rootcx.com/docs/platform/authentication" rel="noopener noreferrer"&gt;under 10 minutes&lt;/a&gt;, it costs nothing, and every app you build after this one inherits it automatically.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://rootcx.com" rel="noopener noreferrer"&gt;Start your project&lt;/a&gt; and add SSO today. Free tier, no credit card required.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>security</category>
      <category>tutorial</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Turn Claude Code Into an Enterprise App Builder</title>
      <dc:creator>Sandro Munda</dc:creator>
      <pubDate>Wed, 22 Apr 2026 14:27:20 +0000</pubDate>
      <link>https://dev.to/rootcx/turn-claude-code-into-an-enterprise-app-builder-4fji</link>
      <guid>https://dev.to/rootcx/turn-claude-code-into-an-enterprise-app-builder-4fji</guid>
      <description>&lt;p&gt;Agents are only as good as the infrastructure they control.&lt;/p&gt;

&lt;p&gt;Claude Code writes production code directly in your terminal. It understands your codebase, reads your files, and generates working apps in minutes. For the first time, a single prompt can produce a real backend, a real frontend, and a real API.&lt;/p&gt;

&lt;p&gt;But if you are a CTO or an ops lead, a fast coder is not the hard part. The hard part is what comes after the code: a database, authentication, permissions, audit logs, deployment. The infrastructure that turns code into software your team can actually use.&lt;/p&gt;

&lt;h2&gt;
  
  
  The silo trap
&lt;/h2&gt;

&lt;p&gt;You might think: "Claude can already code a backend for me." And you are right. Claude can spin up a database schema, an API, and an auth system in seconds. But that is exactly where the trap lies.&lt;/p&gt;

&lt;p&gt;Ask Claude to build a Vendor Portal today, and it creates one silo. Ask it to build a Budget Tracker tomorrow, and it creates a second, completely isolated silo. A third app on Wednesday means a third database, a third auth setup, a third deploy target.&lt;/p&gt;

&lt;p&gt;Your data is fragmented across different databases. Your permissions are inconsistent. Your APIs live on separate islands. There is no shared audit trail. No SSO. No way for one app to read data from another.&lt;/p&gt;

&lt;p&gt;Without a shared foundation, Claude is not building an ecosystem. It is building technical debt at the speed of light.&lt;/p&gt;

&lt;p&gt;This is the &lt;a href="https://dev.to/blog/why-every-ai-coded-app-is-an-island"&gt;island problem&lt;/a&gt; we wrote about earlier. AI tools generate code faster than ever. But every generated app lands as a disconnected island unless the infrastructure underneath is shared.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Claude Code is missing
&lt;/h2&gt;

&lt;p&gt;To go from script generator to enterprise app builder, Claude Code needs more than coding ability. It needs hands. Hands that can create tables in a shared database, enforce permissions, wire up SSO, and deploy to a server your team can access.&lt;/p&gt;

&lt;p&gt;This is what &lt;a href="https://rootcx.com/product/claude-code" rel="noopener noreferrer"&gt;RootCX provides&lt;/a&gt;. A CLI and a set of skills that give Claude Code direct knowledge of the production infrastructure. Instead of creating a new island for every app, Claude builds onto a stack that already exists.&lt;/p&gt;

&lt;p&gt;That stack includes a shared PostgreSQL database, SSO with Okta or Microsoft Entra or Google Workspace, role-based permissions on every resource, immutable audit logs at the trigger level, an encrypted secrets vault, and one-command deployment.&lt;/p&gt;

&lt;p&gt;Your second app is faster than your first because the data is already there. Your third app can read records created by the first two. An AI agent built on day five can act on everything that came before it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Get started in three lines
&lt;/h2&gt;

&lt;p&gt;Install the &lt;a href="https://rootcx.com/docs/developers/claude-code" rel="noopener noreferrer"&gt;RootCX CLI&lt;/a&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-fsSL&lt;/span&gt; https://rootcx.com/install.sh | sh
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Install the &lt;a href="https://skills.sh/rootcx/skills" rel="noopener noreferrer"&gt;RootCX skills&lt;/a&gt; that teach Claude the full stack (data modeling, UI components, backend workers, API, agent scaffolding):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npx skills add rootcx/skills
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then open Claude Code and start building. That is it.&lt;/p&gt;

&lt;p&gt;Claude now knows how to define data schemas, write React frontends with 30+ production components, create backend workers, call the Core API, and scaffold AI agents with LangGraph. It does not guess how RootCX works. It knows. The code it writes fits the platform from the first prompt.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Claude Code builds on RootCX
&lt;/h2&gt;

&lt;p&gt;Here is what a single Claude Code session produces on RootCX:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;A full internal app.&lt;/strong&gt; "Build me a vendor management portal with approval workflows." Claude creates the data schema, the frontend views, the RBAC rules (procurement team can approve, finance team can view, vendors can submit). It deploys. Your team logs in with SSO.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;An AI agent that acts.&lt;/strong&gt; "Build an agent that monitors overdue invoices and sends follow-up emails." Claude scaffolds the agent with LangGraph, connects it to the invoices table, sets up the email integration through Channels (Slack, email, Telegram), and deploys it with the same permissions as a human team member. Every action is logged in the audit trail.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;A cross-app workflow.&lt;/strong&gt; "The vendor portal agent should create a task in the project tracker when a new vendor is approved." Because both apps share the same database, the agent reads from the vendor table and writes to the task table. No API call between services. No webhook. No glue code.&lt;/p&gt;

&lt;p&gt;Every app Claude builds inherits the full stack: PostgreSQL, SSO, RBAC, audit logs, integrations, deployment. The infrastructure is not generated. It is already there.&lt;/p&gt;

&lt;h2&gt;
  
  
  Code you own, not code you rent
&lt;/h2&gt;

&lt;p&gt;Everything Claude Code generates on RootCX is standard, readable code. Not proprietary JSON configs. Not locked into a visual editor. Real TypeScript, real React, real SQL.&lt;/p&gt;

&lt;p&gt;You can read every line. Your AI can read every line. You can fork it, modify it, hand it off to a client, or self-host it on your own infrastructure. The RootCX license (FSL-1.1-ALv2) converts to Apache 2.0 after two years. If RootCX disappeared tomorrow, you would still own everything.&lt;/p&gt;

&lt;p&gt;This is the difference between building on an &lt;a href="https://dev.to/blog/open-source-is-thriving-saas-is-dying"&gt;open platform&lt;/a&gt; and building on a proprietary one. When the source is open, Claude Code can read the platform internals, understand the constraints, and write code that fits. A closed platform means the AI is guessing. An open one means it knows.&lt;/p&gt;

&lt;h2&gt;
  
  
  From code generator to app builder
&lt;/h2&gt;

&lt;p&gt;The gap between "generated code" and "production app" is weeks of infrastructure work: database, auth, permissions, audit logs, deployment. That gap is why most AI-generated apps never ship.&lt;/p&gt;

&lt;p&gt;RootCX closes it. Connect Claude Code to a RootCX Core, and the agent is not just writing code. It is building production-ready internal tools and AI agents on shared infrastructure, with real security, real data, and real governance.&lt;/p&gt;

&lt;p&gt;The &lt;a href="https://rootcx.com/docs/developers/claude-code" rel="noopener noreferrer"&gt;plugin is free to install&lt;/a&gt;. The Core is &lt;a href="https://rootcx.com" rel="noopener noreferrer"&gt;free to start&lt;/a&gt;, no credit card required. Build your first app and see what happens when Claude Code has real infrastructure to work with.&lt;/p&gt;

</description>
      <category>agents</category>
      <category>ai</category>
      <category>claude</category>
      <category>softwaredevelopment</category>
    </item>
    <item>
      <title>RBAC for Internal Tools, the Complete Guide</title>
      <dc:creator>Sandro Munda</dc:creator>
      <pubDate>Wed, 22 Apr 2026 14:27:15 +0000</pubDate>
      <link>https://dev.to/rootcx/rbac-for-internal-tools-the-complete-guide-50bp</link>
      <guid>https://dev.to/rootcx/rbac-for-internal-tools-the-complete-guide-50bp</guid>
      <description>&lt;p&gt;You prompt Claude Code: "add role-based access control to my app." It generates a users table, a roles table, a middleware that checks permissions before each route. It works.&lt;/p&gt;

&lt;p&gt;Then you build a second app. Claude Code generates another users table, another roles table, another middleware. Different schema. Different logic. No connection to the first one.&lt;/p&gt;

&lt;p&gt;By the time you have five internal tools, you have five separate permission systems. Five places to define who can do what. Five places to update when someone joins, leaves, or changes teams. Five audit trails that do not talk to each other.&lt;/p&gt;

&lt;p&gt;That is not RBAC. That is five islands pretending to have access control.&lt;/p&gt;

&lt;p&gt;The real question is not "how do I add permissions to my app." It is "how do I design access control that works across every tool my team builds, today and next year."&lt;/p&gt;

&lt;p&gt;Below: the actual RBAC model (the one NIST standardized), why per-app permissions fail, how RBAC compares to the alternatives, and what a centralized implementation looks like.&lt;/p&gt;

&lt;h2&gt;
  
  
  What RBAC actually is
&lt;/h2&gt;

&lt;p&gt;Role-Based Access Control was formalized by David Ferraiolo and Rick Kuhn at NIST in 1992. It became an ANSI/INCITS standard in 2004 (INCITS 359), and it remains the most widely adopted access control model in enterprise software.&lt;/p&gt;

&lt;p&gt;The idea is simple: instead of assigning permissions directly to users, you assign users to roles, and roles carry permissions. Alice does not get "can read invoices." Alice gets the "finance" role, and that role includes "can read invoices."&lt;/p&gt;

&lt;p&gt;The indirection is the whole point. You manage permissions at the role level, not at the individual level. When a new person joins the finance team, you assign one role instead of 40 individual permissions. When someone leaves, you revoke one role.&lt;/p&gt;

&lt;h3&gt;
  
  
  The NIST model
&lt;/h3&gt;

&lt;p&gt;NIST defines three levels of RBAC:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Core RBAC.&lt;/strong&gt; Users, roles, permissions, and sessions. Users are assigned to roles. Roles carry permissions. A user activates a role in a session and gets the associated permissions. This is the minimum viable RBAC.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Hierarchical RBAC.&lt;/strong&gt; Roles can inherit from other roles. A "manager" role inherits all permissions from "editor," which inherits from "viewer." You define each layer once, and changes propagate automatically. Without hierarchy, you duplicate permission sets across roles and they drift apart over time.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Constrained RBAC.&lt;/strong&gt; Adds separation of duty rules. Static constraints prevent a user from holding two conflicting roles (the person who submits expenses cannot also approve them). Dynamic constraints prevent activating both roles in the same session. Separation of duties is required by SOC 2, ISO 27001, and Sarbanes-Oxley.&lt;/p&gt;

&lt;p&gt;Most internal tool platforms, if they implement RBAC at all, stop at Core. They give you users and roles but no hierarchy and no constraints. That is enough for a prototype but not for production.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why per-app RBAC fails
&lt;/h2&gt;

&lt;p&gt;When Claude Code or Cursor generates access control for your app, it creates a self-contained permission system scoped to that single application. This feels right at first. But it breaks down fast.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;No single source of truth for identity.&lt;/strong&gt; Each app maintains its own user records. When someone leaves the company, you need to remember every app they had access to and disable them in each one. Miss one, and a former employee still has access three months later.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Roles diverge.&lt;/strong&gt; App A defines "admin" as someone who can read and write everything. App B defines "admin" as someone who can also delete records and manage users. Same word, different meanings. Auditors hate this.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;No cross-app visibility.&lt;/strong&gt; An auditor asks: "What can this user access?" With per-app RBAC, you need to query five separate systems and reconcile the results manually. With centralized RBAC, it is one query.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;No cross-app enforcement.&lt;/strong&gt; An AI agent reads from the CRM and writes to the invoicing tool. Which permission system governs the agent? If each app has its own RBAC, the agent either gets full access to both (dangerous) or you build custom bridging logic (fragile).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Role explosion.&lt;/strong&gt; The NIST literature flags role explosion as the primary scaling problem in RBAC. Per-app systems make it worse because the same logical role ("finance team member") gets duplicated and customized in each application. In a centralized system, you define it once.&lt;/p&gt;

&lt;p&gt;One Hacker News commenter described this problem precisely: "Needed complex authentication, permissions, and global theming per client." Per-app RBAC cannot deliver "per client" when each app has its own permission universe.&lt;/p&gt;

&lt;h2&gt;
  
  
  RBAC vs. ACL vs. ABAC
&lt;/h2&gt;

&lt;p&gt;RBAC is not the only access control model. Understanding the alternatives helps you pick the right one, and most production systems use a combination.&lt;/p&gt;

&lt;h3&gt;
  
  
  ACLs (Access Control Lists)
&lt;/h3&gt;

&lt;p&gt;An ACL attaches permissions directly to a resource. File systems use ACLs: this file is readable by Alice, writable by Bob, executable by the ops group.&lt;/p&gt;

&lt;p&gt;ACLs work well for flat, resource-level access. They break down when you have thousands of resources and hundreds of users, because you end up managing permissions per resource per user. There is no abstraction layer.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Use ACLs for:&lt;/strong&gt; filesystem permissions, object storage policies, network rules.&lt;br&gt;
&lt;strong&gt;Do not use ACLs for:&lt;/strong&gt; application-level permissions that need to scale with your team.&lt;/p&gt;
&lt;h3&gt;
  
  
  ABAC (Attribute-Based Access Control)
&lt;/h3&gt;

&lt;p&gt;ABAC evaluates attributes on the user, the resource, the action, and the environment to make access decisions. "Allow access if the user's department is finance AND the document's classification is internal AND it is a business day."&lt;/p&gt;

&lt;p&gt;ABAC is more expressive than RBAC. It handles context (time, location, device) that RBAC ignores. OWASP's Authorization Cheat Sheet recommends ABAC over RBAC for complex systems because it avoids role explosion.&lt;/p&gt;

&lt;p&gt;But ABAC is harder to implement, harder to audit, and harder to reason about. Policies are rules, not a structure. When an auditor asks "what can this user do?", answering that question in an ABAC system requires evaluating every policy against every possible attribute combination.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Use ABAC for:&lt;/strong&gt; fine-grained, context-dependent access decisions (e.g., "only allow access from the corporate network during business hours").&lt;br&gt;
&lt;strong&gt;Do not use ABAC for:&lt;/strong&gt; your primary permission model in internal tools. The overhead is not worth it unless you have regulatory requirements that demand context-aware access.&lt;/p&gt;
&lt;h3&gt;
  
  
  The practical answer
&lt;/h3&gt;

&lt;p&gt;For internal tools, RBAC with namespaced permissions handles 95% of cases. Layer ABAC on top when you need context-aware rules (IP restrictions, time-based access, device policies). Most teams never need pure ABAC.&lt;/p&gt;
&lt;h2&gt;
  
  
  Five principles that matter
&lt;/h2&gt;
&lt;h3&gt;
  
  
  1. Least privilege
&lt;/h3&gt;

&lt;p&gt;Every user and every agent gets the minimum permissions needed for their function. Not "start with everything and remove what they do not need." Start with nothing and add what they do need.&lt;/p&gt;

&lt;p&gt;Jerome Saltzer formalized this in 1974: "Every program and every privileged user of the system should operate using the least amount of privilege necessary to complete the job."&lt;/p&gt;

&lt;p&gt;In practice, this means your default role has zero permissions. A new team member gets a "viewer" role that allows read access to the apps they need. Elevated access requires explicit assignment.&lt;/p&gt;
&lt;h3&gt;
  
  
  2. Deny by default
&lt;/h3&gt;

&lt;p&gt;OWASP lists this as a top authorization principle: applications must deny access unless an explicit permission exists. If a permission check fails, the answer is "no," not "let me check if there is a reason to deny." No ambiguity.&lt;/p&gt;

&lt;p&gt;Sounds obvious. Most AI-generated apps do the opposite. Claude Code generates a CRUD app where every route is open by default, and you add protection later. The secure approach reverses this: lock every route, then explicitly open the ones that need to be public.&lt;/p&gt;
&lt;h3&gt;
  
  
  3. Centralize authorization
&lt;/h3&gt;

&lt;p&gt;OWASP recommends using "framework-level mechanisms enabling global, application-wide authorization configuration rather than applying checks individually to methods or classes."&lt;/p&gt;

&lt;p&gt;The same logic applies across apps. Five internal tools should share one authorization layer, not five. One set of roles, one set of permissions, one user directory.&lt;/p&gt;

&lt;p&gt;Per-app authorization is a dead end. &lt;a href="https://dev.to/blog/why-every-ai-coded-app-is-an-island"&gt;Every AI-coded app is an island&lt;/a&gt;, and per-app RBAC means island permissions. Centralize it or watch your permission systems drift apart.&lt;/p&gt;
&lt;h3&gt;
  
  
  4. Enforce server-side
&lt;/h3&gt;

&lt;p&gt;OWASP is explicit: "Developers must never rely on client-side access control checks." Hiding a button in the UI is not security. A determined user (or a compromised agent) can call the API directly.&lt;/p&gt;

&lt;p&gt;Enforcement must happen at the API layer. The frontend hides things the user cannot access (that is UX), but the server rejects unauthorized requests (that is security). Both layers are necessary. Only one is a security boundary.&lt;/p&gt;
&lt;h3&gt;
  
  
  5. Separation of duties
&lt;/h3&gt;

&lt;p&gt;The person who submits an expense report should not also approve it. The agent that generates a financial transaction should not also execute it. This constraint prevents fraud and limits the blast radius of compromised accounts.&lt;/p&gt;

&lt;p&gt;NIST's constrained RBAC model handles this with static separation (you cannot hold both roles) and dynamic separation (you cannot activate both roles in the same session). Sarbanes-Oxley and SOC 2 audits check for this.&lt;/p&gt;
&lt;h2&gt;
  
  
  RBAC for AI agents
&lt;/h2&gt;

&lt;p&gt;Most platforms fall apart here. AI agents need the exact access control model as human users. Not a separate one, and not a bypass.&lt;/p&gt;

&lt;p&gt;A senior engineer has admin access but uses it carefully. An AI agent with admin access has no judgment. A single prompt injection gives an attacker credential access, lateral movement, and impact across every resource the agent can reach.&lt;/p&gt;

&lt;p&gt;As one Hacker News commenter recommended: "Constrain them like any other service with production access: least privilege, audit trails, blast radius containment."&lt;/p&gt;

&lt;p&gt;In practice:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Agents get roles, not open access.&lt;/strong&gt; An agent that reads CRM data and sends follow-up emails gets a role with &lt;code&gt;app:crm:contacts.read&lt;/code&gt; and &lt;code&gt;integration:email:send&lt;/code&gt;. Nothing else.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The audit trail logs agent actions alongside human actions.&lt;/strong&gt; Not a separate log. The same immutable trail, with the same schema: who (the agent), what (the action), when, and on which record.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The API enforces permission boundaries.&lt;/strong&gt; If the agent tries to delete a record it does not have permission to delete, the request fails. Same as it would for a human without that role.&lt;/p&gt;
&lt;h2&gt;
  
  
  How this works on RootCX
&lt;/h2&gt;

&lt;p&gt;On RootCX, RBAC is built into the platform. Not per-app. Every app, agent, and integration on a project shares one permission model, one set of roles, and one user directory.&lt;/p&gt;
&lt;h3&gt;
  
  
  You declare your data. Permissions follow.
&lt;/h3&gt;

&lt;p&gt;Every RootCX app has a &lt;code&gt;manifest.json&lt;/code&gt; with a &lt;code&gt;dataContract&lt;/code&gt;: your entities and fields. When the app is installed, the platform generates namespaced CRUD permissions for every entity:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;app:crm:contacts.create
app:crm:contacts.read
app:crm:contacts.update
app:crm:contacts.delete
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Add a &lt;code&gt;deals&lt;/code&gt; entity, four more permissions appear. Add &lt;code&gt;companies&lt;/code&gt;, four more. You never write permission logic. You never wire up middleware. RBAC follows from the data contract.&lt;/p&gt;

&lt;p&gt;If you need permissions beyond CRUD (like &lt;code&gt;contacts.export&lt;/code&gt; or &lt;code&gt;reports.generate&lt;/code&gt;), you declare them in the manifest's &lt;code&gt;permissions&lt;/code&gt; field. But most apps never need to. The auto-generated CRUD set covers the standard cases.&lt;/p&gt;

&lt;p&gt;Wildcards keep role definitions clean: &lt;code&gt;app:crm:*&lt;/code&gt; grants full CRM access, &lt;code&gt;*&lt;/code&gt; grants global admin.&lt;/p&gt;

&lt;h3&gt;
  
  
  Roles with inheritance
&lt;/h3&gt;

&lt;p&gt;Roles support inheritance. An "editor" inherits everything from "viewer" and adds write permissions. A "manager" inherits "editor" and adds delete. Change the viewer permissions, and editors and managers pick up the change automatically.&lt;/p&gt;

&lt;p&gt;Role hierarchies are validated for cycles (up to 64 levels deep), so you cannot create an infinite inheritance loop.&lt;/p&gt;

&lt;h3&gt;
  
  
  One identity layer
&lt;/h3&gt;

&lt;p&gt;If your team uses Okta, Microsoft Entra, Google Workspace, or Auth0, you &lt;a href="https://dev.to/blog/how-to-add-sso-to-your-internal-app"&gt;configure OIDC once&lt;/a&gt; and every app inherits authentication automatically. New users get a default role on first login. Role claims from your identity provider map directly to RootCX roles.&lt;/p&gt;

&lt;p&gt;One user directory. One role structure. Disable someone in your identity provider, and they lose access to everything on the project.&lt;/p&gt;

&lt;h3&gt;
  
  
  Enforcement at every layer
&lt;/h3&gt;

&lt;p&gt;The API checks permissions on every request. No &lt;code&gt;app:crm:contacts.delete&lt;/code&gt; permission, no delete. The frontend SDK hides UI elements the user cannot access, but the API is the real security boundary.&lt;/p&gt;

&lt;h3&gt;
  
  
  Agents under the same rules
&lt;/h3&gt;

&lt;p&gt;AI agents on RootCX get scoped roles, not admin by default. The API enforces the agent's role on every action. If the agent reaches for a resource outside its permissions, the call is denied. Every action lands in the &lt;a href="https://dev.to/docs/platform/audit"&gt;immutable audit trail&lt;/a&gt; alongside human actions.&lt;/p&gt;

&lt;p&gt;No special bypass. No "agent mode" that skips checks.&lt;/p&gt;

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

&lt;p&gt;Most internal tool platforms gate RBAC and SSO behind enterprise pricing. Retool locks advanced permissions behind their Business plan at $50 per user per month. For a 30-person team, that is $18,000 a year for access controls that should be baseline security.&lt;/p&gt;

&lt;p&gt;As one reviewer put it: "SSO and advanced permissions are table-stakes features that many organizations require for security compliance, and gating them behind a $50/user/month tier feels aggressive."&lt;/p&gt;

&lt;p&gt;On RootCX, RBAC and SSO are included on every plan, including the free tier. Access control is not a premium feature. It is a security requirement.&lt;/p&gt;

&lt;h2&gt;
  
  
  The checklist before you ship
&lt;/h2&gt;

&lt;p&gt;Before your internal tool goes to production:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;One identity source.&lt;/strong&gt; Users log in through your identity provider (SSO/OIDC), not per-app passwords.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Centralized roles.&lt;/strong&gt; Roles and permissions are defined once and enforced across every app.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Least privilege.&lt;/strong&gt; New users and agents start with zero permissions and get only what they need.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;No default admin.&lt;/strong&gt; The app does not ship with everyone as admin.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Server-side enforcement.&lt;/strong&gt; Every API endpoint checks permissions. The frontend hides but does not protect.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Audit trail.&lt;/strong&gt; Every action is logged with who, what, when, and on which record.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Separation of duties.&lt;/strong&gt; Critical workflows require more than one person.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Agent boundaries.&lt;/strong&gt; AI agents get scoped roles, not full access.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you cannot check all eight, your tool is not ready for IT review.&lt;/p&gt;

&lt;h2&gt;
  
  
  From islands to infrastructure
&lt;/h2&gt;

&lt;p&gt;What separates a working prototype from production software is not more features. It is infrastructure: authentication, access control, audit logging, session management. IT checks for these before approving a tool. Compliance audits for them when they show up.&lt;/p&gt;

&lt;p&gt;Per-app RBAC is not a shortcut. It is technical debt that compounds with every new tool you build. Centralized RBAC, where every app and agent shares one role structure, one permission model, and one audit trail, is the only approach that scales.&lt;/p&gt;

&lt;p&gt;On RootCX, this is built in from the first &lt;a href="https://dev.to/blog/how-to-deploy-your-ai-coded-internal-app"&gt;deploy&lt;/a&gt;. One identity layer, one permission model. Configure &lt;a href="https://dev.to/docs/platform/rbac"&gt;RBAC&lt;/a&gt; once, and every app you build after that inherits it.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://rootcx.com" rel="noopener noreferrer"&gt;Start your project&lt;/a&gt;. Free tier, no credit card required.&lt;/p&gt;

</description>
      <category>architecture</category>
      <category>security</category>
      <category>systemdesign</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Everything Is Code</title>
      <dc:creator>Sandro Munda</dc:creator>
      <pubDate>Wed, 22 Apr 2026 14:19:05 +0000</pubDate>
      <link>https://dev.to/rootcx/everything-is-code-5cja</link>
      <guid>https://dev.to/rootcx/everything-is-code-5cja</guid>
      <description>&lt;p&gt;There is a pattern happening across every layer of the software stack, and most people have not connected the dots yet.&lt;/p&gt;

&lt;p&gt;Infrastructure became code. Then design became code. Then motion and video became code. Now internal tools are becoming code. Every abstraction layer that once existed to protect you from code is collapsing. The reason is simple: AI writes code better than it operates GUIs.&lt;/p&gt;

&lt;p&gt;This changes who builds, what they build, and how fast they ship.&lt;/p&gt;

&lt;h2&gt;
  
  
  Infrastructure as code
&lt;/h2&gt;

&lt;p&gt;Ten years ago, setting up a server meant clicking through the AWS console. You configured security groups by hand. You provisioned databases through a web UI. If you needed to reproduce the setup, you wrote a wiki page with screenshots and hoped someone followed the steps in order.&lt;/p&gt;

&lt;p&gt;Then Terraform, Pulumi, and CloudFormation turned infrastructure into code. You described your server in a file. You committed it to Git. You ran a command and the infrastructure materialized. Reproducible. Versioned. Reviewable.&lt;/p&gt;

&lt;p&gt;Nobody argued. Code was harder to learn than a GUI, but it was infinitely more powerful. You could version it, diff it, roll it back, and share it across teams. The console clickers became infrastructure engineers. The AWS console did not disappear, but it stopped being the source of truth.&lt;/p&gt;

&lt;p&gt;This was the first domino.&lt;/p&gt;

&lt;h2&gt;
  
  
  Design as code
&lt;/h2&gt;

&lt;p&gt;For a decade, Figma was the source of truth for design. Designers created pixel-perfect mockups. Then developers opened the file, squinted at the spacing values, and rebuilt everything in HTML and CSS. The translation was lossy. The design drifted from the implementation within weeks. The Figma file became a museum of what the product was supposed to look like.&lt;/p&gt;

&lt;p&gt;Tailwind CSS changed the equation. Design decisions became code. &lt;code&gt;px-6 py-3 rounded-full bg-blue-500&lt;/code&gt; is not a developer approximating a design. It IS the design. Component libraries like shadcn/ui ship as source code you own, not packages you depend on. The React component styled with Tailwind is both the design artifact and the production implementation. There is no translation step. There is no drift.&lt;/p&gt;

&lt;p&gt;Now add AI. Claude Code already writes production UI components from a text description. But Anthropic went further: Claude Design generates complete visual interfaces that are code from the start. Not a mockup that someone translates later. Production-ready components, with the right spacing, the right responsive behavior, the right Tailwind classes. The design and the implementation are the same artifact.&lt;/p&gt;

&lt;p&gt;This is not a better Figma. It is the end of the Figma workflow. No handoff. No "is this 16px or 18px?" conversation. No design file that drifts from the codebase. The AI understands visual intent and technical constraints simultaneously, because it outputs code, not pixels.&lt;/p&gt;

&lt;p&gt;Figma will survive as a collaboration and exploration tool. But the workflow where a designer creates a static mockup that a developer manually translates? That workflow is dead. The design is the code. The code is the design.&lt;/p&gt;

&lt;h2&gt;
  
  
  Motion design as code
&lt;/h2&gt;

&lt;p&gt;This one surprises people the most.&lt;/p&gt;

&lt;p&gt;Remotion lets you create videos and animations programmatically in React. Write a component, render it as an MP4. Your product demo video is a React project. Your animated social ad is a function that takes props. HeyGen's Hyperframes let you define entire video sequences as structured data. Rive replaced After Effects for interactive animations. Lottie turned motion design into JSON files that any developer can drop into a codebase.&lt;/p&gt;

&lt;p&gt;Jitter, After Effects, Premiere Pro. They all share the same problem: timeline-based editors that produce opaque project files no one else can touch. Want to update the headline in your product video? Open the project, find the text layer, change it, re-export. Want to generate 50 variations for A/B testing? Good luck.&lt;/p&gt;

&lt;p&gt;When your motion design is code, everything changes. Your AI agent can swap the headline, update the product screenshot, change the color scheme, and re-render 50 variations in minutes. Your marketing video is versioned in Git. Your animated onboarding flow is a React component that updates when the product updates.&lt;/p&gt;

&lt;p&gt;Motion design as code does not produce worse creative. It produces creative that is composable, versionable, and automatable. The timeline editor cannot compete with that.&lt;/p&gt;

&lt;h2&gt;
  
  
  Internal tools as code
&lt;/h2&gt;

&lt;p&gt;Internal tools were always code. Before the low-code era, companies built custom admin panels in Rails, Django, or PHP. It worked. The tools did exactly what the business needed because engineers wrote them from scratch.&lt;/p&gt;

&lt;p&gt;The problem was speed. A custom internal tool took weeks or months. Engineering had bigger priorities. The ops team waited. The spreadsheet survived.&lt;/p&gt;

&lt;p&gt;So Retool, Bubble, Softr, and Appsmith stepped in. They built visual builders that abstracted away the code. Drag a table, connect a data source, configure a button through a dropdown. The pitch: "You do not need to write code. We handle the complexity."&lt;/p&gt;

&lt;p&gt;It worked, for a while. Every other layer was collapsing into code because code is more powerful, more flexible, and more composable. Low-code went the opposite direction. It was a detour, not a destination.&lt;/p&gt;

&lt;p&gt;The bill is coming due.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Flexibility ceiling.&lt;/strong&gt; Every visual builder hits a wall. The moment your workflow does not fit the pre-built components, you are stuck. Retool users hit this constantly. The builder is fast until it is not, and then it is slower than writing code from scratch.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Vendor lock-in.&lt;/strong&gt; Retool stores your apps as proprietary JSON configurations that cannot be exported as portable code. Try handing a Bubble app to a client. Try migrating a Softr project to another stack. You cannot, because there is no code to migrate.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;AI incompatibility.&lt;/strong&gt; This is the fatal one. Claude Code cannot read a Retool JSON config and understand your business logic. It cannot modify a Bubble workflow by reasoning about visual connections. The abstraction that was designed to protect you from code now protects your app from AI. While every other "as code" layer gets faster with AI, low-code tools get left behind.&lt;/p&gt;

&lt;p&gt;The original problem was speed. AI solved that. Claude Code writes the schema, the UI, the backend logic, and the permission rules in minutes. All in real code. All readable. All versionable. All modifiable by the next AI session or the next human developer.&lt;/p&gt;

&lt;p&gt;Internal tools are going back to code. Not because code is sacred, but because code is the format AI understands best. The visual builder was designed to make building accessible. It just made building inaccessible to the most productive builder in the room: the AI.&lt;/p&gt;

&lt;p&gt;But code alone is not enough. We tried that before the low-code era. You end up with the &lt;a href="https://dev.to/blog/why-every-ai-coded-app-is-an-island"&gt;island problem&lt;/a&gt;: five apps, five databases, five auth setups, no shared data. The reason low-code won the first time was not just speed. It was also that building the infrastructure (auth, permissions, database, deployment) for every custom tool was painful.&lt;/p&gt;

&lt;p&gt;Internal tools as code need shared infrastructure underneath. A database that every app reads from. Authentication that every app inherits. Permissions that are structural, not per-app. An audit trail that logs every action. &lt;a href="https://dev.to/blog/how-to-deploy-your-ai-coded-internal-app"&gt;Deployment that takes one command&lt;/a&gt;, not one sprint.&lt;/p&gt;

&lt;p&gt;This is what &lt;a href="https://rootcx.com" rel="noopener noreferrer"&gt;RootCX&lt;/a&gt; provides. The infrastructure layer for internal tools as code. Claude Code writes the business logic. RootCX provides the shared PostgreSQL database, SSO, role-based permissions, immutable audit logs, integrations, and deployment. Every app is real TypeScript, real React, real SQL. Every app shares the same stack. The code is yours. The AI can read it. The infrastructure is handled.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why code wins every time
&lt;/h2&gt;

&lt;p&gt;There is a deeper reason every layer collapses into code. It is not just about AI compatibility. It is about the tooling that already exists.&lt;/p&gt;

&lt;p&gt;Code is &lt;strong&gt;versionable&lt;/strong&gt;. Git has tracked every change, every author, and every rollback for decades. Your Figma file does not have a meaningful diff. Your Retool JSON config does not have a blame log. Your After Effects project does not have branches. Code does. When your design, your motion, and your internal tools are code, they inherit 20 years of collaboration infrastructure for free.&lt;/p&gt;

&lt;p&gt;Code is &lt;strong&gt;collaborative&lt;/strong&gt;. Pull requests, code reviews, merge conflicts resolved in a text editor. Two people can work on the same component, review each other's changes, and merge without overwriting. Try that with a Bubble workflow or a Jitter project.&lt;/p&gt;

&lt;p&gt;Code is &lt;strong&gt;local first&lt;/strong&gt;. It lives on your machine. You can work offline, on a plane, in a coffee shop with bad wifi. You do not depend on a vendor's cloud editor loading. You own the files. They are yours. When the vendor goes down, your code is still on your laptop.&lt;/p&gt;

&lt;p&gt;Code is &lt;strong&gt;maintainable&lt;/strong&gt;. A year from now, someone can open the file, read it, understand it, and change it. It does not matter if they use a different editor, a different OS, or a different AI. Code is plain text. Plain text survives everything.&lt;/p&gt;

&lt;p&gt;Every layer that turned into code inherited these properties overnight. Every layer that stayed behind a visual abstraction gave them up.&lt;/p&gt;

&lt;p&gt;The direction is clear. Everything is code. The only question is what infrastructure you build it on.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://rootcx.com" rel="noopener noreferrer"&gt;RootCX&lt;/a&gt; is the infrastructure for internal tools and AI agents as code. Open source, self-hostable, free to start.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Why Every AI-Coded App Is an Island</title>
      <dc:creator>Sandro Munda</dc:creator>
      <pubDate>Wed, 22 Apr 2026 12:05:29 +0000</pubDate>
      <link>https://dev.to/rootcx/why-every-ai-coded-app-is-an-island-379p</link>
      <guid>https://dev.to/rootcx/why-every-ai-coded-app-is-an-island-379p</guid>
      <description>&lt;p&gt;AI tools generate apps in minutes. But each one lands with its own database, auth, and deploy target. Here is why that matters and what to do.&lt;/p&gt;

&lt;p&gt;AI coding tools have changed how fast you can build internal software. Claude Code, Cursor, and similar tools can generate a working app in 30 minutes. A CRM. A billing dashboard. A task manager. The code is real, it runs, and it solves a problem.&lt;/p&gt;

&lt;p&gt;Then you need to ship it.&lt;/p&gt;

&lt;h2&gt;
  
  
  The island problem
&lt;/h2&gt;

&lt;p&gt;Every AI-generated app arrives as an island. It has no database unless you provision one. No authentication unless you wire one up. No permissions, no audit trail, no way for your team to log in.&lt;/p&gt;

&lt;p&gt;Build five internal apps with AI, and you end up managing five separate databases, five separate auth setups, five separate deploy targets. None of them share data. None of them share users. An agent built in one app cannot see records created by another.&lt;/p&gt;

&lt;p&gt;This is the island problem. It is not a bug in the AI tools. They do what they are designed to do: generate code. The gap is what comes after.&lt;/p&gt;

&lt;h2&gt;
  
  
  What comes after the code
&lt;/h2&gt;

&lt;p&gt;Every internal app needs the same six things to go live:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;A database.&lt;/strong&gt; Somewhere to store data that persists between sessions.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Authentication.&lt;/strong&gt; A way for your team to log in. SSO with Okta, Microsoft Entra, Google Workspace, or Auth0.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Permissions.&lt;/strong&gt; Not everyone should see everything. Role-based access control on every resource.
An audit trail. When something happens, you need to know who did what, when, and why.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Deployment.&lt;/strong&gt; The app needs to run somewhere your team can access it.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Integrations.&lt;/strong&gt; Your app needs to talk to Notion, Slack, Salesforce, GitHub, Stripe, and the rest of your stack.
Building this infrastructure for one app takes weeks. Building it for five apps takes five times as long. And every new app starts from zero.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Unification as the answer
&lt;/h2&gt;

&lt;p&gt;The alternative is to build all your internal apps on shared infrastructure. One database that every app reads from and writes to. One auth layer that every app inherits. One audit trail that logs every action across every app.&lt;/p&gt;

&lt;p&gt;This is what RootCX does. You build with Claude Code, Cursor, or RootCX Studio. The infrastructure is already there. Your second app is faster than your first because the data is already in the database. An AI agent can act on records created by a different app. No glue code, no manual exports, no data syncing.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why shared data matters
&lt;/h2&gt;

&lt;p&gt;When five apps share one database, something interesting happens. Your billing agent can read what your CRM wrote. Your task manager can reference records from your inventory tracker. Your support agent can pull context from every other tool.&lt;/p&gt;

&lt;p&gt;This is not just a convenience. It changes what you can build. Instead of five disconnected tools, you have one operational layer where every piece of data is accessible to every app and agent.&lt;/p&gt;

&lt;h2&gt;
  
  
  What this means for teams
&lt;/h2&gt;

&lt;p&gt;If you are building internal tools with AI, ask yourself:&lt;/p&gt;

&lt;p&gt;Where does the data live after the code is generated?&lt;br&gt;
Can your team log in with SSO?&lt;br&gt;
Are permissions enforced on every resource?&lt;br&gt;
Is there an audit trail?&lt;br&gt;
Can your apps share data without manual exports?&lt;br&gt;
If the answer to any of these is "not yet," you are building islands.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://rootcx.com" rel="noopener noreferrer"&gt;RootCX&lt;/a&gt; is the infrastructure that turns those islands into one platform. Open source, self-hostable, free to start.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>architecture</category>
      <category>softwaredevelopment</category>
      <category>tooling</category>
    </item>
  </channel>
</rss>
