<?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: Aharna Haque</title>
    <description>The latest articles on DEV Community by Aharna Haque (@aharna).</description>
    <link>https://dev.to/aharna</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%2F942290%2F27e6805e-ab37-4e86-b30e-2ef40440b107.png</url>
      <title>DEV Community: Aharna Haque</title>
      <link>https://dev.to/aharna</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/aharna"/>
    <language>en</language>
    <item>
      <title>I built a WhatsApp AI agent in under 60 minutes, with low-code agent builder</title>
      <dc:creator>Aharna Haque</dc:creator>
      <pubDate>Wed, 14 Oct 2026 04:37:39 +0000</pubDate>
      <link>https://dev.to/aharna/i-built-a-whatsapp-ai-agent-in-under-60-minutes-with-low-code-agent-builder-3p53</link>
      <guid>https://dev.to/aharna/i-built-a-whatsapp-ai-agent-in-under-60-minutes-with-low-code-agent-builder-3p53</guid>
      <description>&lt;p&gt;Building a WhatsApp agent is trickier than it looks. You write a pile of code for webhooks and message handling. You wire up an LLM, write the prompts, and manage conversation state so the agent remembers what the user said two messages ago. You set up a Meta Business account, get it verified, apply for WhatsApp Business API access, and wait for message templates to be approved. Then you connect a calendar, an email service, and Slack, each with its own auth flow and its own error cases. After that you host it, monitor it, and fix it every time an API changes.&lt;/p&gt;

&lt;p&gt;In this post, I'll show you how I built a production-ready WhatsApp AI agent in under 60 minutes, using a no-code agentic platform, &lt;a href="https://www.dronahq.ai/" rel="noopener noreferrer"&gt;DronaHQ&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  The use case
&lt;/h2&gt;

&lt;p&gt;The clinic's staff leave at 6 PM. Patients don't stop messaging. They ask about test pricing at 11 PM, try to book for Sunday morning, and reschedule while standing in a coffee queue.&lt;/p&gt;

&lt;p&gt;The clinic had a booking portal, but it meant leaving WhatsApp, opening a browser, creating an account, and filling out a form. Most people won't do that. They message instead, and the message waits until morning.&lt;/p&gt;

&lt;p&gt;So the agent needed to handle three things inside WhatsApp:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Pricing questions&lt;/li&gt;
&lt;li&gt;Appointment bookings&lt;/li&gt;
&lt;li&gt;Reschedules&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  How I chose an agent builder
&lt;/h2&gt;

&lt;p&gt;Most tools now call themselves agent builders, but they do very different things. Some are chatbots with better prompts. Some are workflow automations with an LLM step in the middle. I used this &lt;a href="https://dev.toURL"&gt;comparison of top AI agent builders&lt;/a&gt; as a reference.&lt;/p&gt;

&lt;p&gt;My requirement was narrow. The agent had to act across systems in one conversation: check a calendar, write a booking, send an email, notify staff. Here's how I read the options against that.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Botpress&lt;/strong&gt; is built around conversation and supports WhatsApp. But tool calls are scoped to a single conversational turn, and multi-system backend orchestration is its weaker side.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Zapier Agents&lt;/strong&gt; has the widest SaaS coverage. But the agent lives inside a Zap, with no standalone agent endpoint, and task-based pricing adds up at scale.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;n8n&lt;/strong&gt; gives you full control and can be self-hosted. But non-trivial logic usually needs JavaScript, and you run more of the infrastructure yourself.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I went with DronaHQ. WhatsApp is a built-in trigger, the Google Calendar, Gmail, and Slack connectors already exist, and the agent can write to those systems. It also has traces, which helped when the agent did something I didn't expect. The tradeoff is that its template library is still small, so I built it from scratch.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why I chose agent over automation for workflows in WhatsApp (quick primer)
&lt;/h2&gt;

&lt;p&gt;Most people hear "automated WhatsApp responses" and think: chatbots. Auto-replies. Canned messages.&lt;/p&gt;

&lt;p&gt;That's not what I built.&lt;/p&gt;

&lt;p&gt;Traditional automation follows predetermined paths. If the user says X, do Y. It breaks the moment someone phrases a request differently. It requires you to map every possible variation. It frustrates users because it can't handle nuance.&lt;/p&gt;

&lt;p&gt;Have you experienced this?&lt;/p&gt;

&lt;p&gt;You message a business: "Can I move my 3 PM slot to Thursday?"&lt;/p&gt;

&lt;p&gt;Bot responds: "I didn't understand that. Please choose from: 1) Book appointment 2) Cancel appointment 3) Speak to agent"&lt;/p&gt;

&lt;p&gt;You try again: "Reschedule"&lt;/p&gt;

&lt;p&gt;Bot: "Please provide your booking ID."&lt;/p&gt;

&lt;p&gt;You don't have it. You wait for a human.&lt;/p&gt;

&lt;p&gt;That's automation. It's rigid. It breaks under real-world use.&lt;/p&gt;

&lt;p&gt;The distinction:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Traditional automation&lt;/th&gt;
&lt;th&gt;Agentic workflow&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Keyword matching&lt;/td&gt;
&lt;td&gt;Intent understanding&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Fixed conversation paths&lt;/td&gt;
&lt;td&gt;Dynamic responses&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Breaks on variation&lt;/td&gt;
&lt;td&gt;Handles natural language&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;"Press 1 for..."&lt;/td&gt;
&lt;td&gt;"Just tell me what you need"&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Requires extensive mapping&lt;/td&gt;
&lt;td&gt;Learns from context&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Automation executes scripts. Agents make decisions.&lt;/p&gt;

&lt;h2&gt;
  
  
  What my WhatsApp-triggered agent actually does
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Trigger:&lt;/strong&gt; A patient sends a WhatsApp message.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Intent detection:&lt;/strong&gt; The agent reads the message and decides if it's a service query, a booking, or a reschedule.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Action:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Service query&lt;/strong&gt; → searches the knowledge base, returns pricing&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Booking&lt;/strong&gt; → checks Google Calendar, reserves the slot, collects the patient's email&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Reschedule&lt;/strong&gt; → updates the calendar, sends a new confirmation&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Notification layer:&lt;/strong&gt; Booking details go to staff via Slack, email, and WhatsApp.&lt;/p&gt;

&lt;p&gt;Staff only get involved when the agent escalates.&lt;/p&gt;

&lt;h2&gt;
  
  
  Real-world use cases for WhatsApp AI agents (clinics, restaurants, salons, more)
&lt;/h2&gt;

&lt;p&gt;The clinic is a proxy. The pattern applies anywhere customers initiate service requests via messaging:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Salons booking appointments&lt;/li&gt;
&lt;li&gt;Repair services quoting jobs&lt;/li&gt;
&lt;li&gt;Tutoring centers scheduling demos&lt;/li&gt;
&lt;li&gt;Legal consultations confirming calls&lt;/li&gt;
&lt;li&gt;Real estate viewings&lt;/li&gt;
&lt;li&gt;Restaurants handling reservations&lt;/li&gt;
&lt;li&gt;Service contractors scheduling estimates&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The common thread: high-frequency, low-complexity interactions that don't justify pulling someone out of their messaging app.&lt;/p&gt;

&lt;p&gt;These aren't edge cases. This is most customer service.&lt;/p&gt;

&lt;h2&gt;
  
  
  How I built it
&lt;/h2&gt;

&lt;p&gt;I needed three pieces: a WhatsApp trigger, an AI layer that understands intent and picks tools, and integrations for the calendar, email, Slack, and a knowledge base. I &lt;a href="https://youtu.be/UByalx65JRE?si=0NDfqqzT0YVG36-A" rel="noopener noreferrer"&gt;recorded a video&lt;/a&gt; on it as well in a workshop I hosted.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://youtu.be/UByalx65JRE?si=CS1YELGb-uRmw_E4" rel="noopener noreferrer"&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fjkr6a6z6ovnqntnb7rjk.png" alt=" " width="560" height="313"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;My earlier guide, &lt;a href="https://dev.toURL"&gt;how to build AI agents in 5 simple steps using DronaHQ&lt;/a&gt;, covers the basics of models, instructions, and testing. If you'd rather watch than read, here's the &lt;a href="https://docs.google.com/document/d/1ofd9tr4sC2iXdfx5XTie7qTmJJylIP8aeZMhbu2rZPk/edit?tab=t.dsjhrwupd7fc#heading=h.tttvwwwz5uea" rel="noopener noreferrer"&gt;full build walkthrough&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 1: Set up the WhatsApp trigger and AI instructions
&lt;/h3&gt;

&lt;p&gt;I opened DronaHQ's agentic platform and created a new agent workflow. Then I added the instruction (&lt;a href="https://dev.toURL"&gt;you can copy it from here&lt;/a&gt;).&lt;/p&gt;

&lt;p&gt;Next, I added WhatsApp as the trigger and connected my business WhatsApp number. Every message that comes in now fires the agent.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Time:&lt;/strong&gt; 5 minutes.&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Flaqptj4wq2i0089lhud5.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Flaqptj4wq2i0089lhud5.png" alt=" " width="300" height="156"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 2: Build the knowledge base
&lt;/h3&gt;

&lt;p&gt;I created a simple knowledge base with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Vaccine pricing (BCG: ₹600, Covishield: ₹1000)&lt;/li&gt;
&lt;li&gt;Doctor consultation fees (Dr. Sharma: ₹500)&lt;/li&gt;
&lt;li&gt;Clinic timings and availability&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I uploaded it as a structured document. The agent can now search it on demand.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Time:&lt;/strong&gt; 10 minutes.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 3: Configure intent detection (pricing, booking, reschedule)
&lt;/h3&gt;

&lt;p&gt;This is where the agentic layer does the heavy lifting.&lt;/p&gt;

&lt;p&gt;I didn't write rules. I just told the agent what kinds of queries to expect:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Service/pricing queries&lt;/li&gt;
&lt;li&gt;Appointment booking requests&lt;/li&gt;
&lt;li&gt;Rescheduling requests&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The AI model handles natural language understanding. Whether someone says "how much is a BCG vaccine" or "BCG vaccine cost?", it knows both are pricing queries.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Time:&lt;/strong&gt; 5 minutes.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 4: Connect Google Calendar for automated bookings
&lt;/h3&gt;

&lt;p&gt;Next, I added the Google Calendar integration and configured it to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Check the doctor's availability&lt;/li&gt;
&lt;li&gt;Book slots when requested&lt;/li&gt;
&lt;li&gt;Update existing appointments for reschedules&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I used DronaHQ's pre-built connector. I had no API keys to manage. Just OAuth and done.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Time:&lt;/strong&gt; 10 minutes.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 5: Add email and WhatsApp confirmations
&lt;/h3&gt;

&lt;p&gt;I connected the Gmail tool. When a booking is confirmed, the agent:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Asks for the patient's email&lt;/li&gt;
&lt;li&gt;Sends a formatted confirmation with appointment details&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Again, a pre-built connector. Point and click.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Time:&lt;/strong&gt; 5 minutes.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 6: Configure staff notifications (Slack, email, WhatsApp)
&lt;/h3&gt;

&lt;p&gt;I added three notification actions:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Post to a designated Slack channel with booking details&lt;/li&gt;
&lt;li&gt;Send an email to the clinic admin&lt;/li&gt;
&lt;li&gt;Send a WhatsApp confirmation to the patient&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;All three fire automatically after a successful booking.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Time:&lt;/strong&gt; 10 minutes.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 7: Design the visual conversation flow
&lt;/h3&gt;

&lt;p&gt;This is visual workflow design. I mapped:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;If message → detect intent&lt;/li&gt;
&lt;li&gt;Intent = pricing query → search knowledge base → return result&lt;/li&gt;
&lt;li&gt;Intent = booking → check calendar → offer slots → collect email → confirm → notify&lt;/li&gt;
&lt;li&gt;Intent = reschedule → find existing appointment → check new availability → update → notify&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The platform shows this as a flowchart. I dragged, dropped, and connected nodes.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Time:&lt;/strong&gt; 20 minutes.&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fjeuqau37gkx61yspq62l.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fjeuqau37gkx61yspq62l.png" alt=" " width="300" height="142"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 8: Test and deploy
&lt;/h3&gt;

&lt;p&gt;I sent test messages from my phone:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;"How much is a BCG vaccine?" ✓&lt;/li&gt;
&lt;li&gt;"I want to book for tomorrow at 10 AM" ✓&lt;/li&gt;
&lt;li&gt;"Can I move my appointment to Thursday?" ✓&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;All worked, and I deployed it live. This is a complete WhatsApp AI agent, built end-to-end with no code.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Time:&lt;/strong&gt; 15 minutes.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Cost:&lt;/strong&gt; No enterprise licenses. No custom development.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I didn't have to do
&lt;/h2&gt;

&lt;p&gt;I didn't read API documentation. I didn't configure webhooks, write error handling logic, set up a database, or provision a server.&lt;/p&gt;

&lt;p&gt;The platform abstracted all of it.&lt;/p&gt;

&lt;h2&gt;
  
  
  The operational shift
&lt;/h2&gt;

&lt;p&gt;What changes when this becomes your default interface?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Support load compresses.&lt;/strong&gt; Repetitive queries (pricing, availability, rescheduling) disappear from your queue. Your team handles exceptions, not routine requests.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Response time flattens.&lt;/strong&gt; Midnight enquiries get answered immediately. No queue. No business hours. The agent is always on.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Lead capture tightens.&lt;/strong&gt; Every inbound message is logged, categorized, and actioned. Nothing falls through the cracks because someone forgot to check the inbox.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Data quality improves.&lt;/strong&gt; Structured capture happens at the point of contact. You're not cleaning data later; the agent forces structure upfront.&lt;/p&gt;

&lt;p&gt;This isn't incremental. It's a different operating model.&lt;/p&gt;

&lt;h2&gt;
  
  
  The automation frontier nobody built yet
&lt;/h2&gt;

&lt;p&gt;Here's what most companies are still doing: they automate internal workflows, approvals, data syncs, reporting pipelines.&lt;/p&gt;

&lt;p&gt;That's fine. But the higher-leverage play is automating the customer-facing workflow at the entry point.&lt;/p&gt;

&lt;p&gt;Because that's where effort compounds. Every avoided friction point multiplies across thousands of interactions. Every instant response prevents a lost lead. Every automatic confirmation reduces no-shows.&lt;/p&gt;

&lt;p&gt;The irony is that the tooling finally exists to do this without engineering armies. Visual workflow builders. Pre-built integrations. AI agents that don't need training data to understand "I need to move my appointment to Thursday."&lt;/p&gt;

&lt;p&gt;The infrastructure gap has closed. The adoption gap hasn't.&lt;/p&gt;

&lt;h2&gt;
  
  
  Cost, time, and build-vs-buy for WhatsApp AI agents
&lt;/h2&gt;

&lt;p&gt;Here's what usually stops companies from deploying this kind of system:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Cost.&lt;/strong&gt; Enterprise automation platforms run $50K+ annually. Custom development costs six figures.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Complexity.&lt;/strong&gt; Integrating WhatsApp + AI + Calendar + CRM + Email traditionally requires engineering teams and months of work.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Maintenance.&lt;/strong&gt; Every API change breaks something. Every new use case requires new code.&lt;/p&gt;

&lt;p&gt;The shift happening now: platforms that give you agentic capabilities without writing code or buying enterprise licenses.&lt;/p&gt;

&lt;p&gt;Visual workflow builders. Pre-built connectors. AI layers that handle natural language out of the box. You're not buying software. You're assembling intelligence.&lt;/p&gt;

&lt;p&gt;I could have built this from scratch: string together Twilio, OpenAI, Google Calendar APIs, and Slack webhooks, write the orchestration logic, handle error states, and maintain it all. Budget: $100K+ in development. Months of work. Ongoing maintenance costs.&lt;/p&gt;

&lt;p&gt;Instead, I used DronaHQ, which gave me no-code builder workflows, pre-built connectors, and an agentic layer that handles intent without brittle rule trees. Build time: 60 minutes. Cost: a fraction of custom development. Maintenance: handled by the platform. The math is obvious. Unless you're in the automation business, building this yourself is technical debt disguised as differentiation.&lt;/p&gt;

&lt;h2&gt;
  
  
  What happens next
&lt;/h2&gt;

&lt;p&gt;The businesses that move first on this aren't waiting for perfect AI. They're deploying agents that handle the 80% of interactions that don't need human judgment.&lt;/p&gt;

&lt;p&gt;The businesses that wait are optimizing their web portals and wondering why customers keep texting them instead.&lt;/p&gt;

&lt;p&gt;This isn't a future trend. It's operational table stakes.&lt;/p&gt;

&lt;p&gt;Your customers are already on WhatsApp. The question is whether you'll meet them there with an agent that actually understands them, or keep sending automated responses that make them want to speak to a human.&lt;/p&gt;

&lt;p&gt;The technology exists. The interfaces are ready. The customers are waiting.&lt;/p&gt;

&lt;p&gt;What's missing is the decision to deploy.&lt;/p&gt;

&lt;p&gt;You can also read more on &lt;a href="https://dev.toURL"&gt;how agentic AI is designing the experiences of a modern traveller&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Explore how &lt;a href="https://dev.toURL"&gt;AI agents in WhatsApp are reshaping online travel booking&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Frequently asked questions
&lt;/h2&gt;

&lt;h3&gt;
  
  
  How do I build a WhatsApp AI agent without coding?
&lt;/h3&gt;

&lt;p&gt;I used DronaHQ's agentic platform. I configured the AI model, set instructions, uploaded a knowledge base, selected pre-built tools like Google Calendar and Gmail, and chose the WhatsApp trigger in the trigger section, which fires whenever a message arrives on WhatsApp. The platform handled the orchestration, and I had a production-ready agent running in under 60 minutes.&lt;/p&gt;

&lt;h3&gt;
  
  
  Can I build a WhatsApp AI agent in under 60 minutes?
&lt;/h3&gt;

&lt;p&gt;Yes. I built a fully functional one in under 60 minutes on DronaHQ's no-code agentic platform. I configured the WhatsApp trigger, set the AI instructions, connected the knowledge base, and selected the tools, with no backend development required.&lt;/p&gt;

&lt;h3&gt;
  
  
  What's the difference between a WhatsApp chatbot and a WhatsApp AI agent?
&lt;/h3&gt;

&lt;p&gt;A WhatsApp chatbot follows fixed, rule-based paths using keyword matching. The agent I built in DronaHQ understands intent through natural language processing, keeps track of the conversation, and triggers the right tools. It makes decisions instead of following rigid scripts.&lt;/p&gt;

&lt;h3&gt;
  
  
  What tools do I need to build a WhatsApp AI agent in DronaHQ?
&lt;/h3&gt;

&lt;p&gt;I needed a WhatsApp Business account, a knowledge base document, and a few pre-built tools (Google Calendar, Gmail, Slack) selected inside the platform. The tool selection and configuration took me under 60 minutes end to end.&lt;/p&gt;

&lt;h3&gt;
  
  
  Can I use this WhatsApp AI agent for bookings, pricing, and reschedules?
&lt;/h3&gt;

&lt;p&gt;Yes. The agent I built handles bookings, pricing queries, and reschedules on its own by selecting the right tool based on the user's intent. It searches the knowledge base, checks Google Calendar, and processes reschedules, all configured in under 60 minutes.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>agents</category>
    </item>
    <item>
      <title>How to use AI voice agents for debt collection: A practical guide</title>
      <dc:creator>Aharna Haque</dc:creator>
      <pubDate>Fri, 09 Oct 2026 10:17:51 +0000</pubDate>
      <link>https://dev.to/aharna/how-to-use-ai-voice-agents-for-debt-collection-a-practical-guide-2hh4</link>
      <guid>https://dev.to/aharna/how-to-use-ai-voice-agents-for-debt-collection-a-practical-guide-2hh4</guid>
      <description>&lt;p&gt;An AI voice agent for debt collection is software that calls borrowers about overdue balances, holds a real conversation using speech recognition and generative AI, and records what happened, instead of playing a fixed message or waiting for a human to dial. This guide covers where voice agents fit in collections, what they need to get right on compliance, how to set one up, and how to tell whether the calls are working.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why collections is moving to voice AI
&lt;/h2&gt;

&lt;p&gt;Collections is a volume problem with a people problem inside it. A team dials hundreds of accounts, most go to voicemail, and the few that connect are often tense. It's repetitive, hard to staff, and expensive to scale.&lt;/p&gt;

&lt;p&gt;That makes it a natural fit for an &lt;a href="https://www.dronahq.com/set-up-an-outbound-ai-voice-agent/" rel="noopener noreferrer"&gt;outbound voice agent&lt;/a&gt;. The work is structured, the goal of each call is narrow, and the cost of an inconsistent call is high.&lt;/p&gt;

&lt;p&gt;The important part is what the agent is for. It isn't there to replace your collectors. It handles the early-stage, high-volume and after-hours calls, so your human team spends its time on the accounts that need judgment.&lt;/p&gt;

&lt;h2&gt;
  
  
  The example: An early-stage payment reminder
&lt;/h2&gt;

&lt;p&gt;Here's the scenario used throughout this guide. A borrower is seven days past due on an instalment. Nothing has gone to a formal recovery stage yet. An outbound agent calls and has one job: find out whether the borrower knows about the payment, and get a commitment or a reason.&lt;/p&gt;

&lt;p&gt;This is a good first use case because it's low-stakes and structured. The agent doesn't need to settle a dispute or restructure a loan. It needs one of four outcomes: paid, promise to pay, dispute, or escalate to a human.&lt;/p&gt;

&lt;p&gt;That's easy to script, easy to test, and easy to measure.&lt;/p&gt;

&lt;h2&gt;
  
  
  Compliance comes first
&lt;/h2&gt;

&lt;p&gt;In collections, compliance isn't a feature you add later. It decides whether the program can run at all.&lt;/p&gt;

&lt;p&gt;A voice agent can be more consistent than a human team here, because it doesn't have a bad day. It calls inside the allowed window, delivers the required disclosure every time, and logs every word. But it only does that if you set it up to.&lt;/p&gt;

&lt;p&gt;Things to confirm before a single call goes out:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Calling hours.&lt;/strong&gt; In the US, the FDCPA restricts calls outside roughly 8 AM to 9 PM in the borrower's local time. In India, RBI's recovery guidelines are tighter, so check the current rules for your lender type.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Required disclosures.&lt;/strong&gt; Who is calling, on whose behalf, and that the call is about a debt. Put this in the first message, not buried in the middle of the call.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Consent for automated calls.&lt;/strong&gt; In the US, the FCC treats AI-generated voices as artificial voices under the TCPA, which raises the bar on prior consent. Get legal sign-off on this one.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Call frequency.&lt;/strong&gt; Set a cap on attempts per account per week and enforce it in the campaign, not in someone's head.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Recording and retention.&lt;/strong&gt; Know where recordings and transcripts live and who can access them.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Dispute handling.&lt;/strong&gt; If a borrower says they don't owe the debt, the agent should log it and stop pressing.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This isn't legal advice. Run the script and the call flow past your compliance or legal team before launch.&lt;/p&gt;

&lt;h2&gt;
  
  
  Before you start: What you need
&lt;/h2&gt;

&lt;p&gt;Two things need to be ready before you configure anything:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;A phone number&lt;/strong&gt; the agent will call from, connected through your platform or a SIP trunk&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Agent instructions&lt;/strong&gt;: the opening line with the disclosure, the goal of the call, and exactly what the agent does when the borrower disputes, gets upset, or asks for a person&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Everything else builds on these two.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step-by-step setup guide
&lt;/h2&gt;

&lt;p&gt;The steps are platform-agnostic. The specifics use &lt;a href="https://www.dronahq.com/agents/" rel="noopener noreferrer"&gt;DronaHQ's voice agent&lt;/a&gt; as the working example.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 1: Connect a number and create the agent
&lt;/h3&gt;

&lt;p&gt;Connect telephony through a SIP trunk. A Twilio Elastic SIP Trunk works if you already run call infrastructure on Twilio. Once connected, route the number to your agent under Call Configuration → Outbound Settings, then create the agent from the admin console.&lt;/p&gt;

&lt;p&gt;One constraint to plan around: each number is tied to one agent and one live call at a time. If you're working through a large portfolio in a short window, you'll need more than one number, or the campaign simply takes longer.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 2: Write the instructions branch by branch
&lt;/h3&gt;

&lt;p&gt;Set the voice, transcriber and LLM models, then write the first message. Use placeholders. A generic opener sounds like a robocall within two seconds, and in collections that costs you the call.&lt;/p&gt;

&lt;p&gt;Something like:&lt;/p&gt;

&lt;p&gt;"Hi {{borrower_name}}, this is {{company_name}} calling about your {{loan_type}} payment of {{amount_due}}, which was due on {{due_date}}. This call may be recorded. Is this a good time to talk?"&lt;/p&gt;

&lt;p&gt;It names the borrower and the exact payment, and it carries the disclosure up front.&lt;/p&gt;

&lt;p&gt;For the instructions, don't write "handle the borrower's response." Spell out every branch:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Says they'll pay today:&lt;/strong&gt; confirm the amount, confirm the method, end the call&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Asks for more time:&lt;/strong&gt; ask for a specific date, log it as a promise to pay&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Says they can't pay in full:&lt;/strong&gt; offer only the options you've approved, nothing improvised&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Disputes the debt:&lt;/strong&gt; acknowledge it, log it, stop the collection conversation&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Gets angry or asks for a human:&lt;/strong&gt; transfer or schedule a callback immediately&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;An agent that only knows the goal, not the branches, tends to over-explain or loop when the conversation goes off script. In collections, an improvised offer is also a compliance risk.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 3: Connect your tools before you launch
&lt;/h3&gt;

&lt;p&gt;The agent needs somewhere to send what happened. In DronaHQ that's the Tool Builder and &lt;a href="https://www.dronahq.com/integrations/" rel="noopener noreferrer"&gt;Connector Library&lt;/a&gt;, with integrations like Google Sheets, Slack, Notion and Gmail, plus &lt;a href="https://www.dronahq.com/mcp-server/" rel="noopener noreferrer"&gt;MCP&lt;/a&gt; and Composio for anything not natively supported.&lt;/p&gt;

&lt;p&gt;Connect at least one destination before the first campaign. For collections that could be a sheet that logs every promise to pay, or an alert to your collections team when a borrower disputes or asks for a human. If you wire this up later, you spend that gap pulling outcomes out of call logs by hand.&lt;/p&gt;

&lt;p&gt;If you want to send a payment link after the call, do it through a connected tool or webhook, and keep the payment itself in your existing payment system.&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fve20yr6y6cczq5hyxv6a.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fve20yr6y6cczq5hyxv6a.png" alt=" " width="800" height="369"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 4: Run a campaign
&lt;/h3&gt;

&lt;p&gt;With the agent built and tools connected, set up the campaign:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Name it, pick the number to call from, and select the agent&lt;/li&gt;
&lt;li&gt;Upload a CSV of accounts and map the columns to the variables the agent expects, like borrower_name, amount_due and due_date&lt;/li&gt;
&lt;li&gt;Turn on auto-retry for unanswered calls, with a retry count and wait time&lt;/li&gt;
&lt;li&gt;Set the timezone and calling window&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The calling window matters more here than in most outbound use cases. Set it inside your legal hours, in the borrower's timezone, and treat it as a hard limit rather than a preference. Let auto-retry handle the people who miss the first call.&lt;/p&gt;

&lt;p&gt;Also check that the agent is published before you launch. Campaigns only pull published agents and published changes, so a script edit you forgot to publish means the campaign runs on the old version without telling you.&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fi5ucy3ci71r8xzedomo9.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fi5ucy3ci71r8xzedomo9.png" alt=" " width="800" height="369"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 5: Watch the first batch
&lt;/h3&gt;

&lt;p&gt;Open the Campaign Overview early and watch the pick-up rate on the first batch. If it's low, the calling window is usually off or a chunk of numbers in the CSV are bad. It's cheaper to catch that after twenty calls than after two thousand.&lt;/p&gt;

&lt;p&gt;Then listen to a few transcripts. Check the calls marked completed, not just the failed ones, and read specifically for the disclosure, the tone when a borrower pushes back, and whether the agent stayed inside the offers you approved.&lt;/p&gt;

&lt;h2&gt;
  
  
  Post-call analysis: How to measure whether it's working
&lt;/h2&gt;

&lt;p&gt;A transcript alone doesn't tell you whether a collections program is working. You need &lt;a href="https://www.dronahq.com/post-call-analysis-voice/" rel="noopener noreferrer"&gt;structured data from every call&lt;/a&gt;, in a place your team already looks.&lt;/p&gt;

&lt;p&gt;The setup has four parts:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Structured output on the agent.&lt;/strong&gt; Define a schema for the fields that drive a decision: disposition, promise-to-pay date, promised amount, dispute flag, sentiment. It runs as part of the call, so the data is ready when the call ends.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;A post-call webhook.&lt;/strong&gt; The agent fires it once the structured output is ready, so nobody opens a call log to check.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;An automation that catches it.&lt;/strong&gt; Write the fields into a database. A Google Sheet is fine to start, and a proper database makes sense once volume makes the sheet painful to query.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;A dashboard on top.&lt;/strong&gt; Once outcomes land in one place consistently, connect a dashboard so trends show up without exports.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For the payment reminder example, a completed call produces a record like this: disposition: promise_to_pay, promised_date: Friday, dispute: false, sentiment: neutral. That record can log a row in a tracking sheet and, if the borrower asked for a human, alert your team immediately.&lt;/p&gt;

&lt;p&gt;Build this against a hundred calls a day, not after you're running several campaigns.&lt;/p&gt;

&lt;p&gt;Metrics worth tracking from day one:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Connect rate:&lt;/strong&gt; picked-up calls against total dialed&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Disposition mix:&lt;/strong&gt; paid, promise to pay, dispute, no answer, wrong number&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Promise-kept rate:&lt;/strong&gt; how many promises to pay turn into actual payments. This is the number that tells you whether the calls changed behavior.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Dispute and complaint rate:&lt;/strong&gt; the early warning for compliance problems&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Escalation rate:&lt;/strong&gt; how often the agent hands off to a human&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cost per call:&lt;/strong&gt; split across speech-to-text, the model, text-to-speech and structured extraction&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Promise-kept rate is the one most teams skip. A call that ends in a promise looks like a win until nobody pays.&lt;/p&gt;

&lt;h2&gt;
  
  
  Voice agent vs. human team vs. autodialer
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;Human collections team&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;Autodialer / prerecorded IVR&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;AI voice agent&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Reach&lt;/td&gt;
&lt;td&gt;Limited by headcount and shifts&lt;/td&gt;
&lt;td&gt;Every account, one-way message&lt;/td&gt;
&lt;td&gt;Whole portfolio, two-way conversation&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Handling pushback&lt;/td&gt;
&lt;td&gt;Strong, varies by person&lt;/td&gt;
&lt;td&gt;None, dead-ends&lt;/td&gt;
&lt;td&gt;Handles scripted branches, escalates the rest&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Disclosure consistency&lt;/td&gt;
&lt;td&gt;Varies by agent and day&lt;/td&gt;
&lt;td&gt;Scripted, can't adapt&lt;/td&gt;
&lt;td&gt;Same on every call&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;After-hours coverage&lt;/td&gt;
&lt;td&gt;Needs extra staffing&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Yes, inside legal hours&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Data capture&lt;/td&gt;
&lt;td&gt;Free-text notes&lt;/td&gt;
&lt;td&gt;Keypress only&lt;/td&gt;
&lt;td&gt;Structured, per call&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Best for&lt;/td&gt;
&lt;td&gt;Complex and sensitive accounts&lt;/td&gt;
&lt;td&gt;Simple notices&lt;/td&gt;
&lt;td&gt;Early-stage, high-volume, after-hours calls&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The practical difference is that a voice agent gives you coverage and consistency on the volume work, and your humans keep the judgment work.&lt;/p&gt;

&lt;h2&gt;
  
  
  Failure modes to watch for
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Calling outside the legal window:&lt;/strong&gt; a timezone mismatch in the CSV is enough to cause it&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No escalation path:&lt;/strong&gt; a borrower who wants a human and can't reach one is worse than no call at all&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Improvised offers:&lt;/strong&gt; if the agent isn't told what it can offer, it may offer something you can't honor&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Pressing after a dispute:&lt;/strong&gt; a dispute should end the collection conversation and route to a person&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Silent nulls treated as answers:&lt;/strong&gt; a null field means "not mentioned," not "no"&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Over-nested extraction schemas:&lt;/strong&gt; start with three or four fields that drive a decision&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Wrong person on the line:&lt;/strong&gt; the agent shouldn't discuss the debt until it's confirmed who it's speaking to&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No human spot-check loop:&lt;/strong&gt; sample a small percentage of calls on a recurring basis, even once automation is live&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Where humans still matter
&lt;/h2&gt;

&lt;p&gt;Voice AI handles the repetitive first contact well. It handles hardship, grief, anger and complicated disputes less well, and those are the calls where a bad interaction does the most damage.&lt;/p&gt;

&lt;p&gt;So design the handoff on purpose. Decide which signals trigger a transfer, whether that's a dispute, a hardship mention or a request for a person, and make sure a human gets the full context when they pick up. A borrower shouldn't have to repeat themselves.&lt;/p&gt;

&lt;h2&gt;
  
  
  Pre-launch checklist
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Number connected and eligible for outbound use in its region&lt;/li&gt;
&lt;li&gt;Calling hours, disclosures and consent reviewed by compliance or legal&lt;/li&gt;
&lt;li&gt;Agent created, with voice, transcriber and LLM models selected&lt;/li&gt;
&lt;li&gt;Instructions written branch by branch, first message tested with all placeholders&lt;/li&gt;
&lt;li&gt;Escalation and dispute rules configured&lt;/li&gt;
&lt;li&gt;Tools connected, with at least one wired to a real destination&lt;/li&gt;
&lt;li&gt;Contact CSV prepared, columns mapped, and timezones verified&lt;/li&gt;
&lt;li&gt;Auto-retry, attempt cap and calling window configured&lt;/li&gt;
&lt;li&gt;Agent published before the campaign launches&lt;/li&gt;
&lt;li&gt;Structured output schema defined (three to four fields to start)&lt;/li&gt;
&lt;li&gt;Test call reviewed before the full campaign&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Closing
&lt;/h2&gt;

&lt;p&gt;Voice AI in collections works when the boring parts are in order: compliance settled first, instructions written branch by branch, and outcomes captured in a form your team can act on. The model's voice quality is rarely what decides it.&lt;/p&gt;

&lt;p&gt;Start narrow. Pick one early-stage use case, like the seven-day payment reminder, check the first batch closely, and expand only once promise-kept rate and complaint rate both look healthy.&lt;/p&gt;

&lt;h2&gt;
  
  
  Related reading
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.dronahq.com/set-up-an-outbound-ai-voice-agent/" rel="noopener noreferrer"&gt;How to set up an outbound AI voice agent for customer service&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.dronahq.com/post-call-analysis-voice/" rel="noopener noreferrer"&gt;Post-call analysis: How DronaHQ AI turns voice conversations into actionable data&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.dronahq.com/evaluate-right-voice-ai-platform/" rel="noopener noreferrer"&gt;Read this before you choose a voice AI platform&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.dronahq.com/measure-voice-ai-roi/" rel="noopener noreferrer"&gt;Enterprise guide to agentic voice AI: Use cases, metrics, and a practical ROI framework&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.dronahq.com/financial-services/" rel="noopener noreferrer"&gt;DronaHQ for BFSI and fintech&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>agents</category>
      <category>ai</category>
      <category>automation</category>
    </item>
    <item>
      <title>AI Agent Governance: A Practical Guide for Agents That Work in Production</title>
      <dc:creator>Aharna Haque</dc:creator>
      <pubDate>Fri, 09 Oct 2026 07:21:12 +0000</pubDate>
      <link>https://dev.to/aharna/ai-agent-governance-a-practical-guide-for-agents-that-work-in-production-4263</link>
      <guid>https://dev.to/aharna/ai-agent-governance-a-practical-guide-for-agents-that-work-in-production-4263</guid>
      <description>&lt;p&gt;AI agent governance is the set of rules, checks, and controls that decide what an autonomous agent is allowed to do, see, and act on once it's live. In one line: it's how you keep an agent accountable after you've stopped watching it every second.&lt;/p&gt;

&lt;p&gt;TL;DR: If your agent only chats, governance can wait. If it books, refunds, updates records, or touches a real system, governance isn't optional, it's the thing standing between "cool demo" and "expensive incident."&lt;/p&gt;

&lt;p&gt;Here's a real one. In early 2024, Air Canada's support chatbot told a customer he could apply for a bereavement fare after his flight, and gave him a made-up policy to back it up. Air Canada tried to argue the chatbot was "a separate legal entity" responsible for its own words. A Canadian tribunal didn't buy it. The airline had to honor the refund and pay damages. Nobody had reviewed what the bot was allowed to promise.&lt;/p&gt;

&lt;p&gt;That's the whole problem in one paragraph. The agent wasn't malicious. It wasn't even that badly built. Nobody had drawn a line around what it could say and do, and when it crossed that line, there was no system catching it before the customer did.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why This Matters Now
&lt;/h2&gt;

&lt;p&gt;Two years ago, most "AI in production" meant a model scoring leads or flagging fraud. A human looked at the output before anything happened. That's not true anymore.&lt;/p&gt;

&lt;p&gt;Agents today book calendar slots, issue refunds, write and merge code, update CRM records, and call other agents to finish the job. They act first and get reviewed later, if at all. When something breaks, it's not a wrong prediction sitting in a dashboard. It's a wrong action that already happened somewhere.&lt;/p&gt;

&lt;p&gt;That shift is why governance built for predictive ML doesn't hold up here. You can validate a model once and monitor for drift. You can't validate an agent once and call it done, because the same agent can behave differently tomorrow based on a prompt change, a tool update, or a model version bump it didn't even ask for.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Is AI Agent Governance, Really?
&lt;/h2&gt;

&lt;p&gt;Strip away the framework language and governance comes down to three questions you should be able to answer for every agent running in your stack:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;What is this agent allowed to do, and what happens the moment it tries to go past that?&lt;/li&gt;
&lt;li&gt;If it made a bad call six months ago, can you reconstruct why?&lt;/li&gt;
&lt;li&gt;Can someone stop it mid-action, not just after the fact?&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;If you can't answer all three, you don't have agent governance. You have a policy document and a hope.&lt;/p&gt;

&lt;p&gt;This is different from AI governance in general, which covers the whole lifecycle of models and data. Agent governance is the sharper, more operational slice of that: it's specifically about systems that reason, decide, and act without asking permission on every step.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Building Blocks of Agent Governance
&lt;/h2&gt;

&lt;p&gt;Think of this less as a policy binder and more as a set of layers wrapped around every agent you ship.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Guardrails, Enforced at Runtime, Not Written in a Doc
&lt;/h3&gt;

&lt;p&gt;An agent shouldn't be able to do something harmful just because nobody remembered to test that edge case. Guardrails need to be architectural:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Input controls — what data and instructions the agent can even receive&lt;/li&gt;
&lt;li&gt;Process controls — confidence thresholds, required reasoning steps, mandatory checks before it proceeds&lt;/li&gt;
&lt;li&gt;Output controls — what it's blocked from saying, leaking, or promising&lt;/li&gt;
&lt;li&gt;Action controls — hard caps on what it can actually execute (transaction size, scope, rate)&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  2. Identity and Access, Like It's a New Hire With a Badge
&lt;/h3&gt;

&lt;p&gt;Every agent should have its own identity, its own permissions, and its own owner. Not a shared API key three teams forgot about. If an agent touches customer records, it should have exactly the access it needs for that job and nothing left over "just in case."&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Observability That Shows the "Why," Not Just the "What"
&lt;/h3&gt;

&lt;p&gt;Logging that an agent issued a refund isn't enough. You need to see what it considered, which policy applied, how confident it was, and what it would have done differently with slightly different input. This is what turns "the agent messed up" into "the agent messed up because X, and here's the fix."&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Human Checkpoints That Scale With Risk
&lt;/h3&gt;

&lt;p&gt;Not every action needs a human in the loop. A low-stakes FAQ answer doesn't. A refund over a certain amount, or anything touching production data, should. Graduated autonomy, more oversight as the stakes go up, is the practical middle ground between "review everything" (too slow to matter) and "review nothing" (how Air Canada ended up in a tribunal).&lt;/p&gt;

&lt;h3&gt;
  
  
  5. A Kill Switch That Actually Works
&lt;/h3&gt;

&lt;p&gt;When an agent starts behaving oddly, someone needs to be able to pause it, roll it back, or shut it down without a ticket, a deploy, and a prayer. If your only option is "wait for the next release," that's not a control, that's a delay.&lt;/p&gt;

&lt;h3&gt;
  
  
  6. Audit Trails That Don't Need to Be Rebuilt From Memory
&lt;/h3&gt;

&lt;p&gt;When a regulator, a customer, or your own legal team asks "what did the agent do and why," the answer should already exist. Not reconstructed from Slack messages and someone's recollection three weeks later.&lt;/p&gt;

&lt;h2&gt;
  
  
  How Agent Governance Works
&lt;/h2&gt;

&lt;p&gt;text&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;User request
   │
   ▼
Guardrail layer (input / process checks)
   │
   ▼
Agent reasons + selects tool
   │
   ▼
Action layer (scope + limits enforced)
   │
   ▼
Executes → logs decision + context → audit trail
   │
   ▼
Human review triggered if risk threshold crossed
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Traditional AI Governance vs. Agent Governance
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Category&lt;/th&gt;
&lt;th&gt;Traditional Model Governance&lt;/th&gt;
&lt;th&gt;AI Agent Governance&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;What's being governed&lt;/td&gt;
&lt;td&gt;Predictions or scores&lt;/td&gt;
&lt;td&gt;Actions taken on real systems&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;When review happens&lt;/td&gt;
&lt;td&gt;Before deployment, periodically after&lt;/td&gt;
&lt;td&gt;Continuously, sometimes mid-action&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Who acts on the output&lt;/td&gt;
&lt;td&gt;A human, usually&lt;/td&gt;
&lt;td&gt;The agent, often without a human touching it&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Failure looks like&lt;/td&gt;
&lt;td&gt;A wrong number on a dashboard&lt;/td&gt;
&lt;td&gt;A refund issued, a record changed, a message sent&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Monitoring cadence&lt;/td&gt;
&lt;td&gt;Scheduled drift checks&lt;/td&gt;
&lt;td&gt;Real-time, behavior-level&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Accountability&lt;/td&gt;
&lt;td&gt;Usually the data science team&lt;/td&gt;
&lt;td&gt;Spread across product, security, legal, and whoever owns the agent&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Where It Actually Breaks in Production
&lt;/h2&gt;

&lt;p&gt;Governance conversations get abstract fast, so here are patterns that keep showing up:&lt;/p&gt;

&lt;h3&gt;
  
  
  1. The Agent Did Exactly What It Was Told, and That Was the Problem
&lt;/h3&gt;

&lt;p&gt;In 2025, an AI coding agent from Replit deleted a production database during what was supposed to be a code freeze, then fabricated data to hide it happened. It had access it never should have had, and no one had drawn a hard line around "you cannot touch production without a checkpoint."&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Multi-Agent Chains Hide Where Things Went Wrong
&lt;/h3&gt;

&lt;p&gt;When one agent retrieves data, another reasons over it, and a third takes action, a bad outcome can come from any link in that chain. Without visibility into the handoffs, teams end up debugging by guesswork.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Confidence Doesn't Mean Correctness
&lt;/h3&gt;

&lt;p&gt;Agents that sound sure of themselves are the most dangerous kind of wrong. Grounding an agent in approved sources helps, but for anything consequential, that still isn't enough on its own, you need a threshold below which the agent has to stop and ask.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Nobody Owns the Agent Once It's Live
&lt;/h3&gt;

&lt;p&gt;It got built, it got shipped, and then the person who built it moved to a different project. Six months later nobody can say who's responsible when it misbehaves.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Good Governance Actually Buys You
&lt;/h2&gt;

&lt;p&gt;This isn't just risk avoidance. Teams that build governance in early tend to move faster, not slower, for a simple reason: once the first agent has guardrails, identity, and audit trails figured out, every agent after it inherits that infrastructure. Approvals stop being a debate about "is this safe" and start being a checklist.&lt;/p&gt;

&lt;p&gt;For a support, finance, or ops workflow, that translates to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Speed — approvals happen in days because the controls are already proven, not re-argued for every new agent&lt;/li&gt;
&lt;li&gt;Accuracy — confidence thresholds and human checkpoints catch bad outputs before they become bad actions&lt;/li&gt;
&lt;li&gt;Verifiability — when something is questioned, you can show exactly what happened and why, instead of guessing&lt;/li&gt;
&lt;li&gt;Stability — version pinning and rollback mean a model provider's update doesn't silently change your agent's behavior overnight&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This shows up concretely in workflows like procurement approvals, HR screening, legal document review, and customer support, anywhere an agent's decision has a real downstream effect on a person or a contract.&lt;/p&gt;

&lt;h2&gt;
  
  
  What This Means for Enterprises
&lt;/h2&gt;

&lt;p&gt;The teams getting this right aren't the ones with the most autonomous agents. They're the ones who can say, with evidence, exactly what every agent is allowed to do and what happens when it tries to go further. That's a quieter kind of maturity than "we shipped 40 agents," but it's the one that survives an audit.&lt;/p&gt;

&lt;p&gt;The next stretch of this problem is multi-agent and multi-system governance, agents that call other agents, pull from multiple data sources, and make joint decisions no single log line explains. Individual agent guardrails won't be enough there. Governance will need to operate at the level of the whole workflow, not just the single agent, tracking how decisions move between systems and who's accountable when three agents disagree.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where to Start
&lt;/h2&gt;

&lt;p&gt;If you're deploying your first production agent, don't start with a governance framework document. Start with three things: give the agent its own identity, put a hard cap on what it can execute without a human checkpoint, and make sure every action it takes is logged somewhere you can actually query later. Everything else builds on top of that.&lt;/p&gt;

&lt;p&gt;Agents that work in production earn trust the same way people do, by being predictable, accountable, and easy to check on. Governance is just the system that makes sure of it.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>agents</category>
    </item>
    <item>
      <title>A guide to set up outbound AI voice agent for customer service</title>
      <dc:creator>Aharna Haque</dc:creator>
      <pubDate>Thu, 08 Oct 2026 04:06:52 +0000</pubDate>
      <link>https://dev.to/aharna/a-guide-to-set-up-outbound-ai-voice-agent-for-customer-service-32p0</link>
      <guid>https://dev.to/aharna/a-guide-to-set-up-outbound-ai-voice-agent-for-customer-service-32p0</guid>
      <description>&lt;p&gt;An outbound AI voice agent is software that places phone calls on a business's behalf, using speech recognition and generative AI to hold a real conversation instead of playing a fixed script. This guide walks through setting up an outbound AI voice agent end to end, using the AC service follow-up example throughout, and covers how to tell whether the calls are actually working once they're live.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is an outbound AI voice agent?
&lt;/h2&gt;

&lt;p&gt;An outbound AI voice agent places calls instead of waiting for a customer to call in. It's triggered by an event in another system—a CRM update, a rejected service ticket, a scheduling change—and it calls the customer with a defined goal.&lt;/p&gt;

&lt;p&gt;This is different from an inbound agent, which answers calls that come in. It's also different from a traditional IVR or auto-dialer, which plays fixed menus or pre-recorded messages and can't handle an open-ended answer.&lt;/p&gt;

&lt;p&gt;Common enterprise use cases include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Appointment reminders and confirmations&lt;/li&gt;
&lt;li&gt;Billing and payment follow-ups&lt;/li&gt;
&lt;li&gt;Post-service surveys and re-engagement calls&lt;/li&gt;
&lt;li&gt;Lead outreach and qualification&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The AC service example used throughout this guide falls into the third category: a post-service re-engagement call that confirms whether the customer still needs help.&lt;/p&gt;

&lt;h2&gt;
  
  
  The customer service example: A post-service feedback call
&lt;/h2&gt;

&lt;p&gt;Here's the scenario. A field team rejects a customer's air conditioner service request—the part wasn't in stock, or the technician had to reschedule. Instead of the request sitting untouched, an outbound AI voice agent calls the customer directly: is the service still needed, or has it been handled another way?&lt;/p&gt;

&lt;p&gt;This is a good first use case for outbound AI because it's low-stakes, structured, and happens at volume. The agent doesn't need to negotiate a contract or resolve a billing dispute; it needs a yes, a no, or an escalation. That's easy to script, easy to test, and easy to measure.&lt;/p&gt;

&lt;h2&gt;
  
  
  Prerequisites before you start:
&lt;/h2&gt;

&lt;p&gt;Before configuring anything, have two things ready:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;A phone number&lt;/strong&gt; the agent will call from, connected through your platform or a SIP trunk&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Agent instructions&lt;/strong&gt;—the opening line, the goal of the call, and what the agent should do if the customer asks for a human&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Everything else in the setup builds on these two.&lt;/p&gt;

&lt;h1&gt;
  
  
  Step-by-Step Setup Guide
&lt;/h1&gt;

&lt;p&gt;The steps below are platform-agnostic, but the specifics are shown using DronaHQ's voice agent as the working example.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 1: Connect a Phone Number and Create the Agent
&lt;/h2&gt;

&lt;p&gt;Start inside &lt;a href="https://www.dronahq.ai/voice" rel="noopener noreferrer"&gt;DronaHQ's voice agent builder&lt;/a&gt; and connect telephony through a SIP trunk. A Twilio Elastic SIP Trunk works if you already run call infrastructure on Twilio. Once the trunk is connected, the number shows up in the platform's &lt;strong&gt;Phone Numbers&lt;/strong&gt; list, and you route it to your agent under &lt;strong&gt;Call Configuration → Outbound Settings&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;From there, go to the admin console and click &lt;strong&gt;Create Agent&lt;/strong&gt;.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Important:&lt;/strong&gt; Each phone number is tied to one agent and one live call at a time. If you're planning to call a large customer list in a short window, you'll want more than one number, or the campaign will just take longer to work through. Figure out your expected call volume before you commit to a single number.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Step 2: Configure the Agent and Write the Instructions
&lt;/h2&gt;

&lt;p&gt;With the agent created, set up the core pieces:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Voice model&lt;/li&gt;
&lt;li&gt;Transcriber model&lt;/li&gt;
&lt;li&gt;LLM model&lt;/li&gt;
&lt;li&gt;Agent instructions&lt;/li&gt;
&lt;li&gt;First message&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The first message can be static, but for anything customer-facing, use placeholders instead. A generic opener sounds like a robocall the second the customer hears it.&lt;/p&gt;

&lt;p&gt;Something like:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Hi {{customer_name}}, this is {{company_name}} calling about your air conditioner service request. We wanted to check, is the service still needed, or has this been resolved?"&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;works better because it names the customer and the actual request, so the call feels like a real follow-up instead of a mass dial.&lt;/p&gt;

&lt;p&gt;For the instructions, don't just write "handle the customer's response." Spell out each branch explicitly:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;What to say if they say &lt;strong&gt;yes&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;What to say if they say &lt;strong&gt;no&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;What to do the moment they ask for &lt;strong&gt;a person&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Agents that are only told the goal of the call, without the branches, tend to over-explain or loop back on themselves when the conversation goes slightly off script. Writing out the branches ahead of time avoids that.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 3: Add Your Tools
&lt;/h2&gt;

&lt;p&gt;The agent needs access to the systems that hold customer data or receive call outcomes, usually through a webhook or a set of connected tools.&lt;/p&gt;

&lt;p&gt;In DronaHQ, this is the &lt;strong&gt;Tool Builder and Connector Library&lt;/strong&gt;, with pre-built integrations with tools like Google Sheets, Slack, Notion, and Gmail, plus broader access through MCP and Composio for anything not natively supported.&lt;/p&gt;

&lt;p&gt;Connect at least one destination &lt;strong&gt;before&lt;/strong&gt; you launch anything, not after. It's tempting to run a campaign first and wire up Slack or a tracking sheet later, but then you're stuck manually pulling outcomes from the call logs for however long that gap lasts.&lt;/p&gt;

&lt;p&gt;For the AC example, connect a Slack channel or a tracking sheet upfront, so every call outcome lands somewhere your team can act on it immediately.&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fno7wijqqwihfav0uibzj.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fno7wijqqwihfav0uibzj.png" alt=" " width="800" height="369"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 4: Run a Campaign
&lt;/h2&gt;

&lt;p&gt;With the agent built and tools connected, set up a campaign to actually place the calls:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Name the campaign, pick the phone number to call from, and select the agent.&lt;/li&gt;
&lt;li&gt;Upload a CSV of contacts—in this case, the customers whose AC service request was rejected.&lt;/li&gt;
&lt;li&gt;Map CSV columns to the variables your agent expects, like &lt;code&gt;mobile_number&lt;/code&gt; or &lt;code&gt;customer_name&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Turn on auto-retry for unanswered calls, and set retry count and wait time between attempts.&lt;/li&gt;
&lt;li&gt;Set a timezone and a calling window.&lt;/li&gt;
&lt;/ol&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fbhzvk08ndk64hfoutexq.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fbhzvk08ndk64hfoutexq.png" alt=" " width="800" height="369"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;That calling window matters more than it looks. As someone running a customer support team, you'd want the agent calling during hours when people are actually awake and likely to pick up, not at 6 AM or late at night.&lt;/p&gt;

&lt;p&gt;Set the window to something like &lt;strong&gt;9 AM to 7 PM in the customer's timezone&lt;/strong&gt;, and let auto-retry pick up the ones who miss the first call instead of trying to time everything perfectly on the first attempt.&lt;/p&gt;

&lt;p&gt;Also, double-check the agent is &lt;strong&gt;published&lt;/strong&gt; before you launch. Campaigns only pull in published agents and published changes, so if you tested a script tweak and forgot to publish it, the campaign runs on the older version without telling you.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 5: Check the Results
&lt;/h2&gt;

&lt;p&gt;Once the campaign is running, don't just let it finish and check back later. Open the &lt;strong&gt;Campaign Overview&lt;/strong&gt; page early and watch the pick-up rate for the first batch of calls.&lt;/p&gt;

&lt;p&gt;If it's unusually low, that's often a sign the calling window is off, or a chunk of numbers in the CSV are bad. It's cheaper to catch that after twenty calls than after two thousand.&lt;/p&gt;

&lt;p&gt;The overview gives you:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Total calls&lt;/li&gt;
&lt;li&gt;Ended calls&lt;/li&gt;
&lt;li&gt;Pick-up rate&lt;/li&gt;
&lt;li&gt;Voicemail count&lt;/li&gt;
&lt;li&gt;Call-by-call logs&lt;/li&gt;
&lt;li&gt;Recordings&lt;/li&gt;
&lt;li&gt;Transcripts&lt;/li&gt;
&lt;li&gt;End reasons&lt;/li&gt;
&lt;li&gt;Cost per call&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Spot-check a few transcripts on calls marked as completed, not just the failed ones, to confirm the agent is actually closing conversations the way you intended, not just technically finishing them.&lt;/p&gt;

&lt;p&gt;For the AC example, this is where you'd see how many customers:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Confirmed the service was still needed&lt;/li&gt;
&lt;li&gt;Said it was resolved&lt;/li&gt;
&lt;li&gt;Didn't pick up&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;—and you can do that without listening to a single call yourself.&lt;/p&gt;

&lt;h1&gt;
  
  
  Post-Call Analysis: How to Measure Success
&lt;/h1&gt;

&lt;p&gt;Setting up the agent and running the campaign is half the work. The other half is what happens after each call ends, and this is where most outbound AI evaluations fall short because a transcript by itself doesn't tell you whether the program is working.&lt;/p&gt;

&lt;p&gt;Post-call analysis is best understood as four layers, each doing a different job:&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Transcripts
&lt;/h3&gt;

&lt;p&gt;A turn-by-turn record of what was said, plus a technical log—connection time, agent decisions, system events—used to debug when something goes wrong.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Tool Integration
&lt;/h3&gt;

&lt;p&gt;Routing the outcome of a call into the systems your team already uses, like a Slack alert or a Google Sheets row, without anyone copying data by hand.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Structured Extraction
&lt;/h3&gt;

&lt;p&gt;Pulling defined fields out of the conversation, like disposition, reject reason, and sentiment, using a fixed schema instead of free-text notes.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Analysis
&lt;/h3&gt;

&lt;p&gt;A dashboard built on top of that structured data, so trends show up without exporting anything.&lt;/p&gt;

&lt;p&gt;Applied to the AC service example, every completed call produces a structured record such as:&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="err"&gt;disposition:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;service_still_needed&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="err"&gt;reject_reason:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;part_unavailable&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="err"&gt;sentiment:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;neutral&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That record can trigger a Slack alert to the field-service team or log a row in a tracking sheet automatically.&lt;/p&gt;

&lt;h2&gt;
  
  
  How to Wire It Up
&lt;/h2&gt;

&lt;p&gt;Here's how to actually wire that up instead of leaving raw transcripts sitting in the call log:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Define structured output on the agent.&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Set up a schema for the fields you actually want to extract: disposition, reject reason, sentiment, or whatever drives a decision downstream. This runs as part of the call, not as a separate step, so the data is ready the moment the call ends.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Set up a post-call webhook.&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Have the agent fire a webhook once the call ends and the structured output is ready, instead of someone opening the call log to check. This is what turns "the data exists somewhere in the platform" into "the data shows up where you need it."&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Connect an automation to catch it.&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Point that webhook at an automation that runs on receipt, and have it write the structured fields into a database. A Google Sheet works fine to start—it's low effort and everyone on the team already knows how to open it. Move to a proper database once volume makes a spreadsheet painful to query.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Spin up a dashboard on top of that data.&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Once outcomes are landing in one place consistently, connect a dashboard to it. This is where connect rate, disposition mix, and reject reasons over time actually become visible, instead of numbers you'd have to calculate by hand from the call log each week.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Do this before you scale up call volume, not after.&lt;/strong&gt; It's a lot easier to build the pipeline against a hundred calls a day than to retrofit it once you're running multiple campaigns and nobody's tracking outcomes consistently.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Metrics Worth Tracking From Day One
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Connect rate:&lt;/strong&gt; Picked-up calls against total calls dialed&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Disposition mix:&lt;/strong&gt; Service still needed, resolved elsewhere, no answer, wrong number&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Reject reasons:&lt;/strong&gt; Grouped and counted to spot recurring operational problems&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Sentiment trend:&lt;/strong&gt; Flagging calls that need a human follow-up&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cost per call:&lt;/strong&gt; Broken down by speech-to-text, the core model turn, text-to-speech, and structured-output extraction, since extraction runs as its own line item and adds up at volume&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Manual QA vs. a Structured Post-Call Stack
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Dimension&lt;/th&gt;
&lt;th&gt;Manual Call Review&lt;/th&gt;
&lt;th&gt;Structured Post-Call Analysis&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Transcript availability&lt;/td&gt;
&lt;td&gt;Often audio-only, transcribed on request&lt;/td&gt;
&lt;td&gt;Every call, turn by turn&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Time to insight&lt;/td&gt;
&lt;td&gt;Hours to days&lt;/td&gt;
&lt;td&gt;Seconds after the call ends&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Coverage&lt;/td&gt;
&lt;td&gt;A sample of calls&lt;/td&gt;
&lt;td&gt;100% of call volume&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Routing to other tools&lt;/td&gt;
&lt;td&gt;Manual copy-paste&lt;/td&gt;
&lt;td&gt;Automated via connected tools&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Data format&lt;/td&gt;
&lt;td&gt;Free-text notes&lt;/td&gt;
&lt;td&gt;Structured, consistent fields&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Dashboard&lt;/td&gt;
&lt;td&gt;Rebuilt from exports each time&lt;/td&gt;
&lt;td&gt;Built once, reused ongoing&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fbadvqwahjk1wd1cntle2.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fbadvqwahjk1wd1cntle2.png" alt=" " width="800" height="369"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The practical difference is &lt;strong&gt;coverage&lt;/strong&gt;. Reviewing a sample of calls was always a compromise. A structured pipeline reviews all of them, which matters most in workflows where a missed rejection reason has a real operational cost.&lt;/p&gt;

&lt;h1&gt;
  
  
  Outbound AI Voice Agent vs. Manual Calling vs. Traditional IVR
&lt;/h1&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Dimension&lt;/th&gt;
&lt;th&gt;Manual Call List&lt;/th&gt;
&lt;th&gt;Traditional IVR / Auto-dialer&lt;/th&gt;
&lt;th&gt;Outbound AI Voice Agent&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Setup effort&lt;/td&gt;
&lt;td&gt;Low, but ongoing staffing cost&lt;/td&gt;
&lt;td&gt;Moderate, fixed menu logic&lt;/td&gt;
&lt;td&gt;Moderate, instructions + integration setup&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Personalization&lt;/td&gt;
&lt;td&gt;High, but inconsistent&lt;/td&gt;
&lt;td&gt;None, fixed prompts only&lt;/td&gt;
&lt;td&gt;High, placeholder-driven and dynamic&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Cost at scale&lt;/td&gt;
&lt;td&gt;Scales with headcount&lt;/td&gt;
&lt;td&gt;Cheap per call, low value&lt;/td&gt;
&lt;td&gt;Scales with usage, not headcount&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Escalation handling&lt;/td&gt;
&lt;td&gt;Native, it's a human&lt;/td&gt;
&lt;td&gt;Poor, dead-ends often&lt;/td&gt;
&lt;td&gt;Configurable transfer rules&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Data capture&lt;/td&gt;
&lt;td&gt;Manual notes, inconsistent&lt;/td&gt;
&lt;td&gt;Minimal, keypress-based&lt;/td&gt;
&lt;td&gt;Structured, per-call, automated&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h1&gt;
  
  
  Failure Modes to Watch For
&lt;/h1&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Missing mapped fields at campaign setup:&lt;/strong&gt; If a CSV column isn't mapped to a variable the agent expects, the call breaks or sounds off.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No escalation path configured:&lt;/strong&gt; A customer who wants a human hits a dead end, which is worse than not calling at all.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Over-nested extraction schemas:&lt;/strong&gt; Asking for too many structured fields per call increases the chance of partial or malformed output. Start with three or four fields that actually drive a decision.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Silent nulls treated as answers:&lt;/strong&gt; A null field means "not mentioned," not "no." Dashboards that conflate the two will misreport outcomes.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Ineligible numbers used for outbound:&lt;/strong&gt; Some countries restrict mobile numbers for automated outreach. Check regional rules before adding a number.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No human spot-check loop:&lt;/strong&gt; Even with automation live, sample a small percentage of calls for manual review on a recurring basis.&lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;
  
  
  What This Means for Enterprises
&lt;/h1&gt;

&lt;p&gt;Voice AI is moving from a channel that talks to one interface into a larger agentic workflow. The call itself is rarely where the value shows up; it's what happens right after: a record updated, a team alerted, a request closed out, without anyone touching a spreadsheet.&lt;/p&gt;

&lt;p&gt;That shift also changes what's worth measuring. Instead of aggregate stats like average handle time, teams get semantic data:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Why customers say no&lt;/li&gt;
&lt;li&gt;Which reject reasons keep recurring&lt;/li&gt;
&lt;li&gt;Where sentiment turns negative&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The next step past this is &lt;strong&gt;agentic follow-through&lt;/strong&gt;, where a structured call outcome doesn't just populate a dashboard—it triggers the next action automatically, whether that's a re-dispatch, a refund check, or a CRM update.&lt;/p&gt;

&lt;h1&gt;
  
  
  Pre-Launch Checklist
&lt;/h1&gt;

&lt;ul&gt;
&lt;li&gt;[ ]Phone number connected and eligible for outbound use in its region&lt;/li&gt;
&lt;li&gt;[ ]Agent created, with voice, transcriber, and LLM models selected&lt;/li&gt;
&lt;li&gt;[ ]Agent instructions written and first message tested, including any placeholders&lt;/li&gt;
&lt;li&gt;[ ]Escalation rules and voicemail handling configured&lt;/li&gt;
&lt;li&gt;[ ]Tools connected, with at least one wired to a real destination (Slack, Sheets, or similar)&lt;/li&gt;
&lt;li&gt;[ ]Contact CSV prepared and columns mapped to agent variables&lt;/li&gt;
&lt;li&gt;[ ]Auto-retry and calling window configured&lt;/li&gt;
&lt;li&gt;[ ]Agent published before the campaign is launched&lt;/li&gt;
&lt;li&gt;[ ]Structured output schema defined (three to four fields to start)&lt;/li&gt;
&lt;li&gt;[ ]Test call reviewed before running the full campaign&lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;
  
  
  Closing
&lt;/h1&gt;

&lt;p&gt;Setting up an outbound AI voice agent isn't complicated once the pieces are in order: a number, agent instructions, a few tools, and a campaign to run it against.&lt;/p&gt;

&lt;p&gt;What separates a working program from a stalled one is usually what happens &lt;strong&gt;after the calls&lt;/strong&gt;—whether the outcomes are structured enough to act on.&lt;/p&gt;

&lt;p&gt;Start narrow, with one use case like the AC service follow-up, check the results, then expand.&lt;/p&gt;

&lt;p&gt;If you're building this out further, the next useful read is &lt;a href="https://www.dronahq.com/measure-voice-ai-roi/" rel="noopener noreferrer"&gt;how to measure ROI on voice AI&lt;/a&gt; programs once they're past the pilot stage. Voice agents will keep getting better at holding a conversation; the bigger gap, for most enterprises, is still what happens in the seconds after the call ends.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>voiceagent</category>
      <category>agents</category>
    </item>
    <item>
      <title>Build your first AI agent</title>
      <dc:creator>Aharna Haque</dc:creator>
      <pubDate>Thu, 27 Nov 2025 08:05:27 +0000</pubDate>
      <link>https://dev.to/aharna/build-your-first-ai-agent-146f</link>
      <guid>https://dev.to/aharna/build-your-first-ai-agent-146f</guid>
      <description>&lt;p&gt;Over the past year, the conversation around AI inside enterprises has shifted. Teams are no longer asking whether AI can help with individual tasks—they're asking how AI can &lt;strong&gt;act on their behalf&lt;/strong&gt;, move work forward, and make decisions without constant supervision. This is where &lt;em&gt;agentic AI&lt;/em&gt; comes in.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Agentic AI&lt;/strong&gt; refers to systems that can observe what's happening, reason about the situation, take action, and learn from the outcome. Instead of waiting for a prompt, these agents proactively handle multi-step, often messy workflows—checking data, following policy, coordinating across systems, and asking for approval only when needed. It's a clear step beyond traditional generative AI, which is powerful but fundamentally reactive.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why you should care?
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;For developers, this is your moment.&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;While enterprises care about reducing delays and improving consistency, you have an opportunity to be at the forefront of this shift. Agentic AI lets you &lt;strong&gt;automate the tedious work&lt;/strong&gt; that's been eating away at your time—data validation, cross-system orchestration, repetitive API calls, status updates—all the glue code that keeps you from building what actually matters.&lt;/p&gt;

&lt;p&gt;But here's the bigger picture: in the current AI agent hype cycle, &lt;strong&gt;you can build something genuinely impressive&lt;/strong&gt;. This isn't just another chatbot or autocomplete feature. You can create systems that autonomously handle complex workflows, make intelligent decisions, and deliver real business impact. The kind of work that makes stakeholders stop and take notice.&lt;/p&gt;

&lt;p&gt;This is your chance to rise to the pressure, deliver that "wow factor" at work, and position yourself as someone who doesn't just follow trends—but implements solutions that transform how your organization operates.&lt;/p&gt;

&lt;h2&gt;
  
  
  Build and ship your first AI agent
&lt;/h2&gt;

&lt;p&gt;We've created a &lt;strong&gt;hands-on workshop on AI agents&lt;/strong&gt; designed for the enterprise, and you can &lt;a href="https://www.dronahq.com/ai-workshop/?utm_source=AH" rel="noopener noreferrer"&gt;register to join us.&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The focus is practical: how to apply agentic AI to your day-to-day systems in a way that's controlled, reliable, and immediately useful. &lt;/p&gt;

&lt;p&gt;You'll walk away knowing how agentic AI works, where it creates value, and how to deploy it responsibly inside your organization.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;See you there!&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>agents</category>
      <category>automation</category>
    </item>
    <item>
      <title>Build an app with Veda AI + DronaHQ</title>
      <dc:creator>Aharna Haque</dc:creator>
      <pubDate>Thu, 14 Aug 2025 04:55:29 +0000</pubDate>
      <link>https://dev.to/aharna/build-an-app-with-veda-ai-dronahq-2164</link>
      <guid>https://dev.to/aharna/build-an-app-with-veda-ai-dronahq-2164</guid>
      <description>&lt;p&gt;Hey folks! 👋&lt;/p&gt;

&lt;p&gt;Last week, I ran a live workshop showing how you can build a fully functional HRMS onboarding app—backed by MySQL—using Veda AI inside DronaHQ. And no, we didn’t spend hours manually designing screens or writing SQL queries. We used screenshots and plain English prompts to build 80% of the app in minutes. 🙌&lt;/p&gt;

&lt;p&gt;Here’s a step-by-step guide if you want to build along!&lt;br&gt;&lt;br&gt;
P.S.- I have attached the video of the live workshop (in case you want to check that out)&lt;/p&gt;
&lt;h2&gt;
  
  
  What you’ll learn
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;How to connect your own database
&lt;/li&gt;
&lt;li&gt;Generate UI from a screenshot (yep, seriously)
&lt;/li&gt;
&lt;li&gt;Bind data with a single prompt
&lt;/li&gt;
&lt;li&gt;Autogenerate forms from existing DB tables
&lt;/li&gt;
&lt;li&gt;Add actionflows using plain English
&lt;/li&gt;
&lt;li&gt;Master server-side pagination
&lt;/li&gt;
&lt;li&gt;🎁 Bonus: Apply a theme with one sentence
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;
  
  
  Before you start
&lt;/h2&gt;

&lt;p&gt;Make sure you’ve got:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;✅ Signed up on DronaHQ
&lt;/li&gt;
&lt;li&gt;✅ Access to DronaHQ Studio
&lt;/li&gt;
&lt;li&gt;✅ Drive link for images
&lt;/li&gt;
&lt;li&gt;✅ Create a MySQL Database with an employees table. You can use the SETUP doc for data queries, or watch the workshop video for a step-by-step walkthrough on how to add a Connector.
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Goal&lt;/strong&gt;: build an employee onboarding CRUD app&lt;/p&gt;
&lt;h2&gt;
  
  
  Let’s jump in!
&lt;/h2&gt;
&lt;h3&gt;
  
  
  Step 1: Create a new app
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Head to DronaHQ App Builder
&lt;/li&gt;
&lt;li&gt;Create a new App in the builder.
&lt;/li&gt;
&lt;li&gt;Find Veda AI in the left sidebar
&lt;/li&gt;
&lt;li&gt;Click to open it. A chat section will open on the left side.
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  Step 2: Generate UI from screenshot
&lt;/h3&gt;

&lt;p&gt;For this apllication we are going to let Veda AI do the heavy lifting for us. You can upload screenshots, Figma exports, or even hand-drawn wireframes to generate upto 80% of the UI in seconds.&lt;/p&gt;

&lt;p&gt;📂 Use this sample image from the provided drive link.&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%2Fuhqkuk0zkj0zpvk7l7r9.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%2Fuhqkuk0zkj0zpvk7l7r9.png" alt=" " width="800" height="451"&gt;&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;Design files to UI with Veda AI&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Your layout is ready. No drag and drop. No hustle.&lt;/p&gt;
&lt;h3&gt;
  
  
  Step 3: Bind data to a table
&lt;/h3&gt;

&lt;p&gt;Goal here is to display the employee data in the table. To do that hover over your Table control, click on Veda AI Assist, and say:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;"Bind employee data from @&amp;lt;DBname&amp;gt; &amp;lt;tablename&amp;gt;"&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;You can either use the query it suggests (dont forget to select the right database and the table) or navigate to Data query section → New → Connect Library → Select Database and paste this query:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="k"&gt;FROM&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;tablename&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Pro tip: Veda AI understands your schema. You can chat with it about your DB!&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 4: Autogenerate form
&lt;/h3&gt;

&lt;p&gt;Next, we would like to insert new employee information to our existing database table. DronaHQ provides options to autogenerate forms for your table in just a few clicks.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Autogenerate Form&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Navigate to &lt;code&gt;Screens → Click on "+" → Select "Tray"&lt;/code&gt;. A new tray would be created. We will not be using the templates here, instead we will select Autogenerate Forms option on the tray.&lt;/li&gt;
&lt;li&gt;Choose your &lt;code&gt;connector → table → Add Insert on click of submit → Generate Form
&lt;/code&gt;
&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%2Fxtgfpnddztjp2uh080c9.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%2Fxtgfpnddztjp2uh080c9.png" alt=" " width="800" height="453"&gt;&lt;/a&gt;&lt;br&gt;
And bam! You get a fully wired CRUD form—ready to insert new employees into your DB.&lt;/p&gt;
&lt;h3&gt;
  
  
  Step 5: Add server-side pagination (for big data)
&lt;/h3&gt;

&lt;p&gt;We want smooth performance when your data grows. Server-side pagination in DronaHQ lets you filter and load data directly from the backend.&lt;/p&gt;

&lt;p&gt;Go to:&lt;br&gt;
&lt;code&gt;Data Queries → New → Connect Library&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Pick your MySQL DB and run this query:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="n"&gt;employee_id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;email&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;phone&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;department&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;designation&lt;/span&gt;  
&lt;span class="k"&gt;FROM&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;tablename&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;  
&lt;span class="k"&gt;WHERE&lt;/span&gt; &lt;span class="p"&gt;{{&lt;/span&gt;&lt;span class="n"&gt;tablegrid&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;PROPERTIES&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;FILTERQUERY&lt;/span&gt;&lt;span class="p"&gt;}}&lt;/span&gt;  
&lt;span class="k"&gt;LIMIT&lt;/span&gt; &lt;span class="p"&gt;{{&lt;/span&gt;&lt;span class="n"&gt;tablegrid&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;PROPERTIES&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="k"&gt;LIMIT&lt;/span&gt;&lt;span class="p"&gt;}}&lt;/span&gt;  
&lt;span class="k"&gt;OFFSET&lt;/span&gt; &lt;span class="p"&gt;{{&lt;/span&gt;&lt;span class="n"&gt;tablegrid&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;PROPERTIES&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="k"&gt;OFFSET&lt;/span&gt;&lt;span class="p"&gt;}};&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;✅ Important:&lt;br&gt;
Turn ON “Server-side pagination” from the Table’s Properties Toolbar.&lt;/p&gt;
&lt;h3&gt;
  
  
  Step 6: Show total employees count
&lt;/h3&gt;

&lt;p&gt;To display a count on top of your dashboard and add data query:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="k"&gt;COUNT&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;total&lt;/span&gt; &lt;span class="k"&gt;FROM&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;tablename&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Bind this to a Stats Card or Text Label control, and you’ve got live metrics.&lt;/p&gt;

&lt;h3&gt;
  
  
  Bonus: Apply custom UI theme in seconds
&lt;/h3&gt;

&lt;p&gt;DronaHQ offers quick theme configuration across your app, easily managed through the console.&lt;br&gt;
Just navigate to top-right to &lt;code&gt;Setting icon → Themes → Choose your themes&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Incase, you want to edit the themes configuration, head over to your &lt;code&gt;Admin console → Account Settings → Themes Configuration&lt;/code&gt;&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%2F6buwzdlzfliacugxsjt5.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%2F6buwzdlzfliacugxsjt5.png" alt=" " width="800" height="297"&gt;&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;Set your themes configuration&lt;/strong&gt;&lt;br&gt;
Fonts, spacing, and colors—done. No manual tweaking needed.&lt;/p&gt;

&lt;h2&gt;
  
  
  Congratulations! Your application is ready
&lt;/h2&gt;

&lt;p&gt;Your application should now look like this. You can continue building by adding other live metrics and more features.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Your application is ready!&lt;/strong&gt;&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%2F2hsrvmjd6l2myng9lm65.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%2F2hsrvmjd6l2myng9lm65.png" alt=" " width="800" height="513"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Veda AI + DronaHQ is a game changer
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;80% of your app is ready in minutes&lt;/li&gt;
&lt;li&gt;No code lock-in — generated UI maps to editable controls&lt;/li&gt;
&lt;li&gt;Conversational UI &amp;amp; logic building — you prompt, it builds&lt;/li&gt;
&lt;li&gt;Enterprise-ready — RBAC, SOC2, audit logs, theming guardrails&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Final thoughts
&lt;/h2&gt;

&lt;p&gt;It was awesome watching attendees go from a single screenshot to a production-grade UI—no SQL wrangling, no painful UI design.&lt;/p&gt;

&lt;p&gt;Just prompts, fast feedback, and real results.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Try Veda AI today!&lt;/em&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>UX Web Components: 101 for Frontend Developers &amp; Designers</title>
      <dc:creator>Aharna Haque</dc:creator>
      <pubDate>Thu, 03 Jul 2025 17:52:48 +0000</pubDate>
      <link>https://dev.to/aharna/ux-web-components-101-for-frontend-developers-designers-532d</link>
      <guid>https://dev.to/aharna/ux-web-components-101-for-frontend-developers-designers-532d</guid>
      <description>&lt;h6&gt;
  
  
  🚩Thinking about diving into frontend dev or design? You didn’t land here by mistake — this is your &lt;strong&gt;SIGN.&lt;/strong&gt;
&lt;/h6&gt;

&lt;p&gt;Here's what you'll be learning:&lt;/p&gt;

&lt;h3&gt;
  
  
  Spending hours over making your website responsive and achieve uniformity?
&lt;/h3&gt;

&lt;p&gt;&lt;em&gt;You are not alone :)&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;To achieve web uniformity and responsiveness across different devices, browsers, accessibility, performance, and async states- complexities in the frontend have only risen leading to building 10s and 100s of UI. &lt;em&gt;Relatable?&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;This problem everyone can relate to while building anything from a simple portfolio website → enterprise level website.&lt;/p&gt;

&lt;p&gt;Amidst all that, think what inconsistent styling, poor accessibility, fragile API, unpredictable performance, A shadow-DOM button that ignores theme fonts, a component lacking keyboard focus—bulk UI debt can do to your impact.&lt;/p&gt;

&lt;p&gt;As frontends scale, even with component-driven tools like React, Vue, or Angular, you often end up with hundreds of components and thousands of variations—adding complexity rather than eliminating it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Web Components: Your Solution🧪
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;h6&gt;
  
  
  &lt;em&gt;"Web Components" is an umbrella term that refers to a collection of web standards focused on enabling the creation of custom HTML elements.    ~ Microsoft&lt;/em&gt;
&lt;/h6&gt;
&lt;/blockquote&gt;

&lt;p&gt;Web Components can be a savior in these scenarios which also roots for your long-term consistency and performance. &lt;/p&gt;

&lt;p&gt;Web Components in UX are Custom Elements + Shadow DOM that provide encapsulation, reusability, and a clean API. Three main elements in web components-&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Custom Elements:&lt;/strong&gt; JavaScript APIs that let you define your own HTML tags and behaviors for use in your UI.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Shadow DOM:&lt;/strong&gt; A JavaScript API that attaches a private, encapsulated DOM subtree to an element, allowing isolated scripting and styling without affecting the rest of the document.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;HTML Templates:&lt;/strong&gt; The  and  elements provide reusable chunks of markup that remain hidden until they’re instantiated, often inside custom elements.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Heard of these Companies? Yes, they use web components too😉
&lt;/h2&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%2Fg2nairfiab4lhkmcq88p.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%2Fg2nairfiab4lhkmcq88p.png" alt="Image description" width="800" height="434"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;You can check out this video by &lt;a href="https://www.youtube.com/live/67bSCEEdaH8?feature=shared" rel="noopener noreferrer"&gt;Cassondra Roberts, Staff Design Engineer, Adobe for Shadow DOM&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  Major Web Components Gains:📈
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Highly customizable with custom elements and HTML templates.&lt;/li&gt;
&lt;li&gt;Deploy them across mobile, desktop, web devices.&lt;/li&gt;
&lt;li&gt;High Framework-agonistic: use Web Components with any of these frameworks like React, Angular, Vue.&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Web Components also has some Trade‑Offs:📉
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Web Components' reliance on browser-specific APIs and Shadow DOM complicates their server-side rendering, making cross-framework SSR integration challenging.&lt;/li&gt;
&lt;li&gt;Encapsulation via Shadow DOM can hinder proper ARIA attribute application and focus management, necessitating meticulous planning for accessibility.&lt;/li&gt;
&lt;li&gt;Web Components may introduce lock-in issues with meta-frameworks, bundlers, and testing tools, and may not seamlessly integrate with existing frameworks like React or Vue&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Design System == Your Blueprint 🌐
&lt;/h2&gt;

&lt;p&gt;&lt;em&gt;Think of it as a blueprint that helps to keep the product look and feel uniform and consistent.&lt;/em&gt; &lt;br&gt;
It is a central library of components, style guides, accessibility guidelines—serving as a single source of truth. It streamlines workflow and accelerates development process with design tokens. &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Quick FAQ:&lt;/strong&gt; Design tokens are small, reusable design decisions that make up a design system's visual style.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Here is &lt;a href="https://www.figma.com/blog/design-systems-102-how-to-build-your-design-system/" rel="noopener noreferrer"&gt;a guide by Figma on building Design Systems&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  Your &lt;em&gt;mantra&lt;/em&gt; if you're starting out
&lt;/h4&gt;

&lt;h6&gt;
  
  
  Wireframe Components → build template + Shadow DOM prototype → test
&lt;/h6&gt;

&lt;h2&gt;
  
  
  Enter Storybook: Design System Catalyst
&lt;/h2&gt;

&lt;p&gt;Recently I came across &lt;a href="https://storybook.js.org" rel="noopener noreferrer"&gt;Storybook&lt;/a&gt; is an open-source UI component workshop—a development environment where you build, test, showcase, and document your web components in isolation, away from the complexity of your full application &lt;/p&gt;

&lt;p&gt;Each component in Storybook is accompanied by "stories"—interactive examples that showcase different states and configurations. These stories serve as both documentation and test cases. &lt;/p&gt;

&lt;p&gt;In essence, Storybook transforms your UI components into self-contained units that are easier to develop, test, and maintain, all while fostering better collaboration and communication within your team. &lt;br&gt;
&lt;a href="https://storybook.js.org/docs" rel="noopener noreferrer"&gt;Read more about Storybook and how to get started&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  UX Maturity Journey for Different Stage Enterprises:
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Immature Stage:
&lt;/h3&gt;

&lt;h6&gt;
  
  
  Team Setup: No UX, solo dev/design
&lt;/h6&gt;

&lt;p&gt;&lt;strong&gt;What it's like:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;UX isn’t planned—features jump straight to code.&lt;/li&gt;
&lt;li&gt;You're coding blind—no wireframes, A/B tests, or user research.&lt;/li&gt;
&lt;li&gt;No user feedback or research; decisions are based on guesses&lt;/li&gt;
&lt;li&gt;You patch UI issues reactively when bugs or complaints emerge.&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;&lt;em&gt;Tip:&lt;/em&gt;&lt;/strong&gt; If you’re here, you could practice these to bring in clarity&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;Easy first steps:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Start by asking: &lt;em&gt;Who is this for? What’s the problem?&lt;/em&gt;
&lt;/li&gt;
&lt;li&gt;Do quick guerrilla tests—grab 3–5 users to watch them try a flow &lt;/li&gt;
&lt;li&gt;Install a basic analytics tool (Hotjar/Clarity) to see click patterns.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Emergent Stage:
&lt;/h3&gt;

&lt;h6&gt;
  
  
  Team Setup: UX advocate + dev + product (less sync)
&lt;/h6&gt;

&lt;p&gt;&lt;strong&gt;What it's like:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;UX flows feel baked into sprint planning.&lt;/li&gt;
&lt;li&gt;There's a basic design system and shared components&lt;/li&gt;
&lt;li&gt;Build wireframes → prototypes → test &amp;amp; iterate.&lt;/li&gt;
&lt;li&gt;Use storybook/design tokens for consistency.&lt;/li&gt;
&lt;li&gt;Use simple UX metrics: onboarding completion, task time.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Matured Stage:
&lt;/h3&gt;

&lt;h6&gt;
  
  
  Team Setup: UX cross teams + dev + product in sync
&lt;/h6&gt;

&lt;p&gt;&lt;strong&gt;What it's like:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;UX drives strategy—not just features&lt;/li&gt;
&lt;li&gt;Design system is robust; UX team involved early.&lt;/li&gt;
&lt;li&gt;You’re shipping experiences users love, efficiently and iteratively.&lt;/li&gt;
&lt;li&gt;Metrics like NPS, task success are part of your dashboards.&lt;/li&gt;
&lt;li&gt;Code is maintainable, with reusable components and animations that reinforce UX.&lt;/li&gt;
&lt;li&gt;Continuous discovery—user feedback feeds product roadmap.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Best Practices CheckList: ✔️
&lt;/h2&gt;

&lt;p&gt;☑️ &lt;strong&gt;Define target audience.&lt;/strong&gt; Ask: Who’s using this component? What problem does it solve?&lt;br&gt;
☑️ Start small by &lt;strong&gt;designing mockups for your custom elements or basic usability tests&lt;/strong&gt;(3-5 folks clicking through)&lt;br&gt;
☑️ Normalize UX in your sprint. &lt;strong&gt;Add UX checklist&lt;/strong&gt; before dev.&lt;br&gt;
☑️ Use shared UI code.&lt;strong&gt;This is where you start building your web components.&lt;/strong&gt;&lt;br&gt;
☑️ &lt;strong&gt;Measure impact.&lt;/strong&gt; Track signup flow time, onboarding drop-offs, NPS scores, onboarding completion rate, satisfaction scores. This will help you to zero in on the areas where users drop-off.&lt;br&gt;
☑️ &lt;strong&gt;Share wins.&lt;/strong&gt; Show how fixing one UX bug improved conversions—turn dev effort into product impact.&lt;/p&gt;

&lt;h2&gt;
  
  
  Other Resources You Can Check Out:
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://shoelace.style/" rel="noopener noreferrer"&gt;Shoelace&lt;/a&gt; is a gold standard of web component libraries. You can also check out &lt;a href="https://shoelace.style/resources/contributing?id=best-practices" rel="noopener noreferrer"&gt;best practices at Shoelace&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://opensource.adobe.com/spectrum-web-components/" rel="noopener noreferrer"&gt;Spectrum Web ComponentsAdobe’s Design System&lt;/a&gt;, web component flavored.&lt;/li&gt;
&lt;li&gt;Another great &lt;a href="https://web.dev/articles/custom-elements-best-practices" rel="noopener noreferrer"&gt;general list of best practices.&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;em&gt;Special thanks to &lt;a class="mentioned-user" href="https://dev.to/debajit13"&gt;@debajit13&lt;/a&gt; for feedback on a draft of this blog post.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>frontend</category>
      <category>webcomponents</category>
      <category>ux</category>
      <category>webdev</category>
    </item>
    <item>
      <title>[Boost]</title>
      <dc:creator>Aharna Haque</dc:creator>
      <pubDate>Tue, 17 Jun 2025 12:39:51 +0000</pubDate>
      <link>https://dev.to/aharna/-3k75</link>
      <guid>https://dev.to/aharna/-3k75</guid>
      <description>&lt;div class="ltag__link"&gt;
  &lt;a href="/aharna" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__pic"&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%2Fuser%2Fprofile_image%2F942290%2F27e6805e-ab37-4e86-b30e-2ef40440b107.png" alt="aharna"&gt;
    &lt;/div&gt;
  &lt;/a&gt;
  &lt;a href="https://dev.to/aharna/ultimate-guide-to-admin-roles-access-2025-437m" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__content"&gt;
      &lt;h2&gt;Ultimate Guide to Admin Roles &amp;amp; Access 2025&lt;/h2&gt;
      &lt;h3&gt;Aharna Haque ・ Jun 17&lt;/h3&gt;
      &lt;div class="ltag__link__taglist"&gt;
        &lt;span class="ltag__link__tag"&gt;#webdev&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#frontend&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#tooling&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#community&lt;/span&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/a&gt;
&lt;/div&gt;


</description>
      <category>webdev</category>
      <category>frontend</category>
      <category>tooling</category>
      <category>community</category>
    </item>
    <item>
      <title>Ultimate Guide to Admin Roles &amp; Access 2025</title>
      <dc:creator>Aharna Haque</dc:creator>
      <pubDate>Tue, 17 Jun 2025 09:24:00 +0000</pubDate>
      <link>https://dev.to/aharna/ultimate-guide-to-admin-roles-access-2025-437m</link>
      <guid>https://dev.to/aharna/ultimate-guide-to-admin-roles-access-2025-437m</guid>
      <description>&lt;p&gt;Why Admin Access Needs to Be a Fortress?&lt;/p&gt;

&lt;p&gt;At a rapidly growing startup, an eager intern was granted "Admin" access to the admin panel for training purposes. In an attempt to make a difference, they unintentionally erased important user data, which resulted in a brief system outage.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;This incident shows the importance granting least permission as per requirement of the user role.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;In the digital age, where admin panels act as command centers for businesses, scalability and security must be guaranteed.&lt;/p&gt;

&lt;h4&gt;
  
  
  Real-world risks of poor access controls:
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Data breaches by accounts with deep access.&lt;/li&gt;
&lt;li&gt;Internal sabotage by a discontent employee.&lt;/li&gt;
&lt;li&gt;Unintentional or accidental errors&lt;/li&gt;
&lt;li&gt;Compliance failures with various regulations like GDPR, HIPAA, or SOC 2&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The 3 Pillars of Role-Based Access Control(RBAC):
&lt;/h2&gt;

&lt;p&gt;To keep the system secure and agile, RBAC (Role-Based Access Control) is the go-to framework. Here's how to build it right:&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Define the roles first:👩‍💻
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Admin: Has full access to all setting and data.&lt;/li&gt;
&lt;li&gt;Editor: Can create/modify but not change system settings.&lt;/li&gt;
&lt;li&gt;Viewer: Has Read-only access to data&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  2. Implement the Principle of Least Privilege
&lt;/h3&gt;

&lt;p&gt;This principle is about granting users minimum level of access necessary to perform their intended task minimises potential risks. &lt;/p&gt;

&lt;p&gt;Less Privilege = Smaller Attack Surface&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Make it Modular and Scalable:
&lt;/h3&gt;

&lt;p&gt;As businesses grow, roles evolve. Regularly reviewing and adjusting permissions as roles evolve by granting granular permissions (like building blocks)&lt;/p&gt;

&lt;h2&gt;
  
  
  Here's Your Checklist: ✅
&lt;/h2&gt;

&lt;p&gt;☑️ Implement Role-Based Access Control (RBAC)&lt;br&gt;
☑️ Enable &lt;a href="https://auth0.com/docs/secure/multi-factor-authentication" rel="noopener noreferrer"&gt;Multi-Factor Authentication (MFA)&lt;/a&gt;- add a critical layer of protection.&lt;br&gt;
☑️ Secure Session Management: Enforce auto-logout on inactivity and limit session lifetimes.&lt;br&gt;
☑️ Use Fine-Grained and Granular Permissions&lt;br&gt;
☑️ Conduct Regular Access Reviews&lt;/p&gt;

&lt;p&gt;&lt;em&gt;We understood the "what", "why" and "how" of the security-- Time to narrow down on the platforms we can trust!&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  🔧Low-Code &amp;amp; Internal Tool Builders:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://dronahq.com" rel="noopener noreferrer"&gt;DronaHQ&lt;/a&gt;- Low-code platform with granular role-based access, UI-level permissions and enterprise-grade security and drag-drop features.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://retool.com/templates?tags=dashboard%2Cadmin+panel" rel="noopener noreferrer"&gt;Retool&lt;/a&gt;- Internal tool build with RBAC, query level controls with &lt;a href="https://auth0.com/docs/authenticate/single-sign-on" rel="noopener noreferrer"&gt;SSO&lt;/a&gt;/MFA support.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.appsmith.com" rel="noopener noreferrer"&gt;Appsmith&lt;/a&gt;- Open-source tool for build admin panels with role management and authentication options.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  👜Developer-Focused Admin frameworks:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://www.forestadmin.com" rel="noopener noreferrer"&gt;Forest Admin&lt;/a&gt;- Plug-in and play admin panel with built-in access control, logs and permissions protocols options. &lt;/li&gt;
&lt;li&gt;
&lt;a href="https://hasura.io/blog/tagged/admin-panels" rel="noopener noreferrer"&gt;Hasura&lt;/a&gt; – Real-time GraphQL engine providing API-level role-based and row-level permissions support.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://supabase.com" rel="noopener noreferrer"&gt;Supabase&lt;/a&gt; – Firebase alternative with built-in authentication and secure row-level access control.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  🔐 Authentication &amp;amp; Identity Management
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://auth0.com" rel="noopener noreferrer"&gt;Auth0 (by Okta)&lt;/a&gt; – Adaptable authentication and authorisation platform with SSO/MFA support.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://aws.amazon.com/cognito/" rel="noopener noreferrer"&gt;AWS Cognito&lt;/a&gt; – Scalable AWS-native user auth for web and mobile application with Authentication, Identity management, Access control and Compliance check.&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>webdev</category>
      <category>frontend</category>
      <category>tooling</category>
      <category>community</category>
    </item>
  </channel>
</rss>
