<?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>Forem: Tomasz Karwatka</title>
    <description>The latest articles on Forem by Tomasz Karwatka (@tkarwatka).</description>
    <link>https://forem.com/tkarwatka</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%2Fuser%2Fprofile_image%2F3698708%2Fc25f150c-2c43-4aa6-969e-a050ad815163.jpeg</url>
      <title>Forem: Tomasz Karwatka</title>
      <link>https://forem.com/tkarwatka</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/tkarwatka"/>
    <language>en</language>
    <item>
      <title>Why We Chose Next.js as the Foundation for an Open-Source CRM</title>
      <dc:creator>Tomasz Karwatka</dc:creator>
      <pubDate>Thu, 09 Apr 2026 15:10:31 +0000</pubDate>
      <link>https://forem.com/tkarwatka/why-we-chose-nextjs-as-the-foundation-for-an-open-source-crm-2oa</link>
      <guid>https://forem.com/tkarwatka/why-we-chose-nextjs-as-the-foundation-for-an-open-source-crm-2oa</guid>
      <description>&lt;p&gt;When was the last time you were excited to work on CRM code?&lt;/p&gt;

&lt;p&gt;I'm serious. CRM development has been stuck in a time warp for decades. Salesforce runs on Apex — a proprietary Java-like language that exists nowhere else. SugarCRM and SuiteCRM are PHP monoliths from the mid-2000s. Microsoft Dynamics is C# and a proprietary Power Platform. Even the "modern" players lock you into low-code builders that fall apart the moment you need real logic.&lt;/p&gt;

&lt;p&gt;Meanwhile, the rest of the web moved on. React. TypeScript. Next.js. Server components. Edge functions. Vercel. The entire frontend ecosystem evolved — except CRM.&lt;/p&gt;

&lt;p&gt;So we asked: what if you could build a CRM the same way you build a modern web app?&lt;/p&gt;

&lt;h2&gt;
  
  
  The Bet
&lt;/h2&gt;

&lt;p&gt;I'm Tomasz Karwatka. I co-founded Divante (exit at $65M), Vue Storefront/Alokai (Y Combinator, $40M Series A), Callstack, and Open Loyalty. With my brother Piotr at Catch The Tornado, we've invested in over 40 companies, including ElevenLabs.&lt;/p&gt;

&lt;p&gt;I've spent 20 years watching enterprise software be built on stacks that developers dread. And I've spent those same 20 years watching the JavaScript ecosystem become the most productive development environment on the planet.&lt;/p&gt;

&lt;p&gt;The bet behind &lt;a href="https://openmercato.com" rel="noopener noreferrer"&gt;Open Mercato&lt;/a&gt; is simple: a CRM built on Next.js, React, and TypeScript will attract better developers, ship faster, integrate easier, and — crucially — be the first CRM framework that AI agents can actually extend reliably.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Stack — And Why Every Choice Matters
&lt;/h2&gt;

&lt;p&gt;Open Mercato is a full-stack Next.js application. Not "a React frontend with a random backend." The whole thing. Let me walk through the choices:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Next.js App Router&lt;/strong&gt; — server components for data-heavy pages (customer lists, deal pipelines, reports), client components for interactive UI (drag-and-drop workflows, real-time activity feeds). One framework, one routing model, one deployment. No separate API gateway, no microservice spaghetti.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;TypeScript end to end&lt;/strong&gt; — from Zod schemas that validate API input, through MikroORM entities that map to PostgreSQL, to React components that render the data. One language. One type system. A type error in your CRM entity shows up in your IDE before you even save the file.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;PostgreSQL + MikroORM&lt;/strong&gt; — not MongoDB, not some proprietary database. PostgreSQL with a mature ORM that gives you migrations, relations, and query building. Plus PGVector for semantic search — because in 2026, a CRM without vector search is a CRM without AI.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Redis&lt;/strong&gt; — Bull queues for async processing (email sending, webhook delivery, report generation), tag-based cache invalidation for sub-second page loads on large datasets.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Zod&lt;/strong&gt; — runtime validation at every API boundary. This isn't just type safety — it's what makes AI code generation actually work (more on that later).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Shadcn UI&lt;/strong&gt; — the design system. Accessible, composable, and built on Radix primitives. Your CRM doesn't have to look like it was designed in 2008.&lt;/p&gt;

&lt;p&gt;The whole thing lives in one monorepo. One &lt;code&gt;npm install&lt;/code&gt;. One &lt;code&gt;npm run dev&lt;/code&gt;. You're staring at a working CRM with authentication, multi-tenancy, RBAC, encryption, and 15+ modules in under five minutes.&lt;/p&gt;

&lt;h2&gt;
  
  
  What You Get Out of the Box
&lt;/h2&gt;

&lt;p&gt;This isn't a starter template. These are production modules with over 1,000 unit tests:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Core infrastructure&lt;/strong&gt; that every CRM needs but nobody wants to build:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Multi-tenant Directory&lt;/strong&gt; — organization hierarchies, user management, team structures. TenantId enforced at query level — cross-tenant data leaks are architecturally impossible&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Auth &amp;amp; RBAC&lt;/strong&gt; — session management, feature-based roles, access control lists. Every API route, every server component, every client action respects the permission model&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Encrypted Vault&lt;/strong&gt; — field-level AES-GCM encryption with per-tenant keys. Encrypt the SSN field, the credit card column, the medical record — each tenant with its own key ring, backed by HashiCorp Vault or environment keys&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Audit &amp;amp; Undo/Redo&lt;/strong&gt; — every mutation is a Command. Every Command is logged and reversible. Complete operation history with who/what/when/where&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;CRM domain modules&lt;/strong&gt; that you'd otherwise spend months building:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Customers &amp;amp; Contacts&lt;/strong&gt; — the customer 360 view with activity timeline, custom fields, relations, tagging&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Deals &amp;amp; Pipeline&lt;/strong&gt; — sales opportunities, stage management, probability tracking, revenue forecasting&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Catalog&lt;/strong&gt; — products, services, categories, variants, custom fields per category&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Sales Operations&lt;/strong&gt; — quotes, orders, negotiation flows, shipping, payment integrations&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Workflows&lt;/strong&gt; — visual process designer. Approval chains, status lifecycles, automated actions. No-code for simple flows, full TypeScript for complex ones&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Search&lt;/strong&gt; — full-text search plus PGVector semantic search across all entities including custom fields. Encrypted index support&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Query Engine&lt;/strong&gt; — flat-table indexing for sub-second queries on 1M+ customer records&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The Overlay Pattern — Why Next.js Makes It Work
&lt;/h2&gt;

&lt;p&gt;Here's where it gets interesting. The classic problem with CRM frameworks: you fork, you customize, you can never update again.&lt;/p&gt;

&lt;p&gt;Open Mercato solves this with the Overlay Pattern — and Next.js makes it elegant.&lt;/p&gt;

&lt;p&gt;The core modules live in the monorepo. Your custom code lives in a separate Overlay layer. The build system scans both layers and generates route registries, DI containers, and component trees. Your code always wins over core defaults.&lt;/p&gt;

&lt;p&gt;On the &lt;strong&gt;backend&lt;/strong&gt;, you override services through Awilix dependency injection:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Custom lead scoring? Override the service. Core untouched.&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;LeadScoringService&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;@open-mercato/crm&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;MyLeadScoringService&lt;/span&gt; &lt;span class="kd"&gt;extends&lt;/span&gt; &lt;span class="nc"&gt;LeadScoringService&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nf"&gt;score&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;lead&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;Lead&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt; &lt;span class="kr"&gt;number&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;baseScore&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;super&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;score&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;lead&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;industryBonus&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getIndustryWeight&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;lead&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;industry&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;engagementScore&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;calcEngagement&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;lead&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;activities&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;baseScore&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="nx"&gt;industryBonus&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;engagementScore&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;On the &lt;strong&gt;frontend&lt;/strong&gt;, you override Next.js pages directly:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Don't like the default customer detail page?&lt;/span&gt;
&lt;span class="c1"&gt;// Drop your version in the overlay. The router picks it up.&lt;/span&gt;

&lt;span class="c1"&gt;// overlay/app/customers/[id]/page.tsx&lt;/span&gt;
&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;CustomerDetail&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="nx"&gt;params&lt;/span&gt; &lt;span class="p"&gt;}:&lt;/span&gt; &lt;span class="nx"&gt;Props&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;customer&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;getCustomer&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;params&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;id&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

  &lt;span class="k"&gt;return &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;div&lt;/span&gt; &lt;span class="nx"&gt;className&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;grid grid-cols-3 gap-6&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;CustomerProfile&lt;/span&gt; &lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;customer&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="sr"&gt;/&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;      &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;ActivityTimeline&lt;/span&gt; &lt;span class="nx"&gt;customerId&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;customer&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;id&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="sr"&gt;/&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;      &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;MyCustomRiskPanel&lt;/span&gt; &lt;span class="nx"&gt;customerId&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;customer&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;id&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="sr"&gt;/&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;    &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/div&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;  &lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;No patching. No monkey-patching. No build hacks. Just Next.js file-based routing with a two-layer resolution. When Open Mercato releases a new version, you update the core. Your overlay stays untouched. Zero merge conflicts.&lt;/p&gt;

&lt;p&gt;Widget Injection lets you add components from one module into another's pages. Event subscriptions let modules react to each other's domain events. Custom fields can be added to any entity at runtime — no migrations needed.&lt;/p&gt;
&lt;h2&gt;
  
  
  AI-Native — And Next.js Is Why
&lt;/h2&gt;

&lt;p&gt;Every CRM now claims to be "AI-powered." They mean they added a chatbot. We mean something different.&lt;/p&gt;

&lt;p&gt;Open Mercato is designed so that AI coding agents — Claude, Cursor, GitHub Copilot — can reliably extend the framework. Three things make this work:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Monorepo = full context.&lt;/strong&gt; When an AI agent opens the Open Mercato repo, it sees every module, every service, every type, every test. It understands how &lt;code&gt;LeadScoringService&lt;/code&gt; connects to &lt;code&gt;DealPipelineService&lt;/code&gt; connects to &lt;code&gt;NotificationService&lt;/code&gt;. No guessing. No hallucinating across service boundaries.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Deterministic patterns.&lt;/strong&gt; Every module follows the same Next.js conventions. Routes, server actions, Zod schemas, MikroORM entities, DI registrations, Playwright tests. The AI sees the pattern in 20 modules and replicates it perfectly for the 21st. TypeScript + Zod catch any deviation at compile time.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;code&gt;AGENTS.MD&lt;/code&gt; per module.&lt;/strong&gt; Each module ships with a machine-readable contract: which services can be overridden, which events are emitted, what the Zod schemas look like, where the extension points are. This isn't documentation for you. It's instructions for your AI agent.&lt;/p&gt;

&lt;p&gt;The practical result: a feature that takes a senior developer 2–3 days to scaffold gets generated in 30 minutes. The human still reviews, tests, and ships — but reviews working code, not a blank editor.&lt;/p&gt;

&lt;p&gt;Next.js matters here because it's the framework AI agents know best. More training data, more examples, more pattern recognition. Ask Claude to write a Next.js App Router page and it nails it. Ask it to write ABAP and... good luck.&lt;/p&gt;
&lt;h2&gt;
  
  
  Enterprise Security Without the Enterprise Tax
&lt;/h2&gt;

&lt;p&gt;I've worked with HealthTech and finance companies at Vue Storefront and Open Loyalty. I know what happens when you try to retrofit security onto a framework that wasn't built for it. It's expensive, it's painful, and it's never quite right.&lt;/p&gt;

&lt;p&gt;Open Mercato has it from day zero:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Field-level encryption&lt;/strong&gt; — AES-GCM with per-tenant key rings. Not database-level encryption that protects against disk theft but nothing else. Individual field encryption that protects data even if someone has full database access. Without the KMS, the data is useless.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Complete audit trail&lt;/strong&gt; — every operation logged via the Command Pattern. Who accessed customer X's credit history on March 14 at 3:32 PM from IP 192.168.1.42? One query. One second.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Multi-tenant isolation&lt;/strong&gt; — TenantId enforced at the ORM level. Queries physically cannot return another tenant's data. Not "we filter it out." The WHERE clause is injected automatically.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;RBAC + ACL&lt;/strong&gt; — "This sales rep can see EMEA deals but not APAC." That's configuration, not custom code.&lt;/p&gt;

&lt;p&gt;For regulated industries this isn't a nice-to-have. It's table stakes.&lt;/p&gt;
&lt;h2&gt;
  
  
  Who Should Use This
&lt;/h2&gt;

&lt;p&gt;Open Mercato is not for a 5-person startup that needs a basic contact list. Get HubSpot. It's great for that.&lt;/p&gt;

&lt;p&gt;Open Mercato makes sense when:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You need a CRM that fits your processes, not the other way around&lt;/li&gt;
&lt;li&gt;You're consolidating 5–10 SaaS tools into one integrated system&lt;/li&gt;
&lt;li&gt;You're in a regulated industry and need field-level encryption plus audit trails&lt;/li&gt;
&lt;li&gt;Your team already builds in Next.js/TypeScript and wants to stay in that ecosystem&lt;/li&gt;
&lt;li&gt;You've outgrown Retool or similar low-code platforms and need full code control&lt;/li&gt;
&lt;li&gt;You want to deploy on your own infrastructure with your own encryption keys&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;
  
  
  Why Open Source
&lt;/h2&gt;

&lt;p&gt;Your CRM holds your customer relationships — the most valuable data your business has. Locking it inside a vendor's black box with per-seat pricing and no data portability is a business risk.&lt;/p&gt;

&lt;p&gt;Open Mercato gives you full source code. Deploy anywhere — Vercel, AWS, your own data center. Control your encryption keys. Fork it if you want (though the Overlay Pattern means you'll never need to). If we disappear tomorrow, your CRM keeps running.&lt;/p&gt;

&lt;p&gt;Vendor lock-in in a CRM is like storing your customer Rolodex in someone else's safe and paying monthly to look at it. Open source means you own the safe.&lt;/p&gt;
&lt;h2&gt;
  
  
  Get Started
&lt;/h2&gt;

&lt;p&gt;The repo is live. The modules are stable, tested, and documented.&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git clone https://github.com/open-mercato/open-mercato.git
&lt;span class="nb"&gt;cd &lt;/span&gt;open-mercato
npm &lt;span class="nb"&gt;install
&lt;/span&gt;npm run dev
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Five minutes to a running CRM with auth, multi-tenancy, encryption, and 15+ production modules. Then build the parts that make your business unique.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/open-mercato/open-mercato" rel="noopener noreferrer"&gt;Check out the repo&lt;/a&gt; and give it a star if you think CRM deserves a modern stack :)&lt;/p&gt;



&lt;p&gt;&lt;em&gt;Tomasz Karwatka — co-founder of Divante, Vue Storefront/Alokai, Catch The Tornado. Building and investing in tech companies since 2004.&lt;/em&gt;&lt;/p&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://assets.dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/open-mercato" rel="noopener noreferrer"&gt;
        open-mercato
      &lt;/a&gt; / &lt;a href="https://github.com/open-mercato/open-mercato" rel="noopener noreferrer"&gt;
        open-mercato
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
       AI‑supportive CRM / ERP / Business application framework — built to power R&amp;amp;D, operations, and growth. It’s modular, extensible, and designed for teams that want strong defaults with room to customize everything. Better than Django, Retool and other alternatives - and Enterprise Grade!
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;p&gt;
  &lt;a rel="noopener noreferrer" href="https://github.com/open-mercato/open-mercato/./apps/mercato/public/open-mercato.svg"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fraw.githubusercontent.com%2Fopen-mercato%2Fopen-mercato%2FHEAD%2F.%2Fapps%2Fmercato%2Fpublic%2Fopen-mercato.svg" alt="Open Mercato logo" width="120"&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;Open Mercato&lt;/h1&gt;
&lt;/div&gt;

&lt;p&gt;&lt;a href="https://github.com/open-mercato/open-mercato/LICENSE" rel="noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/784362b26e4b3546254f1893e778ba64616e362bd6ac791991d2c9e880a3a64e/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4c6963656e73652d4d49542d677265656e2e737667" alt="License: MIT"&gt;&lt;/a&gt;
&lt;a href="https://docs.openmercato.com/" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/17b30c22d77627bed5a61cf75e9cd90d03fa4b78f449270dbab37a181bc577cb/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f646f63732d6f70656e6d65726361746f2e636f6d2d3146374145302e737667" alt="Docs"&gt;&lt;/a&gt;
&lt;a href="https://github.com/open-mercato/open-mercato/issues" rel="noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/bb10fdeda0e7f09393be437c6ad27eeb46dad4749505d26e36dae9f6c915d261/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f5052732d77656c636f6d652d6666363962342e737667" alt="PRs Welcome"&gt;&lt;/a&gt;
&lt;a href="https://nextjs.org/" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/e8e2b3564e4449b689dc728c88458bef0947f9974072193c1bea0b0fc4452ea5/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4275696c74253230776974682d4e6578742e6a732d626c61636b3f6c6f676f3d6e6578742e6a73" alt="Built with Next.js"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Open Mercato is a new‑era, AI‑supportive platform for shipping enterprise‑grade CRMs, ERPs, and commerce backends. It’s modular, extensible, and designed so teams can mix their own modules, entities, and workflows while keeping the guardrails of a production-ready stack.&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Start with 80% done.&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Buy vs. build?&lt;/strong&gt; Now, you can have best of both. Use &lt;strong&gt;Open Mercato&lt;/strong&gt; enterprise ready business features like CRM, Sales, OMS, Encryption and build the remaining &lt;strong&gt;20%&lt;/strong&gt; that really makes the difference for your business.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.youtube.com/watch?v=53jsDjAXXhQ" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/53e146c41f56fa3fd98361fc1520012bb72d5e4da489fb7593b727a2fc76cb5a/68747470733a2f2f696d672e796f75747562652e636f6d2f76692f35336a73446a41585868512f6d617872657364656661756c742e6a7067" alt="Watch: What “Start with 80% done” means"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Core Use Cases&lt;/h2&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;💼 &lt;strong&gt;CRM&lt;/strong&gt; – model customers, opportunities, and bespoke workflows with infinitely flexible data definitions.&lt;/li&gt;
&lt;li&gt;🏭 &lt;strong&gt;ERP&lt;/strong&gt; – manage orders, production, and service delivery while tailoring modules to match your operational reality.&lt;/li&gt;
&lt;li&gt;🛒 &lt;strong&gt;Commerce&lt;/strong&gt; – launch CPQ flows, B2B ordering portals, or full commerce backends with reusable modules.&lt;/li&gt;
&lt;li&gt;🤝 &lt;strong&gt;Self-service system&lt;/strong&gt; – spin up customer or partner portals with configurable forms, guided flows, and granular permissions.&lt;/li&gt;
&lt;li&gt;🔄 &lt;strong&gt;Workflows&lt;/strong&gt; –…&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/open-mercato/open-mercato" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


</description>
      <category>nextjs</category>
      <category>typescript</category>
      <category>opensource</category>
      <category>crm</category>
    </item>
    <item>
      <title>I Got Tired of Building ERP Infrastructure From Scratch. So I Open-Sourced It.</title>
      <dc:creator>Tomasz Karwatka</dc:creator>
      <pubDate>Thu, 09 Apr 2026 15:03:37 +0000</pubDate>
      <link>https://forem.com/tkarwatka/i-got-tired-of-building-erp-infrastructure-from-scratch-so-i-open-sourced-it-2i29</link>
      <guid>https://forem.com/tkarwatka/i-got-tired-of-building-erp-infrastructure-from-scratch-so-i-open-sourced-it-2i29</guid>
      <description>&lt;p&gt;How much of your "custom ERP" is actually custom?&lt;/p&gt;

&lt;p&gt;I've been building enterprise software for 20 years. And here's a dirty secret: in every ERP project I've seen, about 80% of the code is the same boring infrastructure. Authentication. Multi-tenancy. Permissions. Audit logs. Encryption. Workflows. The remaining 20% is the actual business logic — the part that matters.&lt;/p&gt;

&lt;p&gt;Yet every company builds that 80% from scratch. Every. Single. Time.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Money Pit I Know Too Well
&lt;/h2&gt;

&lt;p&gt;Quick context: I co-founded Divante (exit at $65M valuation), Vue Storefront/Alokai (Y Combinator, Series A at $40M), Callstack, and Open Loyalty. With my brother Piotr at Catch The Tornado, we invest in about 10 companies a year — over 40 in our portfolio, including ElevenLabs.&lt;/p&gt;

&lt;p&gt;Across all these companies, I've watched the same pattern play out. A business needs a custom system to manage operations — orders, inventory, staff, resources, documents. They look at SAP or Oracle. The price tag makes them faint. They decide to build their own. Eighteen months later they have a buggy system that handles authentication, permissions, and audit logs. The actual business logic? Maybe 30% done.&lt;/p&gt;

&lt;p&gt;At Divante we spent $1–4 million on each product before it became self-sustaining. Most of that wasn't business logic. It was plumbing.&lt;/p&gt;

&lt;p&gt;I got tired of watching this happen. So I built &lt;a href="https://openmercato.com" rel="noopener noreferrer"&gt;Open Mercato&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  A Framework, Not a Product
&lt;/h2&gt;

&lt;p&gt;Open Mercato is an open-source TypeScript framework for building ERP applications. And I need you to understand the difference between a framework and a product.&lt;/p&gt;

&lt;p&gt;SAP is a product. You configure it. You bend your processes to fit its boxes. When the boxes don't fit — and they never fully do — you hire consultants at $300/hour to write ABAP code that nobody else can maintain.&lt;/p&gt;

&lt;p&gt;Open Mercato is a framework. Like Next.js is a framework for web apps, Open Mercato is a framework for enterprise operations software. You build exactly what your business needs, on top of production-ready infrastructure.&lt;/p&gt;

&lt;p&gt;The stack: Next.js, React, PostgreSQL, MikroORM, Redis, Zod. Full TypeScript end to end. One monorepo. No Java, no ABAP, no proprietary DSL. Just TypeScript — the language your team already knows.&lt;/p&gt;

&lt;h2&gt;
  
  
  What "80% Done" Actually Means
&lt;/h2&gt;

&lt;p&gt;Let me be specific about what you get on day one. This isn't a starter template with a login page. These are production modules backed by over 1,000 unit tests:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Core Infrastructure:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Multi-tenant Directory&lt;/strong&gt; — organization hierarchies, user management, team structures. Not bolted on as an afterthought — it's the architectural foundation&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Auth &amp;amp; RBAC&lt;/strong&gt; — sessions, roles, feature-based permissions, access control lists. Every endpoint, every query, every UI component respects the permission model&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Encrypted Vault&lt;/strong&gt; — field-level AES-GCM encryption with per-tenant keys. Not "encrypt the whole database." Encrypt the SSN column, the salary field, the medical record — each tenant with its own key&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Audit &amp;amp; Undo/Redo&lt;/strong&gt; — every data operation logged (who, what, when, from where) via the Command Pattern. Full operation history. Full reversibility&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Business Modules:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Catalog&lt;/strong&gt; — products, categories, variants, custom fields per category. Works for physical goods, services, digital products — whatever you sell or manage&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Sales Operations&lt;/strong&gt; — orders, quotes, negotiation flows, shipping, payment integrations. The full order lifecycle&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Workflows&lt;/strong&gt; — visual designer for business processes. Define document lifecycles, approval chains, state machines. No code for simple flows, full code access for complex ones&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Staff Management&lt;/strong&gt; — employees, teams, availability, leave management, resource allocation&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Resource Management&lt;/strong&gt; — company assets, equipment tracking, availability scheduling&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Search Engine&lt;/strong&gt; — full-text and vector search (PGVector). Search across base fields and custom fields with encrypted index support&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Query Engine&lt;/strong&gt; — flat-table indexing of base and custom fields. Sub-second queries on 1M+ records&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;WMS, POS, and an accounting module are in the pipeline.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Overlay Pattern — Your Code Never Touches Mine
&lt;/h2&gt;

&lt;p&gt;Here's the thing that makes Open Mercato different from every other framework I've used: the Overlay Pattern.&lt;/p&gt;

&lt;p&gt;We took the Open-Closed Principle and made it architectural law. The core is closed for modification. Your custom code lives in a separate Overlay layer. You extend, you override, you inject — but you never edit a core file.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Need custom pricing logic for your industry?&lt;/span&gt;
&lt;span class="c1"&gt;// Override the service through DI. Core stays untouched.&lt;/span&gt;

&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;PricingService&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;@open-mercato/sales&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;WholesalePricingService&lt;/span&gt; &lt;span class="kd"&gt;extends&lt;/span&gt; &lt;span class="nc"&gt;PricingService&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nf"&gt;calculatePrice&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;item&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;CatalogItem&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;context&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;PricingContext&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt; &lt;span class="nx"&gt;Money&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;tierDiscount&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getTierDiscount&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;context&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;customer&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;volumeDiscount&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getVolumeDiscount&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;context&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;quantity&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;item&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;basePrice&lt;/span&gt;
      &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;multiply&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="nx"&gt;tierDiscount&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
      &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;multiply&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="nx"&gt;volumeDiscount&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;// Register in the Awilix DI container. Done.&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;When we release an update — you pull it in. Your Overlay stays untouched. Zero merge conflicts. Zero technical debt from framework updates.&lt;/p&gt;

&lt;p&gt;This works at every level: service overrides via dependency injection, page overrides on the frontend, widget injection across modules, event subscriptions for cross-module communication, custom fields on any entity at runtime without database migrations.&lt;/p&gt;

&lt;p&gt;I've seen too many companies fork a framework, modify the core, and then spend years maintaining a diverging codebase. The Overlay Pattern makes that structurally impossible.&lt;/p&gt;
&lt;h2&gt;
  
  
  Built for AI Agents — And I Mean It
&lt;/h2&gt;

&lt;p&gt;I know "AI-native" has become meaningless marketing. But Open Mercato was literally built using AI-assisted engineering, and designed to be extended by AI agents. Here's what that means concretely:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Monorepo = full context.&lt;/strong&gt; AI needs to see the whole picture. When Claude or Cursor sees 20 modules with the same structure — services, commands, events, Zod schemas, tests — it doesn't hallucinate. It follows the pattern.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;code&gt;AGENTS.MD&lt;/code&gt; in every module.&lt;/strong&gt; Machine-readable contracts that describe: which services can be overridden, which events are emitted, which endpoints are available, what the Zod schemas look like. This isn't documentation for developers. It's instructions for AI.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Deterministic patterns.&lt;/strong&gt; Every module follows the same architecture. Zod validates everything at the boundary. TypeScript catches the rest at compile time. The AI generates code that actually works because the guardrails are baked into the architecture.&lt;/p&gt;

&lt;p&gt;The practical workflow:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Write a feature spec in markdown&lt;/li&gt;
&lt;li&gt;Point the AI agent to the relevant &lt;code&gt;AGENTS.MD&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Agent generates Overlay code — never touching core&lt;/li&gt;
&lt;li&gt;TypeScript + Zod catch schema errors at compile time&lt;/li&gt;
&lt;li&gt;Playwright tests verify behavior&lt;/li&gt;
&lt;li&gt;Human reviews and ships&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;We've seen features that would take a developer 2–3 days get scaffolded in 30 minutes this way. The human review is still essential — but the human reviews working code, not a blank editor.&lt;/p&gt;
&lt;h2&gt;
  
  
  Enterprise Security That Doesn't Require a Consultancy
&lt;/h2&gt;

&lt;p&gt;At Vue Storefront and Open Loyalty we worked with HealthTech and finance companies. I know what compliance audits look like. I know the pain of retrofitting security into a framework that wasn't designed for it.&lt;/p&gt;

&lt;p&gt;Open Mercato has it from day zero:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Field-level encryption&lt;/strong&gt; — each tenant gets its own AES-GCM encryption keys. Sensitive fields (salary, medical data, PII) are encrypted individually. Even with full database access, the data is useless without the KMS (we support HashiCorp Vault or environment-based keys).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Complete audit trail&lt;/strong&gt; — every operation is a Command. Every Command is logged. Who accessed what, when, from which IP. Regulators love this. Your compliance team will love it more.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Multi-tenant isolation&lt;/strong&gt; — TenantId and organizationId enforced at query level, service level, and API level. Cross-tenant data leakage is architecturally impossible. Not "we have tests for it." The query layer physically cannot return data from another tenant.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;RBAC + ACL&lt;/strong&gt; — feature-based role definitions per module, plus granular access control lists. "This sales manager can see deals in the EMEA region but not APAC" — that's a config, not custom code.&lt;/p&gt;

&lt;p&gt;For regulated industries — HealthTech, finance, government, insurance — this isn't a feature list. It's the minimum bar. And most frameworks don't clear it.&lt;/p&gt;
&lt;h2&gt;
  
  
  Who Should Use This
&lt;/h2&gt;

&lt;p&gt;Open Mercato is not for everyone. If you need a simple task tracker or a basic CRM for a 10-person team, use Monday.com or HubSpot. Seriously — they're great for that.&lt;/p&gt;

&lt;p&gt;Open Mercato makes sense when:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Your operations are complex enough that no SaaS fits without heavy customization&lt;/li&gt;
&lt;li&gt;You're paying for 5–10 different tools and want one integrated system built around your actual processes&lt;/li&gt;
&lt;li&gt;You're in a regulated industry and need field-level encryption, audit trails, and data sovereignty&lt;/li&gt;
&lt;li&gt;You have a TypeScript dev team (or a software house partner) that can build and maintain custom modules&lt;/li&gt;
&lt;li&gt;You're replacing a legacy ERP or outgrowing low-code platforms like Retool&lt;/li&gt;
&lt;li&gt;You want to own your operational data — on your servers, in your data center, with your encryption keys&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;
  
  
  Why Open Source
&lt;/h2&gt;

&lt;p&gt;I could have built this as a closed SaaS with per-seat pricing. I know the playbook — I've run it multiple times.&lt;/p&gt;

&lt;p&gt;But your ERP is the nervous system of your company. Every order, every employee record, every workflow, every financial transaction flows through it. Locking that into a vendor's black box is a business risk.&lt;/p&gt;

&lt;p&gt;With Open Mercato you see every line of code. You deploy on your infrastructure. You control your encryption keys. If we disappear tomorrow — your system keeps running. Try that with SAP.&lt;/p&gt;

&lt;p&gt;Vendor lock-in in an ERP is like building your factory on rented land. Open source means you own the ground under your feet.&lt;/p&gt;
&lt;h2&gt;
  
  
  Get Started
&lt;/h2&gt;

&lt;p&gt;Open Mercato is in production. The core modules are stable, tested, and documented.&lt;/p&gt;

&lt;p&gt;If you're building enterprise operations software in TypeScript and you're tired of reinventing authentication, permissions, audit logs, and multi-tenancy for the hundredth time — &lt;a href="https://github.com/open-mercato/open-mercato" rel="noopener noreferrer"&gt;check out the repo&lt;/a&gt;. Take the 80%. Ship the 20% that actually matters.&lt;/p&gt;

&lt;p&gt;And if you have questions — I'm always happy to talk about building enterprise software. It's been my life for 20 years and I still find it weirdly exciting :)&lt;/p&gt;



&lt;p&gt;&lt;em&gt;Tomasz Karwatka — co-founder of Divante, Vue Storefront/Alokai, Catch The Tornado. Building and investing in tech companies since 2004.&lt;/em&gt;&lt;/p&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://assets.dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/open-mercato" rel="noopener noreferrer"&gt;
        open-mercato
      &lt;/a&gt; / &lt;a href="https://github.com/open-mercato/open-mercato" rel="noopener noreferrer"&gt;
        open-mercato
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
       AI‑supportive CRM / ERP / Business application framework — built to power R&amp;amp;D, operations, and growth. It’s modular, extensible, and designed for teams that want strong defaults with room to customize everything. Better than Django, Retool and other alternatives - and Enterprise Grade!
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;p&gt;
  &lt;a rel="noopener noreferrer" href="https://github.com/open-mercato/open-mercato/./apps/mercato/public/open-mercato.svg"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fraw.githubusercontent.com%2Fopen-mercato%2Fopen-mercato%2FHEAD%2F.%2Fapps%2Fmercato%2Fpublic%2Fopen-mercato.svg" alt="Open Mercato logo" width="120"&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;Open Mercato&lt;/h1&gt;
&lt;/div&gt;

&lt;p&gt;&lt;a href="https://github.com/open-mercato/open-mercato/LICENSE" rel="noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/784362b26e4b3546254f1893e778ba64616e362bd6ac791991d2c9e880a3a64e/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4c6963656e73652d4d49542d677265656e2e737667" alt="License: MIT"&gt;&lt;/a&gt;
&lt;a href="https://docs.openmercato.com/" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/17b30c22d77627bed5a61cf75e9cd90d03fa4b78f449270dbab37a181bc577cb/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f646f63732d6f70656e6d65726361746f2e636f6d2d3146374145302e737667" alt="Docs"&gt;&lt;/a&gt;
&lt;a href="https://github.com/open-mercato/open-mercato/issues" rel="noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/bb10fdeda0e7f09393be437c6ad27eeb46dad4749505d26e36dae9f6c915d261/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f5052732d77656c636f6d652d6666363962342e737667" alt="PRs Welcome"&gt;&lt;/a&gt;
&lt;a href="https://nextjs.org/" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/e8e2b3564e4449b689dc728c88458bef0947f9974072193c1bea0b0fc4452ea5/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4275696c74253230776974682d4e6578742e6a732d626c61636b3f6c6f676f3d6e6578742e6a73" alt="Built with Next.js"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Open Mercato is a new‑era, AI‑supportive platform for shipping enterprise‑grade CRMs, ERPs, and commerce backends. It’s modular, extensible, and designed so teams can mix their own modules, entities, and workflows while keeping the guardrails of a production-ready stack.&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Start with 80% done.&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Buy vs. build?&lt;/strong&gt; Now, you can have best of both. Use &lt;strong&gt;Open Mercato&lt;/strong&gt; enterprise ready business features like CRM, Sales, OMS, Encryption and build the remaining &lt;strong&gt;20%&lt;/strong&gt; that really makes the difference for your business.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.youtube.com/watch?v=53jsDjAXXhQ" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/53e146c41f56fa3fd98361fc1520012bb72d5e4da489fb7593b727a2fc76cb5a/68747470733a2f2f696d672e796f75747562652e636f6d2f76692f35336a73446a41585868512f6d617872657364656661756c742e6a7067" alt="Watch: What “Start with 80% done” means"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Core Use Cases&lt;/h2&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;💼 &lt;strong&gt;CRM&lt;/strong&gt; – model customers, opportunities, and bespoke workflows with infinitely flexible data definitions.&lt;/li&gt;
&lt;li&gt;🏭 &lt;strong&gt;ERP&lt;/strong&gt; – manage orders, production, and service delivery while tailoring modules to match your operational reality.&lt;/li&gt;
&lt;li&gt;🛒 &lt;strong&gt;Commerce&lt;/strong&gt; – launch CPQ flows, B2B ordering portals, or full commerce backends with reusable modules.&lt;/li&gt;
&lt;li&gt;🤝 &lt;strong&gt;Self-service system&lt;/strong&gt; – spin up customer or partner portals with configurable forms, guided flows, and granular permissions.&lt;/li&gt;
&lt;li&gt;🔄 &lt;strong&gt;Workflows&lt;/strong&gt; –…&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/open-mercato/open-mercato" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


</description>
      <category>typescript</category>
      <category>opensource</category>
      <category>erp</category>
      <category>nextjs</category>
    </item>
    <item>
      <title>Open Mercato: Why I'm Building a TypeScript CRM Framework Instead of Another SaaS</title>
      <dc:creator>Tomasz Karwatka</dc:creator>
      <pubDate>Thu, 09 Apr 2026 14:56:38 +0000</pubDate>
      <link>https://forem.com/tkarwatka/open-mercato-why-im-building-a-typescript-crm-framework-instead-of-another-saas-26p9</link>
      <guid>https://forem.com/tkarwatka/open-mercato-why-im-building-a-typescript-crm-framework-instead-of-another-saas-26p9</guid>
      <description>&lt;p&gt;How many times have you heard: "Salesforce is too expensive, but we don't have an alternative"?&lt;/p&gt;

&lt;p&gt;I've heard it dozens of times. From Divante's clients, from companies in our Catch The Tornado portfolio, from founders I grab coffee with. Everyone complains about the same thing: CRMs are either too rigid, too expensive, or both.&lt;/p&gt;

&lt;p&gt;So I thought — fine, let's build something different.&lt;/p&gt;

&lt;h2&gt;
  
  
  A Problem I've Seen for 20 Years
&lt;/h2&gt;

&lt;p&gt;Over the past two decades I've built and co-founded several software companies. Divante (exit at a $65M valuation), Vue Storefront/Alokai (Y Combinator, Series A — $40M), Callstack, Open Loyalty. Together with my brother Piotr at Catch The Tornado, we invest in about 10 companies a year. We have over 40 in our portfolio, including ElevenLabs.&lt;/p&gt;

&lt;p&gt;Throughout all these years I've seen one repeating pattern: companies buy off-the-shelf SaaS, then cry because they can't adapt it to their processes. Or they build everything from scratch and cry because it takes 18 months and costs millions.&lt;/p&gt;

&lt;p&gt;There's nothing in between. Zero.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Open Mercato Actually Is
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://openmercato.com" rel="noopener noreferrer"&gt;Open Mercato&lt;/a&gt; is an open-source TypeScript framework for building CRM and ERP applications. It's not another product to configure. It's the foundation on which you build exactly what your company needs.&lt;/p&gt;

&lt;p&gt;Think of it this way: React is not a website. React is a framework you use to build a website. Open Mercato is not a CRM. It's a framework you use to build your CRM.&lt;/p&gt;

&lt;p&gt;The tech stack? Next.js, React, PostgreSQL, MikroORM, Redis, Zod. Full TypeScript, from frontend to backend. One monorepo, full context for the developer — and for AI.&lt;/p&gt;

&lt;h2&gt;
  
  
  "Start with 80% Done"
&lt;/h2&gt;

&lt;p&gt;Building an enterprise CRM from scratch is hell. I know this because at Divante we spent $1–4 million on each product before it became self-sustaining — I'm talking about Vue Storefront and Open Loyalty.&lt;/p&gt;

&lt;p&gt;Most of that cost isn't business logic. It's infrastructure: authentication, multi-tenancy, RBAC, audit logging, data encryption, caching, queuing. Every enterprise needs the same set, and every company builds it from scratch.&lt;/p&gt;

&lt;p&gt;Open Mercato gives you that 80% out of the box. You build the remaining 20% — the part that makes your business unique.&lt;/p&gt;

&lt;p&gt;What you get on day one:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Directory&lt;/strong&gt; — multi-tenant core with organization hierarchy and user management&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Auth&lt;/strong&gt; — sessions, roles, feature-based RBAC, access control lists&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Encrypted Vault&lt;/strong&gt; — field-level encryption with per-tenant keys (AES-GCM)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;CRM Foundation&lt;/strong&gt; — customers, deals, sales pipeline, activity timeline&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Catalog&lt;/strong&gt; — products, categories, variants, custom fields per category&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Workflows&lt;/strong&gt; — visual designer for business processes&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Search Engine&lt;/strong&gt; — full-text and vector search (PGVector)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Audit &amp;amp; Undo/Redo&lt;/strong&gt; — every operation is reversible and logged&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These aren't mocks. These are production modules backed by over 1,000 unit tests.&lt;/p&gt;

&lt;h2&gt;
  
  
  Overlay Pattern — Or Why You Won't Have Technical Debt
&lt;/h2&gt;

&lt;p&gt;The biggest pain when customizing frameworks? You fork, modify the core, and then every update is merge hell.&lt;/p&gt;

&lt;p&gt;In Open Mercato we applied the Open-Closed Principle literally. The core is closed for modification but open for extension. All your custom code lives in the Overlay layer — you never touch core files.&lt;/p&gt;

&lt;p&gt;In practice it looks like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Want to override tax calculation?&lt;/span&gt;
&lt;span class="c1"&gt;// Don't fork the core. Override the service via DI.&lt;/span&gt;

&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;TaxCalculationService&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;@open-mercato/core&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;MyCustomTaxService&lt;/span&gt; &lt;span class="kd"&gt;extends&lt;/span&gt; &lt;span class="nc"&gt;TaxCalculationService&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nf"&gt;calculate&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;order&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;Order&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt; &lt;span class="nx"&gt;Money&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;// Your logic, your rules, your country&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;applyLocalTaxRules&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;order&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;// Register in the DI container (Awilix) and you're done.&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;When Open Mercato releases a new version — you update the core and your Overlay stays untouched. Zero merge conflicts, zero technical debt.&lt;/p&gt;

&lt;p&gt;Same on the frontend. Want to replace a customer page? Page Override. Want to inject a widget from one module into another? Widget Injection. Want to add a custom endpoint? Scaffolding generates CRUD in seconds.&lt;/p&gt;
&lt;h2&gt;
  
  
  AI-Native — And I Don't Mean Marketing Fluff
&lt;/h2&gt;

&lt;p&gt;I know everyone slaps "AI-powered" and "AI-native" on everything now, including toasters. But here it means something specific.&lt;/p&gt;

&lt;p&gt;Open Mercato is built so that AI agents (Claude, Cursor, GitHub Copilot) can effectively extend it. How?&lt;/p&gt;

&lt;p&gt;First — monorepo. AI needs context. When an agent sees the entire codebase, it understands dependencies between modules. When it sees a single file — it hallucinates.&lt;/p&gt;

&lt;p&gt;Second — deterministic patterns. Every module in Open Mercato has the same structure. Services, commands, events, Zod schemas, tests. The AI doesn't have to guess how to write a new module — it follows the pattern it sees in 20 existing ones.&lt;/p&gt;

&lt;p&gt;Third — &lt;code&gt;AGENTS.MD&lt;/code&gt;. Every module contains a machine-readable file that describes the extensibility contract: which services can be overridden, which events it emits, which endpoints it exposes. This isn't documentation for humans. It's instructions for AI.&lt;/p&gt;

&lt;p&gt;In practice the workflow looks like this:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;You define the feature spec in markdown&lt;/li&gt;
&lt;li&gt;You point the AI agent to the module's &lt;code&gt;AGENTS.MD&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;The agent generates code in the Overlay layer&lt;/li&gt;
&lt;li&gt;TypeScript + Zod catch errors at compile time&lt;/li&gt;
&lt;li&gt;Playwright tests verify behavior&lt;/li&gt;
&lt;li&gt;A human does code review&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Sounds simple? It actually is — because the architecture enforces it.&lt;/p&gt;
&lt;h2&gt;
  
  
  Enterprise Security Without Enterprise Complexity
&lt;/h2&gt;

&lt;p&gt;At Vue Storefront and Open Loyalty we worked with companies in finance and HealthTech. I know how much pain it costs to meet security requirements when the framework doesn't support them out of the box.&lt;/p&gt;

&lt;p&gt;Open Mercato has it baked in from day zero:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Field-level encryption&lt;/strong&gt; — not the whole database, but specific fields (e.g., SSN, card number). Each tenant has its own encryption keys. Even if someone gains server access — without the KMS (Key Management System, e.g., HashiCorp Vault) the data is useless.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Audit log on every operation&lt;/strong&gt; — who, what, when, from which IP. We use the Command Pattern, which also gives us undo/redo on all data. A regulator asks "who modified patient record X on March 14 at 3:32 PM"? You have the answer in one second.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Multi-tenant isolation&lt;/strong&gt; — TenantId and organizationId are enforced at every layer. Cross-tenant data leak? Architecturally impossible, not just "hard to do."&lt;/p&gt;

&lt;p&gt;This isn't nice-to-have. For regulated industries it's a deal breaker.&lt;/p&gt;
&lt;h2&gt;
  
  
  Who This Is For
&lt;/h2&gt;

&lt;p&gt;Let me be clear — Open Mercato is not for everyone. If you're running a 5-person startup and need a basic CRM, get HubSpot. Seriously.&lt;/p&gt;

&lt;p&gt;Open Mercato makes sense when:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Your company has unique processes that no SaaS can handle&lt;/li&gt;
&lt;li&gt;You're paying for 5–10 different SaaS tools and want to consolidate&lt;/li&gt;
&lt;li&gt;You're in a regulated industry (HealthTech, finance) and need field-level encryption plus audit trails&lt;/li&gt;
&lt;li&gt;You have a dev team (or a software house) that can build in TypeScript/Next.js&lt;/li&gt;
&lt;li&gt;You want to replace low-code platforms (Retool and the like) with something that gives you full control over code and data&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;
  
  
  Why Open Source
&lt;/h2&gt;

&lt;p&gt;I could build a closed SaaS. I know how to build SaaS — I've done it multiple times. But CRM/ERP is the backbone of a company. It's the system where your most important business data lives.&lt;/p&gt;

&lt;p&gt;I don't want you to depend on us. I want you to see every line of code that handles your data. I want you to be able to deploy it on your own server, in your own data center, with your own KMS.&lt;/p&gt;

&lt;p&gt;Vendor lock-in in a CRM is like renting an apartment where you can't change the locks. Open source is a mortgage — more work, but the house is yours.&lt;/p&gt;
&lt;h2&gt;
  
  
  What's Next
&lt;/h2&gt;

&lt;p&gt;Open Mercato is already in production. We have CRM, Catalog, Sales Operations, Staff Management, Workflows, and HRM modules. In the pipeline: WMS (warehouse), POS (point of sale), an accounting module, and an integration marketplace.&lt;/p&gt;

&lt;p&gt;If you're building enterprise business applications in TypeScript and you're tired of writing infrastructure from scratch — &lt;a href="https://github.com/open-mercato/open-mercato" rel="noopener noreferrer"&gt;check out the repo&lt;/a&gt;. Take the 80%, build your 20%.&lt;/p&gt;

&lt;p&gt;And if you have questions — reach out. I'm not a great writer and never will be, but I can talk about building tech products for hours :)&lt;/p&gt;



&lt;p&gt;&lt;em&gt;Tomasz Karwatka — co-founder of Divante, Vue Storefront/Alokai, Catch The Tornado. Building and investing in tech companies since 2004.&lt;/em&gt;&lt;/p&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://assets.dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/open-mercato" rel="noopener noreferrer"&gt;
        open-mercato
      &lt;/a&gt; / &lt;a href="https://github.com/open-mercato/open-mercato" rel="noopener noreferrer"&gt;
        open-mercato
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
       AI‑supportive CRM / ERP / Business application framework — built to power R&amp;amp;D, operations, and growth. It’s modular, extensible, and designed for teams that want strong defaults with room to customize everything. Better than Django, Retool and other alternatives - and Enterprise Grade!
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;p&gt;
  &lt;a rel="noopener noreferrer" href="https://github.com/open-mercato/open-mercato/./apps/mercato/public/open-mercato.svg"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fraw.githubusercontent.com%2Fopen-mercato%2Fopen-mercato%2FHEAD%2F.%2Fapps%2Fmercato%2Fpublic%2Fopen-mercato.svg" alt="Open Mercato logo" width="120"&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;Open Mercato&lt;/h1&gt;
&lt;/div&gt;

&lt;p&gt;&lt;a href="https://github.com/open-mercato/open-mercato/LICENSE" rel="noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/784362b26e4b3546254f1893e778ba64616e362bd6ac791991d2c9e880a3a64e/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4c6963656e73652d4d49542d677265656e2e737667" alt="License: MIT"&gt;&lt;/a&gt;
&lt;a href="https://docs.openmercato.com/" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/17b30c22d77627bed5a61cf75e9cd90d03fa4b78f449270dbab37a181bc577cb/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f646f63732d6f70656e6d65726361746f2e636f6d2d3146374145302e737667" alt="Docs"&gt;&lt;/a&gt;
&lt;a href="https://github.com/open-mercato/open-mercato/issues" rel="noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/bb10fdeda0e7f09393be437c6ad27eeb46dad4749505d26e36dae9f6c915d261/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f5052732d77656c636f6d652d6666363962342e737667" alt="PRs Welcome"&gt;&lt;/a&gt;
&lt;a href="https://nextjs.org/" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/e8e2b3564e4449b689dc728c88458bef0947f9974072193c1bea0b0fc4452ea5/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4275696c74253230776974682d4e6578742e6a732d626c61636b3f6c6f676f3d6e6578742e6a73" alt="Built with Next.js"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Open Mercato is a new‑era, AI‑supportive platform for shipping enterprise‑grade CRMs, ERPs, and commerce backends. It’s modular, extensible, and designed so teams can mix their own modules, entities, and workflows while keeping the guardrails of a production-ready stack.&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Start with 80% done.&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Buy vs. build?&lt;/strong&gt; Now, you can have best of both. Use &lt;strong&gt;Open Mercato&lt;/strong&gt; enterprise ready business features like CRM, Sales, OMS, Encryption and build the remaining &lt;strong&gt;20%&lt;/strong&gt; that really makes the difference for your business.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.youtube.com/watch?v=53jsDjAXXhQ" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/53e146c41f56fa3fd98361fc1520012bb72d5e4da489fb7593b727a2fc76cb5a/68747470733a2f2f696d672e796f75747562652e636f6d2f76692f35336a73446a41585868512f6d617872657364656661756c742e6a7067" alt="Watch: What “Start with 80% done” means"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Core Use Cases&lt;/h2&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;💼 &lt;strong&gt;CRM&lt;/strong&gt; – model customers, opportunities, and bespoke workflows with infinitely flexible data definitions.&lt;/li&gt;
&lt;li&gt;🏭 &lt;strong&gt;ERP&lt;/strong&gt; – manage orders, production, and service delivery while tailoring modules to match your operational reality.&lt;/li&gt;
&lt;li&gt;🛒 &lt;strong&gt;Commerce&lt;/strong&gt; – launch CPQ flows, B2B ordering portals, or full commerce backends with reusable modules.&lt;/li&gt;
&lt;li&gt;🤝 &lt;strong&gt;Self-service system&lt;/strong&gt; – spin up customer or partner portals with configurable forms, guided flows, and granular permissions.&lt;/li&gt;
&lt;li&gt;🔄 &lt;strong&gt;Workflows&lt;/strong&gt; –…&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/open-mercato/open-mercato" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


</description>
      <category>typescript</category>
      <category>opensource</category>
      <category>crm</category>
      <category>nextjs</category>
    </item>
    <item>
      <title>Twenty vs Open Mercato: CRM Product vs AI-Supportive Platform Foundation</title>
      <dc:creator>Tomasz Karwatka</dc:creator>
      <pubDate>Wed, 25 Mar 2026 20:16:33 +0000</pubDate>
      <link>https://forem.com/tkarwatka/twenty-vs-open-mercato-crm-product-vs-ai-supportive-platform-foundation-52of</link>
      <guid>https://forem.com/tkarwatka/twenty-vs-open-mercato-crm-product-vs-ai-supportive-platform-foundation-52of</guid>
      <description>&lt;p&gt;Twenty has quickly become one of the most visible modern open-source CRMs—a fresh alternative to Salesforce and Pipedrive with a slick UI and strong community momentum.&lt;br&gt;&lt;br&gt;
At the same time, &lt;a href="https://github.com/open-mercato/open-mercato" rel="noopener noreferrer"&gt;Open Mercato&lt;/a&gt; positions itself not as “yet another CRM”, but as an &lt;strong&gt;AI-supportive foundation&lt;/strong&gt; for building enterprise‑grade CRMs, ERPs, and commerce backends.  &lt;/p&gt;

&lt;p&gt;In this article, I’ll compare &lt;strong&gt;Twenty&lt;/strong&gt; and &lt;strong&gt;Open Mercato&lt;/strong&gt;, then focus on when it makes more sense to choose Open Mercato as the underlying platform for your product.&lt;/p&gt;




&lt;h2&gt;
  
  
  Quick overview: product vs foundation
&lt;/h2&gt;

&lt;p&gt;You can frame the difference like this:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Twenty&lt;/strong&gt; – a &lt;em&gt;modern open-source CRM product&lt;/em&gt; that you can self‑host or consume as SaaS, aiming to be a community‑powered alternative to Salesforce and Pipedrive.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Open Mercato&lt;/strong&gt; – an &lt;em&gt;AI-supportive CRM/ERP foundation framework&lt;/em&gt; designed to power customized CRMs, ERPs, and operations platforms.
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you imagine the stack:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Twenty is closer to “the finished CRM app your sales team can use today”.&lt;/li&gt;
&lt;li&gt;Open Mercato is closer to “the platform your product team uses to build its own CRM/ERP‑like product”.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Positioning table
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Aspect&lt;/th&gt;
&lt;th&gt;Twenty&lt;/th&gt;
&lt;th&gt;Open Mercato&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Primary role&lt;/td&gt;
&lt;td&gt;Modern, user‑friendly open-source CRM product&lt;/td&gt;
&lt;td&gt;AI‑supportive foundation for CRM/ERP/commerce products&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Orientation&lt;/td&gt;
&lt;td&gt;Sales and GTM teams using a ready CRM&lt;/td&gt;
&lt;td&gt;Product &amp;amp; platform teams building their own vertical SaaS&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Scope&lt;/td&gt;
&lt;td&gt;Deals, contacts, pipelines, activities, basic automation&lt;/td&gt;
&lt;td&gt;CRM, ERP, commerce, self‑service portals, workflows, scheduling&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Mental model&lt;/td&gt;
&lt;td&gt;“Install and run your CRM”&lt;/td&gt;
&lt;td&gt;“Assemble your own enterprise platform from modules and custom entities”&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  Architecture and tech stack
&lt;/h2&gt;

&lt;p&gt;Both projects embrace modern web stacks, but their &lt;strong&gt;architecture goals&lt;/strong&gt; differ.&lt;/p&gt;

&lt;h3&gt;
  
  
  Twenty architecture
&lt;/h3&gt;

&lt;p&gt;From the public materials and documentation, Twenty is:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A modern, open-source CRM built as an alternative to Salesforce/Pipedrive.
&lt;/li&gt;
&lt;li&gt;Focused on great UX (Notion‑inspired editing, boards, filters) and a cloud‑ready architecture.
&lt;/li&gt;
&lt;li&gt;API‑friendly, with REST and GraphQL interfaces for integrations and automations.
&lt;/li&gt;
&lt;li&gt;Licensed under AGPLv3, with a SaaS offering from the core team.
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The core goal: &lt;strong&gt;a delightful CRM your team can adopt quickly&lt;/strong&gt;, with customization primarily at the data/UX level rather than as a general‑purpose app framework.&lt;/p&gt;

&lt;h3&gt;
  
  
  Open Mercato architecture
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://github.com/open-mercato/open-mercato" rel="noopener noreferrer"&gt;Open Mercato&lt;/a&gt; is explicitly framed as an AI-supportive platform and ships with:  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;TypeScript-first stack&lt;/strong&gt; – Next.js App Router, Node.js, MikroORM, zod, Awilix DI.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Strict modular architecture&lt;/strong&gt; – each feature lives under &lt;code&gt;src/modules/&amp;lt;module&amp;gt;&lt;/code&gt; with auto‑discovered pages, APIs, CLI, i18n, and DB entities.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Per‑module schema &amp;amp; migrations&lt;/strong&gt; – no global schema; migrations generated and applied per module.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Multi‑tenant by default&lt;/strong&gt; – tenant and organization IDs on entities; SaaS‑ready from day one.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Feature‑based RBAC&lt;/strong&gt; – role‑ and user-level feature flags gating pages and APIs.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Field‑level encryption&lt;/strong&gt; – tenant‑scoped, field‑level encryption hooks at ORM level for PII and sensitive data.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Event subscribers &amp;amp; workflows&lt;/strong&gt; – domain events processed via subscribers (local or Redis).
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The core goal: &lt;strong&gt;a composable backend for enterprise‑grade CRMs/ERPs&lt;/strong&gt;, optimized for long‑term extensibility, AI agents, and multi‑tenant SaaS.&lt;/p&gt;

&lt;h3&gt;
  
  
  Architecture table
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Aspect&lt;/th&gt;
&lt;th&gt;Twenty&lt;/th&gt;
&lt;th&gt;Open Mercato&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Tech focus&lt;/td&gt;
&lt;td&gt;Modern open-source CRM app with strong UX&lt;/td&gt;
&lt;td&gt;TypeScript/Next.js modular framework&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;API/headless&lt;/td&gt;
&lt;td&gt;REST &amp;amp; GraphQL APIs for integrations&lt;/td&gt;
&lt;td&gt;Headless/API‑rich by design for apps and portals&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Multi‑tenancy&lt;/td&gt;
&lt;td&gt;Primarily single CRM instance per deployment/SaaS&lt;/td&gt;
&lt;td&gt;Multi‑tenant and multi‑org by default&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Security&lt;/td&gt;
&lt;td&gt;Standard auth, roles, modern SaaS patterns&lt;/td&gt;
&lt;td&gt;Field‑level encryption, tenant‑scoped keys, RBAC&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Licensing&lt;/td&gt;
&lt;td&gt;AGPLv3, with commercial SaaS option&lt;/td&gt;
&lt;td&gt;MIT open source for the framework&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  Extensibility and customization
&lt;/h2&gt;

&lt;p&gt;Both offer customization, but they solve different problems.&lt;/p&gt;

&lt;h3&gt;
  
  
  Customizing Twenty
&lt;/h3&gt;

&lt;p&gt;Twenty focuses on being an enjoyable CRM with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Flexible data structures (custom fields, views, filters).
&lt;/li&gt;
&lt;li&gt;A Notion‑like UX to model your pipeline and workflows.
&lt;/li&gt;
&lt;li&gt;APIs to integrate with other tools or build light extensions around it.
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is perfect if you want “Salesforce/Pipedrive‑like functionality but open source, nicer, and under your control”.&lt;/p&gt;

&lt;h3&gt;
  
  
  Building on Open Mercato
&lt;/h3&gt;

&lt;p&gt;Open Mercato gives you &lt;strong&gt;framework‑level&lt;/strong&gt; extension points:  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Drop‑in modules with their own entities, pages, APIs, CLI, and translations.
&lt;/li&gt;
&lt;li&gt;Custom entities and dynamic forms defined per module and managed live in the admin.
&lt;/li&gt;
&lt;li&gt;Domain events and subscribers for complex workflows and automations.
&lt;/li&gt;
&lt;li&gt;Multi‑tenant, multi‑hierarchical organizations with fine‑grained RBAC.
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Instead of “tuning a CRM”, you are &lt;strong&gt;designing a product&lt;/strong&gt;: for example, a vertical SaaS for logistics, healthcare, manufacturing, or services that happens to include CRM capabilities.&lt;/p&gt;

&lt;h3&gt;
  
  
  Extensibility table
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Aspect&lt;/th&gt;
&lt;th&gt;Twenty&lt;/th&gt;
&lt;th&gt;Open Mercato&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Custom fields/views&lt;/td&gt;
&lt;td&gt;Yes, configurable CRM objects, filters, pipelines&lt;/td&gt;
&lt;td&gt;Yes, via module-defined entities &amp;amp; dynamic forms&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Extension surface&lt;/td&gt;
&lt;td&gt;App-level: scripts, APIs, integrations&lt;/td&gt;
&lt;td&gt;Framework-level: modules, overlays, events, CLI, APIs&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Use case&lt;/td&gt;
&lt;td&gt;Tailor a CRM to your team’s workflows&lt;/td&gt;
&lt;td&gt;Build new products (CRMs, ERPs, commerce, portals) on a shared foundation&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  Product maturity and ecosystem
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Twenty
&lt;/h3&gt;

&lt;p&gt;Twenty has attracted a lot of attention as the “modern open-source CRM”:  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Strong GitHub traction and community buzz.
&lt;/li&gt;
&lt;li&gt;Polished UI and modern UX, often highlighted by reviewers.
&lt;/li&gt;
&lt;li&gt;Available as self‑hosted open source (AGPLv3) and as an official SaaS.
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you want a CRM that your sales or CS team can start using quickly, this ecosystem is a big advantage.&lt;/p&gt;

&lt;h3&gt;
  
  
  Open Mercato
&lt;/h3&gt;

&lt;p&gt;Open Mercato is focused more on &lt;strong&gt;product builders&lt;/strong&gt; than end‑users:  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;v0.x releases, growing star count and contributions.
&lt;/li&gt;
&lt;li&gt;Strong emphasis on docs for architecture, customization, and framework usage.
&lt;/li&gt;
&lt;li&gt;Community oriented around building modules and products on top of it.
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you are building software for others (SaaS, internal platforms, products), this developer-first posture matters more than prebuilt CRM screens.&lt;/p&gt;




&lt;h2&gt;
  
  
  When Open Mercato is the better choice
&lt;/h2&gt;

&lt;p&gt;So when should you pick &lt;a href="https://github.com/open-mercato/open-mercato" rel="noopener noreferrer"&gt;Open Mercato&lt;/a&gt; over Twenty?&lt;/p&gt;

&lt;h3&gt;
  
  
  1. You’re building a multi‑tenant SaaS or vertical platform
&lt;/h3&gt;

&lt;p&gt;If the goal is &lt;strong&gt;to build a product&lt;/strong&gt;, not just run a CRM for one company, Open Mercato is the better foundation:  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Multi‑tenant by default, with tenants and organizations modeled in the core.
&lt;/li&gt;
&lt;li&gt;Modules you can mix and match: CRM, operations, workflows, schedules, commerce.
&lt;/li&gt;
&lt;li&gt;Clean separation between framework and the product you’re building.
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Examples:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A vertical SaaS for agencies, clinics, or field services that needs CRM + scheduling + project management.
&lt;/li&gt;
&lt;li&gt;A B2B marketplace backend with custom flows and self‑service portals.
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  2. You need ERP‑like or operations‑heavy workflows
&lt;/h3&gt;

&lt;p&gt;Twenty focuses on CRM—pipelines, contacts, companies, activities.&lt;br&gt;&lt;br&gt;
If your domain includes &lt;strong&gt;operations, production, or logistics&lt;/strong&gt; in the same system, Open Mercato fits better:  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Order processing, production management, and service delivery flows.
&lt;/li&gt;
&lt;li&gt;Resource scheduling, availability, and bookings.
&lt;/li&gt;
&lt;li&gt;Custom entities across CRM and ERP boundaries, not just sales objects.
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  3. Your team wants a TypeScript-first framework
&lt;/h3&gt;

&lt;p&gt;Both are modern, but if your engineering culture is:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;TypeScript/React everywhere
&lt;/li&gt;
&lt;li&gt;Comfortable with Next.js, Node.js, ORMs, DI
&lt;/li&gt;
&lt;li&gt;Used to building product architectures rather than customizing monoliths
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;…then Open Mercato’s stack will feel &lt;strong&gt;native&lt;/strong&gt;.&lt;br&gt;&lt;br&gt;
You can think in modules, entities, events, and APIs instead of patching around a single CRM app.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. You plan for AI agents and automation as first-class citizens
&lt;/h3&gt;

&lt;p&gt;Twenty exposes good APIs for integrations and automations around a CRM.&lt;br&gt;&lt;br&gt;
Open Mercato intentionally brands itself as &lt;strong&gt;AI-supportive&lt;/strong&gt;:  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Strongly typed entities and APIs.
&lt;/li&gt;
&lt;li&gt;Event-driven architecture suitable for agents and background workflows.
&lt;/li&gt;
&lt;li&gt;Structured data across tenants and organizations.
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If your roadmap includes AI agents that &lt;strong&gt;act inside&lt;/strong&gt; your system (e.g., triaging tickets, orchestrating workflows, updating orders), having a framework designed for that use case is a big win.&lt;/p&gt;

&lt;h3&gt;
  
  
  5. You need strict multi‑tenant security and field‑level encryption
&lt;/h3&gt;

&lt;p&gt;If you are building a platform in regulated or privacy‑sensitive domains:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Multi‑tenant, field‑level encryption is built into Open Mercato’s ORM lifecycle.
&lt;/li&gt;
&lt;li&gt;Encryption maps and deterministic hashes enable secure lookups while keeping PII encrypted at rest.
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This kind of design is uncommon in typical CRM products, and it becomes crucial once you’re handling sensitive data for many customers.&lt;/p&gt;




&lt;h2&gt;
  
  
  When Twenty is the better choice
&lt;/h2&gt;

&lt;p&gt;To keep it balanced: there are many cases where &lt;strong&gt;Twenty&lt;/strong&gt; is exactly what you need.&lt;/p&gt;

&lt;p&gt;Choose Twenty when:  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You want a &lt;strong&gt;ready-to-use CRM&lt;/strong&gt; with modern UX.
&lt;/li&gt;
&lt;li&gt;Your main needs are pipelines, contacts, tasks, basic automation and reporting.
&lt;/li&gt;
&lt;li&gt;You prefer to customize through configuration, views, and light scripting instead of building modules.
&lt;/li&gt;
&lt;li&gt;You value a CRM-focused product roadmap and AGPLv3 self-hosting option.
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In that situation, Open Mercato might be &lt;em&gt;too low‑level&lt;/em&gt;—you would be rebuilding a CRM that Twenty already provides.&lt;/p&gt;




&lt;h2&gt;
  
  
  Decision checklist
&lt;/h2&gt;

&lt;p&gt;Here’s a quick decision helper:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;“We need a great CRM our GTM team can adopt fast” → &lt;strong&gt;Twenty&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;“We’re building a multi‑tenant SaaS / vertical platform” → &lt;strong&gt;Open Mercato&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;“Our scope is CRM-only” → &lt;strong&gt;Twenty&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;“We need CRM + operations + custom workflows in one product” → &lt;strong&gt;Open Mercato&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;“We customize via config, fields, views” → &lt;strong&gt;Twenty&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;“We design modules, entities, APIs, and AI workflows” → &lt;strong&gt;Open Mercato&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;“We want AGPL CRM we can self-host” → &lt;strong&gt;Twenty&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;“We want an MIT foundation to build on and extend” → &lt;strong&gt;Open Mercato&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;




</description>
      <category>crm</category>
      <category>saas</category>
      <category>typescript</category>
      <category>startup</category>
    </item>
    <item>
      <title>Open Mercato vs ERPNext: When a Modern TypeScript Framework Beats a Mature ERP</title>
      <dc:creator>Tomasz Karwatka</dc:creator>
      <pubDate>Wed, 25 Mar 2026 20:07:36 +0000</pubDate>
      <link>https://forem.com/tkarwatka/open-mercato-vs-erpnext-when-a-modern-typescript-framework-beats-a-mature-erp-4p45</link>
      <guid>https://forem.com/tkarwatka/open-mercato-vs-erpnext-when-a-modern-typescript-framework-beats-a-mature-erp-4p45</guid>
      <description>&lt;p&gt;&lt;a href="https://www.openmercato.com/" rel="noopener noreferrer"&gt;Open Mercato&lt;/a&gt; is often misunderstood as “yet another ERP,” but it actually plays a very different role than ERPNext. Where ERPNext is a mature, full‑featured ERP, Open Mercato is a modern TypeScript framework for building your own ERP/CRM‑like platforms.&lt;/p&gt;

&lt;p&gt;In this article I’ll compare both projects and then zoom in on &lt;strong&gt;when Open Mercato is the better choice&lt;/strong&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  Quick overview: framework vs product
&lt;/h2&gt;

&lt;p&gt;Before diving into architecture and features, it’s useful to clarify positioning.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Open Mercato&lt;/strong&gt; – a &lt;em&gt;framework&lt;/em&gt; for building CRM/ERP/commerce platforms, headless/API‑first, module-centric, AI‑supportive. It gives you the building blocks to create your own B2B SaaS or internal platform.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;ERPNext&lt;/strong&gt; – a &lt;em&gt;ready‑made ERP&lt;/em&gt; covering accounting, inventory, HR, projects, manufacturing, and more. You configure it, extend it, and run your company on it.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You can think of Open Mercato as “Next.js for ERP/CRM products” and ERPNext as “WordPress for running your company”: technically both are extensible, but they optimize for very different use cases.&lt;/p&gt;

&lt;h3&gt;
  
  
  Positioning table
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Aspect&lt;/th&gt;
&lt;th&gt;Open Mercato&lt;/th&gt;
&lt;th&gt;ERPNext&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Primary role&lt;/td&gt;
&lt;td&gt;Foundation framework for custom ERP/CRM/commerce&lt;/td&gt;
&lt;td&gt;Full, generic ERP application&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Orientation&lt;/td&gt;
&lt;td&gt;Product builders, dev shops, SaaS teams&lt;/td&gt;
&lt;td&gt;Businesses that want a ready ERP&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;OOTB scope&lt;/td&gt;
&lt;td&gt;Core CRM/ops modules, meant to be extended&lt;/td&gt;
&lt;td&gt;Large set of business modules out of the box&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Mental model&lt;/td&gt;
&lt;td&gt;“Build your own vertical platform”&lt;/td&gt;
&lt;td&gt;“Adopt and adapt an ERP”&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  Architecture and tech stack
&lt;/h2&gt;

&lt;p&gt;One of the sharpest differences is in architecture and tech choices.&lt;/p&gt;

&lt;h3&gt;
  
  
  Open Mercato architecture
&lt;/h3&gt;

&lt;p&gt;Open Mercato is built with a modern JS/TS stack:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;TypeScript everywhere&lt;/li&gt;
&lt;li&gt;Next.js (App Router) on the frontend&lt;/li&gt;
&lt;li&gt;Node.js backend with dependency injection&lt;/li&gt;
&lt;li&gt;ORM (e.g. MikroORM) with per‑module schema and migrations&lt;/li&gt;
&lt;li&gt;PostgreSQL as a default relational database&lt;/li&gt;
&lt;li&gt;Modular design: each feature lives in &lt;code&gt;src/modules/&amp;lt;module&amp;gt;&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Key ideas:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Each module owns its entities, migrations, services, and API.&lt;/li&gt;
&lt;li&gt;Multi‑tenancy is a first‑class concern (tenant/org IDs, scoping).&lt;/li&gt;
&lt;li&gt;The system is explicitly designed to be extended without modifying core code (Open–Closed Principle).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is very natural for modern product teams who already live in the TypeScript / React ecosystem.&lt;/p&gt;

&lt;h3&gt;
  
  
  ERPNext architecture
&lt;/h3&gt;

&lt;p&gt;ERPNext is built on the Frappe framework:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Python on the server side&lt;/li&gt;
&lt;li&gt;Frappe as the web framework with DocTypes as central concept&lt;/li&gt;
&lt;li&gt;MariaDB/PostgreSQL as database&lt;/li&gt;
&lt;li&gt;Frontend using JS/Vue, server‑rendered pages and forms&lt;/li&gt;
&lt;li&gt;A layered architecture of modules, controllers, DocTypes, and reports&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Key ideas:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You model business data via DocTypes (similar to strongly structured models).&lt;/li&gt;
&lt;li&gt;You extend via Frappe apps, custom DocTypes, hooks, and scripts.&lt;/li&gt;
&lt;li&gt;The system is monolithic‑but‑modular: a large codebase where many modules share the same environment.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Architecture table
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Aspect&lt;/th&gt;
&lt;th&gt;Open Mercato&lt;/th&gt;
&lt;th&gt;ERPNext&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Language/stack&lt;/td&gt;
&lt;td&gt;TypeScript, Next.js, Node.js, PostgreSQL&lt;/td&gt;
&lt;td&gt;Python (Frappe), MariaDB/Postgres, JS/Vue&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Architecture&lt;/td&gt;
&lt;td&gt;Modular, per‑module schema, DI, multi‑tenant&lt;/td&gt;
&lt;td&gt;Monolithic‑but‑modular on Frappe&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;API/headless&lt;/td&gt;
&lt;td&gt;Headless/API‑first by design&lt;/td&gt;
&lt;td&gt;Traditional web app; APIs via Frappe&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Encryption&lt;/td&gt;
&lt;td&gt;Field‑level encryption hooks in ORM, multi‑tenant&lt;/td&gt;
&lt;td&gt;Mostly handled via DB + app‑level patterns&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  Extensibility and customization
&lt;/h2&gt;

&lt;p&gt;Both projects are extensible—but the &lt;em&gt;style&lt;/em&gt; of extensibility is different.&lt;/p&gt;

&lt;h3&gt;
  
  
  Open Mercato approach
&lt;/h3&gt;

&lt;p&gt;Open Mercato is built around the Open–Closed Principle: you &lt;strong&gt;extend modules&lt;/strong&gt;, but you don’t modify core code.&lt;/p&gt;

&lt;p&gt;Typical customization patterns:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Add new modules under &lt;code&gt;src/modules/*&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Define custom entities, with migrations generated per module&lt;/li&gt;
&lt;li&gt;Create dynamic forms and custom fields through an admin layer&lt;/li&gt;
&lt;li&gt;Hook into domain events and subscribers&lt;/li&gt;
&lt;li&gt;Use overlays and configuration to change behavior without forking&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This feels similar to how you extend a modern web framework: strong boundaries, clean dependency injection, and a clear place to put your code.&lt;/p&gt;

&lt;h3&gt;
  
  
  ERPNext approach
&lt;/h3&gt;

&lt;p&gt;ERPNext customizations are usually done via Frappe apps and DocTypes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Define new DocTypes and custom fields&lt;/li&gt;
&lt;li&gt;Add server scripts and client scripts&lt;/li&gt;
&lt;li&gt;Use hooks and events to react to changes&lt;/li&gt;
&lt;li&gt;Modify forms, reports, print formats, workflows&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It is powerful, but because it sits inside one big ERP, it’s easy to end up with tightly coupled business logic that is harder to extract or reuse outside that context.&lt;/p&gt;

&lt;h3&gt;
  
  
  Extensibility table
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Aspect&lt;/th&gt;
&lt;th&gt;Open Mercato&lt;/th&gt;
&lt;th&gt;ERPNext&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Custom entities&lt;/td&gt;
&lt;td&gt;First‑class via modules + ORM + dynamic forms&lt;/td&gt;
&lt;td&gt;DocTypes and custom fields&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Code isolation&lt;/td&gt;
&lt;td&gt;Clear module boundaries, DI, overlays&lt;/td&gt;
&lt;td&gt;Possible, but easy to create cross‑module deps&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Workflows/events&lt;/td&gt;
&lt;td&gt;Domain events, subscribers, tenant‑level workflows&lt;/td&gt;
&lt;td&gt;Built‑in workflow engine and hooks&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Multi‑tenant SaaS&lt;/td&gt;
&lt;td&gt;Multi‑tenant by default&lt;/td&gt;
&lt;td&gt;Typically single‑tenant per site&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  Product maturity and ecosystem
&lt;/h2&gt;

&lt;p&gt;Another major difference is maturity and the surrounding ecosystem.&lt;/p&gt;

&lt;h3&gt;
  
  
  Open Mercato
&lt;/h3&gt;

&lt;p&gt;Open Mercato is a newer project:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;v0.x releases&lt;/li&gt;
&lt;li&gt;Fast‑moving roadmap&lt;/li&gt;
&lt;li&gt;Growing early adopter community&lt;/li&gt;
&lt;li&gt;Dev‑first docs and examples&lt;/li&gt;
&lt;li&gt;MIT license for the framework&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is appealing if you want a modern codebase and are comfortable shaping the platform with the maintainers.&lt;/p&gt;

&lt;h3&gt;
  
  
  ERPNext
&lt;/h3&gt;

&lt;p&gt;ERPNext is a very mature ERP:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Over a decade of development&lt;/li&gt;
&lt;li&gt;Thousands of deployments globally&lt;/li&gt;
&lt;li&gt;Large community and partner ecosystem&lt;/li&gt;
&lt;li&gt;Rich documentation, tutorials, and implementer know‑how&lt;/li&gt;
&lt;li&gt;GPLv3 license for ERPNext itself&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is appealing if you want proven ERP workflows and a big ecosystem of implementers and community answers.&lt;/p&gt;

&lt;h3&gt;
  
  
  Maturity table
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Aspect&lt;/th&gt;
&lt;th&gt;Open Mercato&lt;/th&gt;
&lt;th&gt;ERPNext&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Age&lt;/td&gt;
&lt;td&gt;Young, fast‑moving&lt;/td&gt;
&lt;td&gt;&amp;gt;10 years of evolution&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Ecosystem&lt;/td&gt;
&lt;td&gt;Early dev‑focused community&lt;/td&gt;
&lt;td&gt;Large global user &amp;amp; partner base&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Modules&lt;/td&gt;
&lt;td&gt;CRM, operations, scheduling, sales&lt;/td&gt;
&lt;td&gt;Finance, HR, MRP, inventory, projects…&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Licensing&lt;/td&gt;
&lt;td&gt;MIT&lt;/td&gt;
&lt;td&gt;GPLv3&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  When Open Mercato is the better choice
&lt;/h2&gt;

&lt;p&gt;Now the key question: &lt;strong&gt;when does it make more sense to choose Open Mercato instead of ERPNext?&lt;/strong&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  1. You are building a SaaS product, not just implementing an ERP
&lt;/h3&gt;

&lt;p&gt;If your main goal is to create a &lt;strong&gt;B2B SaaS product&lt;/strong&gt; (horizontal or vertical) rather than just digitize one company’s processes, Open Mercato is a far better starting point.&lt;/p&gt;

&lt;p&gt;Typical examples:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Vertical SaaS for a niche industry with non‑standard workflows&lt;/li&gt;
&lt;li&gt;Multi‑tenant platform used by many organizations&lt;/li&gt;
&lt;li&gt;Marketplace or ecosystem where each tenant has its own rules&lt;/li&gt;
&lt;li&gt;Product where the “ERP‑like” part is just one piece of the value&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In these scenarios, you will spend more time fighting a classic ERP to behave like a product platform than you save from prebuilt modules.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. You need deep, domain‑specific workflows
&lt;/h3&gt;

&lt;p&gt;ERPNext shines when your processes are reasonably close to “standard ERP” patterns: sales orders, purchase orders, inventory, HR, manufacturing, projects.&lt;/p&gt;

&lt;p&gt;If your domain is weird (in a good way):&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Complex multi‑stage operations&lt;/li&gt;
&lt;li&gt;Heavy collaboration flows&lt;/li&gt;
&lt;li&gt;Unique compliance or audit requirements&lt;/li&gt;
&lt;li&gt;Time/resource scheduling that doesn’t map to standard MRP&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;…then Open Mercato gives you the primitives to model your domain cleanly without hacking around an existing ERP abstraction.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. You want a TypeScript/React engineering experience
&lt;/h3&gt;

&lt;p&gt;If your team is already all‑in on:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;TypeScript&lt;/li&gt;
&lt;li&gt;React / Next.js&lt;/li&gt;
&lt;li&gt;Node.js&lt;/li&gt;
&lt;li&gt;Modern tooling (ESLint, Prettier, pnpm, Turbo, etc.)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;…then you’ll simply ship faster with Open Mercato than with a Python + Frappe stack.&lt;/p&gt;

&lt;p&gt;There’s a huge productivity win in using the same language and mental model across backend, frontend, and shared types.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. You plan heavy AI and automation from day one
&lt;/h3&gt;

&lt;p&gt;Most ERP systems were not designed with AI‑first use in mind. If your product vision involves:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Agents that act inside your system&lt;/li&gt;
&lt;li&gt;Copilots that help users complete flows&lt;/li&gt;
&lt;li&gt;Automated decision‑making based on structured data&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;…then a framework with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Strong typing&lt;/li&gt;
&lt;li&gt;Clear domain models&lt;/li&gt;
&lt;li&gt;Event‑driven architecture&lt;/li&gt;
&lt;li&gt;Well‑structured APIs&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;is simply a better foundation. That’s exactly the space Open Mercato aims at.&lt;/p&gt;

&lt;h3&gt;
  
  
  5. You care about clean module boundaries and long‑term maintainability
&lt;/h3&gt;

&lt;p&gt;Open Mercato’s emphasis on:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;“Extend, don’t modify core”&lt;/li&gt;
&lt;li&gt;Clear module boundaries&lt;/li&gt;
&lt;li&gt;Overlays instead of forks&lt;/li&gt;
&lt;li&gt;Per‑module migrations&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;is designed to make long‑term evolution much safer. If you expect many years of development, multiple product lines, and an evolving roadmap, this pays off.&lt;/p&gt;

&lt;p&gt;With ERPNext, you can architect for maintainability too, but the gravitational pull of “just patch the ERP” is strong, especially under time pressure.&lt;/p&gt;

&lt;h3&gt;
  
  
  6. You need field‑level encryption in a multi‑tenant environment
&lt;/h3&gt;

&lt;p&gt;If you’re handling sensitive data (healthcare, finance, legal, etc.) for many tenants, the combination of:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Multi‑tenant by design&lt;/li&gt;
&lt;li&gt;Field‑level encryption hooks at the ORM layer&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;gives Open Mercato an edge as a foundation for regulated or privacy‑sensitive products.&lt;/p&gt;




&lt;h2&gt;
  
  
  When ERPNext is the better choice
&lt;/h2&gt;

&lt;p&gt;To be fair: there are many scenarios where ERPNext is the obvious answer.&lt;/p&gt;

&lt;p&gt;Pick ERPNext when:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You need a &lt;strong&gt;mature ERP&lt;/strong&gt; running your own company’s operations.&lt;/li&gt;
&lt;li&gt;Your processes are close enough to standard ERP flows.&lt;/li&gt;
&lt;li&gt;You want to go live quickly with minimal low‑level coding.&lt;/li&gt;
&lt;li&gt;You value a large implementation ecosystem and battle‑tested modules.&lt;/li&gt;
&lt;li&gt;Your team is comfortable with Python and Frappe.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In that situation, Open Mercato might be &lt;em&gt;too&lt;/em&gt; low‑level: you’d be rebuilding modules that ERPNext already has.&lt;/p&gt;




&lt;h2&gt;
  
  
  Decision checklist
&lt;/h2&gt;

&lt;p&gt;You can use this checklist as a quick decision tool:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;“We’re building a multi‑tenant SaaS product” → &lt;strong&gt;Open Mercato&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;“We’re implementing ERP for one company” → &lt;strong&gt;ERPNext&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;“We live in TypeScript/React world” → &lt;strong&gt;Open Mercato&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;“We have Python/Frappe expertise” → &lt;strong&gt;ERPNext&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;“Our domain is highly custom, non‑standard” → &lt;strong&gt;Open Mercato&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;“Our flows look like typical ERP processes” → &lt;strong&gt;ERPNext&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;“AI‑first product with agents and automation” → &lt;strong&gt;Open Mercato&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;“We just need best practices ERP with reports” → &lt;strong&gt;ERPNext&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;If you tell me whether you’re building a new SaaS product or looking to run internal operations, I can help you sketch a more concrete architecture and module split for your case.  &lt;/p&gt;

</description>
      <category>erp</category>
      <category>saas</category>
      <category>typescript</category>
      <category>startup</category>
    </item>
    <item>
      <title>Open Mercato vs Odoo: Why the Future of ERP Is Framework-Based (Not SaaS)</title>
      <dc:creator>Tomasz Karwatka</dc:creator>
      <pubDate>Tue, 17 Mar 2026 10:00:57 +0000</pubDate>
      <link>https://forem.com/tkarwatka/open-mercato-vs-odoo-why-the-future-of-erp-is-framework-based-not-saas-2c63</link>
      <guid>https://forem.com/tkarwatka/open-mercato-vs-odoo-why-the-future-of-erp-is-framework-based-not-saas-2c63</guid>
      <description>&lt;h1&gt;
  
  
  Open Mercato vs Odoo: The Future of ERP Is Not What You Think
&lt;/h1&gt;

&lt;blockquote&gt;
&lt;p&gt;Most companies don’t need another ERP.&lt;br&gt;&lt;br&gt;
They need a way to &lt;strong&gt;build their own&lt;/strong&gt;.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;For years, tools like &lt;strong&gt;Odoo&lt;/strong&gt; have dominated the SME ERP space.&lt;br&gt;&lt;br&gt;
They’re flexible, modular, and relatively affordable.&lt;/p&gt;

&lt;p&gt;But there’s a catch.&lt;/p&gt;

&lt;p&gt;They were designed for a world &lt;strong&gt;before AI-assisted engineering&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;And that changes everything.&lt;/p&gt;




&lt;h2&gt;
  
  
  TL;DR
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Odoo&lt;/strong&gt; = configurable ERP product
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Open Mercato&lt;/strong&gt; = AI-native ERP &lt;em&gt;framework&lt;/em&gt;
&lt;/li&gt;
&lt;li&gt;One helps you &lt;em&gt;adapt to software&lt;/em&gt;
&lt;/li&gt;
&lt;li&gt;The other lets you &lt;em&gt;build software around your business&lt;/em&gt;
&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  What is Odoo?
&lt;/h2&gt;

&lt;p&gt;Odoo is one of the most popular open-source ERP systems in the world.&lt;/p&gt;

&lt;p&gt;It offers:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;CRM
&lt;/li&gt;
&lt;li&gt;Accounting
&lt;/li&gt;
&lt;li&gt;Inventory
&lt;/li&gt;
&lt;li&gt;HR
&lt;/li&gt;
&lt;li&gt;eCommerce
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;All in one platform.&lt;/p&gt;

&lt;h3&gt;
  
  
  Why companies choose Odoo
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Huge ecosystem
&lt;/li&gt;
&lt;li&gt;Ready-made modules
&lt;/li&gt;
&lt;li&gt;Faster time-to-start
&lt;/li&gt;
&lt;li&gt;Large partner network
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It’s a solid choice if your business fits into existing patterns.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where Odoo Starts to Break
&lt;/h2&gt;

&lt;p&gt;Here’s the uncomfortable truth:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;The moment your business becomes unique… Odoo becomes expensive.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  Common problems teams hit:
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Customization hell&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
You start simple → end up rewriting core modules  &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Upgrade pain&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Customizations break with every major release  &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Vendor / partner dependency&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
You don’t own your system — your integrator does  &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Rigid data model&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Extending core entities is harder than it should be  &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Not AI-native&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
AI is an add-on, not a foundation  &lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Enter Open Mercato
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Open Mercato is not an ERP.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;It’s a &lt;strong&gt;framework to build your own ERP/CRM systems&lt;/strong&gt; using:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;TypeScript
&lt;/li&gt;
&lt;li&gt;Next.js
&lt;/li&gt;
&lt;li&gt;Modular architecture
&lt;/li&gt;
&lt;li&gt;AI-assisted development
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Think: &lt;em&gt;“Laravel for ERP”&lt;/em&gt; instead of &lt;em&gt;“another SaaS tool”&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Product vs Framework
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Feature&lt;/th&gt;
&lt;th&gt;Odoo&lt;/th&gt;
&lt;th&gt;Open Mercato&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Type&lt;/td&gt;
&lt;td&gt;Product&lt;/td&gt;
&lt;td&gt;Framework&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Customization&lt;/td&gt;
&lt;td&gt;Limited / fragile&lt;/td&gt;
&lt;td&gt;Native&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;AI integration&lt;/td&gt;
&lt;td&gt;Add-on&lt;/td&gt;
&lt;td&gt;Built-in mindset&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Data model&lt;/td&gt;
&lt;td&gt;Predefined&lt;/td&gt;
&lt;td&gt;Fully flexible&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Ownership&lt;/td&gt;
&lt;td&gt;Partial&lt;/td&gt;
&lt;td&gt;Full&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Upgrade risk&lt;/td&gt;
&lt;td&gt;High with customizations&lt;/td&gt;
&lt;td&gt;Controlled&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Dev experience&lt;/td&gt;
&lt;td&gt;Mixed&lt;/td&gt;
&lt;td&gt;Modern (TS/Next.js)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Why This Matters in the AI Era
&lt;/h2&gt;

&lt;p&gt;AI is compressing software development.&lt;/p&gt;

&lt;p&gt;What used to take:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;weeks → days
&lt;/li&gt;
&lt;li&gt;days → hours
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So the real question is:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Why adapt your business to software…&lt;br&gt;&lt;br&gt;
when you can adapt software to your business?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Open Mercato Philosophy
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. 80% Done Core
&lt;/h3&gt;

&lt;p&gt;You don’t start from zero.&lt;/p&gt;

&lt;p&gt;You get:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;auth
&lt;/li&gt;
&lt;li&gt;entities
&lt;/li&gt;
&lt;li&gt;workflows
&lt;/li&gt;
&lt;li&gt;permissions
&lt;/li&gt;
&lt;li&gt;UI patterns
Then extend the remaining 20%.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  2. Modular Everything
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;entities
&lt;/li&gt;
&lt;li&gt;modules
&lt;/li&gt;
&lt;li&gt;workflows
&lt;/li&gt;
&lt;li&gt;extensions
No hacks. No core rewrites.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  3. AI-Assisted Engineering First
&lt;/h3&gt;

&lt;p&gt;Open Mercato assumes:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Every developer works with AI.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;So:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;architecture is predictable
&lt;/li&gt;
&lt;li&gt;code is composable
&lt;/li&gt;
&lt;li&gt;patterns are repeatable
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is critical for scaling teams.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Self-Hosting by Default
&lt;/h3&gt;

&lt;p&gt;Your data. Your infra. Your rules.&lt;br&gt;
No lock-in.&lt;/p&gt;

&lt;h2&gt;
  
  
  Real Strategic Difference
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Odoo mindset:
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;“How do we fit our business into this system?”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  Open Mercato mindset:
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;“How do we build a system around our business?”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  When Odoo Makes Sense
&lt;/h2&gt;

&lt;p&gt;Choose Odoo if:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You need something &lt;strong&gt;fast and standard&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Your processes are &lt;strong&gt;typical&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;You don’t have strong dev capabilities
&lt;/li&gt;
&lt;li&gt;You’re okay with &lt;strong&gt;partner dependency&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  When Open Mercato Wins
&lt;/h2&gt;

&lt;p&gt;Open Mercato shines when:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Your business is &lt;strong&gt;non-standard&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;You want &lt;strong&gt;full control&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;You build internal tools as a &lt;strong&gt;competitive advantage&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;You believe in &lt;strong&gt;AI-assisted engineering&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;You want to &lt;strong&gt;productize your operations&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Especially relevant for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;software consultancies
&lt;/li&gt;
&lt;li&gt;marketplaces
&lt;/li&gt;
&lt;li&gt;logistics
&lt;/li&gt;
&lt;li&gt;healthtech
&lt;/li&gt;
&lt;li&gt;B2B platforms
&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The Bigger Shift
&lt;/h2&gt;

&lt;p&gt;We’re moving from:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Software as a Product → Software as a Capability&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;ERP is no longer something you &lt;strong&gt;buy&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;It’s something you &lt;strong&gt;build and evolve continuously&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Try Open Mercato
&lt;/h2&gt;

&lt;p&gt;If you’re:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;tired of ERP limitations
&lt;/li&gt;
&lt;li&gt;building internal tools anyway
&lt;/li&gt;
&lt;li&gt;experimenting with AI coding
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Then Open Mercato is worth testing.&lt;/p&gt;

&lt;h2&gt;
  
  
  Final Thought
&lt;/h2&gt;

&lt;p&gt;Odoo was built for the &lt;strong&gt;last generation of software&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Open Mercato is built for the &lt;strong&gt;next one&lt;/strong&gt;.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;The companies that win won’t be the ones with the best tools…&lt;br&gt;&lt;br&gt;
but the ones that can build their own fastest.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Bonus: A Simple Heuristic
&lt;/h2&gt;

&lt;p&gt;If your ERP roadmap looks like this:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;“We need to customize this module…”
&lt;/li&gt;
&lt;li&gt;“We need another integration…”
&lt;/li&gt;
&lt;li&gt;“We need a workaround…”
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You’re fighting the system.&lt;/p&gt;

&lt;p&gt;If it looks like this:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;“Let’s build a module”
&lt;/li&gt;
&lt;li&gt;“Let’s extend the model”
&lt;/li&gt;
&lt;li&gt;“Let’s automate this workflow with AI”
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You’re building leverage.&lt;/p&gt;

&lt;h2&gt;
  
  
  Get Started with Open Mercato
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://github.com/open-mercato/open-mercato" rel="noopener noreferrer"&gt;https://github.com/open-mercato/open-mercato&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>opensource</category>
      <category>erp</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Building Resilient Business Logic: A Deep Dive into the Open Mercato Workflow Engine</title>
      <dc:creator>Tomasz Karwatka</dc:creator>
      <pubDate>Thu, 05 Feb 2026 11:10:11 +0000</pubDate>
      <link>https://forem.com/tkarwatka/building-resilient-business-logic-a-deep-dive-into-the-open-mercato-workflow-engine-2a1f</link>
      <guid>https://forem.com/tkarwatka/building-resilient-business-logic-a-deep-dive-into-the-open-mercato-workflow-engine-2a1f</guid>
      <description>&lt;h1&gt;
  
  
  Streamlining Business Processes: An Overview of the Open Mercato Workflow Engine
&lt;/h1&gt;

&lt;p&gt;In the world of enterprise software, managing complex, long-running processes—like multi-stage approvals, manufacturing cycles, or intricate checkouts—is a notorious challenge. Hard-coding these paths leads to "spaghetti code" that is difficult to maintain and even harder to audit.&lt;/p&gt;

&lt;p&gt;A recent technical walkthrough by &lt;strong&gt;&lt;a href="https://www.linkedin.com/in/patryk-lewczuk-poland/" rel="noopener noreferrer"&gt;Patrick&lt;/a&gt; from &lt;a href="https://github.com/open-mercato/open-mercato" rel="noopener noreferrer"&gt;Open Mercato&lt;/a&gt;&lt;/strong&gt; showcases their &lt;strong&gt;Workflow Engine&lt;/strong&gt;, a robust solution designed to act as a "recipe" for these business processes.&lt;/p&gt;

&lt;p&gt;

  &lt;iframe src="https://www.youtube.com/embed/M_xRCMTJJ1E"&gt;
  &lt;/iframe&gt;


&lt;/p&gt;

&lt;h2&gt;
  
  
  Core Components of the Engine
&lt;/h2&gt;

&lt;p&gt;The engine is built on four fundamental pillars that provide a balance between high-level orchestration and granular control:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Steps:&lt;/strong&gt; The distinct stages of a process (e.g., "Draft," "Pending Approval," "Completed").&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Transitions:&lt;/strong&gt; The logic paths connecting one step to another.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Activities:&lt;/strong&gt; Actions triggered during a transition. Think of these as the "heavy lifters"—sending emails, calling external APIs, or triggering webhooks.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Conditions:&lt;/strong&gt; The "gatekeepers" of your logic. These are business rules that evaluate whether a transition is allowed to happen (e.g., "Is the order total above $500?").&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Architecture: Blueprint vs. Instance
&lt;/h2&gt;

&lt;p&gt;One of the most important concepts highlighted in the demo is the separation of concerns between &lt;strong&gt;Definitions&lt;/strong&gt; and &lt;strong&gt;Instances&lt;/strong&gt;:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;The Blueprint Analogy:&lt;/strong&gt; A Workflow Definition is the architectural plan. A Workflow Instance is the actual building.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Every time a process starts, a unique instance is spawned. This allows administrators to track the specific state, context data, and execution history of every single transaction in real-time.&lt;/p&gt;

&lt;h2&gt;
  
  
  Developer &amp;amp; Admin Experience
&lt;/h2&gt;

&lt;p&gt;Open Mercato leans heavily into usability without sacrificing power:&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Visual Editor &amp;amp; Live Validation
&lt;/h3&gt;

&lt;p&gt;The platform features a drag-and-drop canvas. To prevent broken logic, the &lt;strong&gt;Live Validator&lt;/strong&gt; provides real-time feedback, ensuring that every workflow has a valid start, an end, and reachable nodes before it is ever published.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Event-Driven Execution
&lt;/h3&gt;

&lt;p&gt;Workflows aren't just manual; they can be hooked into the system's event bus. For example, a "New Order Created" event can automatically trigger the start of a fulfillment workflow.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Dynamic User Tasks
&lt;/h3&gt;

&lt;p&gt;The engine can render dynamic forms. If a workflow hits a "User Task" step, it can present a specific UI to the operator—like a shipping details form—and wait for that input before moving to the next stage.&lt;/p&gt;

&lt;h2&gt;
  
  
  Auditability via Event Sourcing
&lt;/h2&gt;

&lt;p&gt;For enterprise compliance, knowing &lt;em&gt;why&lt;/em&gt; something happened is as important as knowing &lt;em&gt;what&lt;/em&gt; happened. The engine uses an execution timeline backed by event logs. This provides a transparent trail of every activity success, failure, or condition check, making debugging and auditing straightforward.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Roadmap: AI-Assisted Workflows
&lt;/h2&gt;

&lt;p&gt;The demonstration concludes with a look at the future: an &lt;strong&gt;AI Agent&lt;/strong&gt; currently in development. This tool will allow users to describe a business process in plain language and have the engine automatically generate the visual nodes and logic.&lt;/p&gt;




&lt;h3&gt;
  
  
  Conclusion
&lt;/h3&gt;

&lt;p&gt;The Open Mercato Workflow Engine represents a shift toward "Low-Code" for the enterprise, where business logic is visible, editable, and auditable without losing the power of a traditional backend.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What are you using for workflow orchestration in your current stack? Let's discuss in the comments!&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>architecture</category>
      <category>workflow</category>
      <category>opensource</category>
      <category>enterprise</category>
    </item>
    <item>
      <title>Live Coding with AI</title>
      <dc:creator>Tomasz Karwatka</dc:creator>
      <pubDate>Tue, 27 Jan 2026 12:13:22 +0000</pubDate>
      <link>https://forem.com/tkarwatka/live-coding-with-ai-4h4m</link>
      <guid>https://forem.com/tkarwatka/live-coding-with-ai-4h4m</guid>
      <description>&lt;h1&gt;
  
  
  Live Coding an Actionable Notifications System with AI-Assisted Engineering
&lt;/h1&gt;

&lt;p&gt;Modern business apps live or die by their notifications.&lt;/p&gt;

&lt;p&gt;Not the annoying kind — but the ones that:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;reflect &lt;strong&gt;real system state&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;support &lt;strong&gt;long-running processes&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;allow users to &lt;strong&gt;take action immediately&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;and don’t collapse under complexity as the app grows&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In this post, I’ll walk you through how we’re building exactly that in &lt;a href="https://github.com/open-mercato/open-mercato" rel="noopener noreferrer"&gt;&lt;strong&gt;Open Mercato&lt;/strong&gt; &lt;/a&gt; using a live-coding workflow powered by AI-assisted engineering.&lt;/p&gt;

&lt;h1&gt;
  
  
  Live Coding an Actionable Notifications System with AI-Assisted Engineering
&lt;/h1&gt;

&lt;p&gt;Modern business apps live or die by their notifications.&lt;/p&gt;

&lt;p&gt;Not the annoying kind — but the ones that:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;reflect &lt;strong&gt;real system state&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;support &lt;strong&gt;long-running processes&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;allow users to &lt;strong&gt;take action immediately&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;and don’t collapse under complexity as the app grows&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In this post, I’ll walk you through how we’re building exactly that in &lt;strong&gt;Open Mercato&lt;/strong&gt;, using a live-coding workflow powered by AI-assisted engineering.&lt;/p&gt;

&lt;p&gt;This is not a demo of “magic AI”.&lt;br&gt;&lt;br&gt;
It’s a very practical look at how AI fits into real software development — bugs, reviews, refactors included.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why Notifications Matter More Than You Think
&lt;/h2&gt;

&lt;p&gt;In most systems, notifications are treated as an afterthought:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;a toast&lt;/li&gt;
&lt;li&gt;a badge&lt;/li&gt;
&lt;li&gt;maybe an email&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;But in real business software, notifications are the &lt;strong&gt;coordination layer&lt;/strong&gt; between people and processes.&lt;/p&gt;

&lt;p&gt;They need to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;show &lt;strong&gt;progress&lt;/strong&gt; of background jobs&lt;/li&gt;
&lt;li&gt;signal &lt;strong&gt;events that require attention&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;enable &lt;strong&gt;decisions and approvals&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;adapt to &lt;strong&gt;different delivery channels&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So we built notifications as a &lt;strong&gt;first-class module&lt;/strong&gt;, not UI sugar.&lt;/p&gt;




&lt;h2&gt;
  
  
  Actionable Notifications (Not Just “FYI”)
&lt;/h2&gt;

&lt;p&gt;A key design decision in Open Mercato:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Notifications are executable.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Example: &lt;strong&gt;Leave request approval&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;An employee submits a leave request
&lt;/li&gt;
&lt;li&gt;A notification is created for users with approval rights
&lt;/li&gt;
&lt;li&gt;The notification contains &lt;strong&gt;embedded actions&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;The approver clicks &lt;strong&gt;Approve&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;The state updates immediately — no extra screens, no context switching&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This is not a hack.&lt;br&gt;&lt;br&gt;
It’s part of the notification contract.&lt;/p&gt;

&lt;p&gt;Notifications can:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;run commands&lt;/li&gt;
&lt;li&gt;trigger workflows&lt;/li&gt;
&lt;li&gt;update domain state&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Custom Renderers: One Notification ≠ One UI
&lt;/h2&gt;

&lt;p&gt;Different notifications need different representations.&lt;/p&gt;

&lt;p&gt;So instead of a single generic component, we support &lt;strong&gt;custom renderers&lt;/strong&gt; per notification type.&lt;/p&gt;

&lt;p&gt;That allows us to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;show domain-specific data&lt;/li&gt;
&lt;li&gt;embed contextual actions&lt;/li&gt;
&lt;li&gt;evolve the UI independently of the backend&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Example:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Leave request → approval buttons
&lt;/li&gt;
&lt;li&gt;Sales order created → totals, items, status
&lt;/li&gt;
&lt;li&gt;Background job → progress + logs
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The notification system is &lt;strong&gt;extensible by design&lt;/strong&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  Shipping Code, Then Letting AI Review It
&lt;/h2&gt;

&lt;p&gt;After implementing the notifications module, I opened a pull request and immediately did two things:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;requested review from a &lt;strong&gt;core team member&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;requested review from &lt;strong&gt;GitHub Copilot&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The AI review surfaced:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;missing i18n keys&lt;/li&gt;
&lt;li&gt;duplicated DTOs&lt;/li&gt;
&lt;li&gt;outdated documentation&lt;/li&gt;
&lt;li&gt;unused React refs&lt;/li&gt;
&lt;li&gt;inconsistent imports&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Nothing dramatic — but all real issues.&lt;/p&gt;

&lt;p&gt;This is where AI shines:&lt;br&gt;&lt;br&gt;
👉 &lt;strong&gt;fast, boring correctness checks&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Fixing Issues with AI (Without Losing Control)
&lt;/h2&gt;

&lt;p&gt;I didn’t blindly auto-apply fixes.&lt;/p&gt;

&lt;p&gt;Instead:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;I fed Copilot’s comments into &lt;strong&gt;Codex / Claude&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;fixed issues one by one&lt;/li&gt;
&lt;li&gt;validated changes locally&lt;/li&gt;
&lt;li&gt;kept PR history clean and readable&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Important observation:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;AI is excellent at &lt;strong&gt;spec changes and refactors&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
It’s less reliable at &lt;strong&gt;deep architectural decisions&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;So I use it as a &lt;strong&gt;force multiplier&lt;/strong&gt;, not an architect.&lt;/p&gt;




&lt;h2&gt;
  
  
  When CI Fails: Let AI Run the Build
&lt;/h2&gt;

&lt;p&gt;After merging fixes — CI broke. Typings.&lt;/p&gt;

&lt;p&gt;Instead of hunting logs manually:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;I asked the AI to &lt;strong&gt;run the full build&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;identify type errors&lt;/li&gt;
&lt;li&gt;fix them safely&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This included:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Next.js build&lt;/li&gt;
&lt;li&gt;type-checking&lt;/li&gt;
&lt;li&gt;linting&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Result:&lt;br&gt;&lt;br&gt;
✅ green CI&lt;br&gt;&lt;br&gt;
✅ mergeable PR&lt;br&gt;&lt;br&gt;
✅ no broken deploys  &lt;/p&gt;




&lt;h2&gt;
  
  
  Improving Notifications: Making Them Dynamic
&lt;/h2&gt;

&lt;p&gt;One thing bothered me.&lt;/p&gt;

&lt;p&gt;Sales order notifications showed &lt;strong&gt;static data&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;item count&lt;/li&gt;
&lt;li&gt;totals at creation time&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;But sales orders change.&lt;/p&gt;

&lt;p&gt;So the plan:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;move from serialized snapshot data&lt;/li&gt;
&lt;li&gt;to &lt;strong&gt;dynamic rendering&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;fetch current order state when rendering the notification&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Same notification.&lt;br&gt;&lt;br&gt;
Live data.&lt;/p&gt;

&lt;p&gt;This is where custom renderers really pay off.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Bigger Idea: Multi-Channel Delivery Strategies
&lt;/h2&gt;

&lt;p&gt;Here’s the real extension.&lt;/p&gt;

&lt;p&gt;Today:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;notifications are stored in the database&lt;/li&gt;
&lt;li&gt;rendered in the UI&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Tomorrow:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;database notifications&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;email&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;SMS&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;push&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;multiple strategies at once&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Inspired by how Open Mercato handles &lt;strong&gt;search strategies&lt;/strong&gt;, we’re extending notifications with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;pluggable delivery strategies&lt;/li&gt;
&lt;li&gt;multiple active channels simultaneously&lt;/li&gt;
&lt;li&gt;configuration via the existing config module&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Key rules:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;UI notifications = interactive
&lt;/li&gt;
&lt;li&gt;email / SMS = &lt;strong&gt;read-only&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;all links deep-link back to the admin panel
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Emails will use &lt;strong&gt;React-based templates&lt;/strong&gt;, same mental model as the UI.&lt;/p&gt;




&lt;h2&gt;
  
  
  This Is How We Actually Work with AI
&lt;/h2&gt;

&lt;p&gt;No hype.&lt;br&gt;&lt;br&gt;
No “AI replaces developers”.&lt;/p&gt;

&lt;p&gt;Just:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;faster reviews&lt;/li&gt;
&lt;li&gt;safer refactors&lt;/li&gt;
&lt;li&gt;less context switching&lt;/li&gt;
&lt;li&gt;more time thinking about architecture&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;AI doesn’t write the system.&lt;br&gt;&lt;br&gt;
It helps us &lt;strong&gt;ship it better&lt;/strong&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  What’s Next
&lt;/h2&gt;

&lt;p&gt;This extension is bigger, so it won’t land in a single video.&lt;/p&gt;

&lt;p&gt;But:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;a PR is coming&lt;/li&gt;
&lt;li&gt;links will be shared&lt;/li&gt;
&lt;li&gt;feedback is welcome&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And yes — if this kind of &lt;strong&gt;real, imperfect, live engineering&lt;/strong&gt; is useful, I’ll keep recording it.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Open Mercato is open-source.&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
If you want to build serious business apps without reinventing the boring 80% — you’re invited.&lt;/p&gt;

&lt;p&gt;Let me know what you’d like to see next.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>erp</category>
      <category>crm</category>
      <category>typescript</category>
    </item>
    <item>
      <title>Open Mercato Vision: A New Era of Enterprise Software</title>
      <dc:creator>Tomasz Karwatka</dc:creator>
      <pubDate>Mon, 12 Jan 2026 11:54:24 +0000</pubDate>
      <link>https://forem.com/tkarwatka/open-mercato-vision-a-new-era-of-enterprise-software-2h2a</link>
      <guid>https://forem.com/tkarwatka/open-mercato-vision-a-new-era-of-enterprise-software-2h2a</guid>
      <description>&lt;h2&gt;
  
  
  Mission: The end of the era of adapting to systems
&lt;/h2&gt;

&lt;p&gt;In a world driven by AI, traditional "out-of-the-box" SaaS solutions are no longer enough, and classic custom development is too slow and expensive. Clients no longer want to pay for developer "billable hours"—they want immediate results and software that perfectly adapts to their unique business processes.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://github.com/open-mercato/open-mercato" rel="noopener noreferrer"&gt;Open Mercato&lt;/a&gt;&lt;/strong&gt; is an &lt;strong&gt;AI-native CRM/ERP foundation framework&lt;/strong&gt; that combines the speed of SaaS with the infinite flexibility of tailor-made solutions.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Built for AI: Open Mercato was built using AI Assisted Engineering techniques and is designed so that its users can leverage these techniques optimally to create new dedicated functions and modify existing ones.&lt;/li&gt;
&lt;li&gt;Ready-to-use Context: Contexts, documentation, guardrails, specifications, and prompts—everything is prepared and available in the package, ready to start your work with Claude, Codex, or GitHub Copilot (or any other agent).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3xq7ygole0soi6ejr7go.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3xq7ygole0soi6ejr7go.png" alt="Open Mercato Out of The Box Functionality" width="800" height="396"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Our USP: Why do we win?
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Flexibility&lt;/strong&gt;: Open Mercato can address processes unique to every company—that is our focus. We provide flexibility without the need to rewrite "commodity" features. We take responsibility for their maintenance and security, freeing the client's developers from creating and maintaining them.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Speed&lt;/strong&gt;: We deliver unique business functions faster than anyone on the market by utilizing ready-made, maintained core components.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Open-Closed (OCP)&lt;/strong&gt;: The system is delivered as npm packages, and a dedicated implementation is created as an app that can overwrite and change all components, pages, and modules.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Extensibility&lt;/strong&gt;: A very extensive event system is available, and most elements, such as the queue system, cache, and others, are replaceable based on Strategy and Dependency Injection (DI) patterns. This allows you to build a 100% dedicated application using, for example, 80% of Open Mercato's functionality without modifying the core system, maintaining the ability for very fast updates.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Modern Tech Stack&lt;/strong&gt;: Few systems of this class are built on Next/React and TypeScript, which is currently the most popular tech stack for applications. Consequently, AI coding agents perform best on it (as React/shadcn and next.js apps form the largest codebase for their training). We also utilize functional programming and modern React design patterns.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Enterprise-Grade Security&lt;/strong&gt;: Unlike many systems on the market, we offer SOTA (state-of-the-art) data encryption, where you can configure which database fields are encrypted with an individual key. Every data access is monitored (logs), and operations can be reversed from within the application (undo/redo). This opens doors to demanding sectors like HealthTech or Finance. Our standard security gives developers and agents freedom to create and administrators peace of mind.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Enterprise Design Patterns&lt;/strong&gt;: AI is good at fast coding but often takes shortcuts. Not in Open Mercato—we ensured the use of enterprise-class design patterns, including replaceable strategies, SAGA, SOLID principles, and sensitive data storage rules. This provides a solid framework for AI agents to create dedicated functions while maintaining the quality expected by business and security departments.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8vkesvu1xnqun2cv9jhh.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8vkesvu1xnqun2cv9jhh.png" alt="Open Mercato is growing rapidly" width="800" height="509"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Scalability and Value
&lt;/h2&gt;

&lt;p&gt;We are moving away from selling people's time and toward selling ready-made business solutions based on our proprietary framework. This allows us to drastically increase margins and business scalability. We deliver immense value to clients, priced—where it makes sense—in a fixed price model.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;AI-Native from the Foundations&lt;/strong&gt;: Open Mercato doesn't just "bolt on" AI. Data, workflows, and the permission system are designed from the start for AI agents. When adding new functionalities with AI agents, you use the exact same context and tools we used to create Open Mercato.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Spec-Driven Development&lt;/strong&gt;: We encourage this approach to improve team communication and ensure the logging of design decisions (ADR - Architecture Decision Records).&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  ICP (Ideal Customer Profile)
&lt;/h2&gt;

&lt;p&gt;Our ideal clients are large companies launching new projects, testing new business processes, or introducing innovations that need a secure backend/framework. They don't want to rely on old, slow-to-develop systems. They want a project delivered on time and within budget, with the option to pay for additional feature requests at high hourly rates. Former ReTool users are also potential clients—they get similar base functionality but with AI-powered function creation and full ownership of data and code (IP).&lt;/p&gt;

&lt;h2&gt;
  
  
  Business Model: A Hybrid of Product and Expertise
&lt;/h2&gt;

&lt;p&gt;Open Mercato is more than a tool - it is infrastructure for a new generation of applications built directly for real problems. From 2026, we are committing to this direction fully, creating an organization that defines modern corporate software: as secure as enterprise, as flexible as custom dev. Our structure is based on a model where a proprietary product serves as the backbone for high-specialty implementation services.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Product (Core)&lt;/strong&gt;: The foundation that handles the heavy lifting of infrastructure (login, billing, permissions, security). Thanks to the Open-Closed (OCP) principle, the system is open for extensions but closed for core modifications, eliminating technical debt.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Consulting (Delivery)&lt;/strong&gt;: We are moving from a classic software house to a "McKinsey with code" model. Our team consists of elite, highly technical consultants who can enter an organization, understand its unique business value, and deliver a finished application in a week—not months.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fuh42ow2zos04nggxu0uj.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fuh42ow2zos04nggxu0uj.png" alt="Modular Architecture of Open Mercato" width="800" height="1096"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Future: The New Era of Enterprise Software - Manifesto
&lt;/h2&gt;

&lt;p&gt;AI is killing the logic behind rigid, "one-size-fits-all" SaaS. Today, thanks to AI, software perfectly matched to a specific company can be built in a short time. Clients no longer want to pay for "man-hours"; they want results. Fast.&lt;/p&gt;

&lt;p&gt;Software will be manufactured completely differently. That is why we are creating Open Mercato.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Companies want four things simultaneously&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;SaaS-like speed of launch.&lt;/li&gt;
&lt;li&gt;Custom dev-like flexibility.&lt;/li&gt;
&lt;li&gt;Enterprise-grade security.&lt;/li&gt;
&lt;li&gt;Reasonable costs.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;The Problem&lt;/strong&gt;: This cannot be delivered with classic tools. It can only be achieved by leveraging AI rather than fighting it. One must lead this wave by developing AI Assisted Engineering capabilities that can increase team productivity by 3x to 10x.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Solution&lt;/strong&gt;: Open Mercato is an AI-supportive CRM/ERP foundation framework for building proprietary corporate software.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why this changes the game for software-creating firms?&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Build the product&lt;/strong&gt;, not the infrastructure: Login, roles, permissions, design system, multi-tenancy, billing, audit, security, encryption, and GDPR compliance are all ready. The team focuses only on what generates value.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Open-source "SaaS"&lt;/strong&gt; with no ceiling: Following OCP principles, you can create extensions without forking or messing with the core. No maintenance nightmare.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;AI-native from the foundations&lt;/strong&gt;: Everything is designed for AI agents. Your team will learn new skills that increase efficiency tenfold without raising costs.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Enterprise-grade security&lt;/strong&gt; out of the box: SOTA encryption with individual keys per field and tenant-scoped encryption. You can sell to HealthTech, Finance, and large corporations without fear of security audits.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Open Mercato is the infrastructure for the next wave of applications built directly for real business problems.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fuqsaig82gqgwm0u0u452.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fuqsaig82gqgwm0u0u452.png" alt="Open Mercato Demo" width="800" height="782"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Next steps&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Check the project: &lt;strong&gt;&lt;a href="https://github.com/open-mercato/open-mercato" rel="noopener noreferrer"&gt;Open Mercato ERP/CRM od GitHub&lt;/a&gt;&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;See the demo: &lt;strong&gt;&lt;a href="https://demo.openmercato.com/" rel="noopener noreferrer"&gt;Demo Open Mercato&lt;/a&gt;&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Visit our Discord: &lt;strong&gt;&lt;a href="https://discord.gg/f4qwPtJ3qA" rel="noopener noreferrer"&gt;Open Mercato Discord&lt;/a&gt;&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

</description>
    </item>
    <item>
      <title>What is Open Mercato? Is this the future of Enterprise Software?</title>
      <dc:creator>Tomasz Karwatka</dc:creator>
      <pubDate>Thu, 08 Jan 2026 10:39:07 +0000</pubDate>
      <link>https://forem.com/tkarwatka/what-is-open-mercatois-this-the-future-of-enterprise-software-3cif</link>
      <guid>https://forem.com/tkarwatka/what-is-open-mercatois-this-the-future-of-enterprise-software-3cif</guid>
      <description>&lt;p&gt;&lt;a href="https://github.com/open-mercato/open-mercato" rel="noopener noreferrer"&gt;Open Mercato&lt;/a&gt; gives you a ready-to-use business engine.&lt;br&gt;
It already has about 80% of what most companies need, so you can focus on what makes your business different.&lt;br&gt;
Instead of building everything from scratch, you start with a solid core and add only what makes you special.&lt;/p&gt;

&lt;p&gt;What’s inside Open Mercato?&lt;/p&gt;

&lt;h2&gt;
  
  
  1. CRM Modules
&lt;/h2&gt;

&lt;p&gt;Everything you need to run sales and customer relationships:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Companies &amp;amp; People&lt;/strong&gt; – One place for all customers and contacts, with custom fields and relationships&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Deals (Opportunities)&lt;/strong&gt; – Track sales and negotiations&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Sales Pipeline&lt;/strong&gt; – Visual stages: Lead → Qualified → Closed&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Timeline &amp;amp; Activities&lt;/strong&gt; – Emails, notes, calls and events linked to every customer and deal&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  2. ERP &amp;amp; Operations
&lt;/h2&gt;

&lt;p&gt;Tools to run the day-to-day business:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Orders&lt;/strong&gt; – From order received to delivery and status tracking&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Production&lt;/strong&gt; – Manage manufacturing and internal workflows&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Resource Scheduling&lt;/strong&gt; – Plan teams, machines and availability&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  3. Commerce &amp;amp; B2B
&lt;/h2&gt;

&lt;p&gt;Everything needed to sell:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Catalog&lt;/strong&gt; – Products, services, variants and price lists&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Quotes (CPQ)&lt;/strong&gt; – Configure, Price and Quote&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Sales Channels&lt;/strong&gt; – Online store, partners, direct sales&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Self-service Portals&lt;/strong&gt; – Customers and partners place orders, download invoices, see their data&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpo9iz8dya4f45ee3e5vs.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpo9iz8dya4f45ee3e5vs.png" alt=" " width="800" height="396"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  4. Enterprise Foundation
&lt;/h2&gt;

&lt;p&gt;This is what makes Open Mercato “enterprise-grade”:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Organizations &amp;amp; Users&lt;/strong&gt; – Multi-company, multi-team support&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Data Designer&lt;/strong&gt; – Design your own data models; UI and APIs are generated automatically&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Business Rules &amp;amp; Workflows&lt;/strong&gt; – Automate processes&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Security &amp;amp; Encryption&lt;/strong&gt; – Each client has their own encryption key&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Vector Search&lt;/strong&gt; – AI can search your data semantically&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Audit Logs&lt;/strong&gt; – Every change is tracked (compliance ready)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The big architectural advantage: &lt;strong&gt;Open–Closed Principle (OCP)&lt;/strong&gt;&lt;br&gt;
All modules are open for extensions, closed for modification.&lt;/p&gt;

&lt;p&gt;That means:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You extend the system&lt;/li&gt;
&lt;li&gt;You never touch the core&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Example:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;You use the Orders module&lt;/li&gt;
&lt;li&gt;You add medical-industry validation rules as a plugin&lt;/li&gt;
&lt;li&gt;When Open Mercato is updated, your custom logic still works&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;No forks. No broken upgrades. No drama.&lt;/p&gt;

&lt;h2&gt;
  
  
  Industry Blueprints
&lt;/h2&gt;

&lt;h2&gt;
  
  
  Healthcare (patients, clinics, labs)
&lt;/h2&gt;

&lt;p&gt;What matters: security, compliance, full patient history&lt;/p&gt;

&lt;p&gt;Used modules:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Data Designer&lt;/strong&gt; – Medical records, lab results&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Encryption&lt;/strong&gt; – Each client has their own data key&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Audit Logs&lt;/strong&gt; – Who accessed which patient and when&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;With OCP:&lt;br&gt;
You add HL7 / FHIR integration as a plugin.&lt;br&gt;
The core keeps data safe and compliant. Your extension handles healthcare logic.&lt;/p&gt;

&lt;h2&gt;
  
  
  B2B Retail &amp;amp; Wholesale
&lt;/h2&gt;

&lt;p&gt;What matters: price lists, discounts, partner portals&lt;/p&gt;

&lt;p&gt;Used modules:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Catalog &amp;amp; Sales Channels&lt;/strong&gt;– Different prices for different partners&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;CPQ (Quotes)&lt;/strong&gt; – Automated quoting&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Self-service Portals&lt;/strong&gt; – Partners order and download invoices&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Business Rules&lt;/strong&gt; – Loyalty discounts&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;With OCP:&lt;br&gt;
You add Dynamic Pricing as a plugin.&lt;br&gt;
Upgrades won’t break your pricing logic.&lt;/p&gt;

&lt;h2&gt;
  
  
  Logistics &amp;amp; Warehouses
&lt;/h2&gt;

&lt;p&gt;What matters: orders, vehicles, locations, status updates&lt;/p&gt;

&lt;p&gt;Used modules:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Orders&lt;/strong&gt; – Shipment lifecycle&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Resource Scheduling&lt;/strong&gt; – Trucks and drivers&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Workflows&lt;/strong&gt; – Warehouse → In Transit → Delivered&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Vector Search&lt;/strong&gt; – AI search across addresses and shipments&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;With OCP:&lt;br&gt;
You plug in GPS &amp;amp; telematics.&lt;br&gt;
Core handles users and security. Your plugin handles vehicle data.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why this works
&lt;/h2&gt;

&lt;p&gt;Because Open Mercato follows OCP:&lt;br&gt;
You build a product, not infrastructure.&lt;br&gt;
Login, security, roles, billing, audit logs, multi-tenancy — it’s already done.&lt;/p&gt;

&lt;h2&gt;
  
  
  The money part
&lt;/h2&gt;

&lt;p&gt;In every blueprint you save 600–800 developer hours just at the start:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;No database bootstrapping&lt;/li&gt;
&lt;li&gt;No permission system&lt;/li&gt;
&lt;li&gt;No encryption&lt;/li&gt;
&lt;li&gt;No basic UI&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That means:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;MVP in weeks, not months.&lt;/li&gt;
&lt;li&gt;And yes — that’s the difference between a startup that ships and one that dies in Jira. 🚀&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  See the demo
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://demo.openmercato.com/" rel="noopener noreferrer"&gt;Open Mercato Demo&lt;/a&gt;&lt;/p&gt;

</description>
      <category>architecture</category>
      <category>opensource</category>
      <category>productivity</category>
      <category>showdev</category>
    </item>
    <item>
      <title>Open Mercato FAQ</title>
      <dc:creator>Tomasz Karwatka</dc:creator>
      <pubDate>Wed, 07 Jan 2026 14:43:48 +0000</pubDate>
      <link>https://forem.com/tkarwatka/open-mercato-faq-31b5</link>
      <guid>https://forem.com/tkarwatka/open-mercato-faq-31b5</guid>
      <description>&lt;h2&gt;
  
  
  Short intro: &lt;a href="https://github.com/open-mercato/open-mercato" rel="noopener noreferrer"&gt;Open Mercato&lt;/a&gt; is the AI-Supportive Foundation for Enterprise Software
&lt;/h2&gt;

&lt;p&gt;Open Mercato is an open-source foundation framework designed to accelerate the development of advanced CRM, ERP, and e-commerce platforms. It bridges the gap between rigid, "one-size-fits-all" SaaS solutions and the high cost/risk of building custom software from scratch.&lt;/p&gt;

&lt;h3&gt;
  
  
  Why it’s a Game-Changer:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Focus on Value, Not Infrastructure: We handle the "80% of repetitive code"- multi-tenancy, RBAC (Role-Based Access Control), billing, and audit logs - so your team can focus on the 20% that actually drives business value.&lt;/li&gt;
&lt;li&gt;Compliant with the Open–Closed Principle (OCP) - open for extension, closed for modification, so you can build custom changes without forking or touching the core system.&lt;/li&gt;
&lt;li&gt;AI-Native &amp;amp; Security-First: Engineered for the AI era, Open Mercato includes tenant-scoped encryption by default. Each client has their own encryption key, making it safe for Healthtech, Finance, and Enterprise deployments.&lt;/li&gt;
&lt;li&gt;Modern Tech Stack: Built for developers by developers using Next.js, TypeScript, PostgreSQL, and MikroORM.&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;"Software Houses using Open Mercato stop selling 'dev hours' and start selling 'business transformation' with higher margins and zero technical debt."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Vision &amp;amp; Strategy
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Does "fast" mean "low quality"? How do you avoid the "spaghetti code" often associated with AI generation?
&lt;/h3&gt;

&lt;p&gt;The fear that speed equals poor quality is justified when talking about raw AI-generated snippets. However, Open Mercato is not a "code generator"; it is a foundation framework.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Guardrails: We provide a production-ready stack (Next.js, TypeScript, MikroORM) with built-in patterns for multi-tenancy and security.&lt;/li&gt;
&lt;li&gt;Predictability: Instead of letting AI hallucinate an entire architecture, developers use Open Mercato’s structured modules, entities, and workflows. AI is used to accelerate the population of this proven structure, not to reinvent the wheel every time.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  If AI can build software, why do I need Open Mercato? Why not just prompt a full app?
&lt;/h3&gt;

&lt;p&gt;Prompting a full enterprise application from scratch often leads to a "dead end" where the lack of architectural consistency makes maintenance impossible.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The "Engine" Advantage: Open Mercato provides the "plumbing"—auth, multi-tenancy, RBAC, and encrypted data layers—which are notoriously difficult to prompt correctly and securely.&lt;/li&gt;
&lt;li&gt;Focus on Value: We allow your team (or the AI) to focus 100% on unique business logic rather than rebuilding login screens and API wrappers for the thousandth time.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Is this just another "Boilerplate" or "Starter Kit"?
&lt;/h3&gt;

&lt;p&gt;No. A boilerplate is a one-time copy-paste that becomes a maintenance nightmare as it diverges.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Open–Closed Principle (OCP) - open for extension, closed for modification, so you can build custom changes without forking or touching the core system&lt;/li&gt;
&lt;li&gt;Seamless Updates: Because you aren't forking the code, you can update the Open Mercato base to the latest version while keeping your custom business logic intact.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Security &amp;amp; Enterprise Compliance
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Is "Tenant-Scoped Encryption" just a marketing buzzword?
&lt;/h3&gt;

&lt;p&gt;Actually, it is a sophisticated technical implementation rare in standard frameworks.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;How it works: We use field-level encryption where each tenant (client) has their own unique encryption key. Even if the database is compromised, data from Client A cannot be decrypted with Client B’s key.&lt;/li&gt;
&lt;li&gt;Performance: We use AES-GCM wrappers within the ORM lifecycle, ensuring that while data is encrypted at rest, CRUD operations remain fast.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Can this really pass a heavy Enterprise or Healthtech audit?
&lt;/h3&gt;

&lt;p&gt;Yes. Open Mercato was designed specifically for high-stakes industries.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;RBAC &amp;amp; Feature Flags: We offer feature-based Role-Based Access Control that can be scoped down to the individual user or organization level.&lt;/li&gt;
&lt;li&gt;Auditability: Every entity and query is automatically isolated by tenant_id and organization_id, preventing cross-tenant data leaks by design.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Architecture
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Why TypeScript and not a "classic" ERP language?
&lt;/h3&gt;

&lt;p&gt;We chose a modern stack (Next.js App Router, TypeScript, zod, Awilix DI) to maximize developer productivity and AI compatibility.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Type Safety: TypeScript ensures that as you scale and customize, the system remains self-documenting and less prone to the runtime errors that plague large-scale ERPs.&lt;/li&gt;
&lt;li&gt;Web-Native: Modern businesses demand real-time, responsive interfaces and "Headless" API capabilities, which the TypeScript ecosystem excels at.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  How do you handle complex local accounting requirements?
&lt;/h3&gt;

&lt;p&gt;Open Mercato is a foundation, not a finished ERP.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Module-Based: You can build or plug in for "Accounting" or "KSeF" module.&lt;/li&gt;
&lt;li&gt;The Ecosystem: Our goal is for the community to contribute these specialized modules, which can then be shared or sold, similar to how specialized plugins work in other ecosystems but with enterprise-grade stability.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  How to Prevent Technical Debt using Open Mercato
&lt;/h3&gt;

&lt;p&gt;In traditional software development, when a developer needs to customize a framework for a client, they often fork the repository. This creates an immediate and permanent divergence:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Security Debt: You can no longer easily pull upstream security patches because your custom code has "mutated" the core.&lt;/li&gt;
&lt;li&gt;Update Paralysis: Over time, the cost of merging the original framework's updates becomes so high that the project is "frozen" on an old, vulnerable version.&lt;/li&gt;
&lt;li&gt;Vendor Lock-in: The client becomes a hostage to whoever wrote the custom modifications, as no one else can untangle the "spaghetti" of core vs. custom logic.
Open Mercato solves this by treating the core framework and your custom business logic as two distinct, non-destructive layers.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Architectural Separation
&lt;/h3&gt;

&lt;p&gt;Instead of modifying the source code of a core module, you create an Overlay.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Non-Destructive: You can overwrite any fragment of the system - from a single UI button to a complex backend validation logic -without touching the core files.&lt;/li&gt;
&lt;li&gt;Auto-Discovery: The framework is designed to automatically detect these overrides at runtime, prioritizing your custom logic over the default "out-of-the-box" behavior.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Dependency Injection (DI) as a Power Tool
&lt;/h3&gt;

&lt;p&gt;We use the Awilix DI container to manage how services are loaded.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Service Overriding: Every module has a di.ts file. If you need a different calculation for "Tax" than what the core ERP provides, you simply register your new service in the DI container.&lt;/li&gt;
&lt;li&gt;Request-Scoped: The container is constructed per request, allowing for different logic to be injected based on the specific tenant or user context.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Modular "Lego" Structure
&lt;/h3&gt;

&lt;p&gt;The system is divided into self-contained modules located in src/modules/.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Encapsulation: Each module contains its own APIs, database entities, and frontend pages.&lt;/li&gt;
&lt;li&gt;No Global Schema: Database migrations are generated and applied per module, preventing a "monolithic" database that is impossible to change.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;By using Feature-based RBAC and Feature Flags, you can roll out these "Overlays" to specific clients or users without affecting the rest of the system.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Safe Testing: You can enable a new custom module for a single organization to test it in production safely.&lt;/li&gt;
&lt;li&gt;Clean Slate: If a custom experiment fails, you simply delete the overlay, and the system instantly reverts to its stable core behavior.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Business &amp;amp; Software Houses
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Will this "kill" developer jobs?
&lt;/h3&gt;

&lt;p&gt;On the contrary, it evolves them. The era of billing for "basic CRUD" is ending because AI makes it a commodity.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;From "Hours" to "Solutions": Software Houses using Open Mercato stop selling "dev hours" and start selling "business transformation".&lt;/li&gt;
&lt;li&gt;Higher Margins: By reducing the time spent on infrastructure (the 80% of code that is the same in every app), you can deliver projects faster with higher margins while focusing on the complex 20% that actually solves the client's problem.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  What about "Vendor Lock-in"? What if I want to leave Open Mercato?
&lt;/h3&gt;

&lt;p&gt;Open Mercato is Open Source (GitHub: open-mercato).&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;No "Black Box": You have full access to the source code.&lt;/li&gt;
&lt;li&gt;Standard Tech: We use industry-standard tools like PostgreSQL, Redis, and MikroORM. Your data and your custom logic are yours to move if you ever decide to deviate from the framework.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Getting Started &amp;amp; Support
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Who takes responsibility when something breaks?
&lt;/h3&gt;

&lt;p&gt;When an agency builds on Open Mercato, they remain the "service provider" for their client. &lt;br&gt;
However:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Community &amp;amp; Backing: The project is supported by Catch The Tornado, an organization focused on building global tech companies.&lt;/li&gt;
&lt;li&gt;Testing: We maintain growing unit and integration test coverage to ensure that the core remains stable even as you extend it.
= Vibrant, Fast-Growing Community: Connect with the team and other builders in our &lt;a href="https://discord.gg/f4qwPtJ3qA" rel="noopener noreferrer"&gt;Discord community&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  How can I test this today?
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;You can &lt;a href="https://github.com/open-mercato/open-mercato?tab=readme-ov-file#getting-started" rel="noopener noreferrer"&gt;spin up a full environment in minutes&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Browse the full documentation at &lt;a href="https://docs.openmercato.com/" rel="noopener noreferrer"&gt;docs.openmercato.com&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>architecture</category>
      <category>backend</category>
      <category>opensource</category>
      <category>productivity</category>
    </item>
  </channel>
</rss>
