<?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: Titus Eddy</title>
    <description>The latest articles on DEV Community by Titus Eddy (@titus_eddy_93898ded2e3a1a).</description>
    <link>https://dev.to/titus_eddy_93898ded2e3a1a</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%2F2365944%2F4aa162f8-905e-4510-8a7d-da4328c0f118.jpg</url>
      <title>DEV Community: Titus Eddy</title>
      <link>https://dev.to/titus_eddy_93898ded2e3a1a</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/titus_eddy_93898ded2e3a1a"/>
    <language>en</language>
    <item>
      <title>I Built an AI-Powered WhatsApp Helpdesk with Aurora DSQL, Multi-Model AI, and a Visual Chatbot Builder</title>
      <dc:creator>Titus Eddy</dc:creator>
      <pubDate>Mon, 08 Jun 2026 10:44:06 +0000</pubDate>
      <link>https://dev.to/titus_eddy_93898ded2e3a1a/i-built-an-ai-powered-whatsapp-helpdesk-with-aurora-dsql-multi-model-ai-and-a-visual-chatbot-3mgf</link>
      <guid>https://dev.to/titus_eddy_93898ded2e3a1a/i-built-an-ai-powered-whatsapp-helpdesk-with-aurora-dsql-multi-model-ai-and-a-visual-chatbot-3mgf</guid>
      <description>&lt;h2&gt;
  
  
  The Problem
&lt;/h2&gt;

&lt;p&gt;Millions of small and mid-sized businesses — especially across Africa and emerging markets — run their entire customer support on WhatsApp. Yet the tooling available is either enterprise-priced, dumb (no AI), or introduces unbearable latency for distributed users.&lt;/p&gt;

&lt;p&gt;I wanted to build something that's:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;AI-native&lt;/strong&gt; from day one (not bolted-on)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Multi-region&lt;/strong&gt; with sub-100ms database latency globally&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Accessible&lt;/strong&gt; to any business with a WhatsApp number&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No-code friendly&lt;/strong&gt; for building complex chatbot flows&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What I Built
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;ImaradeskAI&lt;/strong&gt; — a full-stack WhatsApp customer support platform that turns any WhatsApp Business number into an intelligent helpdesk with AI-powered automation, visual chatbot flows, and real-time analytics.&lt;/p&gt;

&lt;h2&gt;
  
  
  🧠 Multi-Model AI Engine
&lt;/h2&gt;

&lt;p&gt;Three providers working together — &lt;strong&gt;Gemini 2.5 Flash&lt;/strong&gt;, &lt;strong&gt;GPT-4o&lt;/strong&gt;, and &lt;strong&gt;Claude Sonnet 4&lt;/strong&gt; — switching transparently based on task type and availability.&lt;/p&gt;

&lt;p&gt;Every inbound message gets:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Intent classification&lt;/strong&gt; into 9 categories with confidence scoring&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Sentiment analysis&lt;/strong&gt; (-1 to +1) feeding escalation risk&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Language detection + auto-translation&lt;/strong&gt; — respond in the customer's native tongue&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Conversation summarization&lt;/strong&gt; for automatic ticket generation&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The system caches classifications and embeddings, so repeated queries are near-instant.&lt;/p&gt;

&lt;h2&gt;
  
  
  🤖 Visual No-Code Chatbot Builder (13 Node Types)
&lt;/h2&gt;

&lt;p&gt;A drag-and-drop flow canvas where non-technical users can build complex conversation logic without writing code:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Node Type&lt;/th&gt;
&lt;th&gt;What It Does&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Trigger&lt;/td&gt;
&lt;td&gt;Entry point — keyword, regex, business hours, first message&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Send Message&lt;/td&gt;
&lt;td&gt;Send text to the customer&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Quick Replies&lt;/td&gt;
&lt;td&gt;Present numbered options for structured responses&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;AI Response&lt;/td&gt;
&lt;td&gt;Single-turn AI generation using conversation context&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Agent (Full AI)&lt;/td&gt;
&lt;td&gt;Multi-turn autonomous agent with memory + KB access&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Knowledge Base&lt;/td&gt;
&lt;td&gt;Vector similarity search + AI-synthesized answer&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Condition&lt;/td&gt;
&lt;td&gt;Multi-rule branching (contains, regex, equals, not_equals)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Delay&lt;/td&gt;
&lt;td&gt;Configurable wait (optimized for serverless at ≤5s)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Connector&lt;/td&gt;
&lt;td&gt;Merge multiple branches into one path&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Action&lt;/td&gt;
&lt;td&gt;Side effects: create ticket, assign agent, add tag, close&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;API Call&lt;/td&gt;
&lt;td&gt;External HTTP calls with SSRF protection (blocks private IPs)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Smart Reply&lt;/td&gt;
&lt;td&gt;Template-based replies with shortcut matching&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Human Handoff&lt;/td&gt;
&lt;td&gt;Escalate to agent + auto-create ticket + assign team&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The flow engine supports:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Trigger priority matching (specific keywords before catch-all)&lt;/li&gt;
&lt;li&gt;Depth-limited execution (max 20 nodes) to prevent infinite loops&lt;/li&gt;
&lt;li&gt;Stateful conversations — &lt;code&gt;activeFlowId&lt;/code&gt; + &lt;code&gt;currentNodeId&lt;/code&gt; per contact&lt;/li&gt;
&lt;li&gt;Full execution logging for debugging and analytics&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  📚 RAG Knowledge Base with Vector Embeddings
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Upload (PDF/DOCX/TXT/CSV) → Extract Text → Embed → Store → Cosine Search → AI Generate
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Documents embedded with &lt;code&gt;gemini-embedding-001&lt;/code&gt; or &lt;code&gt;text-embedding-3-small&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Vectors stored as JSON arrays directly in Aurora DSQL — no separate vector DB needed&lt;/li&gt;
&lt;li&gt;Cosine similarity ranks all KB entries against the user's query&lt;/li&gt;
&lt;li&gt;Top-k results passed as context to AI for grounded, hallucination-resistant answers&lt;/li&gt;
&lt;li&gt;Files managed in AWS S3 with UUID-based naming for security&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  🌍 Multi-Region Database with AWS Aurora DSQL
&lt;/h2&gt;

&lt;p&gt;This was the biggest architectural bet. Aurora DSQL gives us:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Two active regions&lt;/strong&gt; (us-east-1 + us-east-2) with automatic geo-routing&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Short-lived IAM tokens&lt;/strong&gt; via DSQL Signer (auto-refreshed every 10 min)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Connection pooling&lt;/strong&gt; per region with failover to secondary&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Client lat/lon routing&lt;/strong&gt; — the nearest cluster handles each request
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;getNearestRegion&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;lat&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="nx"&gt;lon&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="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;regions&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;endpoint&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;US_EAST_1_ENDPOINT&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;lat&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mf"&gt;39.0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;lon&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;77.5&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;endpoint&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;US_EAST_2_ENDPOINT&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;lat&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mf"&gt;40.0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;lon&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;83.0&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="p"&gt;];&lt;/span&gt;
  &lt;span class="c1"&gt;// Euclidean distance → return closest endpoint&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The result: sub-100ms database responses regardless of where the user is connecting from.&lt;/p&gt;

&lt;h2&gt;
  
  
  🎫 Intelligent Ticketing + SLA Engine
&lt;/h2&gt;

&lt;p&gt;Tickets are auto-created from AI conversation analysis with generated titles and descriptions. SLA policies define per-priority timers, and an &lt;strong&gt;escalation risk score (0-100)&lt;/strong&gt; considers:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Factor&lt;/th&gt;
&lt;th&gt;Points&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;SLA due within 30 min&lt;/td&gt;
&lt;td&gt;+40&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Urgent priority&lt;/td&gt;
&lt;td&gt;+25&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Customer frustration (4+ follow-ups)&lt;/td&gt;
&lt;td&gt;+15&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Negative sentiment streak&lt;/td&gt;
&lt;td&gt;+15&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Stale (8+ hrs no update)&lt;/td&gt;
&lt;td&gt;+10&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  📊 AI-Powered Analytics
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;AI Copilot&lt;/strong&gt; — suggests replies to agents with acceptance rate tracking&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Voice of Customer&lt;/strong&gt; — sentiment distribution, complaint detection, praise identification&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Agent Quality Score&lt;/strong&gt; — resolution rate (40%) + sentiment impact (35%) + activity (25%)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Contact Health Score&lt;/strong&gt; (0-100) — engagement recency, open tickets, message frequency&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Topic Trending&lt;/strong&gt; — intent volume week-over-week with severity classification&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Workload Distribution&lt;/strong&gt; — agent capacity management with concurrent chat limits&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  📢 Broadcast Campaigns
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Scheduled or immediate mass messaging via WhatsApp templates&lt;/li&gt;
&lt;li&gt;Audience segmentation with JSON-based filters (tags, segments, contact lists)&lt;/li&gt;
&lt;li&gt;Real-time delivery analytics: sent → delivered → read → replied → failed&lt;/li&gt;
&lt;li&gt;Template variable substitution: &lt;code&gt;{name}&lt;/code&gt;, &lt;code&gt;{phone}&lt;/code&gt;, custom fields&lt;/li&gt;
&lt;/ul&gt;

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

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Layer&lt;/th&gt;
&lt;th&gt;Technology&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Framework&lt;/td&gt;
&lt;td&gt;Next.js 16, React 19, TypeScript&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Styling&lt;/td&gt;
&lt;td&gt;Tailwind CSS 4, Radix UI, shadcn/ui&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Database&lt;/td&gt;
&lt;td&gt;AWS Aurora DSQL (PostgreSQL-compatible, multi-region)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ORM&lt;/td&gt;
&lt;td&gt;Drizzle ORM&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;File Storage&lt;/td&gt;
&lt;td&gt;AWS S3&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;AI Models&lt;/td&gt;
&lt;td&gt;Gemini 2.5 Flash, GPT-4o, Claude Sonnet 4&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Embeddings&lt;/td&gt;
&lt;td&gt;gemini-embedding-001, text-embedding-3-small&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Auth&lt;/td&gt;
&lt;td&gt;JWT (jose) + bcrypt, httpOnly cookies&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Messaging&lt;/td&gt;
&lt;td&gt;Meta WhatsApp Cloud API (Graph v21.0)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Deployment&lt;/td&gt;
&lt;td&gt;Vercel (Edge + Serverless)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Charts&lt;/td&gt;
&lt;td&gt;Recharts&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Forms&lt;/td&gt;
&lt;td&gt;React Hook Form + Zod&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

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

&lt;ul&gt;
&lt;li&gt;More regions (eu-west-1, af-south-1 for African markets)&lt;/li&gt;
&lt;li&gt;Voice message transcription with Whisper&lt;/li&gt;
&lt;li&gt;CSAT surveys sent via WhatsApp after ticket resolution&lt;/li&gt;
&lt;li&gt;Shopify/WooCommerce integration for order status automation&lt;/li&gt;
&lt;li&gt;Team performance leaderboards with gamification&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;&lt;strong&gt;Live Demo:&lt;/strong&gt; &lt;a href="https://imaradesk-ai.vercel.app" rel="noopener noreferrer"&gt;imaradesk-ai.vercel.app&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;If you're building WhatsApp-based tools or working with Aurora DSQL, I'd love to hear your experience. Drop a comment below!&lt;/p&gt;

</description>
      <category>ai</category>
      <category>aws</category>
      <category>nextjs</category>
      <category>h0hackathon</category>
    </item>
    <item>
      <title>How I Built a Full Helpdesk SaaS from Scratch as a Solo Developer</title>
      <dc:creator>Titus Eddy</dc:creator>
      <pubDate>Fri, 01 May 2026 11:59:09 +0000</pubDate>
      <link>https://dev.to/titus_eddy_93898ded2e3a1a/how-i-built-a-full-helpdesk-saas-from-scratch-as-a-solo-developer-3m7k</link>
      <guid>https://dev.to/titus_eddy_93898ded2e3a1a/how-i-built-a-full-helpdesk-saas-from-scratch-as-a-solo-developer-3m7k</guid>
      <description>&lt;h2&gt;
  
  
  &lt;strong&gt;The Problem&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;I needed a helpdesk for a project. Zendesk wanted $55/agent/month. Freshdesk wasn't much better. As a developer I thought — I'll just build one. How hard can it be?&lt;br&gt;
Several months later, ImaraDesk was born.&lt;br&gt;
In this post I want to share the technical decisions, architecture choices and lessons learned building a full SaaS product solo.&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;Backend&lt;/strong&gt;: Django 5.0+ with Django REST Framework&lt;br&gt;
&lt;strong&gt;Frontend&lt;/strong&gt;: React with Vite&lt;br&gt;
&lt;strong&gt;Database&lt;/strong&gt;: PostgreSQL&lt;br&gt;
&lt;strong&gt;Auth&lt;/strong&gt;: JWT + 2FA implementation&lt;br&gt;
&lt;strong&gt;Deployment&lt;/strong&gt;: Docker&lt;/p&gt;

&lt;p&gt;I chose Django because of its batteries-included approach — admin panel, ORM, migrations and authentication out of the box. React on the frontend for a snappy, modern UI.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Modular Architecture&lt;/strong&gt;&lt;br&gt;
The most important technical decision I made was building ImaraDesk as a modular system. Each feature — tickets, knowledge base, assets, surveys, tasks — is an independent module that gets activated per workspace.&lt;br&gt;
This means:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Clean separation of concerns&lt;/li&gt;
&lt;li&gt;New businesses only activate what they need&lt;/li&gt;
&lt;li&gt;Adding new modules doesn't break existing ones&lt;/li&gt;
&lt;li&gt;Billing can eventually be per module or per agent&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Each module lives in its own folder with its own models, views, serializers and routes.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Hardest Parts&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Multi-tenancy
Making sure one business never sees another business's data was the most critical and most stressful part. Every query is scoped to a workspace — one wrong filter and you have a data breach.&lt;/li&gt;
&lt;li&gt;SLA Tracking
Calculating response and resolution times sounds simple. It isn't. Timezone handling, business hours, paused states — this took longer than I expected.&lt;/li&gt;
&lt;li&gt;Real-time notifications
Getting email notifications to fire reliably for ticket updates required proper async task handling with Celery.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;The Open Source Decision&lt;/strong&gt;&lt;br&gt;
The core version of ImaraDesk is fully open source on GitHub under AGPL license. Anyone can self-host it for free.&lt;br&gt;
The cloud version at &lt;em&gt;&lt;a href="https://imaradesk.com" rel="noopener noreferrer"&gt;imaradesk.com&lt;/a&gt;&lt;/em&gt; is the commercial product. This is the open core model. Open source builds trust and community. The cloud product pays the bills.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;What I Learned&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Ship before you're ready — I kept adding features. At some point you just have to launch.&lt;br&gt;
Documentation is harder than code — writing clear docs took almost as long as building features.&lt;br&gt;
Modular architecture pays off — early investment in clean structure saves massive headaches later.&lt;br&gt;
Solo doesn't mean alone — communities like dev.to, IndieHackers and GitHub stars kept me going.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;&lt;strong&gt;What's Next&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;AI features in v2 — suggested replies, auto-tagging, sentiment detection&lt;br&gt;
More integrations — Slack, WhatsApp, email piping&lt;br&gt;
Mobile app&lt;/p&gt;

&lt;p&gt;Try It&lt;/p&gt;

&lt;p&gt;🔗 Cloud version: imaradesk.com&lt;br&gt;
📖 Open source: github.com/imaradesk/imaradesk-os&lt;br&gt;
📄 Docs: docs.imaradesk.com&lt;/p&gt;

&lt;p&gt;I'd love feedback from the dev.to community — what would you add? What would make you self-host or switch from your current helpdesk tool?&lt;/p&gt;

</description>
      <category>django</category>
      <category>react</category>
      <category>postgres</category>
      <category>api</category>
    </item>
  </channel>
</rss>
