<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Idehweb</title>
    <description>The latest articles on DEV Community by Idehweb (@idehweb).</description>
    <link>https://dev.to/idehweb</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F927584%2Faf828e73-ae97-425f-913b-7cb4abfc5e13.jpeg</url>
      <title>DEV Community: Idehweb</title>
      <link>https://dev.to/idehweb</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/idehweb"/>
    <language>en</language>
    <item>
      <title>How We Built Webruno: A Website, Ecommerce &amp; CRM Platform with Next.js, React, Node.js, and MongoDB</title>
      <dc:creator>Idehweb</dc:creator>
      <pubDate>Sun, 13 Sep 2026 20:39:02 +0000</pubDate>
      <link>https://dev.to/idehweb/how-we-built-webruno-a-website-ecommerce-crm-platform-with-nextjs-react-nodejs-and-mongodb-4adn</link>
      <guid>https://dev.to/idehweb/how-we-built-webruno-a-website-ecommerce-crm-platform-with-nextjs-react-nodejs-and-mongodb-4adn</guid>
      <description>&lt;p&gt;Building software for businesses is rarely about solving just one problem.&lt;/p&gt;

&lt;p&gt;A business may need a website, an online store, product management, customer management, forms, payments, SEO, and automation. Traditionally, these capabilities are handled by several different products.&lt;/p&gt;

&lt;p&gt;We built &lt;strong&gt;Webruno&lt;/strong&gt; to bring these capabilities together in one platform.&lt;/p&gt;

&lt;p&gt;Webruno allows businesses to create and manage websites and online stores while also providing CRM, ecommerce, payments, SEO, forms, customer management, automation, and AI-assisted workflows.&lt;/p&gt;

&lt;p&gt;After several years of development, these are some of the engineering challenges and decisions behind the platform.&lt;/p&gt;

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

&lt;p&gt;The core Webruno stack includes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Next.js&lt;/li&gt;
&lt;li&gt;React&lt;/li&gt;
&lt;li&gt;Node.js&lt;/li&gt;
&lt;li&gt;Express&lt;/li&gt;
&lt;li&gt;MongoDB&lt;/li&gt;
&lt;li&gt;Mongoose&lt;/li&gt;
&lt;li&gt;Redux Toolkit&lt;/li&gt;
&lt;li&gt;Tailwind CSS&lt;/li&gt;
&lt;li&gt;Material UI&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;We chose technologies that allowed us to move quickly while keeping enough flexibility for a large, multi-tenant SaaS application.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Building a multi-tenant platform
&lt;/h2&gt;

&lt;p&gt;One of the first major architectural challenges was supporting many businesses inside the same platform.&lt;/p&gt;

&lt;p&gt;A single Webruno installation can contain data for many different businesses, including:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Websites&lt;/li&gt;
&lt;li&gt;Pages&lt;/li&gt;
&lt;li&gt;Products&lt;/li&gt;
&lt;li&gt;Categories&lt;/li&gt;
&lt;li&gt;Orders&lt;/li&gt;
&lt;li&gt;Customers&lt;/li&gt;
&lt;li&gt;Leads&lt;/li&gt;
&lt;li&gt;Forms&lt;/li&gt;
&lt;li&gt;Media&lt;/li&gt;
&lt;li&gt;Domains&lt;/li&gt;
&lt;li&gt;Users&lt;/li&gt;
&lt;li&gt;Automations&lt;/li&gt;
&lt;li&gt;Settings&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Every piece of business data needs to remain isolated from other businesses.&lt;/p&gt;

&lt;p&gt;We therefore designed our data models and application logic around tenant-aware operations.&lt;/p&gt;

&lt;p&gt;A request that reads or modifies data must know which account or website it belongs to.&lt;/p&gt;

&lt;p&gt;This becomes increasingly important as the number of models and relationships grows. A missing tenant constraint is not just a bug. It can become a security problem.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. The website and page builder
&lt;/h2&gt;

&lt;p&gt;A traditional website can be represented as HTML and CSS.&lt;/p&gt;

&lt;p&gt;A visual website editor needs something more structured.&lt;/p&gt;

&lt;p&gt;Instead of treating every page as a large block of HTML, we represent pages using structured components.&lt;/p&gt;

&lt;p&gt;A simplified example could look like:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"section"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"children"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"heading"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"content"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Build your business online"&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"button"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"label"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Get Started"&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The editor modifies this structure, while the rendering system turns it into the actual customer-facing page.&lt;/p&gt;

&lt;p&gt;This approach gives us several advantages:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Reusable components&lt;/li&gt;
&lt;li&gt;Responsive layouts&lt;/li&gt;
&lt;li&gt;Editable content&lt;/li&gt;
&lt;li&gt;Consistent rendering&lt;/li&gt;
&lt;li&gt;Easier component management&lt;/li&gt;
&lt;li&gt;A structured foundation for AI-assisted generation&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The difficult part is not creating a drag-and-drop interface.&lt;/p&gt;

&lt;p&gt;The difficult part is creating a system where thousands of different combinations of components can remain stable across different websites, devices, and content types.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Ecommerce inside the same platform
&lt;/h2&gt;

&lt;p&gt;Websites and online stores share many requirements, but ecommerce introduces another layer of complexity.&lt;/p&gt;

&lt;p&gt;A store needs to manage:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Products&lt;/li&gt;
&lt;li&gt;Categories&lt;/li&gt;
&lt;li&gt;Inventory&lt;/li&gt;
&lt;li&gt;Customers&lt;/li&gt;
&lt;li&gt;Orders&lt;/li&gt;
&lt;li&gt;Payments&lt;/li&gt;
&lt;li&gt;Shipping&lt;/li&gt;
&lt;li&gt;Discounts&lt;/li&gt;
&lt;li&gt;Product variations&lt;/li&gt;
&lt;li&gt;Order status&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Instead of building ecommerce as a completely separate application, Webruno connects ecommerce data with the rest of the business platform.&lt;/p&gt;

&lt;p&gt;For example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Product
   ↓
Order
   ↓
Customer
   ↓
CRM
   ↓
Automation
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This allows an ecommerce event to become part of a broader business workflow.&lt;/p&gt;

&lt;h2&gt;
  
  
  4. Connecting the CRM to the website
&lt;/h2&gt;

&lt;p&gt;A major goal was to avoid treating the website as an isolated frontend.&lt;/p&gt;

&lt;p&gt;A form submission can become a lead.&lt;/p&gt;

&lt;p&gt;A lead can become a customer.&lt;/p&gt;

&lt;p&gt;A customer can trigger an automation.&lt;/p&gt;

&lt;p&gt;An order can update customer information.&lt;/p&gt;

&lt;p&gt;A customer interaction can create a task for a team member.&lt;/p&gt;

&lt;p&gt;This creates a system where the website is directly connected to business operations.&lt;/p&gt;

&lt;p&gt;A simplified workflow looks like:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Website Form
     ↓
Lead
     ↓
CRM
     ↓
Automation
     ↓
Notification / Task / Customer Action
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is one of the main differences between a website-only product and a broader business platform.&lt;/p&gt;

&lt;h2&gt;
  
  
  5. AI-assisted website creation
&lt;/h2&gt;

&lt;p&gt;AI became another layer of the platform rather than the foundation of the entire product.&lt;/p&gt;

&lt;p&gt;Instead of allowing an AI model to generate arbitrary production HTML and hoping everything works, we use structured application data and existing components.&lt;/p&gt;

&lt;p&gt;The AI can help determine things such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Business type&lt;/li&gt;
&lt;li&gt;Website structure&lt;/li&gt;
&lt;li&gt;Page sections&lt;/li&gt;
&lt;li&gt;Content&lt;/li&gt;
&lt;li&gt;Calls to action&lt;/li&gt;
&lt;li&gt;Design direction&lt;/li&gt;
&lt;li&gt;Product categories&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The application remains responsible for validating and rendering the result.&lt;/p&gt;

&lt;p&gt;This gives us more control over the output and makes the AI features easier to integrate with the existing platform.&lt;/p&gt;

&lt;p&gt;The important lesson here is that AI works better when it operates within a well-defined product architecture instead of being allowed to control everything.&lt;/p&gt;

&lt;h2&gt;
  
  
  6. Why we chose Next.js
&lt;/h2&gt;

&lt;p&gt;We chose Next.js because it provides a strong foundation around React while giving us routing, rendering, performance optimizations, and server-side capabilities.&lt;/p&gt;

&lt;p&gt;Webruno contains both a complex application dashboard and customer-facing websites.&lt;/p&gt;

&lt;p&gt;Next.js allows us to build these different parts within a consistent React-based ecosystem.&lt;/p&gt;

&lt;p&gt;It also gives us the flexibility to choose the appropriate rendering strategy for different parts of the product.&lt;/p&gt;

&lt;h2&gt;
  
  
  7. Why we chose React
&lt;/h2&gt;

&lt;p&gt;React's component-based architecture was particularly useful for the website editor.&lt;/p&gt;

&lt;p&gt;A visual editor contains many reusable elements:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Text&lt;/li&gt;
&lt;li&gt;Images&lt;/li&gt;
&lt;li&gt;Buttons&lt;/li&gt;
&lt;li&gt;Sections&lt;/li&gt;
&lt;li&gt;Forms&lt;/li&gt;
&lt;li&gt;Product components&lt;/li&gt;
&lt;li&gt;Navigation&lt;/li&gt;
&lt;li&gt;Layout components&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Component-based development makes these elements easier to reuse and maintain.&lt;/p&gt;

&lt;p&gt;It also gives us a good foundation for adding new components without rebuilding the entire editor.&lt;/p&gt;

&lt;h2&gt;
  
  
  8. Why we chose MongoDB
&lt;/h2&gt;

&lt;p&gt;Website and business data can have very different structures.&lt;/p&gt;

&lt;p&gt;One business may have a simple website with a few pages, while another may have hundreds of products, custom fields, forms, and different content structures.&lt;/p&gt;

&lt;p&gt;MongoDB's document-oriented model gives us flexibility when working with this type of data.&lt;/p&gt;

&lt;p&gt;Mongoose provides an additional layer for defining models, validation, and relationships within the application.&lt;/p&gt;

&lt;h2&gt;
  
  
  9. Automation
&lt;/h2&gt;

&lt;p&gt;As the platform grew, we realized that simply storing business data was not enough.&lt;/p&gt;

&lt;p&gt;Businesses also need actions to happen automatically.&lt;/p&gt;

&lt;p&gt;For example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;New Lead
   ↓
Create Customer
   ↓
Send Notification
   ↓
Create Sales Task
   ↓
Follow Up
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Automation connects different parts of the platform and reduces repetitive manual work.&lt;/p&gt;

&lt;p&gt;This required us to think carefully about events, actions, conditions, and how different parts of the application communicate with each other.&lt;/p&gt;

&lt;h2&gt;
  
  
  10. The hardest lesson
&lt;/h2&gt;

&lt;p&gt;The hardest part of building Webruno was not choosing a framework or database.&lt;/p&gt;

&lt;p&gt;It was managing the complexity that appears when multiple products become one platform.&lt;/p&gt;

&lt;p&gt;Website building, ecommerce, CRM, payments, automation, and AI all have different requirements.&lt;/p&gt;

&lt;p&gt;Connecting them creates significant product and engineering complexity.&lt;/p&gt;

&lt;p&gt;At the same time, we learned an equally important business lesson:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Building the technology is only half the job.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A technically capable product does not automatically get customers.&lt;/p&gt;

&lt;p&gt;Distribution, positioning, onboarding, pricing, customer support, and sales are just as important as the architecture.&lt;/p&gt;

&lt;p&gt;That has changed our focus significantly as we continue developing Webruno.&lt;/p&gt;

&lt;h2&gt;
  
  
  11. What we are building now
&lt;/h2&gt;

&lt;p&gt;Today, Webruno combines several capabilities in one platform:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Business website creation&lt;/li&gt;
&lt;li&gt;Online stores&lt;/li&gt;
&lt;li&gt;Ecommerce management&lt;/li&gt;
&lt;li&gt;CRM&lt;/li&gt;
&lt;li&gt;Customer management&lt;/li&gt;
&lt;li&gt;Forms and leads&lt;/li&gt;
&lt;li&gt;Payments&lt;/li&gt;
&lt;li&gt;SEO tools&lt;/li&gt;
&lt;li&gt;Automation&lt;/li&gt;
&lt;li&gt;Analytics&lt;/li&gt;
&lt;li&gt;AI-assisted workflows&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The goal is not to replace every piece of software a business uses.&lt;/p&gt;

&lt;p&gt;The goal is to reduce the number of separate systems a business needs to build and operate its online presence.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;Building Webruno has been a long process of solving problems that became more complex as the platform grew.&lt;/p&gt;

&lt;p&gt;The biggest technical challenges have been multi-tenancy, the visual page system, ecommerce, CRM integration, automation, and connecting AI to an existing application architecture.&lt;/p&gt;

&lt;p&gt;The biggest business lesson has been simpler:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;A good product still needs distribution.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;We're continuing to improve the technology while focusing more heavily on customer feedback, usability, and making the platform useful for businesses beyond our original market.&lt;/p&gt;

&lt;p&gt;If you're building a multi-tenant SaaS product, website platform, ecommerce system, or business automation tool, the architectural problems are surprisingly similar.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Webruno:&lt;/strong&gt; &lt;a href="https://webruno.com" rel="noopener noreferrer"&gt;webruno.com&lt;/a&gt;&lt;/p&gt;

</description>
      <category>nextjs</category>
      <category>react</category>
      <category>saas</category>
      <category>webdev</category>
    </item>
  </channel>
</rss>
