<?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: Vishal Kumar</title>
    <description>The latest articles on DEV Community by Vishal Kumar (@vvisshuuu2500).</description>
    <link>https://dev.to/vvisshuuu2500</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%2F3780795%2F99f20cc8-06b4-4b26-bfed-c7fe206c501b.png</url>
      <title>DEV Community: Vishal Kumar</title>
      <link>https://dev.to/vvisshuuu2500</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/vvisshuuu2500"/>
    <language>en</language>
    <item>
      <title>Building an AI Bug Triage Agent with Swytchcode and Gemini</title>
      <dc:creator>Vishal Kumar</dc:creator>
      <pubDate>Fri, 21 Aug 2026 13:52:42 +0000</pubDate>
      <link>https://dev.to/vvisshuuu2500/building-an-ai-bug-triage-agent-with-swytchcode-and-gemini-3502</link>
      <guid>https://dev.to/vvisshuuu2500/building-an-ai-bug-triage-agent-with-swytchcode-and-gemini-3502</guid>
      <description>&lt;p&gt;𝐓𝐮𝐫𝐧𝐢𝐧𝐠 𝐮𝐧𝐬𝐭𝐫𝐮𝐜𝐭𝐮𝐫𝐞𝐝 𝐛𝐮𝐠 𝐫𝐞𝐩𝐨𝐫𝐭𝐬 𝐢𝐧𝐭𝐨 𝐚𝐜𝐭𝐢𝐨𝐧𝐚𝐛𝐥𝐞 𝐭𝐫𝐢𝐚𝐠𝐞 𝐫𝐞𝐩𝐨𝐫𝐭𝐬 𝐰𝐢𝐭𝐡 𝐀𝐈, 𝐫𝐞𝐭𝐫𝐢𝐞𝐬, 𝐭𝐢𝐦𝐞𝐨𝐮𝐭𝐬, 𝐚𝐧𝐝 𝐢𝐝𝐞𝐦𝐩𝐨𝐭𝐞𝐧𝐜𝐲.&lt;/p&gt;

&lt;p&gt;𝟏.𝐁𝐮𝐢𝐥𝐝𝐢𝐧𝐠 𝐚𝐧 𝐀𝐈 𝐁𝐮𝐠 𝐓𝐫𝐢𝐚𝐠𝐞 𝐀𝐠𝐞𝐧𝐭 𝐰𝐢𝐭𝐡 𝐒𝐰𝐲𝐭𝐜𝐡𝐜𝐨𝐝𝐞 𝐚𝐧𝐝 𝐆𝐞𝐦𝐢𝐧𝐢&lt;/p&gt;

&lt;p&gt;Software bugs are a normal part of development, but analyzing bug reports manually can take a lot of time.&lt;/p&gt;

&lt;p&gt;A developer may receive a bug report containing an error message, incomplete context, or a description of unexpected behavior. Before fixing the issue, they usually need to determine:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;What is the actual problem?&lt;/li&gt;
&lt;li&gt;How severe is it?&lt;/li&gt;
&lt;li&gt;Which part of the application is affected?&lt;/li&gt;
&lt;li&gt;What could be causing it?&lt;/li&gt;
&lt;li&gt;What should be checked first?&lt;/li&gt;
&lt;li&gt;How can the issue be fixed?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;To solve this problem, I built an &lt;strong&gt;AI Bug Triage Agent&lt;/strong&gt; using &lt;strong&gt;Swytchcode and Gemini&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The agent takes a bug report as input and automatically generates a structured triage report containing the summary, severity, category, likely root cause, recommended fix, and debugging steps.&lt;/p&gt;

&lt;p&gt;I also implemented two bonus features:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Production-oriented execution policies&lt;/li&gt;
&lt;li&gt;Application-level idempotency&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fh5gp44sqhvzvj5yu8ymy.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%2Fh5gp44sqhvzvj5yu8ymy.png" alt=" " width="297" height="425"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Project structure of the AI Bug Triage Agent&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;𝟐.𝐖𝐡𝐚𝐭 𝐃𝐨𝐞𝐬 𝐭𝐡𝐞 𝐏𝐫𝐨𝐣𝐞𝐜𝐭 𝐃𝐨?&lt;/p&gt;

&lt;p&gt;The workflow is simple:&lt;/p&gt;

&lt;p&gt;Bug Report → Python Agent → Swytchcode → Gemini → Structured Bug Triage Report&lt;/p&gt;

&lt;p&gt;The user provides a bug report through a text file or standard input.&lt;/p&gt;

&lt;p&gt;The Python agent sends the report to Gemini through the Swytchcode runtime. Gemini analyzes the issue and returns structured information.&lt;/p&gt;

&lt;p&gt;The final output contains:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Summary&lt;/li&gt;
&lt;li&gt;Severity&lt;/li&gt;
&lt;li&gt;Category&lt;/li&gt;
&lt;li&gt;Likely root cause&lt;/li&gt;
&lt;li&gt;Recommended fix&lt;/li&gt;
&lt;li&gt;Debugging steps&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This makes the output much easier for a developer to understand and act on.&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%2Fywkese6axhztbged3i4k.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%2Fywkese6axhztbged3i4k.png" alt=" " width="736" height="517"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Example bug report used as input&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fh7ba97ew2z417f73du94.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%2Fh7ba97ew2z417f73du94.png" alt=" " width="800" height="1000"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The important part of this architecture is that the Python application does not directly call the Gemini API using an HTTP library or SDK.&lt;/p&gt;

&lt;p&gt;The AI execution goes through:&lt;br&gt;
&lt;code&gt;swytchcode_runtime.exec("gemini.models.generateContent", ...)&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fy1vkd8z12bcj3fylotwa.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%2Fy1vkd8z12bcj3fylotwa.png" alt=" " width="666" height="224"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Gemini is accessed through the Swytchcode runtime&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;𝟒. 𝐖𝐡𝐲 𝐒𝐰𝐲𝐭𝐜𝐡𝐜𝐨𝐝𝐞?&lt;/p&gt;

&lt;p&gt;One of the main goals of this project was to use Swytchcode as the execution layer for the AI integration.&lt;/p&gt;

&lt;p&gt;Instead of adding a direct HTTP client or an SDK to the Python application, the project uses the Swytchcode runtime.&lt;/p&gt;

&lt;p&gt;This provides a clean separation:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Python handles the application logic.&lt;/li&gt;
&lt;li&gt;Swytchcode handles the integration execution.&lt;/li&gt;
&lt;li&gt;Gemini handles the AI analysis.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The project therefore keeps the AI provider integration separate from the core bug-triage logic.&lt;/p&gt;

&lt;p&gt;𝟓. 𝐆𝐞𝐦𝐢𝐧𝐢 𝐈𝐧𝐭𝐞𝐠𝐫𝐚𝐭𝐢𝐨𝐧&lt;/p&gt;

&lt;p&gt;For the AI model, I used Gemini.&lt;/p&gt;

&lt;p&gt;The integration is defined as a custom Swytchcode integration using the Gemini &lt;code&gt;generateContent&lt;/code&gt; endpoint.&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%2Ffhgvtdh4onb6m4if11u4.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%2Ffhgvtdh4onb6m4if11u4.png" alt=" " width="719" height="318"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The API key is stored locally using an environment variable:&lt;br&gt;
&lt;code&gt;env&lt;br&gt;
GOOGLE_GEMINI_KEY=your_api_key_here&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;𝟔.𝐁𝐨𝐧𝐮𝐬: 𝐈𝐝𝐞𝐦𝐩𝐨𝐭𝐞𝐧𝐜𝐲&lt;/p&gt;

&lt;p&gt;Another bonus feature I implemented is application-level idempotency.&lt;/p&gt;

&lt;p&gt;The goal is simple:&lt;/p&gt;

&lt;p&gt;If the exact same bug report is submitted again, the application should recognize that it has already been processed and avoid making another unnecessary AI call.&lt;/p&gt;

&lt;p&gt;To achieve this, the application generates a deterministic SHA-256 hash from the normalized bug report.&lt;/p&gt;

&lt;p&gt;Conceptually:&lt;/p&gt;

&lt;p&gt;text&lt;br&gt;
Bug Report&lt;br&gt;
    ↓&lt;br&gt;
Normalize content&lt;br&gt;
    ↓&lt;br&gt;
SHA-256&lt;br&gt;
    ↓&lt;br&gt;
Idempotency Key&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%2Fj8mazbzjq6dmxu8s0dap.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%2Fj8mazbzjq6dmxu8s0dap.png" alt=" " width="799" height="414"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Idempotency prevents duplicate processing of the same bug report&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;𝟕.&lt;code&gt;.gitignore&lt;/code&gt; 𝐒𝐞𝐜𝐮𝐫𝐢𝐭𝐲 &lt;/p&gt;

&lt;p&gt;API credentials should never be hardcoded into an application or committed to GitHub.&lt;/p&gt;

&lt;p&gt;For this project:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The Gemini API key is stored in an environment variable.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;.env&lt;/code&gt; is ignored by Git.&lt;/li&gt;
&lt;li&gt;The API key is never printed in the normal output.&lt;/li&gt;
&lt;li&gt;Dry-run output redacts the API key.&lt;/li&gt;
&lt;li&gt;The idempotency key is generated only from the bug report content and does not contain the API key.&lt;/li&gt;
&lt;li&gt;The local cache file is also ignored by Git.&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ftsy14ebems3qobhs7gxj.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%2Ftsy14ebems3qobhs7gxj.png" alt=" " width="303" height="257"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Before pushing the project to GitHub, I verified that the real &lt;code&gt;.env&lt;/code&gt; file was not included in the Git commit.&lt;/p&gt;

&lt;p&gt;𝟖.𝐓𝐞𝐬𝐭𝐢𝐧𝐠&lt;/p&gt;

&lt;p&gt;I performed several tests before publishing the project.&lt;/p&gt;

&lt;h3&gt;
  
  
  Basic validation
&lt;/h3&gt;

&lt;p&gt;bash&lt;br&gt;
&lt;code&gt;python -m py_compile bug_triage_agent.py&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;The Python compilation test passed successfully.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;python bug_triage_agent.py sample_bug.txt --dry-run&lt;br&gt;
&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;𝟗.𝐖𝐡𝐚𝐭 𝐈 𝐋𝐞𝐚𝐫𝐧𝐞𝐝&lt;/p&gt;

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

&lt;p&gt;Building this project taught me several practical lessons.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. AI integration is more than calling a model
&lt;/h3&gt;

&lt;p&gt;A useful AI application needs input validation, response parsing, error handling, and predictable output.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Execution policies matter
&lt;/h3&gt;

&lt;p&gt;Timeouts and controlled retries make external AI calls more reliable without creating unnecessary repeated requests.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Idempotency is useful for AI workflows
&lt;/h3&gt;

&lt;p&gt;Repeated requests can waste API resources. Detecting identical inputs can prevent unnecessary processing.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Secrets must be handled carefully
&lt;/h3&gt;

&lt;p&gt;API keys should stay outside source code and should never be committed to a public repository.&lt;/p&gt;

&lt;h3&gt;
  
  
  5. Integration layers can simplify application architecture
&lt;/h3&gt;

&lt;p&gt;Using Swytchcode as the execution layer allowed me to keep the application logic separate from the AI integration.&lt;/p&gt;

&lt;p&gt;𝟏𝟎.𝐆𝐢𝐭𝐇𝐮𝐛&lt;/p&gt;

&lt;h2&gt;
  
  
  Project Repository
&lt;/h2&gt;

&lt;p&gt;The complete source code is available on GitHub:&lt;/p&gt;

&lt;p&gt;👉 &lt;a href="https://github.com/codewithvishuuu/swytchcode-ai-bug-triage" rel="noopener noreferrer"&gt;https://github.com/codewithvishuuu/swytchcode-ai-bug-triage&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The repository contains the Python agent, Swytchcode Gemini integration, configuration, documentation, and sample bug report.&lt;/p&gt;

&lt;p&gt;𝟏𝟏.𝐃𝐞𝐦𝐨&lt;/p&gt;

&lt;p&gt;I also created a short demo showing the complete workflow:&lt;/p&gt;

&lt;p&gt;Bug Report → &lt;a href="https://www.swytchcode.com/" rel="noopener noreferrer"&gt;Swytchcode&lt;/a&gt; → &lt;a href="https://aistudio.google.com/prompts/new_chat" rel="noopener noreferrer"&gt;Gemini&lt;/a&gt; → Bug Triage Report&lt;/p&gt;

&lt;p&gt;The demo also shows the idempotency feature and the generated result.&lt;/p&gt;

&lt;p&gt;𝟏𝟐.𝐂𝐨𝐧𝐜𝐥𝐮𝐬𝐢𝐨𝐧&lt;/p&gt;

&lt;p&gt;The AI Bug Triage Agent demonstrates how AI can be used to automate an everyday software-development task.&lt;/p&gt;

&lt;p&gt;Instead of manually reading and categorizing every bug report, the agent can quickly generate a structured analysis containing severity, category, root cause, recommended fixes, and debugging steps.&lt;/p&gt;

&lt;p&gt;By combining Gemini with &lt;a href="https://www.swytchcode.com/" rel="noopener noreferrer"&gt;Swytchcode&lt;/a&gt; and adding execution policies and idempotency, the project goes beyond a basic AI API demo and focuses on reliability, security, and practical developer workflows.&lt;/p&gt;

&lt;p&gt;This project was built as part of Task 3 and was a great opportunity to explore AI agents, integration management, and production-oriented patterns.&lt;/p&gt;

&lt;p&gt;𝙏𝙝𝙖𝙣𝙠 𝙮𝙤𝙪 𝙛𝙤𝙧 𝙧𝙚𝙖𝙙𝙞𝙣𝙜! 𝙁𝙚𝙚𝙡 𝙛𝙧𝙚𝙚 𝙩𝙤 𝙧𝙚𝙖𝙘𝙝 𝙤𝙪𝙩 𝙤𝙧 𝙘𝙤𝙣𝙣𝙚𝙘𝙩 𝙤𝙣 &lt;a href="https://www.linkedin.com/in/vishal-kumar-805248335/" rel="noopener noreferrer"&gt;𝙇𝙞𝙣𝙠𝙚𝙙𝙄𝙣&lt;/a&gt; / &lt;a href="https://github.com/codewithvishuuu/swytchcode-ai-bug-triage" rel="noopener noreferrer"&gt;𝙂𝙞𝙩𝙃𝙪𝙗&lt;/a&gt;🤝&lt;br&gt;
𝑽𝒊𝒔𝒉𝒂𝒍 𝑲𝒖𝒎𝒂𝒓💖&lt;/p&gt;

</description>
      <category>ai</category>
      <category>swytchcode</category>
      <category>productivity</category>
      <category>python</category>
    </item>
    <item>
      <title>Building Aarogya Sahayak: My 10-Day Journey Building a Voice AI Health Assistant</title>
      <dc:creator>Vishal Kumar</dc:creator>
      <pubDate>Sat, 15 Aug 2026 14:44:25 +0000</pubDate>
      <link>https://dev.to/vvisshuuu2500/building-aarogya-sahayak-my-10-day-journey-building-a-voice-ai-health-assistant-3cb9</link>
      <guid>https://dev.to/vvisshuuu2500/building-aarogya-sahayak-my-10-day-journey-building-a-voice-ai-health-assistant-3cb9</guid>
      <description>&lt;p&gt;𝐅𝐫𝐨𝐦 𝐚 𝐛𝐚𝐬𝐢𝐜 𝐯𝐨𝐢𝐜𝐞 𝐚𝐬𝐬𝐢𝐬𝐭𝐚𝐧𝐭 𝐭𝐨 𝐡𝐮𝐦𝐚𝐧 𝐞𝐬𝐜𝐚𝐥𝐚𝐭𝐢𝐨𝐧, 𝐜𝐚𝐥𝐥 𝐚𝐧𝐚𝐥𝐲𝐭𝐢𝐜𝐬, 𝐦𝐮𝐥𝐭𝐢𝐥𝐢𝐧𝐠𝐮𝐚𝐥 𝐜𝐨𝐧𝐯𝐞𝐫𝐬𝐚𝐭𝐢𝐨𝐧𝐬, 𝐚𝐧𝐝 𝐬𝐩𝐞𝐜𝐢𝐚𝐥𝐢𝐬𝐭 𝐡𝐚𝐧𝐝𝐨𝐟𝐟𝐬.&lt;/p&gt;

&lt;p&gt;𝟏. 𝐓𝐡𝐞 𝐏𝐫𝐨𝐛𝐥𝐞𝐦 𝐚𝐧𝐝 𝐭𝐡𝐞 𝐔𝐬𝐞𝐫𝐬&lt;/p&gt;

&lt;p&gt;Healthcare can be difficult to navigate, especially when users are not sure whether they need general health guidance, a clinic appointment, or support from a real person.&lt;/p&gt;

&lt;p&gt;For this project, I chose the &lt;strong&gt;Health Access&lt;/strong&gt; track and built "𝐀𝐚𝐫𝐨𝐠𝐲𝐚 𝐒𝐚𝐡𝐚𝐲𝐚𝐤", a voice-based health and wellness assistant designed to make basic health conversations easier and more accessible.&lt;/p&gt;

&lt;p&gt;The idea was not to build an AI doctor or replace medical professionals. Instead, "𝐀𝐚𝐫𝐨𝐠𝐲𝐚 𝐒𝐚𝐡𝐚𝐲𝐚𝐤" is designed to help users with general health and wellness questions, guide them toward appropriate next steps, and connect them with human support when a situation requires it.&lt;/p&gt;

&lt;p&gt;I chose voice because users can speak naturally instead of typing everything into a chat box. This makes the interaction feel more like a real conversation and can be especially useful for people who prefer speaking over typing.&lt;/p&gt;

&lt;p&gt;The project also focuses on safety. When a conversation involves diagnosis requests, emergency or red-flag situations, or needs human intervention, the agent follows dedicated safety and escalation flows instead of trying to handle everything itself.&lt;/p&gt;

&lt;p&gt;The assistant also supports scheduled reminder calls, allowing users to request reminders naturally and receive a follow-up call at the requested time. This extends the experience beyond a single conversation while keeping the existing safety and consent rules in place.&lt;/p&gt;

&lt;p&gt;𝟐. 𝐖𝐡𝐚𝐭 𝐭𝐡𝐞 𝐕𝐨𝐢𝐜𝐞 𝐀𝐠𝐞𝐧𝐭 𝐃𝐨𝐞𝐬&lt;/p&gt;

&lt;p&gt;𝐀𝐚𝐫𝐨𝐠𝐲𝐚 𝐒𝐚𝐡𝐚𝐲𝐚𝐤 is built as a conversational voice assistant rather than a simple question-and-answer bot.&lt;/p&gt;

&lt;p&gt;A user can start a natural conversation about general health and wellness. The main agent can provide basic guidance while following clear safety boundaries. It does not try to diagnose medical conditions or act as a replacement for a healthcare professional.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;𝗟𝗮𝗻𝗴𝘂𝗮𝗴𝗲 𝗦𝗲𝗹𝗲𝗰𝘁𝗶𝗼𝗻&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;One of the important improvements I added was a language-selection flow.&lt;/p&gt;

&lt;p&gt;Before starting a conversation, the user can choose between "𝗘𝗻𝗴𝗹𝗶𝘀𝗵" 𝗮𝗻𝗱 "𝗛𝗶𝗻𝗱𝗶". Once selected, the preferred language is carried through the agent session so the conversation stays consistent instead of randomly switching languages.&lt;/p&gt;

&lt;p&gt;For Hindi conversations, the agent is instructed to respond using "𝗗𝗲𝘃𝗮𝗻𝗮𝗴𝗮𝗿𝗶 𝘀𝗰𝗿𝗶𝗽𝘁" rather than Romanized Hindi. This makes the conversation more natural for users who prefer reading and speaking Hindi.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;𝗛𝘂𝗺𝗮𝗻 𝗦𝘂𝗽𝗽𝗼𝗿𝘁&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;When a situation needs human assistance, 𝐀𝐚𝐫𝐨𝐠𝐲𝐚 𝐒𝐚𝐡𝐚𝐲𝐚𝐤 can create a human support request and provide a unique reference ID.&lt;/p&gt;

&lt;p&gt;The user can later use that reference ID on the Human Support page to check the status of the request.&lt;/p&gt;

&lt;p&gt;The public support page is intentionally privacy-focused. It displays only safe request metadata such as the reference ID, status, timestamps, urgency, and follow-up information. Conversation content and sensitive health details are not exposed on the public page.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;𝗦𝗽𝗲𝗰𝗶𝗮𝗹𝗶𝘀𝘁 𝗔𝗴𝗲𝗻𝘁 𝗛𝗮𝗻𝗱𝗼𝗳𝗳&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Another important feature is the "𝗖𝗹𝗶𝗻𝗶𝗰 &amp;amp; 𝗔𝗽𝗽𝗼𝗶𝗻𝘁𝗺𝗲𝗻𝘁 𝗦𝗽𝗲𝗰𝗶𝗮𝗹𝗶𝘀𝘁".&lt;/p&gt;

&lt;p&gt;When a user clearly wants to book or prepare for a clinic appointment, the main agent can hand the conversation to this dedicated specialist instead of trying to handle every task itself.&lt;/p&gt;

&lt;p&gt;The specialist can help with appointment-related questions, preparation, preferred appointment timing, and general visit guidance.&lt;/p&gt;

&lt;p&gt;The user does not have to repeat the entire problem because relevant context is transferred during the handoff.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;𝗦𝗽𝗲𝗰𝗶𝗮𝗹𝗶𝘀𝘁 𝗛𝗮𝗻𝗱𝗯𝗮𝗰𝗸&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The specialist can also hand the conversation back to the main health assistant when the appointment-related task is complete or when the user wants to discuss a general health topic.&lt;/p&gt;

&lt;p&gt;This creates a simple multi-agent flow where each agent has a focused responsibility.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;𝗖𝗮𝗹𝗹 𝗔𝗻𝗮𝗹𝘆𝘁𝗶𝗰𝘀&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I also built a Call Analytics Dashboard to make the voice agent measurable instead of relying only on how the conversation feels.&lt;/p&gt;

&lt;p&gt;The dashboard tracks real call outcomes such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Total calls&lt;/li&gt;
&lt;li&gt;Successful calls&lt;/li&gt;
&lt;li&gt;Failed calls&lt;/li&gt;
&lt;li&gt;Call outcome trends&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The success and failure logic is connected to actual call outcomes rather than hardcoded numbers.&lt;/p&gt;

&lt;p&gt;This helped me understand whether the agent was actually completing useful conversations.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;𝗦𝗰𝗵𝗲𝗱𝘂𝗹𝗲𝗱 𝗥𝗲𝗺𝗶𝗻𝗱𝗲𝗿 𝗖𝗮𝗹𝗹𝘀&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A new feature I added is scheduled reminder calling.&lt;/p&gt;

&lt;p&gt;Users can ask the agent to schedule a reminder naturally, such as "Remind me in 5 minutes to drink water." The agent understands relative or specific times, validates the requested timezone when needed, and creates a reminder with a unique reference ID.&lt;/p&gt;

&lt;p&gt;The reminder is processed by the existing outbound calling system instead of using a separate dialing implementation. An exactly-once mechanism prevents the same reminder from being dialed multiple times.&lt;/p&gt;

&lt;p&gt;Users can also open the Scheduled Reminders page to check the reminder status and cancel a reminder while it is still pending.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;𝗪𝗲𝗹𝗹𝗻𝗲𝘀𝘀 𝗧𝗶𝗽𝘀&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I also added a dedicated Wellness Tips section for users who want simple general wellness guidance outside the live conversation.&lt;/p&gt;

&lt;p&gt;It includes five areas:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Hydration&lt;/li&gt;
&lt;li&gt;Sleep &amp;amp; Rest&lt;/li&gt;
&lt;li&gt;Healthy Eating&lt;/li&gt;
&lt;li&gt;Daily Activity&lt;/li&gt;
&lt;li&gt;Stress &amp;amp; Relaxation&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The section is designed for general wellness information and includes a clear disclaimer that it is not medical advice.&lt;/p&gt;

&lt;p&gt;𝟑.𝐇𝐨𝐰 𝐭𝐡𝐞 𝐒𝐲𝐬𝐭𝐞𝐦 𝐖𝐨𝐫𝐤𝐬&lt;/p&gt;

&lt;p&gt;𝐀𝐚𝐫𝐨𝐠𝐲𝐚 𝐒𝐚𝐡𝐚𝐲𝐚𝐤 is built around a real-time voice conversation pipeline. The goal was to keep the interaction simple for the user while allowing different parts of the system to handle different responsibilities.&lt;/p&gt;

&lt;p&gt;At a high level, the flow looks like this:&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%2Ftgma389m6ti1y8gmeccz.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%2Ftgma389m6ti1y8gmeccz.png" alt=" " width="800" height="342"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;𝟭.𝗨𝘀𝗲𝗿 𝗮𝗻𝗱 𝗙𝗿𝗼𝗻𝘁𝗲𝗻𝗱
The user starts the conversation from the web interface and can choose their preferred language before the voice session begins.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The frontend handles the conversation interface, voice controls, language selection, agent status, and other user-facing states.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;𝟮.𝗥𝗲𝗮𝗹-𝗧𝗶𝗺𝗲 𝗩𝗼𝗶𝗰𝗲 𝗧𝗿𝗮𝗻𝘀𝗽𝗼𝗿𝘁
The voice conversation runs through "𝗟𝗶𝘃𝗲𝗞𝗶𝘁", which provides the real-time communication layer between the user and the agent.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This allows the agent to receive the user's audio, process it, and return spoken responses during the same conversation.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;𝟯. 𝗦𝗽𝗲𝗲𝗰𝗵-𝘁𝗼-𝗧𝗲𝘅𝘁
When the user speaks, their audio is converted into text so the language model can understand the request.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This text becomes the input for the agent's reasoning and routing logic.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;𝟰.𝗠𝗮𝗶𝗻 𝗔𝗴𝗲𝗻𝘁
The main 𝐀𝐚𝐫𝐨𝐠𝐲𝐚 𝐒𝐚𝐡𝐚𝐲𝐚𝐤 agent is responsible for general health and wellness conversations.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It follows a system prompt containing its role, objectives, safety rules, language instructions, and routing decisions.&lt;/p&gt;

&lt;p&gt;The main agent does not try to handle every request itself. Depending on the conversation, it can use tools or hand the conversation to another part of the system.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;𝟱. 𝗧𝗼𝗼𝗹𝘀 𝗮𝗻𝗱 𝗥𝗼𝘂𝘁𝗶𝗻𝗴
The agent can use dedicated tools when a task requires an action rather than a simple response.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For example, a clear clinic or appointment request can trigger a handoff to the "Clinic &amp;amp; Appointment Specialist".&lt;/p&gt;

&lt;p&gt;Emergency or red-flag situations follow the existing escalation flow instead of being sent to the appointment specialist.&lt;/p&gt;

&lt;p&gt;This separation keeps the responsibilities of each agent clear.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;𝟲.𝗦𝗰𝗵𝗲𝗱𝘂𝗹𝗲𝗱 𝗥𝗲𝗺𝗶𝗻𝗱𝗲𝗿 𝗙𝗹𝗼𝘄&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The agent can also create scheduled reminders from natural-language requests.&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%2Fueqcj3bv1k8cgno1etom.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%2Fueqcj3bv1k8cgno1etom.png" alt=" " width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;When a user asks for a reminder, the request is parsed and stored with a unique reference ID. The scheduler checks for due reminders and triggers the existing outbound calling system at the scheduled time.&lt;/p&gt;

&lt;p&gt;The reminder system uses an exactly-once claiming mechanism to prevent duplicate calls. Users can also check the reminder status or cancel a reminder while it is still pending.&lt;/p&gt;

&lt;p&gt;This flow reuses the existing outbound dialer instead of introducing a separate calling system.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;𝟳.𝗦𝗽𝗲𝗰𝗶𝗮𝗹𝗶𝘀𝘁 𝗔𝗴𝗲𝗻𝘁
The Clinic &amp;amp; Appointment Specialist is a separate agent with its own instructions and responsibilities.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;During a handoff, only relevant context is transferred instead of exposing the entire conversation unnecessarily.&lt;/p&gt;

&lt;p&gt;The specialist can continue the conversation without asking the user to repeat the original request.&lt;/p&gt;

&lt;p&gt;When its task is complete or the user changes back to a general health topic, the specialist can hand the conversation back to the main agent.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;𝟴.𝗧𝗲𝘅𝘁-𝘁𝗼-𝗦𝗽𝗲𝗲𝗰𝗵
After the agent generates a response, it is converted back into speech so the user can hear the answer naturally.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For this project, I used "𝗠𝘂𝗿𝗳 𝗙𝗮𝗹𝗰𝗼𝗻" for the voice experience.&lt;/p&gt;

&lt;p&gt;One of the things I wanted to achieve was a conversational experience that feels closer to talking to an assistant rather than interacting with a traditional text chatbot.&lt;/p&gt;

&lt;p&gt;Architecture Overview&lt;/p&gt;

&lt;p&gt;The overall architecture can be represented as:&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%2Fsa7ip6vf3xt9auiilipy.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%2Fsa7ip6vf3xt9auiilipy.png" alt=" " width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;𝟒. 𝐓𝐡𝐞 𝐌𝐨𝐬𝐭 𝐈𝐦𝐩𝐨𝐫𝐭𝐚𝐧𝐭 𝐅𝐞𝐚𝐭𝐮𝐫𝐞𝐬&lt;/p&gt;

&lt;p&gt;Over the course of the challenge, I gradually added features that made "Aarogya Sahayak" more useful, safer, and easier to evaluate.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;𝗦𝗮𝗳𝗲𝘁𝘆 𝗚𝘂𝗮𝗿𝗱𝗿𝗮𝗶𝗹𝘀
The agent has clear boundaries around what it can and cannot do.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It is designed for general health and wellness guidance, not medical diagnosis. Emergency or red-flag situations follow a separate escalation flow instead of being routed to the appointment specialist.&lt;/p&gt;

&lt;p&gt;The agent also avoids asking users for sensitive information such as passwords, OTPs, PINs, or card details.&lt;/p&gt;

&lt;p&gt;𝟭.𝗛𝘂𝗺𝗮𝗻 𝗘𝘀𝗰𝗮𝗹𝗮𝘁𝗶𝗼𝗻&lt;br&gt;
When a conversation needs human intervention, the agent can create a support request and generate a unique reference ID.&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%2Fl51ravxqu1p89ln3my7t.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%2Fl51ravxqu1p89ln3my7t.png" alt=" " width="800" height="528"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The user can use this ID to check the request status later through the Human Support page.&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%2Fn0ph65z4umfa1l2ssaee.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%2Fn0ph65z4umfa1l2ssaee.png" alt=" " width="800" height="793"&gt;&lt;/a&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F9xq5t3y2jgeuez41j5ax.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%2F9xq5t3y2jgeuez41j5ax.png" alt=" " width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The public status page is intentionally privacy-focused and does not expose the user's conversation or sensitive health information.&lt;/p&gt;

&lt;p&gt;𝟮.𝗖𝗹𝗶𝗻𝗶𝗰 𝗮𝗻𝗱 𝗔𝗽𝗽𝗼𝗶𝗻𝘁𝗺𝗲𝗻𝘁 𝗦𝗽𝗲𝗰𝗶𝗮𝗹𝗶𝘀𝘁&lt;br&gt;
Instead of making the main agent responsible for everything, I created a dedicated "Clinic &amp;amp; Appointment Specialist".&lt;/p&gt;

&lt;p&gt;The specialist focuses on appointment-related tasks such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Understanding appointment requests&lt;/li&gt;
&lt;li&gt;Helping with clinic visit preparation&lt;/li&gt;
&lt;li&gt;Discussing preferred appointment timing&lt;/li&gt;
&lt;li&gt;Providing general appointment guidance&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fjjihrqa11nd70ot74hkr.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%2Fjjihrqa11nd70ot74hkr.png" alt=" " width="800" height="666"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The main agent announces the handoff before switching the conversation, and the specialist introduces itself after taking over.&lt;/p&gt;

&lt;p&gt;𝟯.𝗦𝗽𝗲𝗰𝗶𝗮𝗹𝗶𝘀𝘁 𝗛𝗮𝗻𝗱𝗯𝗮𝗰𝗸&lt;br&gt;
The specialist can also return the conversation to the main health assistant.&lt;/p&gt;

&lt;p&gt;For example, if the user finishes discussing an appointment and asks for general wellness advice, the specialist can hand the conversation back instead of continuing outside its scope.&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%2F0h4edny0mlyds8styzpy.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%2F0h4edny0mlyds8styzpy.png" alt=" " width="799" height="709"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Relevant context is preserved during both handoff and handback so the user does not have to repeat everything.&lt;/p&gt;

&lt;p&gt;𝟰.𝗠𝘂𝗹𝘁𝗶𝗹𝗶𝗻𝗴𝘂𝗮𝗹 𝗖𝗼𝗻𝘃𝗲𝗿𝘀𝗮𝘁𝗶𝗼𝗻𝘀&lt;br&gt;
The agent supports both &lt;strong&gt;English and Hindi&lt;/strong&gt; through a language-selection flow.&lt;/p&gt;

&lt;p&gt;The user chooses the preferred language before starting the conversation. The selected language is then carried through the agent session.&lt;/p&gt;

&lt;p&gt;For Hindi conversations, the agent is instructed to use "𝗗𝗲𝘃𝗮𝗻𝗮𝗴𝗮𝗿𝗶 𝘀𝗰𝗿𝗶𝗽𝘁" rather than randomly switching to Romanized Hindi.&lt;/p&gt;

&lt;p&gt;𝟱.𝗖𝗮𝗹𝗹 𝗔𝗻𝗮𝗹𝘆𝘁𝗶𝗰𝘀&lt;br&gt;
I built a Call Analytics Dashboard that records real call outcomes.&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%2F1ddru1y3qzn60lacbyk1.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%2F1ddru1y3qzn60lacbyk1.png" alt=" " width="800" height="552"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It tracks metrics such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Total calls&lt;/li&gt;
&lt;li&gt;Successful calls&lt;/li&gt;
&lt;li&gt;Failed calls&lt;/li&gt;
&lt;li&gt;Call outcome trends&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fdy3o1329y06xyg55y8j8.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%2Fdy3o1329y06xyg55y8j8.png" alt=" " width="800" height="580"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The success condition is based on actual conversation outcomes, such as successful health guidance or successful human escalation, rather than simply counting every completed call as successful.&lt;/p&gt;

&lt;p&gt;This made the system measurable and helped me evaluate whether the agent was actually completing useful conversations.&lt;/p&gt;

&lt;p&gt;𝟲.𝗦𝗰𝗵𝗲𝗱𝘂𝗹𝗲𝗱 𝗥𝗲𝗺𝗶𝗻𝗱𝗲𝗿 𝗖𝗮𝗹𝗹𝘀&lt;/p&gt;

&lt;p&gt;One of the major features I added was scheduled reminder calling.&lt;/p&gt;

&lt;p&gt;Users can ask "Aarogya Sahayak" to schedule a reminder using natural language, for example:&lt;/p&gt;

&lt;p&gt;"Remind me in 5 minutes to drink water."&lt;/p&gt;

&lt;p&gt;The agent understands the requested time, handles timezone and AM/PM clarification when required, and creates a reminder with a unique reference ID.&lt;/p&gt;

&lt;p&gt;The reminder is then stored and monitored by a background scheduler. When the scheduled time arrives, the system reuses the existing outbound calling infrastructure to place the reminder call.&lt;/p&gt;

&lt;p&gt;A key reliability feature is the exactly-once mechanism, which prevents the same reminder from being triggered more than once.&lt;/p&gt;

&lt;p&gt;Users can also check the status of a reminder using its reference ID and cancel a reminder while it is still pending.&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%2Fj5bmn846mcvwlkyakku1.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%2Fj5bmn846mcvwlkyakku1.png" alt=" " width="800" height="489"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This turned reminders from a simple notification concept into an actual scheduled voice-call workflow connected to the existing agent infrastructure.&lt;/p&gt;

&lt;p&gt;𝟳.𝗪𝗲𝗹𝗹𝗻𝗲𝘀𝘀 𝗧𝗶𝗽𝘀&lt;/p&gt;

&lt;p&gt;I also added a dedicated Wellness Tips section for users who want simple health and wellness information without starting a full voice conversation.&lt;/p&gt;

&lt;p&gt;The section provides practical, general wellness tips across five areas:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Hydration&lt;/li&gt;
&lt;li&gt;Sleep &amp;amp; Rest&lt;/li&gt;
&lt;li&gt;Healthy Eating&lt;/li&gt;
&lt;li&gt;Daily Activity&lt;/li&gt;
&lt;li&gt;Stress &amp;amp; Relaxation&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Each category contains short and easy-to-follow suggestions so users can quickly find relevant information.&lt;/p&gt;

&lt;p&gt;The feature is intentionally focused on general wellness rather than diagnosis or treatment. A clear disclaimer reminds users that the information is not medical advice.&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%2Fnnu7szc8peaex2j7bu8u.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%2Fnnu7szc8peaex2j7bu8u.png" alt=" " width="800" height="833"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This gives users another way to interact with Aarogya Sahayak when they simply want quick wellness guidance.&lt;/p&gt;

&lt;p&gt;𝟓. 𝐂𝐡𝐚𝐥𝐥𝐞𝐧𝐠𝐞𝐬 𝐚𝐧𝐝 𝐇𝐨𝐰 𝐈 𝐎𝐯𝐞𝐫𝐜𝐚𝐦𝐞 𝐓𝐡𝐞𝐦&lt;/p&gt;

&lt;p&gt;Building a voice agent over multiple days was not always straightforward. A few problems taught me more than the features themselves.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;𝗞𝗲𝗲𝗽𝗶𝗻𝗴 𝗔𝗴𝗲𝗻𝘁 𝗥𝗲𝘀𝗽𝗼𝗻𝘀𝗶𝗯𝗶𝗹𝗶𝘁𝗶𝗲𝘀 𝗦𝗲𝗽𝗮𝗿𝗮𝘁𝗲
Initially, it would have been easy to let one agent handle everything.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Instead, I separated responsibilities between the main health assistant and the Clinic &amp;amp; Appointment Specialist.&lt;/p&gt;

&lt;p&gt;The main agent handles general health conversations and safety routing, while the specialist focuses only on clinic and appointment-related tasks.&lt;/p&gt;

&lt;p&gt;This made the routing logic clearer and reduced the chance of the specialist answering questions outside its intended role.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;𝗖𝗼𝗻𝘁𝗲𝘅𝘁 𝗗𝘂𝗿𝗶𝗻𝗴 𝗛𝗮𝗻𝗱𝗼𝗳𝗳𝘀
Another challenge was making sure the specialist understood what the user had already asked.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I did not want the user to repeat the entire conversation after every handoff.&lt;/p&gt;

&lt;p&gt;The solution was to transfer only the relevant context, including a short request summary and the user's latest request, instead of transferring the entire conversation.&lt;/p&gt;

&lt;p&gt;The same principle is used when handing the conversation back to the main agent.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;𝗟𝗮𝗻𝗴𝘂𝗮𝗴𝗲 𝗖𝗼𝗻𝘀𝗶𝘀𝘁𝗲𝗻𝗰𝘆
Another issue appeared when the agent sometimes mixed English and Hindi or used Romanized Hindi.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I added an explicit language-selection flow and made the selected language part of the agent session context.&lt;/p&gt;

&lt;p&gt;For Hindi, the instructions explicitly require "Devanagari script" and prevent the agent from switching back to Romanized Hindi.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;𝗦𝗰𝗵𝗲𝗱𝘂𝗹𝗲𝗱 𝗥𝗲𝗺𝗶𝗻𝗱𝗲𝗿 𝗖𝗮𝗹𝗹𝘀
Adding scheduled reminder calls introduced another engineering challenge.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The system needed to understand natural-language time requests such as "in 5 minutes" while handling timezone and AM/PM ambiguity safely.&lt;/p&gt;

&lt;p&gt;Another important requirement was preventing the same reminder from triggering more than once. Since the scheduler checks for due reminders repeatedly, simply checking the reminder status was not enough.&lt;/p&gt;

&lt;p&gt;I implemented an atomic claiming mechanism so that each reminder is claimed exactly once before the outbound call is triggered. Reminders then move through states such as pending, triggered, completed, failed, or cancelled.&lt;/p&gt;

&lt;p&gt;I also reused the existing outbound calling system instead of creating a separate dialing implementation. This kept the reminder feature integrated with the project's existing calling infrastructure.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;𝗧𝗲𝘀𝘁𝗶𝗻𝗴 𝘄𝗶𝘁𝗵 𝗟𝗶𝗺𝗶𝘁𝗲𝗱 𝗟𝗟𝗠 𝗤𝘂𝗼𝘁𝗮
Some behavioral tests depend on LiveKit hosted inference and could not always be executed because the available free inference quota was exhausted.&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F4ttxrqngnmhje7p2vkbl.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%2F4ttxrqngnmhje7p2vkbl.png" alt=" " width="797" height="128"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Instead of treating those failures as application failures, I separated deterministic tests from LLM-dependent tests.&lt;/p&gt;

&lt;p&gt;The deterministic test suite, linting, formatting, type checking, and frontend build could still be verified locally.&lt;/p&gt;

&lt;p&gt;This was an important lesson: an external service failure and an application bug are not necessarily the same thing.&lt;/p&gt;

&lt;p&gt;𝟔. 𝐇𝐨𝐰 𝐑𝐞𝐚𝐝𝐞𝐫𝐬 𝐂𝐚𝐧 𝐁𝐮𝐢𝐥𝐝 𝐚𝐧𝐝 𝐑𝐮𝐧 𝐈𝐭:&lt;/p&gt;

&lt;p&gt;If you want to build a similar voice agent, the architecture can be broken into four main parts:&lt;/p&gt;

&lt;p&gt;𝟭. 𝗦𝗽𝗲𝗲𝗰𝗵-𝘁𝗼-𝗧𝗲𝘅𝘁 (𝗦𝗧𝗧) 𝘁𝗼 𝘂𝗻𝗱𝗲𝗿𝘀𝘁𝗮𝗻𝗱 𝘄𝗵𝗮𝘁 𝘁𝗵𝗲 𝘂𝘀𝗲𝗿 𝘀𝗮𝘆𝘀&lt;/p&gt;

&lt;p&gt;𝟮. 𝗟𝗟𝗠 𝘁𝗼 𝘂𝗻𝗱𝗲𝗿𝘀𝘁𝗮𝗻𝗱 𝘁𝗵𝗲 𝗿𝗲𝗾𝘂𝗲𝘀𝘁 𝗮𝗻𝗱 𝗱𝗲𝗰𝗶𝗱𝗲 𝘄𝗵𝗮𝘁 𝘁𝗼 𝗱𝗼&lt;/p&gt;

&lt;p&gt;𝟯. 𝗧𝗲𝘅𝘁-𝘁𝗼-𝗦𝗽𝗲𝗲𝗰𝗵 (𝗧𝗧𝗦) 𝘁𝗼 𝘀𝗽𝗲𝗮𝗸 𝘁𝗵𝗲 𝗿𝗲𝘀𝗽𝗼𝗻𝘀𝗲&lt;/p&gt;

&lt;p&gt;𝟰. 𝗥𝗲𝗮𝗹-𝘁𝗶𝗺𝗲 𝘁𝗿𝗮𝗻𝘀𝗽𝗼𝗿𝘁 𝘁𝗼 𝗰𝗼𝗻𝗻𝗲𝗰𝘁 𝘁𝗵𝗲 𝘂𝘀𝗲𝗿 𝗮𝗻𝗱 𝗮𝗴𝗲𝗻𝘁 𝗱𝘂𝗿𝗶𝗻𝗴 𝗮 𝗹𝗶𝘃𝗲 𝗰𝗼𝗻𝘃𝗲𝗿𝘀𝗮𝘁𝗶𝗼𝗻&lt;/p&gt;

&lt;p&gt;For Aarogya Sahayak, I used LiveKit for the real-time agent session and Murf Falcon for the voice experience.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;𝐂𝐥𝐨𝐧𝐞 𝐭𝐡𝐞 𝐏𝐫𝐨𝐣𝐞𝐜𝐭
Start by cloning the repository:&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Bash:--&lt;br&gt;
git clone &lt;a href="https://github.com/codewithvishuuu/murf-livekit-starter.git" rel="noopener noreferrer"&gt;https://github.com/codewithvishuuu/murf-livekit-starter.git&lt;/a&gt;&lt;br&gt;
cd murf-livekit-starter&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;𝗖𝗼𝗻𝗳𝗶𝗴𝘂𝗿𝗲 𝗔𝗣𝗜 𝗞𝗲𝘆𝘀
API keys should never be hardcoded into the source code or committed to GitHub.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Store them in the project's local environment file, such as .env.local, according to the variables required by the project.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;𝗙𝗼𝗿 𝗲𝘅𝗮𝗺𝗽𝗹𝗲:
GOOGLE_API_KEY=your_key_here&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Use your actual keys only in your local environment.&lt;/p&gt;

&lt;p&gt;Make sure .env.local is included in .gitignore and never publish the file containing real credentials.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;𝗦𝘁𝗮𝗿𝘁 𝘁𝗵𝗲 𝗟𝗼𝗰𝗮𝗹 𝗟𝗶𝘃𝗲𝗞𝗶𝘁 𝗦𝗲𝗿𝘃𝗲𝗿&lt;br&gt;
If you are running LiveKit locally, start the local LiveKit server first. The backend agent connects to this server for the real-time voice session.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;𝗙𝗼𝗿 𝗲𝘅𝗮𝗺𝗽𝗹𝗲:&lt;br&gt;
cd backend&lt;br&gt;
uv run python src/agent.py dev&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Then start the frontend...&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;𝗦𝘁𝗮𝗿𝘁 𝘁𝗵𝗲 𝗕𝗮𝗰𝗸𝗲𝗻𝗱 𝗔𝗴𝗲𝗻𝘁&lt;br&gt;
cd backend&lt;br&gt;
uv run python src/agent.py dev&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;𝗦𝘁𝗮𝗿𝘁 𝘁𝗵𝗲 𝗙𝗿𝗼𝗻𝘁𝗲𝗻𝗱&lt;br&gt;
Then start the frontend using the project's frontend development command.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Open the local application in your browser and start a conversation.&lt;/p&gt;

&lt;p&gt;𝐓𝐞𝐬𝐭𝐢𝐧𝐠 𝐭𝐡𝐞 𝐂𝐨𝐧𝐯𝐞𝐫𝐬𝐚𝐭𝐢𝐨𝐧:&lt;/p&gt;

&lt;p&gt;A simple test flow is:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Start the application.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Select English or Hindi.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Ask a normal health or wellness question.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Ask for a clinic appointment.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Verify that the main agent announces the specialist handoff.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Continue the appointment conversation with the specialist.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Ask for a general wellness topic and verify the specialist can hand the conversation back.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Test the Human Support flow and verify that a reference ID is generated.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Check the Call Analytics Dashboard after completing calls.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Schedule a reminder using a natural-language request, such as "Remind me in 5 minutes to drink water."&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Verify that a unique reminder reference ID is generated.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Open the Scheduled Reminders page and check the reminder status.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Create a pending reminder and verify that it can be cancelled.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Leave a reminder active and verify that the scheduled outbound call is triggered at the requested time.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Verify that the same reminder is not triggered more than once.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This type of testing helped me verify the actual user journey across voice conversations, specialist handoffs, human support, scheduled reminders, and call analytics instead of relying only on automated tests.&lt;/p&gt;

&lt;p&gt;𝗺𝗮𝗿𝗸𝗱𝗼𝘄𝗻&lt;br&gt;
𝟕. 𝐖𝐡𝐚𝐭 𝐈 𝐖𝐨𝐮𝐥𝐝 𝐈𝐦𝐩𝐫𝐨𝐯𝐞 𝐍𝐞𝐱𝐭:&lt;/p&gt;

&lt;p&gt;There are still several things I would like to improve.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;𝗕𝗲𝘁𝘁𝗲𝗿 𝗔𝗽𝗽𝗼𝗶𝗻𝘁𝗺𝗲𝗻𝘁 𝗜𝗻𝘁𝗲𝗴𝗿𝗮𝘁𝗶𝗼𝗻&lt;br&gt;
The current specialist focuses on appointment guidance and preparation. A future version could integrate real clinic availability and appointment booking instead of only guiding the user through the process.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;𝗠𝗼𝗿𝗲 𝗟𝗮𝗻𝗴𝘂𝗮𝗴𝗲 𝗦𝘂𝗽𝗽𝗼𝗿𝘁&lt;br&gt;
The current language-selection flow focuses on English and Hindi. More Indian languages could be added while keeping the same strict native-script approach.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;𝗕𝗲𝘁𝘁𝗲𝗿 𝗢𝗯𝘀𝗲𝗿𝘃𝗮𝗯𝗶𝗹𝗶𝘁𝘆&lt;br&gt;
The analytics dashboard could be expanded with more operational metrics such as latency, handoff rates, tool usage, and failure reasons.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;𝗠𝗼𝗿𝗲 𝗥𝗼𝗯𝘂𝘀𝘁 𝗧𝗲𝘀𝘁𝗶𝗻𝗴&lt;br&gt;
I would also like to expand automated behavioral testing with more real-world conversation scenarios and improve testing around external inference-service failures.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;𝗠𝗼𝗿𝗲 𝗔𝗱𝘃𝗮𝗻𝗰𝗲𝗱 𝗥𝗲𝗺𝗶𝗻𝗱𝗲𝗿 𝗪𝗼𝗿𝗸𝗳𝗹𝗼𝘄𝘀&lt;br&gt;
The current reminder system supports natural-language scheduling, status tracking, cancellation, and outbound reminder calls. A future version could support recurring reminders, richer scheduling options, user-configurable reminder preferences, and more advanced delivery controls.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;𝗠𝗼𝗿𝗲 𝗦𝗽𝗲𝗰𝗶𝗮𝗹𝗶𝘀𝘁 𝗔𝗴𝗲𝗻𝘁𝘀&lt;br&gt;
The same architecture could support additional focused agents, such as a pharmacy information specialist or a health-services navigation specialist, while keeping the main agent responsible for routing.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;𝟖. 𝐋𝐢𝐧𝐤𝐬 𝐭𝐨 𝐭𝐡𝐞 𝐂𝐨𝐝𝐞 𝐚𝐧𝐝 𝐃𝐞𝐦𝐨:&lt;/p&gt;

&lt;p&gt;The project is open for others to explore and learn from.&lt;/p&gt;

&lt;p&gt;𝗚𝗶𝘁𝗛𝘂𝗯 𝗥𝗲𝗽𝗼𝘀𝗶𝘁𝗼𝗿𝘆:&lt;br&gt;
&lt;a href="https://github.com/codewithvishuuu/murf-livekit-starter" rel="noopener noreferrer"&gt;https://github.com/codewithvishuuu/murf-livekit-starter&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The repository contains the agent implementation, prompts, specialist handoff logic, scheduled reminder calls, tests, frontend, analytics, wellness tips, and support flows.&lt;/p&gt;

&lt;p&gt;I also recommend looking at the project structure and tests if you are building your own voice agent. The tests were especially useful for checking routing, safety rules, handoffs, handbacks, language behavior, and privacy boundaries.&lt;/p&gt;




&lt;blockquote&gt;
&lt;p&gt;𝐅𝐢𝐧𝐚𝐥 𝐓𝐡𝐨𝐮𝐠𝐡𝐭𝐬:&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Building Aarogya Sahayak over these 10 days taught me that a useful voice agent is much more than connecting an LLM to speech.&lt;/p&gt;

&lt;p&gt;The difficult part is designing the system around the model: defining clear responsibilities, creating safety boundaries, routing conversations to the right agent, preserving context, protecting user information, and measuring whether the system actually works.&lt;/p&gt;

&lt;p&gt;As the project evolved, I also learned how features such as scheduled reminder calls and accessible wellness guidance can extend a voice agent beyond a single conversation while still keeping safety and privacy at the center.&lt;/p&gt;

&lt;p&gt;The biggest lesson I learned is that a good voice agent should know not only "how to answer", but also "when not to answer itself".&lt;/p&gt;

&lt;p&gt;That is where tools, specialist agents, analytics, scheduled workflows, and human support become important.&lt;/p&gt;

&lt;p&gt;I'm grateful to "&lt;a href="https://murf.ai/" rel="noopener noreferrer"&gt;Murf AI&lt;/a&gt;" for organizing the "10 Days of Voice Agents — #VoiceForBharat Edition" and giving me the opportunity to build, test, break, fix, and improve a real voice-agent project.&lt;/p&gt;

&lt;p&gt;I'm building voice agents using the fastest TTS API — "&lt;a href="https://murf.ai/blog/on-premise" rel="noopener noreferrer"&gt;Murf Falcon&lt;/a&gt;".&lt;/p&gt;

&lt;p&gt;Have you experimented with real-time voice pipelines or &lt;a href="https://livekit.com/" rel="noopener noreferrer"&gt;LiveKit&lt;/a&gt;integrations yet?🛠️ What’s the biggest latency hurdle you’ve run into? Drop your thoughts in the comments below!👇💬&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;𝙏𝙝𝙖𝙣𝙠 𝙮𝙤𝙪 𝙛𝙤𝙧 𝙧𝙚𝙖𝙙𝙞𝙣𝙜! 𝙁𝙚𝙚𝙡 𝙛𝙧𝙚𝙚 𝙩𝙤 𝙧𝙚𝙖𝙘𝙝 𝙤𝙪𝙩 𝙤𝙧 𝙘𝙤𝙣𝙣𝙚𝙘𝙩 𝙤𝙣 &lt;a href="https://www.linkedin.com/in/vishal-kumar-805248335/?skipRedirect=true" rel="noopener noreferrer"&gt;𝙇𝙞𝙣𝙠𝙚𝙙𝙄𝙣&lt;/a&gt; / &lt;a href="https://github.com/codewithvishuuu" rel="noopener noreferrer"&gt;𝙂𝙞𝙩𝙃𝙪𝙗&lt;/a&gt;🤝&lt;br&gt;
𝑽𝒊𝒔𝒉𝒂𝒍 𝑲𝒖𝒎𝒂𝒓💖&lt;/p&gt;
&lt;/blockquote&gt;

</description>
      <category>ai</category>
      <category>python</category>
      <category>voiceai</category>
      <category>voiceforbharat</category>
    </item>
    <item>
      <title>How I Turned an Old Movie Recommendation Project Into a Cinematic AI Platform</title>
      <dc:creator>Vishal Kumar</dc:creator>
      <pubDate>Sun, 24 May 2026 16:35:48 +0000</pubDate>
      <link>https://dev.to/vvisshuuu2500/how-i-turned-an-old-movie-recommendation-project-into-a-cinematic-ai-platform-152j</link>
      <guid>https://dev.to/vvisshuuu2500/how-i-turned-an-old-movie-recommendation-project-into-a-cinematic-ai-platform-152j</guid>
      <description>&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%2F8mrtdd9eivzlgtpwx4dz.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%2F8mrtdd9eivzlgtpwx4dz.png" alt=" " width="800" height="394"&gt;&lt;/a&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/github-2026-05-21"&gt;GitHub Finish-Up-A-Thon Challenge&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

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

&lt;p&gt;I built CineMatch, an AI-powered movie recommendation platform designed with a cinematic Netflix-inspired interface.&lt;/p&gt;

&lt;p&gt;The project started as a small recommendation engine, but during this challenge I focused on transforming it into a much more polished and immersive experience. I redesigned the UI, improved the recommendation logic, added responsive layouts, integrated TMDB live metadata, and reorganized the project architecture into modular components.&lt;/p&gt;

&lt;p&gt;The platform uses TF-IDF vectorization and cosine similarity to recommend movies based on storyline similarity instead of only genres.&lt;/p&gt;

&lt;p&gt;Some major features include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;AI-powered semantic movie recommendations&lt;/li&gt;
&lt;li&gt;Typo-correcting search system&lt;/li&gt;
&lt;li&gt;Live TMDB integration&lt;/li&gt;
&lt;li&gt;Dynamic spotlight movie banners&lt;/li&gt;
&lt;li&gt;Responsive mobile-first layouts&lt;/li&gt;
&lt;li&gt;Personalized watchlist system&lt;/li&gt;
&lt;li&gt;Glassmorphism cinematic UI&lt;/li&gt;
&lt;li&gt;Mood-based recommendation steering&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The app currently works with a local database of more than 45,000 movies.&lt;/p&gt;

&lt;h1&gt;
  
  
  Demo
&lt;/h1&gt;

&lt;h3&gt;
  
  
  Live Demo
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://cinematch-movie-recommender-bqzsppgvepmahksda8qxg9.streamlit.app/" rel="noopener noreferrer"&gt;https://cinematch-movie-recommender-bqzsppgvepmahksda8qxg9.streamlit.app/&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  GitHub Repository
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://github.com/codewithvishuuu/cinematch-movie-recommender" rel="noopener noreferrer"&gt;https://github.com/codewithvishuuu/cinematch-movie-recommender&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Screenshots
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Home Landing&lt;/th&gt;
&lt;th&gt;AI Matcher&lt;/th&gt;
&lt;th&gt;Responsive Layout&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&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%2Ffy1gzpgncphmf5zvy22w.png" alt="Home" width="800" height="394"&gt;&lt;/td&gt;
&lt;td&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%2F4qs3gknl6qtt8a4hgxgr.png" alt="AI" width="799" height="462"&gt;&lt;/td&gt;
&lt;td&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%2Fjub7awi03qx182rs8byh.png" alt="Responsive" width="799" height="459"&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h1&gt;
  
  
  The Comeback Story
&lt;/h1&gt;

&lt;p&gt;Originally this project was a very simple recommendation prototype with basic UI and minimal functionality.&lt;/p&gt;

&lt;p&gt;During the challenge I completely reworked large parts of the project. I reorganized the structure into modular folders, improved the frontend design, added reusable UI components, optimized mobile responsiveness, and connected live TMDB APIs for trailers and metadata.&lt;/p&gt;

&lt;p&gt;One of the biggest improvements was making the interface work properly on smaller screens. Earlier many sections broke on mobile devices, especially buttons, grids, and text layouts. I redesigned the layouts using responsive spacing, adaptive sizing, and flexible containers.&lt;/p&gt;

&lt;p&gt;I also improved the recommendation engine by adding better search handling, typo correction, and mood-based filtering.&lt;/p&gt;

&lt;p&gt;The final result feels much more like a complete product instead of just a small ML experiment.&lt;/p&gt;

&lt;h1&gt;
  
  
  My Experience with GitHub Copilot
&lt;/h1&gt;

&lt;p&gt;GitHub Copilot helped me speed up repetitive development tasks and UI restructuring.&lt;/p&gt;

&lt;p&gt;I mainly used it while:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;reorganizing components&lt;/li&gt;
&lt;li&gt;improving responsive CSS&lt;/li&gt;
&lt;li&gt;generating repetitive layout sections&lt;/li&gt;
&lt;li&gt;refactoring utility logic&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It helped reduce development time, especially during UI polishing and architecture cleanup, while I still manually customized the recommendation logic and overall design decisions.&lt;/p&gt;

&lt;p&gt;Overall this challenge helped me improve both my frontend design skills and project organization workflow.&lt;/p&gt;

</description>
      <category>githubchallenge</category>
      <category>ai</category>
      <category>webdev</category>
      <category>python</category>
    </item>
  </channel>
</rss>
