<?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: Somesh Bhardwaj</title>
    <description>The latest articles on DEV Community by Somesh Bhardwaj (@devsomesh).</description>
    <link>https://dev.to/devsomesh</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%2F3231175%2F21afff20-295d-4021-9d64-00241c858e91.jpeg</url>
      <title>DEV Community: Somesh Bhardwaj</title>
      <link>https://dev.to/devsomesh</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/devsomesh"/>
    <language>en</language>
    <item>
      <title>How My "Simple" Side Project Mutated into a Full-Blown SaaS Orchestration Engine</title>
      <dc:creator>Somesh Bhardwaj</dc:creator>
      <pubDate>Fri, 13 Mar 2026 12:00:33 +0000</pubDate>
      <link>https://dev.to/devsomesh/how-my-simple-side-project-mutated-into-a-full-blown-saas-orchestration-engine-55jo</link>
      <guid>https://dev.to/devsomesh/how-my-simple-side-project-mutated-into-a-full-blown-saas-orchestration-engine-55jo</guid>
      <description>&lt;p&gt;Have you ever started a side project with a perfectly simple use case, only to watch it snowball into a massive, multi-layered orchestration engine? &lt;/p&gt;

&lt;p&gt;That’s exactly what happened here. What began as a lightweight tool to manage online events, track registrations, and fire off a few email reminders, rapidly evolved into a heavy-duty, integration-driven SaaS platform. As soon as real users got their hands on it, the floodgates of complexity opened. &lt;/p&gt;

&lt;p&gt;In this post, I want to take you behind the scenes and share the architectural evolution from a basic web app to a cloud-native orchestration hub.&lt;/p&gt;




&lt;h2&gt;
  
  
  🏎️ The "Simple" Beginnings
&lt;/h2&gt;

&lt;p&gt;In the early days, the architecture was delightfully boring. You had users browsing events, registering, and getting confirmation emails. &lt;/p&gt;

&lt;p&gt;The flow was linear: &lt;strong&gt;Frontend ➔ Backend ➔ DB ➔ Email / Video API&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;It was monolithic, easy to maintain, and completely straightforward. But as any developer knows, scope creep is inevitable once a product finds product-market fit. &lt;/p&gt;




&lt;h2&gt;
  
  
  🌪️ Enter the Complexity Tornado
&lt;/h2&gt;

&lt;p&gt;As the platform gained traction, the feature requests poured in: multi-session events, global timezone management, dynamic reminders, analytics dashboards, and tight integrations with third-party CRMs and marketing tools.&lt;/p&gt;

&lt;p&gt;Each capability added a new layer of complexity. What used to be a simple application was no longer just managing its own state—it was coordinating state across a multitude of external systems.&lt;/p&gt;

&lt;p&gt;We were officially moving into the territory of an &lt;strong&gt;Orchestration Platform&lt;/strong&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  🏗️ The Final Production Architecture
&lt;/h2&gt;

&lt;p&gt;To handle this new reality without the system collapsing under its own weight, we tore down the monolith ideology and migrated to a layered, event-driven orchestration architecture. &lt;/p&gt;

&lt;p&gt;Here is what the architectural breakdown looks like today:&lt;/p&gt;

&lt;p&gt;![SaaS Orchestration Platform Architecture]&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%2Ffort5hgnukm4b7u9va7y.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%2Ffort5hgnukm4b7u9va7y.png" alt=" " width="800" height="436"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;(Note: I've prepared a highly stylized, neon-themed architecture diagram for you locally! You can upload it here before publishing.)&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Let's break down the core layers that make this engine tick.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. The Core Orchestration Engine
&lt;/h3&gt;

&lt;p&gt;Instead of building out infinite custom integrations inside the core app, the system was refactored heavily into an orchestration layer. It now houses specialized micro-engines:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Registration Engine:&lt;/strong&gt; Handles state-machine logic for attendees.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Reminder Scheduler:&lt;/strong&gt; Dynamic cron-jobs evaluating state dynamically rather than queuing static delays.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Integration Manager:&lt;/strong&gt; The router that handles third-party SaaS communication safely.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  2. External API Translation Layer
&lt;/h3&gt;

&lt;p&gt;One of our biggest lessons? &lt;strong&gt;Never let external APIs dictate your internal data models.&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;When integrating with external video platforms, marketing tools, or CRMs, we built strict Translation Layers. The core engine strictly speaks its own internal language. The translation layer morphs our internal payload into whatever the third-party endpoint expects. If an external service deprecates an API version, only the translation layer needs an update. &lt;/p&gt;

&lt;h3&gt;
  
  
  3. Polling Schedulers &amp;gt; Delayed Job Queues
&lt;/h3&gt;

&lt;p&gt;Instead of relying on rigid, delayed job queues that are a nightmare to debug when they fail, we moved to Polling Schedulers. Our system periodically wakes up, evaluates the current state of the database, and processes whatever actions are due. &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;em&gt;Precision:&lt;/em&gt; Slightly lower.&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;Reliability and Debuggability:&lt;/em&gt; Infinitely higher.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  4. Frictionless Identity Architecture
&lt;/h3&gt;

&lt;p&gt;We completely stripped out forced user accounts for attendees. Users wanted to attend web events without managing yet another password. By linking registrations to secure underlying identifiers, we dramatically decreased onboarding friction. The tradeoff? Identity mapping routing on the backend became wildly more complex, but the UX win was worth it.&lt;/p&gt;




&lt;h2&gt;
  
  
  💡 The Main Takeaway?
&lt;/h2&gt;

&lt;p&gt;Building a sophisticated SaaS in today's tech climate isn't about writing massive amounts of raw internal features. It's almost entirely about &lt;strong&gt;integrations&lt;/strong&gt; and &lt;strong&gt;orchestration&lt;/strong&gt;. &lt;/p&gt;

&lt;p&gt;It's about making peace with the fact that your app is just one node in a massive network of services, and your real job is to ensure the data flows seamlessly, idempotently, and securely between all of them. &lt;/p&gt;

&lt;p&gt;Good systems aren't defined by having zero complexity; they are defined by their ability to keep that complexity encapsulated, comprehensible, and resilient.&lt;/p&gt;

</description>
      <category>architecture</category>
      <category>saas</category>
      <category>webdev</category>
      <category>engineering</category>
    </item>
    <item>
      <title>Building an AI-Powered Portfolio with React 19, Vite, and Gemini 2.5 Flash</title>
      <dc:creator>Somesh Bhardwaj</dc:creator>
      <pubDate>Fri, 13 Mar 2026 11:38:12 +0000</pubDate>
      <link>https://dev.to/devsomesh/building-an-ai-powered-portfolio-with-react-19-vite-and-gemini-25-flash-3ij2</link>
      <guid>https://dev.to/devsomesh/building-an-ai-powered-portfolio-with-react-19-vite-and-gemini-25-flash-3ij2</guid>
      <description>&lt;p&gt;As developers, our portfolio is often the first impression we make. Instead of just listing my skills and projects, I wanted visitors to &lt;strong&gt;experience&lt;/strong&gt; what I can build. That's why I decided to rebuild my portfolio as an AI-powered interactive web experience.&lt;/p&gt;

&lt;p&gt;In this post, I'll walk you through how I built my new high-performance portfolio using &lt;strong&gt;React 19&lt;/strong&gt;, &lt;strong&gt;Vite&lt;/strong&gt;, &lt;strong&gt;Tailwind CSS 4&lt;/strong&gt;, and the incredible &lt;strong&gt;Google Gemini 2.5 Flash&lt;/strong&gt; model. &lt;/p&gt;

&lt;h2&gt;
  
  
  The Vision: More Than Just a Website
&lt;/h2&gt;

&lt;p&gt;My goal was to create a site that was not only fast and accessible but also highly interactive. I wanted an AI assistant that could:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Answer questions about my experience and skills.&lt;/li&gt;
&lt;li&gt;Control the UI (e.g., scroll to specific sections, filter projects, or toggle themes).&lt;/li&gt;
&lt;li&gt;Act as an intelligent lead-capture tool.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  The Tech Stack
&lt;/h2&gt;

&lt;p&gt;I chose a stack optimized for speed and developer experience:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Frontend Framework:&lt;/strong&gt; React 19 &amp;amp; Vite &lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Styling:&lt;/strong&gt; Tailwind CSS 4 with custom CSS and glassmorphism design.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;AI Integration:&lt;/strong&gt; Google Gemini 2.5 Flash (via API) &amp;amp; &lt;code&gt;react-markdown&lt;/code&gt; for formatting.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Visualizations:&lt;/strong&gt; Recharts &amp;amp; custom SVGs for interactive skill radars.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Deployment:&lt;/strong&gt; Netlify (Functions + CDN) to securely handle API keys.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Integrating Google Gemini for Function Calling
&lt;/h2&gt;

&lt;p&gt;The standout feature of this portfolio is the &lt;strong&gt;AI Chatbot&lt;/strong&gt;. Instead of just returning text, the chatbot utilizes &lt;strong&gt;Function Calling&lt;/strong&gt;. &lt;/p&gt;

&lt;p&gt;When a user asks, &lt;em&gt;"Show me your web development projects"&lt;/em&gt;, or &lt;em&gt;"Switch to dark mode"&lt;/em&gt;, Gemini processes the intent. Using predefined tools, it returns a structured JSON response to call a specific frontend function. &lt;/p&gt;

&lt;p&gt;Here is a simplified look at how I implemented 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;// Defining the tool schema for Gemini&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;tools&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
  &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;filterProjects&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;description&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Filters the project gallery based on the user's request.&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;parameters&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;object&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;properties&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="na"&gt;category&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;string&lt;/span&gt;&lt;span class="dl"&gt;"&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="p"&gt;},&lt;/span&gt;
  &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;scrollToSection&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;description&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Scrolls the page to a specific section like 'Experience' or 'Contact'.&lt;/span&gt;&lt;span class="dl"&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;When the frontend receives this tool invocation, it triggers the necessary React state changes to filter the project gallery smoothly.&lt;/p&gt;

&lt;h2&gt;
  
  
  Dynamic UI and Animations
&lt;/h2&gt;

&lt;p&gt;A chatbot is cool, but the aesthetics matter. I incorporated:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Time-based ambient backgrounds&lt;/strong&gt; that subtly shift colors.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Glassmorphism design&lt;/strong&gt; featuring backdrop blurs to keep text readable over dynamic elements.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Scroll Spy Navigation&lt;/strong&gt; and staggered animations using intersection observers.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;All of this was achieved while maintaining &lt;strong&gt;WCAG 2.1 AA compliance&lt;/strong&gt;. Accessibility shouldn't be an afterthought, even heavily customized UIs need screen-reader optimizations and keyboard navigation support.&lt;/p&gt;

&lt;h2&gt;
  
  
  Content Management Architecture
&lt;/h2&gt;

&lt;p&gt;One of the best developer decisions I made was centralizing all the content into a single &lt;code&gt;constants.ts&lt;/code&gt; 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="k"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;PROJECTS&lt;/span&gt; &lt;span class="o"&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;const&lt;/span&gt; &lt;span class="nx"&gt;EXPERIENCE&lt;/span&gt; &lt;span class="o"&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;const&lt;/span&gt; &lt;span class="nx"&gt;SKILL_CATEGORIES&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[...];&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Instead of hunting down specific components to update my resume or add a new project, I simply modify the data object. The entire UI trickles down from these constants, making the portfolio incredibly maintainable.&lt;/p&gt;

&lt;h2&gt;
  
  
  What's Next?
&lt;/h2&gt;

&lt;p&gt;The portfolio is live, but software is never really "finished." My roadmap includes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Migrating the server-side chatbot logic to &lt;strong&gt;n8n&lt;/strong&gt; for more complex workflow automation.&lt;/li&gt;
&lt;li&gt;Enhancing lead capture directly into Google Sheets using Apps Script (already underway!).&lt;/li&gt;
&lt;li&gt;Expanding end-to-end testing with Playwright.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Building this was a fantastic journey merging modern frontend performance with cutting-edge AI integrations. If you're looking to stand out, I highly recommend finding creative ways to weave LLMs into your personal projects.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Feel free to explore the code on my &lt;a href="https://github.com/Dev-Somesh/Somesh-Bhardwaj-Portfolio-Ai-Chatbot" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt; or chat with the AI on my live portfolio at &lt;a href="https://someshbhardwaj.me" rel="noopener noreferrer"&gt;someshbhardwaj.me&lt;/a&gt;!&lt;/em&gt;&lt;/p&gt;




&lt;p&gt;&lt;em&gt;This article was originally published on my blog at &lt;a href="https://blog.someshbhardwaj.me/building-an-ai-powered-portfolio-with-react-19-vite-and-gemini-2-5-flash" rel="noopener noreferrer"&gt;someshbhardwaj.me&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>react</category>
      <category>programming</category>
      <category>ai</category>
    </item>
  </channel>
</rss>
