<?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>SOLO: A Local-First AI Developer Agent That Works With Gemma 4</title>
      <dc:creator>Vishal Kumar</dc:creator>
      <pubDate>Mon, 26 Oct 2026 12:59:23 +0000</pubDate>
      <link>https://dev.to/vvisshuuu2500/solo-a-local-first-ai-developer-agent-that-works-with-gemma-4-7pj</link>
      <guid>https://dev.to/vvisshuuu2500/solo-a-local-first-ai-developer-agent-that-works-with-gemma-4-7pj</guid>
      <description>&lt;p&gt;&lt;em&gt;This is my submission for the &lt;a href="https://dev.to/challenges/hacktoberfest-week3-2026-10-19"&gt;Hacktoberfest Open-Source AI Challenge Week 3: Slow and Steady&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

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

&lt;p&gt;I built &lt;strong&gt;SOLO&lt;/strong&gt;, a local-first AI developer agent designed to help developers work with AI without being locked into a single model or cloud provider.&lt;/p&gt;

&lt;p&gt;I wanted to explore something beyond a basic AI chatbot. Something that could actually interact with a development environment, understand project context, use tools, and help with everyday engineering tasks.&lt;/p&gt;

&lt;p&gt;Most AI coding assistants depend heavily on hosted APIs. That's useful, but I also wanted the option to work locally, keep development context on my own machine, and switch between different AI models whenever needed.&lt;/p&gt;

&lt;p&gt;That's where SOLO comes in.&lt;/p&gt;

&lt;p&gt;With SOLO, developers can use a locally running Gemma 4 model through Ollama or connect to hosted AI providers. The same agent runtime handles both.&lt;/p&gt;

&lt;p&gt;Some things SOLO can do:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Read and search project files.&lt;/li&gt;
&lt;li&gt;Write and modify files through controlled tools.&lt;/li&gt;
&lt;li&gt;Execute calculations.&lt;/li&gt;
&lt;li&gt;Run restricted shell commands with permission checks.&lt;/li&gt;
&lt;li&gt;Use skills to provide additional instructions and capabilities.&lt;/li&gt;
&lt;li&gt;Connect external tools through MCP.&lt;/li&gt;
&lt;li&gt;Maintain sessions, memory, and execution traces.&lt;/li&gt;
&lt;li&gt;Switch between local and hosted AI providers.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The idea is simple: &lt;strong&gt;Your development agent, your models, your environment, your control.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Demo
&lt;/h2&gt;

&lt;p&gt;[Add your SOLO demo video or deployed dashboard link here]&lt;/p&gt;

&lt;p&gt;A short walkthrough showing local Gemma 4 running through Ollama, interacting with the agent, using tools, and switching providers would be a good demonstration.&lt;/p&gt;

&lt;h2&gt;
  
  
  Code
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;GitHub Repository:&lt;/strong&gt; [Add your SOLO GitHub repository URL]&lt;/p&gt;

&lt;p&gt;I'd love for developers to explore the implementation, experiment with different models, and contribute ideas.&lt;/p&gt;

&lt;h2&gt;
  
  
  How I Built It
&lt;/h2&gt;

&lt;p&gt;I built SOLO around a shared agent runtime rather than creating separate implementations for different AI providers.&lt;/p&gt;

&lt;p&gt;This was important because I didn't want the agent's behavior to change completely whenever someone switched models.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Gemma 4 + Ollama (Local AI)
&lt;/h3&gt;

&lt;p&gt;For the local AI setup, I integrated &lt;strong&gt;Gemma 4 through Ollama&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;I'm currently using &lt;code&gt;gemma4:e2b&lt;/code&gt; locally.&lt;/p&gt;

&lt;p&gt;Ollama makes it possible to run the model on my own machine and communicate with it through a local API.&lt;/p&gt;

&lt;p&gt;This gives SOLO an offline-capable model option without requiring every interaction to go through a hosted AI service.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Multiple AI Providers
&lt;/h3&gt;

&lt;p&gt;I didn't want SOLO to depend on just one model.&lt;/p&gt;

&lt;p&gt;The provider architecture supports:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Ollama local provider.&lt;/li&gt;
&lt;li&gt;OpenAI-compatible API provider.&lt;/li&gt;
&lt;li&gt;Optional LiteLLM adapter.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This makes it possible to experiment with different models without rebuilding the entire agent.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. The Agent Runtime
&lt;/h3&gt;

&lt;p&gt;The core of SOLO is a shared runtime implemented in Python.&lt;/p&gt;

&lt;p&gt;Both the CLI and API use the same &lt;code&gt;SoloContext&lt;/code&gt; runtime.&lt;/p&gt;

&lt;p&gt;The agent follows a controlled execution flow:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Receive the user's request.&lt;/li&gt;
&lt;li&gt;Validate the request.&lt;/li&gt;
&lt;li&gt;Load relevant skills.&lt;/li&gt;
&lt;li&gt;Send context to the selected model.&lt;/li&gt;
&lt;li&gt;Validate requested tool calls.&lt;/li&gt;
&lt;li&gt;Check permissions.&lt;/li&gt;
&lt;li&gt;Request approval when required.&lt;/li&gt;
&lt;li&gt;Execute approved tools.&lt;/li&gt;
&lt;li&gt;Persist the result and execution trace.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;I wanted the agent to have actual boundaries instead of blindly executing whatever the model suggests.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Tools and Permissions
&lt;/h3&gt;

&lt;p&gt;SOLO includes tools for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;File listing and reading.&lt;/li&gt;
&lt;li&gt;File writing.&lt;/li&gt;
&lt;li&gt;Project search.&lt;/li&gt;
&lt;li&gt;Calculations.&lt;/li&gt;
&lt;li&gt;Restricted shell execution.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Shell execution is disabled by default and uses an allowlist.&lt;/p&gt;

&lt;p&gt;The agent also supports approval workflows, so sensitive operations are not automatically executed without authorization.&lt;/p&gt;

&lt;h3&gt;
  
  
  5. MCP Integration
&lt;/h3&gt;

&lt;p&gt;Another interesting part of this project is Model Context Protocol (MCP).&lt;/p&gt;

&lt;p&gt;SOLO supports MCP connections through:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;stdio&lt;/li&gt;
&lt;li&gt;SSE&lt;/li&gt;
&lt;li&gt;Streamable HTTP&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This allows the agent to connect to external tools and services instead of being limited to its built-in capabilities.&lt;/p&gt;

&lt;h3&gt;
  
  
  6. Memory and Sessions
&lt;/h3&gt;

&lt;p&gt;I also implemented persistent sessions, memory, and execution traces using SQLite.&lt;/p&gt;

&lt;p&gt;This helps keep track of previous interactions and makes it easier to inspect what the agent actually did.&lt;/p&gt;

&lt;h3&gt;
  
  
  7. Dashboard and CLI
&lt;/h3&gt;

&lt;p&gt;SOLO isn't limited to a terminal.&lt;/p&gt;

&lt;p&gt;The project includes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Typer-based CLI.&lt;/li&gt;
&lt;li&gt;FastAPI backend.&lt;/li&gt;
&lt;li&gt;React + Vite dashboard.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The dashboard provides an interface for interacting with the agent and managing its functionality.&lt;/p&gt;

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

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Component&lt;/th&gt;
&lt;th&gt;Technology&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;AI Model&lt;/td&gt;
&lt;td&gt;Gemma 4 (gemma4:e2b)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Local Inference&lt;/td&gt;
&lt;td&gt;Ollama&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Backend&lt;/td&gt;
&lt;td&gt;Python, FastAPI&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;CLI&lt;/td&gt;
&lt;td&gt;Typer&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Frontend&lt;/td&gt;
&lt;td&gt;React, Vite&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Database&lt;/td&gt;
&lt;td&gt;SQLite&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;AI Providers&lt;/td&gt;
&lt;td&gt;Ollama, OpenAI-compatible APIs, LiteLLM&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Tool Integration&lt;/td&gt;
&lt;td&gt;MCP&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Testing&lt;/td&gt;
&lt;td&gt;Pytest&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Why Does Open Innovation Matter?
&lt;/h2&gt;

&lt;p&gt;One of the biggest reasons I wanted to work with open-weight models was control.&lt;/p&gt;

&lt;p&gt;Developers should have the freedom to experiment with AI without always depending on external APIs.&lt;/p&gt;

&lt;p&gt;Using Gemma 4 with Ollama gives SOLO a local execution option. It makes experimentation easier and allows developers to keep model interactions on their own machine when using the local provider.&lt;/p&gt;

&lt;p&gt;I also like that open models encourage developers to understand what's happening behind the interface rather than treating AI as a black box.&lt;/p&gt;

&lt;p&gt;For me, this challenge was a good opportunity to explore how open-weight models can become part of real developer tools.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Lazy Payoff
&lt;/h2&gt;

&lt;p&gt;The biggest benefit of SOLO is that I don't have to build a completely different agent whenever I want to try another model.&lt;/p&gt;

&lt;p&gt;I can switch between a local Gemma 4 model and hosted providers while keeping the same agent runtime, tools, and workflow.&lt;/p&gt;

&lt;p&gt;It also gives me a structured way to experiment with tool execution, project context, permissions, and MCP integrations.&lt;/p&gt;

&lt;p&gt;I'm still improving the project, but building it has taught me a lot about what goes into making an AI agent useful beyond simply generating text.&lt;/p&gt;

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

&lt;p&gt;Building SOLO helped me understand that an AI agent is much more than a model connected to a chat interface.&lt;/p&gt;

&lt;p&gt;The interesting engineering challenges are around:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Tool execution and validation.&lt;/li&gt;
&lt;li&gt;Provider abstraction.&lt;/li&gt;
&lt;li&gt;Permission management.&lt;/li&gt;
&lt;li&gt;Session persistence.&lt;/li&gt;
&lt;li&gt;Error handling and retries.&lt;/li&gt;
&lt;li&gt;Keeping local and hosted model workflows consistent.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These are the parts I enjoyed exploring the most.&lt;/p&gt;

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

&lt;p&gt;I want to continue improving SOLO by making its tool ecosystem more extensible, strengthening its security, improving the developer experience, and exploring more open-weight models.&lt;/p&gt;

&lt;p&gt;My long-term goal is to make SOLO a practical agent harness that developers can run locally, customize, and extend according to their own workflows.&lt;/p&gt;




&lt;p&gt;Built with curiosity, Python, Ollama, and Gemma 4.&lt;/p&gt;

&lt;p&gt;Thanks for checking out SOLO!&lt;/p&gt;

&lt;h1&gt;
  
  
  Hacktoberfest #Gemma4 #Ollama #OpenSource #AI #DeveloperTools
&lt;/h1&gt;

</description>
      <category>devchallenge</category>
      <category>hf26challenge</category>
      <category>ai</category>
    </item>
    <item>
      <title>Community Copilot: An AI-Powered Discord Assistant for Developer Communities</title>
      <dc:creator>Vishal Kumar</dc:creator>
      <pubDate>Mon, 19 Oct 2026 06:29:26 +0000</pubDate>
      <link>https://dev.to/vvisshuuu2500/community-copilot-an-ai-powered-discord-assistant-for-developer-communities-9en</link>
      <guid>https://dev.to/vvisshuuu2500/community-copilot-an-ai-powered-discord-assistant-for-developer-communities-9en</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/hacktoberfest-week2-2026-10-12"&gt;Hacktoberfest Open-Source AI Challenge Week 2: Side Hustle&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

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

&lt;p&gt;Developer communities on Discord are full of valuable knowledge: bug reports, troubleshooting discussions, questions, solutions, and helpful conversations. But as a community grows, finding that information becomes increasingly difficult.&lt;/p&gt;

&lt;p&gt;Important solutions get buried in long threads. Moderators spend time reviewing repeated issues, and newcomers often ask questions that have already been answered.&lt;/p&gt;

&lt;p&gt;I built &lt;strong&gt;Community Copilot&lt;/strong&gt;, an AI-powered Discord assistant designed to help communities organize discussions, understand technical problems, and turn past conversations into searchable knowledge.&lt;/p&gt;

&lt;p&gt;Instead of treating every conversation as disposable, Community Copilot helps preserve useful information for the next person who encounters the same problem.&lt;/p&gt;

&lt;h3&gt;
  
  
  What can it do?
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Thread summarization:&lt;/strong&gt; Turn long Discord discussions into structured summaries containing the main problem, findings, attempted solutions, blockers, unanswered questions, and next steps.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Image analysis:&lt;/strong&gt; Analyze screenshots shared in technical discussions, including error messages and debugging information.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Issue tracking:&lt;/strong&gt; Help moderators propose solutions and manage their approval or rejection.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Searchable knowledge base:&lt;/strong&gt; Search past discussions and approved solutions using &lt;code&gt;/kb-search&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Human-reviewed solutions:&lt;/strong&gt; Keep proposed solutions separate from approved knowledge so moderators can review them before they become searchable.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cancellation controls:&lt;/strong&gt; Allow users to cancel their own pending or running summarization requests.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Source links:&lt;/strong&gt; Keep references to the original discussions so users can revisit the context behind a summary.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Privacy-conscious interactions:&lt;/strong&gt; Use private command responses by default and enforce access controls for supported operations.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Community Copilot currently supports 11 Discord slash commands, covering status checks, summarization, knowledge search, moderation workflows, insights, and privacy-related operations.&lt;/p&gt;

&lt;p&gt;The goal is simple: &lt;strong&gt;help communities spend less time searching through old conversations and more time solving problems together.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Potential users include developer communities, open-source project maintainers, student tech clubs, programming servers, and volunteer moderators.&lt;/p&gt;

&lt;h2&gt;
  
  
  Demo
&lt;/h2&gt;

&lt;p&gt;Community Copilot runs as a Discord bot, so its interface lives directly inside Discord.&lt;/p&gt;

&lt;p&gt;The current demo covers:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Checking the bot's health using &lt;code&gt;/status&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Summarizing a technical discussion with &lt;code&gt;/summarize&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Analyzing an error screenshot as part of a discussion.&lt;/li&gt;
&lt;li&gt;Searching previous discussions using &lt;code&gt;/kb-search&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Proposing, approving, and rejecting solutions through moderation commands.&lt;/li&gt;
&lt;li&gt;Cancelling a running summarization task.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;I tested these workflows in a Discord test server, including image analysis, knowledge-base search, solution approval and rejection, and cancellation of a running task.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Demo:&lt;/strong&gt; Add a link to your demo video or screenshots here if available.&lt;/p&gt;

&lt;h2&gt;
  
  
  Code
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;GitHub repository:&lt;/strong&gt; &lt;a href="https://github.com/codewithvishuuu/community-copilot" rel="noopener noreferrer"&gt;https://github.com/codewithvishuuu/community-copilot&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The repository contains the bot implementation, configuration examples, documentation, and automated tests.&lt;/p&gt;

&lt;p&gt;Please make sure the repository is public and the latest intended changes are pushed before publishing this article.&lt;/p&gt;

&lt;h2&gt;
  
  
  How I Built It
&lt;/h2&gt;

&lt;p&gt;Community Copilot is built with Python and &lt;code&gt;discord.py&lt;/code&gt;, with a local language model handling AI inference.&lt;/p&gt;

&lt;h3&gt;
  
  
  Technology stack
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Python&lt;/strong&gt; — core application and bot logic.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;discord.py&lt;/strong&gt; — Discord slash commands and interactions.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Ollama&lt;/strong&gt; — local model inference.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Gemma 4 E2B&lt;/strong&gt; — the local model used for analysis and summarization.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;SQLite and FTS5&lt;/strong&gt; — persistent storage and searchable knowledge.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;pytest&lt;/strong&gt; — automated tests.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Ruff&lt;/strong&gt; — code quality and lint checks.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  How the system works
&lt;/h3&gt;

&lt;p&gt;The bot collects messages from a Discord thread, processes the available text and images, and passes the relevant context to the local model. The resulting analysis is validated and organized into a structured summary.&lt;/p&gt;

&lt;p&gt;The application stores relevant information in SQLite. Full-text search helps retrieve past discussions and approved solutions when someone searches for a related issue.&lt;/p&gt;

&lt;p&gt;Moderation commands provide a human-review step before proposed solutions become approved knowledge. This separation matters because an AI-generated suggestion should not automatically become an authoritative answer.&lt;/p&gt;

&lt;p&gt;The project also includes an inference queue, ownership checks for cancellation, privacy controls, source references, and automated tests for important workflows.&lt;/p&gt;

&lt;p&gt;I used an agent-assisted development workflow to build and test the application, then verified the major Discord interactions manually.&lt;/p&gt;

&lt;p&gt;At the time of my latest local verification, the automated suite reported &lt;strong&gt;228 tests passed and 2 skipped&lt;/strong&gt;, and Ruff checks passed. These are local verification results, not a claim of production deployment.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Does Open Innovation Matter?
&lt;/h2&gt;

&lt;p&gt;Open innovation matters because developer communities work best when people can inspect, improve, adapt, and share the tools they use.&lt;/p&gt;

&lt;p&gt;Building Community Copilot around an open-weight model and local inference gives the project several useful properties:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;More control over data flow:&lt;/strong&gt; Inference can run locally rather than requiring every conversation to be sent to a hosted model API.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Model flexibility:&lt;/strong&gt; The model and inference setup can evolve as better open-weight options become available.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Lower dependency on hosted AI services:&lt;/strong&gt; The core analysis workflow can use a locally running model, although the Discord bot itself still requires network access.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Community-driven improvement:&lt;/strong&gt; Other developers can inspect the implementation, report bugs, contribute features, and adapt the bot for their own communities.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Transparency:&lt;/strong&gt; Tests and source code make it easier to understand how the application behaves.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Local inference does not automatically guarantee privacy or eliminate every cost. The deployment environment, Discord integration, permissions, and data-retention policies still matter.&lt;/p&gt;

&lt;p&gt;For me, open innovation means building something that others can understand, run, improve, and make their own.&lt;/p&gt;

&lt;h2&gt;
  
  
  My Agent Session
&lt;/h2&gt;

&lt;p&gt;This section is optional.&lt;/p&gt;

&lt;p&gt;If I publish a session using DevRelay, I will link or embed it here so readers can see how the project was developed.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why This Project Matters to Me
&lt;/h2&gt;

&lt;p&gt;I wanted to build something practical with AI—not just another chatbot that answers isolated questions.&lt;/p&gt;

&lt;p&gt;Community Copilot focuses on the knowledge already created by a community: the discussions people have, the problems they solve, and the lessons worth preserving.&lt;/p&gt;

&lt;p&gt;The interesting part is connecting AI summarization with search, moderation, and a persistent knowledge base. A useful answer should not disappear when a Discord conversation gets buried.&lt;/p&gt;

&lt;p&gt;This is an early-stage project, and there is still room to improve reliability, search quality, error handling, and the overall moderation experience.&lt;/p&gt;

&lt;p&gt;I hope other developers will explore the code, share feedback, and contribute ideas that make it more useful.&lt;/p&gt;

&lt;h2&gt;
  
  
  Prize Categories
&lt;/h2&gt;

&lt;p&gt;Check the challenge rules and list only the partner categories that your project genuinely qualifies for. Remove this section if none apply or if you have not verified the eligible categories.&lt;/p&gt;




&lt;p&gt;Thanks for checking out Community Copilot! If you have ideas for improving AI-powered knowledge management in developer communities, I'd love to hear your feedback.&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>hf26challenge</category>
      <category>ai</category>
      <category>python</category>
    </item>
    <item>
      <title>Verdantra: An AI-Powered Field Journal That Gets You Outdoors 🌿</title>
      <dc:creator>Vishal Kumar</dc:creator>
      <pubDate>Sun, 11 Oct 2026 05:48:36 +0000</pubDate>
      <link>https://dev.to/vvisshuuu2500/verdantra-an-ai-powered-field-journal-that-gets-you-outdoors-3kl5</link>
      <guid>https://dev.to/vvisshuuu2500/verdantra-an-ai-powered-field-journal-that-gets-you-outdoors-3kl5</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/hacktoberfest-week1-2026-10-05"&gt;Hacktoberfest Open-Source AI Challenge Week 1: Touch Grass&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

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

&lt;p&gt;🌿 &lt;strong&gt;Verdantra — Look closer outside.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Verdantra is an open-source, AI-powered botanical field journal designed to encourage people to step away from their screens and explore the natural world.&lt;/p&gt;

&lt;p&gt;The idea is simple: take a photo of a leaf, plant, rock, puddle, or another outdoor subject, and use AI to guide your observation rather than replace it.&lt;/p&gt;

&lt;h3&gt;
  
  
  Key Features
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Photo-based observations:&lt;/strong&gt; Upload an outdoor photo for AI-assisted analysis.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Visible evidence:&lt;/strong&gt; Receive descriptions of features visible in the image, such as leaf colors, shapes, and patterns.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Honest uncertainty:&lt;/strong&gt; The AI highlights what cannot reliably be determined from a photo instead of presenting guesses as facts.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Safe mini-experiments:&lt;/strong&gt; Get short observation activities that encourage real-world exploration without picking, tasting, or damaging plants.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Personal field journal:&lt;/strong&gt; Save your photos, AI predictions, and your own observations for later review.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Online and offline AI modes:&lt;/strong&gt; Use Google's Gemini API in online mode or a local Gemma model through Ollama in offline mode. Each mode can be selected explicitly.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Verdantra is built around an important principle: &lt;strong&gt;AI should encourage curiosity about the real world, not replace our own observations.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Demo
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;GitHub Repository:&lt;/strong&gt; &lt;a href="https://github.com/codewithvishuuu/verdantra" rel="noopener noreferrer"&gt;https://github.com/codewithvishuuu/verdantra&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The project currently runs locally. A public, deployed demo is not available yet.&lt;/p&gt;

&lt;p&gt;The repository includes setup instructions for running the backend and frontend locally, configuring the AI provider, and testing the application.&lt;/p&gt;

&lt;h2&gt;
  
  
  Code
&lt;/h2&gt;

&lt;p&gt;Explore the complete source code:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://github.com/codewithvishuuu/verdantra" rel="noopener noreferrer"&gt;View Verdantra on GitHub&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The repository contains the React frontend, FastAPI backend, AI integration, journal functionality, tests, and individual project documentation files.&lt;/p&gt;

&lt;h2&gt;
  
  
  How I Built It
&lt;/h2&gt;

&lt;p&gt;I built Verdantra using a modern web stack with an emphasis on practical AI integration, privacy awareness, and reliable local development.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Technology stack&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Frontend:&lt;/strong&gt; React, TypeScript, Vite, and Tailwind CSS&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Backend:&lt;/strong&gt; Python and FastAPI&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;AI — Online:&lt;/strong&gt; Google's Gemini API using &lt;code&gt;gemma-4-26b-a4b-it&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;AI — Offline:&lt;/strong&gt; Gemma 4 E2B through Ollama using the &lt;code&gt;gemma4:e2b&lt;/code&gt; model&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Data storage:&lt;/strong&gt; SQLite for journal entries&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Testing:&lt;/strong&gt; Pytest for backend tests, TypeScript checks, and Vite production builds&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The application uses a shared AI service interface so that the observation workflow can work with either provider without requiring separate frontends.&lt;/p&gt;

&lt;p&gt;For online use, the backend sends the image to the configured Gemini API. For offline use, the backend communicates with the local Ollama server, allowing image analysis without an internet connection once the model is installed and running.&lt;/p&gt;

&lt;p&gt;The AI instructions emphasize photo-grounded evidence, plain language, explicit uncertainty, and safe observation activities. Predictions are labelled unverified so users understand that AI-generated descriptions can be wrong.&lt;/p&gt;

&lt;p&gt;I also added automated tests for backend behavior and output constraints. Passing tests verify implementation behavior; they do not guarantee that every AI-generated observation is botanically correct.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Does Open Innovation Matter?
&lt;/h2&gt;

&lt;p&gt;Nature exploration should not depend on expensive hardware or a single online AI service.&lt;/p&gt;

&lt;p&gt;Open-source tools made it possible to build and inspect the complete application, combine different AI inference options, and give users a choice between hosted and local processing.&lt;/p&gt;

&lt;p&gt;Local inference through Ollama also provides an alternative when internet access is unavailable. The hosted option offers a different model and inference path, while the local option keeps image processing on the user's machine.&lt;/p&gt;

&lt;p&gt;Open innovation makes projects like Verdantra easier for other developers to inspect, learn from, improve, and adapt for their own communities.&lt;/p&gt;

&lt;p&gt;I hope other contributors will help improve the quality of observations, accessibility, offline usability, and the overall field-journaling experience.&lt;/p&gt;

&lt;h2&gt;
  
  
  My Agent Session
&lt;/h2&gt;

&lt;p&gt;This section is optional. I do not have a verified, shareable DevRelay agent-session link to include, so I am leaving it out rather than linking to a nonexistent session.&lt;/p&gt;

&lt;h2&gt;
  
  
  Prize Categories
&lt;/h2&gt;

&lt;p&gt;My submission is for the &lt;strong&gt;Hacktoberfest Open-Source AI Challenge — Week 1: Touch Grass&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;I have not added any additional partner prize categories because I have not verified which partner categories apply to this project.&lt;/p&gt;




&lt;p&gt;Built with curiosity, open-source tools, and a little more time outdoors.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Verdantra — Look closer outside. 🌱&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>hf26challenge</category>
      <category>opensource</category>
      <category>ai</category>
    </item>
    <item>
      <title>I Built StudyMate for a Friend Who Was Tired of Studying From Scattered PDFs</title>
      <dc:creator>Vishal Kumar</dc:creator>
      <pubDate>Sun, 04 Oct 2026 16:40:31 +0000</pubDate>
      <link>https://dev.to/vvisshuuu2500/i-built-studymate-for-a-friend-who-was-tired-of-studying-from-scattered-pdfs-1mmg</link>
      <guid>https://dev.to/vvisshuuu2500/i-built-studymate-for-a-friend-who-was-tired-of-studying-from-scattered-pdfs-1mmg</guid>
      <description>&lt;h2&gt;
  
  
  What I Built
&lt;/h2&gt;

&lt;p&gt;I built &lt;strong&gt;StudyMate&lt;/strong&gt;, a grounded AI study companion for a friend who was struggling with scattered PDFs, notes, and revision material.&lt;/p&gt;

&lt;p&gt;The problem was simple: studying required constantly switching between PDFs, searching for specific topics, asking questions in separate AI tools, creating revision notes, and figuring out what was actually remembered.&lt;/p&gt;

&lt;p&gt;StudyMate brings this workflow into one focused study space.&lt;/p&gt;

&lt;p&gt;Its core loop is:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Learn → Ask → Practice → Identify Weakness → Revise → Improve&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Students can upload their study PDFs and use them to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Ask questions grounded in their own study material&lt;/li&gt;
&lt;li&gt;Generate revision-ready summaries&lt;/li&gt;
&lt;li&gt;Create quizzes with different difficulty levels&lt;/li&gt;
&lt;li&gt;Practice with AI-generated flashcards&lt;/li&gt;
&lt;li&gt;Build a study plan based on their exam date and available study time&lt;/li&gt;
&lt;li&gt;Track their study progress&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The most important design rule is &lt;strong&gt;grounding&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;StudyMate should not pretend to know something that is not present in the student's uploaded material. If the required information cannot be found, it responds:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"I couldn't find this information in your uploaded study material."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;It also preserves source and page information so that answers can be traced back to the student's actual notes instead of using fabricated citations.&lt;/p&gt;

&lt;p&gt;I built StudyMate specifically for a real student workflow rather than creating another general-purpose AI chatbot.&lt;/p&gt;

&lt;h2&gt;
  
  
  Demo
&lt;/h2&gt;

&lt;p&gt;Try StudyMate here:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Live Demo:&lt;/strong&gt; &lt;a href="https://studymate-frontend-hbi2.onrender.com" rel="noopener noreferrer"&gt;https://studymate-frontend-hbi2.onrender.com&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You can upload a study PDF, select your study material, ask grounded questions, generate summaries, create quizzes, practice flashcards, and build a personalized study plan.&lt;/p&gt;

&lt;p&gt;The live demo is deployed on Render so anyone can open it and try the application directly in their browser.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; The current deployment is running on Render's free infrastructure, so uploaded study data should not be considered permanent storage. The live deployment is primarily intended for demonstrating and testing the application.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Code
&lt;/h2&gt;

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

&lt;p&gt;&lt;strong&gt;GitHub Repository:&lt;/strong&gt; &lt;a href="https://github.com/codewithvishuuu/studymate" rel="noopener noreferrer"&gt;https://github.com/codewithvishuuu/studymate&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The project is open source and released under the &lt;strong&gt;MIT License&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The repository contains the complete React frontend, FastAPI backend, AI/RAG pipeline, document processing, database logic, tests, and deployment configuration.&lt;/p&gt;

&lt;p&gt;The project was built as a full-stack application rather than a frontend-only AI demo, with the backend handling AI orchestration, retrieval, document processing, and application logic.&lt;/p&gt;

&lt;h2&gt;
  
  
  How I Built It
&lt;/h2&gt;

&lt;p&gt;StudyMate is built as a full-stack AI application using &lt;strong&gt;React, TypeScript, Vite, Tailwind CSS, Python, FastAPI, ChromaDB, and Gemma&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The core AI workflow is based on &lt;strong&gt;Retrieval-Augmented Generation (RAG)&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;When a student uploads a PDF, StudyMate processes it through this pipeline:&lt;/p&gt;

&lt;p&gt;PDF&lt;br&gt;
 ↓&lt;br&gt;
Text Extraction&lt;br&gt;
 ↓&lt;br&gt;
Cleaning&lt;br&gt;
 ↓&lt;br&gt;
Page-Aware Chunking&lt;br&gt;
 ↓&lt;br&gt;
Embeddings&lt;br&gt;
 ↓&lt;br&gt;
ChromaDB&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Does Open Innovation Matter?
&lt;/h2&gt;

&lt;p&gt;For StudyMate, open innovation means having more flexibility and control over the AI layer instead of building the entire product around a closed, black-box system.&lt;/p&gt;

&lt;p&gt;I chose &lt;strong&gt;Gemma&lt;/strong&gt; as the generation model because it gives me an open-weight model that I can experiment with as the project evolves.&lt;/p&gt;

&lt;p&gt;With this approach, I can explore different possibilities in the future, such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Different Gemma variants&lt;/li&gt;
&lt;li&gt;Local inference&lt;/li&gt;
&lt;li&gt;Different retrieval strategies&lt;/li&gt;
&lt;li&gt;Different embedding models&lt;/li&gt;
&lt;li&gt;Fine-tuning&lt;/li&gt;
&lt;li&gt;Different deployment environments&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This flexibility is important for StudyMate because the AI model is only one part of the system. The document processing, retrieval pipeline, source attribution, and study features can continue evolving independently.&lt;/p&gt;

&lt;p&gt;The project also helped me understand that open innovation is not only about using an open model. It is about having the freedom to experiment, understand the technology, and build a system that can evolve with the needs of its users.&lt;/p&gt;

&lt;p&gt;For a study application, that flexibility can eventually mean better control over cost, privacy, deployment, and model choice.&lt;/p&gt;

&lt;h2&gt;
  
  
  Building for a Friend
&lt;/h2&gt;

&lt;p&gt;I built StudyMate around a real problem faced by a friend: studying from scattered PDFs and notes was taking more effort than it should.&lt;/p&gt;

&lt;p&gt;Instead of starting with the question, "What AI feature can I build?", I started with:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"What would actually make studying easier for my friend?"&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That changed the direction of the project.&lt;/p&gt;

&lt;p&gt;I focused on making the student's own study material the center of the experience.&lt;/p&gt;

&lt;p&gt;That led to a few important decisions:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Answers should be grounded in the uploaded study material.&lt;/li&gt;
&lt;li&gt;Source and page information should be preserved.&lt;/li&gt;
&lt;li&gt;The system should never create fake citations.&lt;/li&gt;
&lt;li&gt;Students should be able to turn their notes into summaries.&lt;/li&gt;
&lt;li&gt;Quizzes should be generated from the same study material.&lt;/li&gt;
&lt;li&gt;Flashcards should support active recall.&lt;/li&gt;
&lt;li&gt;A study plan should help organize revision around an exam date.&lt;/li&gt;
&lt;li&gt;If information is not available in the uploaded material, the AI should clearly say so.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The goal was not to build another general-purpose chatbot.&lt;/p&gt;

&lt;p&gt;The goal was to build something my friend could actually use as part of their study routine.&lt;/p&gt;

&lt;p&gt;That is why the core experience of StudyMate is:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Upload → Understand → Ask → Practice → Revise → Improve&lt;/strong&gt;&lt;/p&gt;

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

&lt;p&gt;One of the biggest lessons from building StudyMate was that building an AI feature is very different from building a reliable AI product.&lt;/p&gt;

&lt;p&gt;Getting an AI model to answer a question is relatively easy.&lt;/p&gt;

&lt;p&gt;The harder part is making sure that the answer is based on the correct source, that relevant context is retrieved, that source information is preserved, and that the system knows when it does not have enough information to answer.&lt;/p&gt;

&lt;p&gt;Working on the RAG pipeline also taught me how important retrieval quality is.&lt;/p&gt;

&lt;p&gt;A powerful model with poor context can still produce a poor answer. Giving the model relevant and well-structured context makes the generation much more useful.&lt;/p&gt;

&lt;p&gt;I also learned that the parts of an AI application that users don't immediately see are extremely important.&lt;/p&gt;

&lt;p&gt;During the project, I spent significant time working on:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;PDF processing&lt;/li&gt;
&lt;li&gt;Page-aware chunking&lt;/li&gt;
&lt;li&gt;Retrieval&lt;/li&gt;
&lt;li&gt;Source attribution&lt;/li&gt;
&lt;li&gt;API error handling&lt;/li&gt;
&lt;li&gt;Loading states&lt;/li&gt;
&lt;li&gt;Responsive UI&lt;/li&gt;
&lt;li&gt;Mobile layouts&lt;/li&gt;
&lt;li&gt;CORS&lt;/li&gt;
&lt;li&gt;Production routing&lt;/li&gt;
&lt;li&gt;Deployment&lt;/li&gt;
&lt;li&gt;Testing&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The project also reinforced an important principle for me:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;AI should not just generate answers. It should behave reliably within the context of the problem it is solving.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;For StudyMate, that means being grounded in the student's material and being honest when the material does not contain the answer.&lt;/p&gt;

&lt;h2&gt;
  
  
  Testing
&lt;/h2&gt;

&lt;p&gt;I wanted StudyMate to be more than a happy-path AI demo, so I tested both the backend and the frontend throughout the build.&lt;/p&gt;

&lt;p&gt;The backend currently has:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;46 passing tests&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I also tested the frontend across different screen sizes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;1440px desktop&lt;/li&gt;
&lt;li&gt;1024px tablet&lt;/li&gt;
&lt;li&gt;768px tablet&lt;/li&gt;
&lt;li&gt;390px mobile&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The application was checked for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Horizontal overflow&lt;/li&gt;
&lt;li&gt;Console errors&lt;/li&gt;
&lt;li&gt;Failed API requests&lt;/li&gt;
&lt;li&gt;Responsive layouts&lt;/li&gt;
&lt;li&gt;Real API flows&lt;/li&gt;
&lt;li&gt;Grounded answers&lt;/li&gt;
&lt;li&gt;Not-found behavior&lt;/li&gt;
&lt;li&gt;Source and page citations&lt;/li&gt;
&lt;li&gt;Quiz generation&lt;/li&gt;
&lt;li&gt;Flashcards&lt;/li&gt;
&lt;li&gt;Study plans&lt;/li&gt;
&lt;li&gt;Settings persistence&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I also tested the production deployment.&lt;/p&gt;

&lt;p&gt;During deployment, I found a client-side routing issue where refreshing an internal React route could return a &lt;code&gt;Not Found&lt;/code&gt; page. I fixed this by adding a Render SPA rewrite so routes such as &lt;code&gt;/notes&lt;/code&gt;, &lt;code&gt;/ask&lt;/code&gt;, &lt;code&gt;/quiz&lt;/code&gt;, and &lt;code&gt;/flashcards&lt;/code&gt; correctly load the React application when refreshed.&lt;/p&gt;

&lt;p&gt;The goal was to make sure StudyMate works as an actual application that someone can use, rather than only working during development on my local machine.&lt;/p&gt;

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

&lt;h3&gt;
  
  
  Frontend
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;React&lt;/li&gt;
&lt;li&gt;TypeScript&lt;/li&gt;
&lt;li&gt;Vite&lt;/li&gt;
&lt;li&gt;Tailwind CSS&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Backend
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Python&lt;/li&gt;
&lt;li&gt;FastAPI&lt;/li&gt;
&lt;li&gt;Pydantic&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  AI &amp;amp; RAG
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Gemma 4&lt;/li&gt;
&lt;li&gt;Google Gemini API&lt;/li&gt;
&lt;li&gt;Embeddings&lt;/li&gt;
&lt;li&gt;Retrieval-Augmented Generation (RAG)&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Data &amp;amp; Storage
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;ChromaDB&lt;/li&gt;
&lt;li&gt;SQLite&lt;/li&gt;
&lt;li&gt;PDF/document storage&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Deployment
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Render&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Best Use of Gemma
&lt;/h2&gt;

&lt;p&gt;I am entering StudyMate in the &lt;strong&gt;Best Use of Gemma&lt;/strong&gt; category.&lt;/p&gt;

&lt;p&gt;Gemma is not being used as a superficial add-on. It is part of the core generation pipeline that powers the grounded study experience.&lt;/p&gt;

&lt;p&gt;When a student asks a question, StudyMate first retrieves relevant information from the student's uploaded study material using embeddings and ChromaDB. The retrieved context is then passed to Gemma to generate the final grounded response.&lt;/p&gt;

&lt;p&gt;This architecture allows Gemma to work with the student's actual study material instead of treating StudyMate as a general-purpose chatbot.&lt;/p&gt;

&lt;p&gt;For the current deployed version, Gemma is served through the Google Gemini API, while the backend handles the AI orchestration and retrieval pipeline.&lt;/p&gt;

&lt;p&gt;Using Gemma also gives me room to explore future directions such as local inference, different Gemma variants, improved retrieval strategies, and other deployment approaches.&lt;/p&gt;

&lt;p&gt;The model is therefore directly connected to the core problem StudyMate is solving: helping students understand and practice from their own study material.&lt;/p&gt;

&lt;h2&gt;
  
  
  Final Thoughts
&lt;/h2&gt;

&lt;p&gt;I started with a simple problem: studying from scattered PDFs and notes was harder than it needed to be.&lt;/p&gt;

&lt;p&gt;That problem became StudyMate.&lt;/p&gt;

&lt;p&gt;Instead of building another general-purpose AI chatbot, I wanted to create a study companion that understands the student's own material, helps them practice, and supports their revision workflow.&lt;/p&gt;

&lt;p&gt;The project taught me that building with AI is not only about choosing a powerful model. It is also about grounding, reliability, source attribution, good product design, and solving a real problem for a real person.&lt;/p&gt;

&lt;p&gt;The core idea behind StudyMate is simple:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Learn → Ask → Practice → Revise → Improve&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I hope StudyMate can make studying a little more focused, practical, and useful for the person I built it for.&lt;/p&gt;

&lt;p&gt;Thanks for checking it out!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Live Demo:&lt;/strong&gt; &lt;a href="https://studymate-frontend-hbi2.onrender.com" rel="noopener noreferrer"&gt;https://studymate-frontend-hbi2.onrender.com&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;GitHub:&lt;/strong&gt; &lt;a href="https://github.com/codewithvishuuu/studymate" rel="noopener noreferrer"&gt;https://github.com/codewithvishuuu/studymate&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  My Agent Session
&lt;/h2&gt;

&lt;p&gt;I used AI-assisted development throughout the process of designing, implementing, testing, and polishing StudyMate.&lt;/p&gt;

&lt;p&gt;The development process included planning the architecture, building the RAG pipeline, implementing the study features, testing the application across screen sizes, debugging deployment issues, and preparing the project for release.&lt;/p&gt;

&lt;p&gt;I am not adding a DevRelay session link here because I do not want to publish an unverified or placeholder URL.&lt;/p&gt;

&lt;h2&gt;
  
  
  Additional Notes
&lt;/h2&gt;

&lt;p&gt;StudyMate is an open-source project built specifically around the idea of using AI to solve a practical study problem.&lt;/p&gt;

&lt;p&gt;The project is intentionally focused on grounded AI rather than generic AI generation. The student's own study material remains at the center of the experience, while Gemma, RAG, retrieval, and the study tools work together to support learning and revision.&lt;/p&gt;

&lt;p&gt;The project is still evolving, and future improvements will focus on better retrieval, stronger study analytics, more local inference options, and feedback from actual users.&lt;/p&gt;

&lt;h2&gt;
  
  
  Thank You
&lt;/h2&gt;

&lt;p&gt;Thank you for taking the time to check out StudyMate.&lt;/p&gt;

&lt;p&gt;I hope this project shows how open AI and thoughtful product design can come together to solve a simple problem for a real person.&lt;/p&gt;

&lt;p&gt;If you try StudyMate, I'd love to hear what you think and what I can improve next.&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>weekendchallenge</category>
      <category>hf26challenge</category>
    </item>
    <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>
