<?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: KUSAL SARKAR</title>
    <description>The latest articles on DEV Community by KUSAL SARKAR (@kusal_099098).</description>
    <link>https://dev.to/kusal_099098</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%2F4078743%2F6e57c1e1-4808-492e-8eeb-690c75781729.png</url>
      <title>DEV Community: KUSAL SARKAR</title>
      <link>https://dev.to/kusal_099098</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/kusal_099098"/>
    <language>en</language>
    <item>
      <title>NOVA THE LOCAL AI ASSISTANT</title>
      <dc:creator>KUSAL SARKAR</dc:creator>
      <pubDate>Mon, 26 Oct 2026 04:28:31 +0000</pubDate>
      <link>https://dev.to/kusal_099098/nova-the-local-ai-assistant-52a</link>
      <guid>https://dev.to/kusal_099098/nova-the-local-ai-assistant-52a</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a 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;h2&gt;
  
  
  What I Built
&lt;/h2&gt;

&lt;p&gt;I built &lt;strong&gt;NOVA (Neural Operational Virtual Assistant)&lt;/strong&gt;, a local-first, JARVIS-inspired AI desktop assistant designed to take care of repetitive computer tasks and make everyday digital work easier.&lt;/p&gt;

&lt;p&gt;Think about how often we switch between applications, search for files, repeat the same instructions, check system information, or explain the same project context to an AI assistant.&lt;/p&gt;

&lt;p&gt;NOVA aims to bring these interactions together in one place.&lt;/p&gt;

&lt;p&gt;It supports:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Local AI conversations:&lt;/strong&gt; Ask questions and get responses from locally running language models.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Offline voice interaction:&lt;/strong&gt; Talk to NOVA using local speech recognition and speech synthesis.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Persistent memory:&lt;/strong&gt; Remember user preferences, projects, conversations, tasks, and useful knowledge.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Desktop automation:&lt;/strong&gt; Perform supported application, file, and system operations through registered tools.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Visual intelligence:&lt;/strong&gt; Understand relevant desktop context using local screen capture and OCR.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Multi-agent orchestration:&lt;/strong&gt; Coordinate research, development, system, vision, and memory tasks.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Proactive automation:&lt;/strong&gt; Schedule reminders, monitor configured conditions, and prepare useful briefings.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Personalization:&lt;/strong&gt; Adapt recommendations and context based on user preferences.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The idea is simple: instead of manually handling every small digital task, I want to interact with one assistant that can understand context and help execute the work.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;NOVA is built to make the user a little lazier, without taking control away from them.&lt;/strong&gt;&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;Project:&lt;/strong&gt; NOVA — Neural Operational Virtual Assistant&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Platform:&lt;/strong&gt; Windows Desktop&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Version:&lt;/strong&gt; v1.0 Release Candidate&lt;/p&gt;

&lt;p&gt;The release will showcase:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;NOVA's desktop command center.&lt;/li&gt;
&lt;li&gt;Local AI conversation using Ollama.&lt;/li&gt;
&lt;li&gt;Push-to-talk voice interaction and speech recognition.&lt;/li&gt;
&lt;li&gt;Persistent project and conversation memory.&lt;/li&gt;
&lt;li&gt;Permission-controlled desktop operations.&lt;/li&gt;
&lt;li&gt;Visual intelligence and system monitoring.&lt;/li&gt;
&lt;/ol&gt;

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

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

&lt;p&gt;&lt;strong&gt;NOVA Repository:&lt;/strong&gt; &lt;a href="https://github.com/kusalar/nova-local" rel="noopener noreferrer"&gt;https://github.com/kusalar/nova-local&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The project is developed using a modular architecture, with separate desktop, backend, AI, memory, voice, automation, and orchestration components.&lt;/p&gt;

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

&lt;p&gt;NOVA is built around open-source technologies and open-weight AI models. My goal was to avoid making the assistant dependent on a single closed AI provider.&lt;/p&gt;

&lt;h3&gt;
  
  
  Local AI and Open-Weight Models
&lt;/h3&gt;

&lt;p&gt;I use &lt;strong&gt;Ollama&lt;/strong&gt; as the local model runtime, with Qwen 2.5 models for language generation.&lt;/p&gt;

&lt;p&gt;This allows NOVA to run inference directly on the user's machine. Models can be changed, tested, and optimized depending on available hardware.&lt;/p&gt;

&lt;h3&gt;
  
  
  Offline Voice Pipeline
&lt;/h3&gt;

&lt;p&gt;NOVA's voice architecture combines:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;sounddevice&lt;/strong&gt; for microphone audio capture.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;openWakeWord&lt;/strong&gt; for wake-word detection.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Vosk&lt;/strong&gt; for offline speech recognition.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Ollama&lt;/strong&gt; for local language generation.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Piper TTS&lt;/strong&gt; for offline speech synthesis.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This creates a local voice pipeline without depending on cloud speech APIs.&lt;/p&gt;

&lt;h3&gt;
  
  
  Persistent Semantic Memory
&lt;/h3&gt;

&lt;p&gt;I implemented a SQLite-based memory system with five categories:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;User profile memory&lt;/li&gt;
&lt;li&gt;Project memory&lt;/li&gt;
&lt;li&gt;Conversation memory&lt;/li&gt;
&lt;li&gt;Task memory&lt;/li&gt;
&lt;li&gt;Knowledge memory&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For semantic retrieval, NOVA uses &lt;strong&gt;FastEmbed with BAAI/bge-small-en-v1.5&lt;/strong&gt;, with a lightweight fallback mechanism.&lt;/p&gt;

&lt;p&gt;This helps NOVA retain useful context between conversations instead of treating every interaction as a completely new session.&lt;/p&gt;

&lt;h3&gt;
  
  
  Desktop Automation and Permissions
&lt;/h3&gt;

&lt;p&gt;NOVA includes a registered desktop tool system with 23 tools covering application, file, and system operations.&lt;/p&gt;

&lt;p&gt;The execution architecture includes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Permission-based tool execution.&lt;/li&gt;
&lt;li&gt;Operation previews and user approval.&lt;/li&gt;
&lt;li&gt;Execution logging.&lt;/li&gt;
&lt;li&gt;Cancellation and rollback support.&lt;/li&gt;
&lt;li&gt;Restricted access to sensitive locations and operations.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I wanted NOVA to be useful without allowing an AI model to execute arbitrary actions without authorization.&lt;/p&gt;

&lt;h3&gt;
  
  
  Multi-Agent Orchestration
&lt;/h3&gt;

&lt;p&gt;NOVA uses five logical agents:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Research Agent&lt;/li&gt;
&lt;li&gt;Developer Agent&lt;/li&gt;
&lt;li&gt;System Agent&lt;/li&gt;
&lt;li&gt;Vision Agent&lt;/li&gt;
&lt;li&gt;Memory Agent&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These agents share a local model runtime. A workflow orchestrator coordinates tasks, manages dependencies, and applies execution permissions.&lt;/p&gt;

&lt;h3&gt;
  
  
  Visual Intelligence
&lt;/h3&gt;

&lt;p&gt;I added local screen awareness using Windows screen capture and OCR.&lt;/p&gt;

&lt;p&gt;It can extract relevant desktop context while applying privacy filters to sensitive information. The subsystem is designed to be read-only.&lt;/p&gt;

&lt;h3&gt;
  
  
  Technology Stack
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Layer&lt;/th&gt;
&lt;th&gt;Technologies&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Desktop&lt;/td&gt;
&lt;td&gt;Tauri, React, TypeScript&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;Local AI&lt;/td&gt;
&lt;td&gt;Ollama, Qwen 2.5&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Speech recognition&lt;/td&gt;
&lt;td&gt;Vosk&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Wake-word detection&lt;/td&gt;
&lt;td&gt;openWakeWord&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Speech synthesis&lt;/td&gt;
&lt;td&gt;Piper TTS&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Memory&lt;/td&gt;
&lt;td&gt;SQLite, FastEmbed&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;System monitoring&lt;/td&gt;
&lt;td&gt;psutil&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Visual intelligence&lt;/td&gt;
&lt;td&gt;Windows OCR&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;For NOVA, open innovation is not just about choosing free technologies. It is about having control over the entire AI experience.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Privacy Comes First
&lt;/h3&gt;

&lt;p&gt;A desktop assistant may interact with personal files, conversations, application information, and project data.&lt;/p&gt;

&lt;p&gt;I wanted NOVA to process its core AI interactions locally rather than requiring every request to be sent to an external server.&lt;/p&gt;

&lt;p&gt;Local inference, offline speech recognition, offline speech synthesis, and local persistent memory make this possible.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. No Mandatory Cloud AI Subscription
&lt;/h3&gt;

&lt;p&gt;Running open-weight models through Ollama means NOVA does not require a paid hosted AI API for its core language-model functionality.&lt;/p&gt;

&lt;p&gt;Once the required models and dependencies are installed, its core AI pipeline can operate without continuous internet access.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Freedom to Change Models
&lt;/h3&gt;

&lt;p&gt;One of the biggest advantages of open-weight models is flexibility.&lt;/p&gt;

&lt;p&gt;I can experiment with different models, compare their performance, adjust context sizes, change generation settings, and select models that work better with my hardware.&lt;/p&gt;

&lt;p&gt;I am not locked into a single provider's API, pricing, or model limitations.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Building AI for Ordinary Hardware
&lt;/h3&gt;

&lt;p&gt;My development laptop is not a dedicated AI workstation.&lt;/p&gt;

&lt;p&gt;It runs on an Intel Core i3-1115G4 processor, 12 GB RAM, and integrated graphics.&lt;/p&gt;

&lt;p&gt;This limitation became an important engineering challenge. I had to consider CPU utilization, memory consumption, model size, inference settings, and background workloads.&lt;/p&gt;

&lt;p&gt;It made me realize that building useful AI isn't always about using the biggest model. Architecture and optimization matter just as much.&lt;/p&gt;

&lt;h3&gt;
  
  
  5. Open Components Make Experimentation Possible
&lt;/h3&gt;

&lt;p&gt;Because NOVA uses modular open-source components, I can improve individual subsystems without rebuilding the entire assistant.&lt;/p&gt;

&lt;p&gt;I can replace a speech recognition engine, switch language models, modify the memory architecture, or improve the automation system independently.&lt;/p&gt;

&lt;p&gt;That freedom is one of the biggest advantages of building on open innovation rather than depending entirely on a closed API.&lt;/p&gt;

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

&lt;p&gt;NOVA was developed incrementally with AI-assisted coding and engineering workflows.&lt;/p&gt;

&lt;p&gt;The development progressed from a basic local assistant into a system with offline voice, persistent semantic memory, desktop automation, visual intelligence, multi-agent orchestration, proactive automation, personalization, and reliability monitoring.&lt;/p&gt;

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

&lt;p&gt;The real payoff is reducing repeated effort.&lt;/p&gt;

&lt;p&gt;Instead of opening multiple applications, repeating instructions, and manually maintaining context, I can use NOVA as a central interface for supported tasks.&lt;/p&gt;

&lt;p&gt;For example:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Persistent memory reduces the need to explain projects repeatedly.&lt;/li&gt;
&lt;li&gt;Voice interaction provides an alternative to typing every instruction.&lt;/li&gt;
&lt;li&gt;Desktop tools reduce repetitive application and file operations.&lt;/li&gt;
&lt;li&gt;Multi-agent orchestration helps coordinate more complex workflows.&lt;/li&gt;
&lt;li&gt;Proactive automation can prepare reminders and briefings without waiting for me to request them.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I am also testing and optimizing NOVA on my actual laptop rather than assuming that a local AI assistant will automatically be fast.&lt;/p&gt;

&lt;p&gt;One important lesson from this project is that local AI requires careful resource management. Model inference, speech recognition, speech synthesis, and background tasks all compete for limited CPU and memory.&lt;/p&gt;

&lt;p&gt;I would rather have a smaller assistant that works reliably than a feature-heavy assistant that struggles on ordinary hardware.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The goal isn't to make the computer work harder. It's to make the user do less repetitive work.&lt;/strong&gt;&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Stay slow. Stay steady. Let NOVA handle the busywork.&lt;/strong&gt; 🦥&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>hf26challenge</category>
      <category>ai</category>
      <category>mlh</category>
    </item>
    <item>
      <title>HireLens AI: Building an Open-Weight AI Recruitment Platform for Small Businesses</title>
      <dc:creator>KUSAL SARKAR</dc:creator>
      <pubDate>Sun, 18 Oct 2026 11:10:36 +0000</pubDate>
      <link>https://dev.to/kusal_099098/hirelens-ai-building-an-open-weight-ai-recruitment-platform-for-small-businesses-1k3i</link>
      <guid>https://dev.to/kusal_099098/hirelens-ai-building-an-open-weight-ai-recruitment-platform-for-small-businesses-1k3i</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;I built &lt;strong&gt;HireLens AI&lt;/strong&gt;, an AI-powered recruitment and applicant tracking platform designed for small businesses, startups, and recruitment agencies.&lt;/p&gt;

&lt;p&gt;Hiring is expensive and time-consuming, especially for small teams that cannot afford dedicated recruitment departments or expensive enterprise hiring software.&lt;/p&gt;

&lt;p&gt;Recruiters often spend hours:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Reading and extracting information from resumes.&lt;/li&gt;
&lt;li&gt;Comparing candidates against job requirements.&lt;/li&gt;
&lt;li&gt;Shortlisting applicants.&lt;/li&gt;
&lt;li&gt;Tracking candidates through recruitment stages.&lt;/li&gt;
&lt;li&gt;Making sense of different candidate profiles.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;HireLens AI brings these workflows into one recruitment workspace.&lt;/p&gt;

&lt;p&gt;Its key capabilities include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Resume Intelligence:&lt;/strong&gt; Extract structured information from uploaded resumes.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Job Management:&lt;/strong&gt; Create and manage job openings.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;AI-Assisted Matching:&lt;/strong&gt; Compare candidate profiles against job requirements.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Explainable Matching:&lt;/strong&gt; Understand why a candidate matches a particular role.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Candidate Comparison:&lt;/strong&gt; Compare multiple applicants side by side.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Recruitment Pipeline:&lt;/strong&gt; Track applicants throughout the hiring process.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Analytics:&lt;/strong&gt; Understand recruitment activity and pipeline performance.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The goal is simple: give smaller recruitment teams access to useful hiring intelligence without the complexity and cost of enterprise recruitment platforms.&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;Live Application:&lt;/strong&gt; &lt;a href="https://hire-lens-black.vercel.app" rel="noopener noreferrer"&gt;https://hire-lens-black.vercel.app&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The application includes a one-click demo experience.&lt;/p&gt;

&lt;p&gt;Visitors can explore the platform as a fictional demo recruiter, Alex Morgan, without creating an account or entering credentials.&lt;/p&gt;

&lt;p&gt;The demo includes synthetic candidates, sample job openings, resume workflows, and explainable matching results.&lt;/p&gt;

&lt;p&gt;The platform also protects its demo workspace against destructive operations and isolates demo data from other tenants.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Note: The free backend hosting may take a little time to wake up after inactivity.&lt;/em&gt;&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/kusalar/HireLens" rel="noopener noreferrer"&gt;https://github.com/kusalar/HireLens&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The project uses a full-stack architecture:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Frontend: Next.js 14, React and Tailwind CSS.&lt;/li&gt;
&lt;li&gt;Backend: Python, FastAPI and Pydantic.&lt;/li&gt;
&lt;li&gt;Database: PostgreSQL with SQLAlchemy and Alembic.&lt;/li&gt;
&lt;li&gt;Background processing: Celery and Redis.&lt;/li&gt;
&lt;li&gt;AI: Open-weight model(Ollama) integration for resume intelligence and grounded explanations.&lt;/li&gt;
&lt;li&gt;Matching: Deterministic Python-based scoring engine.&lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;I wanted HireLens AI to be more than another chatbot that generates recruitment recommendations.&lt;/p&gt;

&lt;p&gt;I designed it around a combination of open-weight AI, conventional backend engineering, and deterministic decision logic.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Resume Intelligence&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The platform extracts information from PDF and DOCX resumes and converts it into structured candidate information.&lt;/p&gt;

&lt;p&gt;The architecture supports open-weight model inference, including local development with Ollama and hosted open-weight inference.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Deterministic Candidate Matching&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;One of the most important architectural decisions was separating candidate scoring from language model generation.&lt;/p&gt;

&lt;p&gt;The matching score is calculated using deterministic Python logic.&lt;/p&gt;

&lt;p&gt;The LLM does not decide who should be hired, does not autonomously reject candidates, and does not control the final matching score.&lt;/p&gt;

&lt;p&gt;Instead, AI assists with grounded explanations that help recruiters understand the matching results.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Recruitment Workspace&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I built the recruitment workflow around jobs, candidates, applications, resume processing, matching, comparison, and pipeline management.&lt;/p&gt;

&lt;p&gt;The backend uses FastAPI, PostgreSQL, SQLAlchemy, and tenant-aware data access to support multiple recruitment organizations.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. Production Deployment&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I deployed the frontend on Vercel, the backend on Render, and the PostgreSQL database on Neon.&lt;/p&gt;

&lt;p&gt;I also implemented a publicly accessible one-click demo mode so evaluators can explore the actual application.&lt;/p&gt;

&lt;p&gt;The current deployment uses free-tier infrastructure, making it possible to demonstrate the product without maintaining expensive hosting services.&lt;/p&gt;

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

&lt;p&gt;For HireLens AI, open innovation is not just about using a different AI model. It is about having control over the technology that powers the product.&lt;/p&gt;

&lt;p&gt;Recruitment platforms process sensitive information. Resumes can contain contact details, employment histories, education records, and other personal information.&lt;/p&gt;

&lt;p&gt;Building around open-weight models gives us more control over where inference happens and how models are deployed.&lt;/p&gt;

&lt;p&gt;There are several important advantages:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Model Independence&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I do not want the entire product to depend on a single proprietary AI provider.&lt;/p&gt;

&lt;p&gt;Open-weight models give us the flexibility to experiment with different models, change inference providers, and adapt the system as the product grows.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Cost Control&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A recruitment SaaS for small businesses needs sustainable economics.&lt;/p&gt;

&lt;p&gt;Depending entirely on expensive proprietary inference APIs could make the product difficult to operate at scale.&lt;/p&gt;

&lt;p&gt;Open-weight inference gives us the option to explore local and self-hosted deployments and better control inference costs.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Data Control&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Local inference can provide an additional privacy option for organizations that do not want resume content sent to external AI providers.&lt;/p&gt;

&lt;p&gt;It also creates opportunities for future private deployments.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. Transparent and Controlled Decisions&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I deliberately kept candidate scoring deterministic rather than allowing an LLM to make hiring decisions.&lt;/p&gt;

&lt;p&gt;This makes matching more reproducible and easier to test, while AI-generated explanations help recruiters understand the results.&lt;/p&gt;

&lt;p&gt;For me, open innovation means being able to inspect, adapt, replace, and control important parts of the technology instead of building the entire business around someone else's API.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Built with the idea that powerful recruitment intelligence should be accessible to smaller teams, not just enterprises.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Thanks for checking out HireLens AI!&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>hf26challenge</category>
      <category>ai</category>
      <category>opensource</category>
    </item>
    <item>
      <title>🌿 WildSense — Look Closer. Then Look Away.</title>
      <dc:creator>KUSAL SARKAR</dc:creator>
      <pubDate>Sat, 10 Oct 2026 17:27:00 +0000</pubDate>
      <link>https://dev.to/kusal_099098/wildsense-look-closer-then-look-away-3pnj</link>
      <guid>https://dev.to/kusal_099098/wildsense-look-closer-then-look-away-3pnj</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;h1&gt;
  
  
  🌿 WildSense — Look Closer. Then Look Away.
&lt;/h1&gt;

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

&lt;p&gt;&lt;strong&gt;WildSense is a privacy-first, offline AI plant exploration companion designed to turn screen time into real-world nature time.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;We carry incredibly powerful technology in our pockets, but we often use it to scroll through endless digital content instead of noticing the world around us. WildSense takes a different approach: use AI as a bridge to the outdoors, not another reason to stay online.&lt;/p&gt;

&lt;p&gt;📱 &lt;strong&gt;Take a photo. Discover a plant. Explore the world around you.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;WildSense combines local AI-powered plant recognition with a botanical encyclopedia and nature-exploration features to encourage people to step outside, observe their surroundings, and learn from the natural world.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;🔬 Offline AI Plant Recognition:&lt;/strong&gt; Uses a locally running FastViT ONNX model with a 4,271-taxon taxonomy to suggest plant identities without sending photos to a cloud AI service.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;🌍 Botanical Encyclopedia:&lt;/strong&gt; Explore an offline collection of 114 botanical species, including regional-language names and toxicity notes.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;📸 Multi-Photo Exploration:&lt;/strong&gt; Analyze multiple plant photographs and select the plant part you're observing to support identification.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;🧭 Nature Missions:&lt;/strong&gt; Turn outdoor exploration into small, engaging challenges that encourage observation and discovery.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;📓 Personal Field Journal:&lt;/strong&gt; Keep track of exploration sessions and discoveries locally.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;🌿 Grass Score:&lt;/strong&gt; Make outdoor exploration more engaging through progress and nature-focused activities.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;🔊 Audio Narration:&lt;/strong&gt; Listen to botanical information using browser-based speech synthesis, including offline-capable system voices where available.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;📵 Phone-Free Field Mode:&lt;/strong&gt; Use the app to learn what you need, then put your phone away and experience nature directly.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;🔐 Local-First Privacy:&lt;/strong&gt; Plant recognition runs on-device, and journal data is stored in a local SQLite database.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  🎯 Who is it for?
&lt;/h3&gt;

&lt;p&gt;WildSense is for students, nature enthusiasts, beginner botanists, hikers, families, and anyone who wants to reconnect with the outdoors without depending on a constant internet connection.&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;Technology should help us notice more of the real world—not distract us from it.&lt;/strong&gt;&lt;/p&gt;

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

&lt;p&gt;🎥 &lt;strong&gt;Video Demo:&lt;/strong&gt; [Watch the WildSense walkthrough on YouTube] &lt;a href="https://youtu.be/_LjfTU0UkzQ" rel="noopener noreferrer"&gt;https://youtu.be/_LjfTU0UkzQ&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The project is designed to run locally. For the full local-inference experience, follow the setup instructions in the repository.&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/kusalar/WildSense" rel="noopener noreferrer"&gt;https://github.com/kusalar/WildSense&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The repository includes the frontend, FastAPI backend, local ONNX inference pipeline, botanical database, specialist-classifier experimentation, evaluation tools, and documentation.&lt;/p&gt;

&lt;p&gt;The project is built to be explored, tested, and improved by the open-source community.&lt;/p&gt;

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

&lt;p&gt;WildSense is built around &lt;strong&gt;local AI inference rather than a cloud-dependent identification API&lt;/strong&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  🧠 Open-Source AI at the Core
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;FastViT + ONNX Runtime:&lt;/strong&gt; Runs the plant-image inference pipeline locally on the CPU.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;4,271-Taxon Classification Space:&lt;/strong&gt; Provides a broad taxonomy for candidate plant identification.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Experimental Indian Flora Specialist:&lt;/strong&gt; An optional specialist classifier uses FastViT image embeddings and a conservative arbitration layer to improve selected regional plant identifications.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;FastAPI + Python:&lt;/strong&gt; Powers the backend, inference pipeline, API endpoints, and application logic.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;SQLite:&lt;/strong&gt; Stores the offline botanical encyclopedia, field journal, and exploration data.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Next.js + React + TypeScript + Tailwind CSS:&lt;/strong&gt; Powers the interactive frontend.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Browser Speech Synthesis:&lt;/strong&gt; Provides audio narration without requiring a cloud speech service.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  🏗️ Architecture
&lt;/h3&gt;

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

&lt;ol&gt;
&lt;li&gt;The user photographs a plant.&lt;/li&gt;
&lt;li&gt;The image is processed locally by the AI inference pipeline.&lt;/li&gt;
&lt;li&gt;The model produces candidate matches using image embeddings and taxonomy labels.&lt;/li&gt;
&lt;li&gt;When enabled, the specialist classifier passes through additional confidence, margin, and contradiction checks.&lt;/li&gt;
&lt;li&gt;WildSense displays a prediction or falls back when the specialist result does not meet its acceptance criteria.&lt;/li&gt;
&lt;li&gt;The user can explore botanical information, record discoveries, and continue their exploration offline.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The specialist is experimental and &lt;strong&gt;disabled by default&lt;/strong&gt;. The global model and specialist arbitration have been evaluated on a small held-out dataset, so real-world identification accuracy still needs broader validation. Predictions should not be used to determine whether a plant is edible or safe for medicinal use.&lt;/p&gt;

&lt;p&gt;I also designed WildSense to work on modest hardware. The local inference approach avoids requiring a dedicated GPU or a paid AI API for the core plant-recognition workflow.&lt;/p&gt;

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

&lt;p&gt;Open innovation made WildSense possible as a project that people can inspect, run locally, evaluate, and improve instead of treating AI as an inaccessible black box.&lt;/p&gt;

&lt;p&gt;A closed cloud API might offer convenient image recognition, but it would not automatically give users the same combination of local processing, data control, offline access, and freedom to experiment with the model pipeline.&lt;/p&gt;

&lt;p&gt;With open tools and locally runnable models, I can:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Keep plant photos private:&lt;/strong&gt; Images can be processed locally instead of being sent to a remote AI provider.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Build for limited connectivity:&lt;/strong&gt; The core recognition workflow does not depend on a constant internet connection.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Experiment beyond a black-box response:&lt;/strong&gt; I can evaluate embeddings, compare candidate matches, test specialist classifiers, and introduce conservative rejection rules.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Make the project accessible:&lt;/strong&gt; People can explore a local-first AI application without needing a paid inference API.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Invite community improvements:&lt;/strong&gt; Developers can contribute better regional datasets, improve recognition and abstention, expand the botanical encyclopedia, and add languages and nature missions.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Open innovation is especially important for regional biodiversity. Communities should be able to contribute local plant knowledge and improve tools for their environments instead of relying entirely on centralized systems.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The goal is not to make AI the center of the outdoor experience. It's to use open AI to help people look up from their screens.&lt;/strong&gt;&lt;/p&gt;

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

&lt;p&gt;Used ' Eleven Labs ' for Speech to Text&lt;/p&gt;

&lt;h2&gt;
  
  
  🌿 Final Thought
&lt;/h2&gt;

&lt;p&gt;WildSense is an experiment in building technology that encourages people to spend less time staring at technology.&lt;/p&gt;

&lt;p&gt;Identify a plant. Learn something new. Notice the details. Put the phone away.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;WildSense — Look closer. Then look away.&lt;/strong&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  Hacktoberfest #OpenSourceAI #TouchGrass #LocalAI #ONNX #FastViT #NatureTech #AI
&lt;/h1&gt;

</description>
      <category>devchallenge</category>
      <category>hf26challenge</category>
    </item>
    <item>
      <title>FRIEND.OS: An AI Memory That Remembers What Was Waiting for What</title>
      <dc:creator>KUSAL SARKAR</dc:creator>
      <pubDate>Sat, 03 Oct 2026 18:15:37 +0000</pubDate>
      <link>https://dev.to/kusal_099098/friendos-an-ai-memory-that-remembers-what-was-waiting-for-what-4jlc</link>
      <guid>https://dev.to/kusal_099098/friendos-an-ai-memory-that-remembers-what-was-waiting-for-what-4jlc</guid>
      <description>&lt;h1&gt;
  
  
  This is a submission for the &lt;a href="https://dev.to/challenges/hacktoberfest-weekend-2026-10-01"&gt;Hacktoberfest Weekend Challenge: Build for a Friend&lt;/a&gt;
&lt;/h1&gt;

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

&lt;p&gt;I built &lt;strong&gt;FRIEND.OS&lt;/strong&gt;, a local-first AI memory system for a close friend who tends to remember individual things but sometimes forgets the &lt;strong&gt;connection between them&lt;/strong&gt;.&lt;/p&gt;

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

&lt;blockquote&gt;
&lt;p&gt;“I’ll do X after Y happens.”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;We remember X.&lt;br&gt;&lt;br&gt;
We remember Y.&lt;br&gt;&lt;br&gt;
But when Y finally happens, we may forget that X was waiting for it.&lt;/p&gt;

&lt;p&gt;FRIEND.OS is designed to catch that missing connection.&lt;/p&gt;

&lt;p&gt;For example:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“I’ll submit my internship application after I receive my certificate.”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Later:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“I received my certificate today.”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;FRIEND.OS recognizes that the certificate was the dependency for the internship application and proactively surfaces:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Something just clicked&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;You can now submit your internship application.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;But FRIEND.OS also handles the opposite situation: when you are about to do something &lt;strong&gt;before completing what it depends on&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;For example:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“I’ll eat dessert after I finish rice.”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Then:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“I’ll eat dessert now.”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;FRIEND.OS can detect that the dependent action is being attempted before its prerequisite has been satisfied and surface:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;You're forgetting something…&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Eat rice first.&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
You said you'd eat dessert after finishing rice.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;So FRIEND.OS isn't just storing memories. It tracks the &lt;strong&gt;relationships and state between memories&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The core idea is:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;MEMORY → CONNECTION → REALIZATION&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;FRIEND.OS doesn't wait for you to ask what you forgot. It notices when something you've been waiting for finally happens — or when you're about to skip something you said you needed to do first.&lt;/p&gt;

&lt;p&gt;I built it around a real problem experienced by someone close to me rather than starting with a generic AI chatbot and searching for a use case afterward.&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;Demo video:&lt;/strong&gt; &lt;a href="https://youtu.be/M7XgCTY7Xig" rel="noopener noreferrer"&gt;https://youtu.be/M7XgCTY7Xig&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Windows download:&lt;/strong&gt;  &lt;a href="https://github.com/kusalar/FriendOS/releases/tag/v1.0.0" rel="noopener noreferrer"&gt;https://github.com/kusalar/FriendOS/releases/tag/v1.0.0&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The demo shows two sides of FRIEND.OS.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Something just clicked
&lt;/h3&gt;

&lt;p&gt;I create:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“I'll submit my internship application after I receive my certificate.”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Then:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“I received my certificate today.”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;FRIEND.OS identifies the new evidence, connects it to the waiting commitment, and proactively surfaces the next action.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. You're forgetting something…
&lt;/h3&gt;

&lt;p&gt;I create:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“I'll eat dessert after I finish rice.”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Then:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“I'll eat dessert now.”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;FRIEND.OS detects that the dependent action is being attempted before its prerequisite has been satisfied.&lt;/p&gt;

&lt;p&gt;It surfaces:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;You're forgetting something…&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
&lt;strong&gt;Eat rice first.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The user can also inspect &lt;strong&gt;why&lt;/strong&gt; FRIEND.OS produced the insight and see the relevant memory relationship.&lt;/p&gt;

&lt;p&gt;The project also includes a &lt;strong&gt;60-second Demo Mode&lt;/strong&gt; with three realistic scenarios:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Internship application&lt;/li&gt;
&lt;li&gt;VLSI project report&lt;/li&gt;
&lt;li&gt;Research internship&lt;/li&gt;
&lt;/ul&gt;

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

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

&lt;p&gt;FRIEND.OS is structured as a local web application with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Next.js&lt;/li&gt;
&lt;li&gt;React&lt;/li&gt;
&lt;li&gt;TypeScript&lt;/li&gt;
&lt;li&gt;Tailwind CSS&lt;/li&gt;
&lt;li&gt;FastAPI&lt;/li&gt;
&lt;li&gt;SQLite&lt;/li&gt;
&lt;li&gt;Ollama&lt;/li&gt;
&lt;li&gt;Qwen3-4B&lt;/li&gt;
&lt;li&gt;Deterministic dependency matching&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A packaged Windows installer and portable build are also provided through the GitHub Release.&lt;/p&gt;

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

&lt;p&gt;The AI at the core of FRIEND.OS is &lt;strong&gt;Qwen3-4B&lt;/strong&gt;, running locally through &lt;strong&gt;Ollama&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The architecture is:&lt;/p&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
text
Browser
   ↓
Next.js / React / TypeScript
   ↓
FastAPI
   ↓
SQLite
   ↓
Qwen3-4B via Ollama
   ↓
Structured Memory
   ↓
Deterministic Dependency Engine
   ↓
Proactive Insight
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

</description>
      <category>devchallenge</category>
      <category>weekendchallenge</category>
      <category>hf26challenge</category>
    </item>
    <item>
      <title>Building a Multilingual Voice Agent for Local Commerce with Murf Falcon</title>
      <dc:creator>KUSAL SARKAR</dc:creator>
      <pubDate>Sat, 15 Aug 2026 10:59:30 +0000</pubDate>
      <link>https://dev.to/kusal_099098/building-a-multilingual-voice-agent-for-local-commerce-with-murf-falcon-2o06</link>
      <guid>https://dev.to/kusal_099098/building-a-multilingual-voice-agent-for-local-commerce-with-murf-falcon-2o06</guid>
      <description>&lt;p&gt;What if you could call a local business, speak naturally in Hindi, Bengali, English, or a mix of them, ask about a product or order, and get help without navigating complicated menus?&lt;/p&gt;

&lt;p&gt;That was the idea behind my project for &lt;strong&gt;10 Days of Voice Agents — VoiceForBharat Edition&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Over the course of the challenge, I evolved a basic real-time voice agent into a &lt;strong&gt;multilingual Local Commerce Voice Assistant&lt;/strong&gt; with live product lookup, consent-based memory, outbound calling, human escalation, specialist-agent handoffs, and a call analytics dashboard.&lt;/p&gt;

&lt;p&gt;The project is built using &lt;strong&gt;Murf Falcon, LiveKit, Deepgram, an LLM, Python and Next.js&lt;/strong&gt;.&lt;/p&gt;

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




&lt;h2&gt;
  
  
  🎯 The Problem
&lt;/h2&gt;

&lt;p&gt;Local businesses often need to answer repetitive customer questions:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Is this product available?&lt;/li&gt;
&lt;li&gt;What is the price?&lt;/li&gt;
&lt;li&gt;Where is my order?&lt;/li&gt;
&lt;li&gt;When will my order arrive?&lt;/li&gt;
&lt;li&gt;Can I return this product?&lt;/li&gt;
&lt;li&gt;I have a problem with my order. Can someone help me?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Traditional chat interfaces aren't always convenient, especially for users who are more comfortable speaking than typing.&lt;/p&gt;

&lt;p&gt;This is where voice can make the interaction more natural.&lt;/p&gt;

&lt;p&gt;My goal was to build an assistant that could provide a more conversational experience while still being useful, reliable and safe.&lt;/p&gt;

&lt;p&gt;I chose the &lt;strong&gt;local commerce/customer support&lt;/strong&gt; direction because it allowed me to combine voice AI with real business tools and workflows.&lt;/p&gt;




&lt;h1&gt;
  
  
  🗣️ Why Voice?
&lt;/h1&gt;

&lt;p&gt;Voice is particularly interesting for the Indian context because conversations don't always happen in a single language.&lt;/p&gt;

&lt;p&gt;A customer might say:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Bhai, mera order kab tak deliver hoga?"&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;or:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Product available hai kya? Price bhi bata do."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Or they may switch between Hindi and English during the same conversation.&lt;/p&gt;

&lt;p&gt;Instead of forcing users to type formal queries, a voice interface allows them to interact naturally.&lt;/p&gt;

&lt;p&gt;My agent is designed to handle &lt;strong&gt;English, Hindi, Bengali and code-mixed conversations&lt;/strong&gt;, while trying to mirror the user's language and conversational style.&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%2Fysn1gn6av5r859ouawgt.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%2Fysn1gn6av5r859ouawgt.png" alt="The final Local Commerce Assistant interface" width="800" height="799"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  "The final Local Commerce Assistant interface: a voice-first shopping experience for discovering local products and interacting with the agent."
&lt;/h2&gt;

&lt;h1&gt;
  
  
  🏗️ How the Voice Agent Works
&lt;/h1&gt;

&lt;p&gt;The core architecture looks like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;                 ┌─────────────────────┐
                 │      Customer       │
                 │    Browser / Phone  │
                 └──────────┬──────────┘
                            │
                    Voice / SIP / Chat
                            │
                            ▼
                 ┌─────────────────────┐
                 │      LiveKit        │
                 │   Real-time RTC     │
                 └──────────┬──────────┘
                            │
                            ▼
                 ┌─────────────────────┐
                 │    Deepgram STT     │
                 │    Speech → Text    │
                 └──────────┬──────────┘
                            │
                            ▼
                 ┌─────────────────────┐
                 │   LiveKit Agent     │
                 │   LLM + Reasoning   │
                 │      + Tools        │
                 └──────────┬──────────┘
                            │
              ┌─────────────┼─────────────┐
              │             │             │
              ▼             ▼             ▼
        Product Tool    Memory DB    Escalation Tool
              │             │             │
              ▼             ▼             ▼
       Local Catalogue  Caller Memory  SQLite Tickets
                                          │
                                          ▼
                                   Human Escalation
                                          │
                                          ▼
                                Returns Specialist
                                          │
                                          ▼
                                 ┌─────────────────────┐
                                 │    Murf Falcon      │
                                 │    Text → Speech    │
                                 └──────────┬──────────┘
                                            │
                                            ▼
                                       🔊 Customer

And specialist path: 

Main Agent
    │
    │ refund / returns issue
    ▼
Returns &amp;amp; Refunds Specialist
    │
    ▼
Resolution / Escalation
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The four fundamental components are:&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Speech-to-Text
&lt;/h3&gt;

&lt;p&gt;I use &lt;strong&gt;Deepgram&lt;/strong&gt; to convert the user's speech into text.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. LLM
&lt;/h3&gt;

&lt;p&gt;The LLM understands the request, decides how to respond and determines when it needs to use one of the available tools.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Text-to-Speech
&lt;/h3&gt;

&lt;p&gt;I use &lt;strong&gt;Murf Falcon&lt;/strong&gt; to convert the agent's responses back into natural speech.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Real-time Transport
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;LiveKit&lt;/strong&gt; handles the real-time communication between the user and the voice agent.&lt;/p&gt;




&lt;h1&gt;
  
  
  🇮🇳 Indian Voice with Murf Falcon
&lt;/h1&gt;

&lt;p&gt;One of the key parts of the project is the voice itself.&lt;/p&gt;

&lt;p&gt;I used &lt;strong&gt;Murf Falcon&lt;/strong&gt; for the TTS layer and experimented with Indian voices including voices such as &lt;strong&gt;Pooja, Anisha and Samar&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The goal wasn't simply to make the agent speak.&lt;/p&gt;

&lt;p&gt;I wanted the interaction to feel natural enough for an Indian customer-support scenario.&lt;/p&gt;

&lt;p&gt;Fast TTS matters in voice applications because long delays between the user finishing their sentence and the agent responding can make the conversation feel unnatural.&lt;/p&gt;




&lt;h1&gt;
  
  
  🧠 Agent Personality and Safety
&lt;/h1&gt;

&lt;p&gt;A voice agent needs more than an LLM.&lt;/p&gt;

&lt;p&gt;I defined a specific personality and behavioral rules for the assistant.&lt;/p&gt;

&lt;p&gt;The agent is designed to be:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Friendly&lt;/li&gt;
&lt;li&gt;Helpful&lt;/li&gt;
&lt;li&gt;Concise&lt;/li&gt;
&lt;li&gt;Professional&lt;/li&gt;
&lt;li&gt;Conversational&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;But it also has important guardrails.&lt;/p&gt;

&lt;p&gt;For example:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;It should not invent product prices or availability.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;If information needs to be verified, the agent should use the appropriate tool.&lt;/p&gt;

&lt;p&gt;Similarly, sensitive actions such as storing customer information or creating an escalation should require user consent.&lt;/p&gt;

&lt;p&gt;This helped me move from simply building a chatbot to thinking about how a voice agent should behave in a real customer-facing environment.&lt;/p&gt;




&lt;h1&gt;
  
  
  🛒 Live Product Lookup
&lt;/h1&gt;

&lt;p&gt;One of the most useful features I built was a product lookup tool.&lt;/p&gt;

&lt;p&gt;Instead of allowing the LLM to guess product information, the agent can query actual catalogue data.&lt;/p&gt;

&lt;p&gt;The project uses &lt;strong&gt;Open Food Facts&lt;/strong&gt; as a live source and also maintains a local catalogue as a fallback.&lt;/p&gt;

&lt;p&gt;For example, a customer can ask:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Do you have organic honey?"&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The agent can use the tool to check the product rather than generating a random answer.&lt;/p&gt;

&lt;p&gt;If the external service isn't available, the system can fall back to the local catalogue.&lt;/p&gt;

&lt;p&gt;This taught me an important lesson:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;An AI agent should use tools for facts instead of relying on the LLM to remember business data.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&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%2F0bmkcqxzazn2wgru4kzh.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%2F0bmkcqxzazn2wgru4kzh.png" alt="Live product lookup" width="798" height="785"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;"Live product lookup: the agent retrieves catalogue information such as product name, seller, pack size and price instead of guessing product details."&lt;/p&gt;




&lt;h1&gt;
  
  
  🧠 Memory with User Consent
&lt;/h1&gt;

&lt;p&gt;I also implemented memory for returning users.&lt;/p&gt;

&lt;p&gt;The agent can remember useful information such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Customer name&lt;/li&gt;
&lt;li&gt;Language preference&lt;/li&gt;
&lt;li&gt;Relevant customer information&lt;/li&gt;
&lt;li&gt;Previous interaction information&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;But I didn't want the system to automatically store everything a user says.&lt;/p&gt;

&lt;p&gt;The agent asks for permission before saving information.&lt;/p&gt;

&lt;p&gt;The basic workflow is:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Customer shares information
          ↓
Agent asks for permission
          ↓
       ┌──┴──┐
       │     │
      YES    NO
       │     │
       ▼     ▼
     Save   Don't save
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This made memory more privacy-conscious and also made me think about consent as part of the agent's design rather than an afterthought.&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%2Ffykumwhv2ljggxb1n7ik.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%2Ffykumwhv2ljggxb1n7ik.png" alt="Persistent memory in action" width="731" height="781"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;"Persistent memory in action: after consent, the assistant remembers the customer's name and previous interaction to provide a more personalized conversation."&lt;/p&gt;




&lt;h1&gt;
  
  
  📊 Call Analytics Dashboard
&lt;/h1&gt;

&lt;p&gt;A voice application also needs visibility into what is happening during conversations.&lt;/p&gt;

&lt;p&gt;During the challenge, I built a &lt;strong&gt;call analytics dashboard&lt;/strong&gt; to monitor and analyze voice interactions.&lt;/p&gt;

&lt;p&gt;Instead of only seeing whether the agent works, the dashboard provides a way to understand call activity and conversation performance.&lt;/p&gt;

&lt;p&gt;This is important for a real deployment because businesses need to answer questions such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;How many calls are happening?&lt;/li&gt;
&lt;li&gt;How are conversations performing?&lt;/li&gt;
&lt;li&gt;What is happening during calls?&lt;/li&gt;
&lt;li&gt;Where are users encountering problems?&lt;/li&gt;
&lt;li&gt;How is the voice agent being used?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Building this dashboard helped me understand that production voice AI isn't only about the conversation itself.&lt;/p&gt;

&lt;p&gt;It also needs &lt;strong&gt;observability and analytics&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fa3846zabgqz5kth0qfhc.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%2Fa3846zabgqz5kth0qfhc.png" alt="Call analytics dashboard" width="800" height="378"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;"Call analytics dashboard: tracking call outcomes, success rates, failure categories, channels and recent conversation activity."&lt;/p&gt;




&lt;h1&gt;
  
  
  📞 Outbound Calling
&lt;/h1&gt;

&lt;p&gt;The project also goes beyond incoming browser-based conversations.&lt;/p&gt;

&lt;p&gt;I implemented outbound calling using &lt;strong&gt;LiveKit SIP&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;This can be useful for scenarios such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Customer follow-ups&lt;/li&gt;
&lt;li&gt;Order notifications&lt;/li&gt;
&lt;li&gt;Restock notifications&lt;/li&gt;
&lt;li&gt;Callback requests&lt;/li&gt;
&lt;li&gt;Proactive customer communication&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This was an interesting part of the project because it introduced telephony into the voice-agent architecture.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fareky2eioc1qyofhxanv.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%2Fareky2eioc1qyofhxanv.png" alt="Outbound Calls" width="408" height="876"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;"Outbound Calling: Call from team to customer for support."&lt;/p&gt;




&lt;h1&gt;
  
  
  👨‍💼 Human Escalation
&lt;/h1&gt;

&lt;p&gt;AI shouldn't try to solve every problem.&lt;/p&gt;

&lt;p&gt;For difficult cases such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Refund disputes&lt;/li&gt;
&lt;li&gt;Return problems&lt;/li&gt;
&lt;li&gt;Damaged products&lt;/li&gt;
&lt;li&gt;Missing orders&lt;/li&gt;
&lt;li&gt;Serious delivery issues&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;the assistant can escalate the issue to human support.&lt;/p&gt;

&lt;p&gt;Before creating an escalation, the agent asks the customer for consent.&lt;/p&gt;

&lt;p&gt;The escalation can contain relevant information such as the issue description and what has already been checked.&lt;/p&gt;

&lt;p&gt;The customer can then receive a reference ID for the support request.&lt;/p&gt;

&lt;p&gt;Sensitive information such as passwords, OTPs and payment credentials should never be collected or exposed.&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%2F4qj3uznkwf0sx8id2r65.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%2F4qj3uznkwf0sx8id2r65.png" alt="Human Escalation section" width="780" height="777"&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%2Fcmt6wuw0hygtjqkivs6u.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%2Fcmt6wuw0hygtjqkivs6u.png" alt="Escalation Dashboard" width="800" height="779"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  "Human-in-the-loop escalation dashboard: support tickets created by the voice agent are tracked through open, in-progress and resolved states."
&lt;/h2&gt;

&lt;h1&gt;
  
  
  🔄 Specialist Agent Handoff
&lt;/h1&gt;

&lt;p&gt;I also implemented a specialist &lt;strong&gt;Returns Agent&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Instead of forcing one agent to handle every possible scenario, certain conversations can be handed to a specialist.&lt;/p&gt;

&lt;p&gt;For example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;                 Main Agent
                     │
             Return / Refund?
                     │
                     ▼
             Returns Specialist
                     │
                     ▼
              Specialist Agent
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This introduced me to a more scalable approach to voice agents:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;multiple specialized agents working together instead of one enormous agent trying to do everything.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F3wyf0bb2smun8ie66alw.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%2F3wyf0bb2smun8ie66alw.png" alt="Specialist-agent handoff" width="729" height="778"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  "Specialist-agent handoff: the main commerce assistant recognizes a returns/refund issue and transfers the conversation to a dedicated Returns &amp;amp; Refunds Specialist."
&lt;/h2&gt;

&lt;h1&gt;
  
  
  😅 The Difficult Parts
&lt;/h1&gt;

&lt;p&gt;The hardest part wasn't simply getting the agent to speak.&lt;/p&gt;

&lt;p&gt;The difficult part was making the system behave reliably.&lt;/p&gt;

&lt;p&gt;One of the biggest problems was preventing the LLM from confidently producing information that wasn't actually verified.&lt;/p&gt;

&lt;p&gt;For example, if someone asked:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Is this product available?"&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;the LLM could theoretically generate a plausible answer even if it had no actual catalogue information.&lt;/p&gt;

&lt;p&gt;I solved this by introducing dedicated tools for business data.&lt;/p&gt;

&lt;p&gt;The agent uses the product lookup tool when it needs product information instead of relying on its own knowledge.&lt;/p&gt;

&lt;p&gt;I also added fallback behavior when external product data isn't available.&lt;/p&gt;

&lt;p&gt;Another challenge was coordinating multiple components:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Frontend
   ↓
LiveKit
   ↓
STT
   ↓
LLM
   ↓
Tools
   ↓
TTS
   ↓
Frontend
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A problem in any one of these layers can affect the entire conversation.&lt;/p&gt;

&lt;p&gt;Working through these issues taught me that a voice agent is really a &lt;strong&gt;system of connected components&lt;/strong&gt;, not just an LLM with a voice.&lt;/p&gt;




&lt;h1&gt;
  
  
  🛠️ How to Run the Project
&lt;/h1&gt;

&lt;p&gt;If you want to experiment with the project yourself, the complete source code is available on GitHub:&lt;/p&gt;

&lt;p&gt;🔗 &lt;strong&gt;&lt;a href="https://github.com/kusalar/agentvoice" rel="noopener noreferrer"&gt;https://github.com/kusalar/agentvoice&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Requirements
&lt;/h3&gt;

&lt;p&gt;You'll need:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Python 3.10+&lt;/li&gt;
&lt;li&gt;Node.js 18+&lt;/li&gt;
&lt;li&gt;&lt;code&gt;uv&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;pnpm&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;LiveKit&lt;/li&gt;
&lt;li&gt;Murf API credentials&lt;/li&gt;
&lt;li&gt;Deepgram API credentials&lt;/li&gt;
&lt;li&gt;LLM API credentials&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Clone the repository:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git clone https://github.com/kusalar/agentvoice.git
&lt;span class="nb"&gt;cd &lt;/span&gt;agentvoice
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Install the backend dependencies:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;cd &lt;/span&gt;backend
uv &lt;span class="nb"&gt;sync&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Install the required model/files:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;uv run python src/agent.py download-files
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then install the frontend dependencies:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; ../frontend
pnpm &lt;span class="nb"&gt;install&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  🔐 Environment Variables
&lt;/h1&gt;

&lt;p&gt;Never put API keys directly into the source code.&lt;/p&gt;

&lt;p&gt;Create the appropriate environment file and add your credentials there.&lt;/p&gt;

&lt;p&gt;For example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;LIVEKIT_URL=your_livekit_url
LIVEKIT_API_KEY=your_livekit_api_key
LIVEKIT_API_SECRET=your_livekit_api_secret

MURF_API_KEY=your_murf_api_key
DEEPGRAM_API_KEY=your_deepgram_api_key
GOOGLE_API_KEY=your_llm_api_key
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Use your actual credentials locally, but &lt;strong&gt;never commit them to GitHub or publish them in screenshots&lt;/strong&gt;.&lt;/p&gt;




&lt;h1&gt;
  
  
  ▶️ Running the Agent
&lt;/h1&gt;

&lt;p&gt;Start the LiveKit development server:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;livekit-server &lt;span class="nt"&gt;--dev&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Run the backend agent:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;cd &lt;/span&gt;backend
uv run python src/agent.py dev
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Start the frontend:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;cd &lt;/span&gt;frontend
pnpm dev
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then open:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;http://localhost:3000
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Allow microphone access and start a conversation with the agent.&lt;/p&gt;




&lt;h1&gt;
  
  
  🧪 Testing the Agent
&lt;/h1&gt;

&lt;p&gt;A simple test conversation could be:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;User:&lt;/strong&gt;&lt;br&gt;
"Do you have organic honey?"&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Agent:&lt;/strong&gt;&lt;br&gt;
Checks the product tool.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;User:&lt;/strong&gt;&lt;br&gt;
"How much is it?"&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Agent:&lt;/strong&gt;&lt;br&gt;
Returns the verified catalogue information.&lt;/p&gt;

&lt;p&gt;You can also test:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Switching between Hindi and English&lt;/li&gt;
&lt;li&gt;Bengali conversations&lt;/li&gt;
&lt;li&gt;Code-mixed sentences&lt;/li&gt;
&lt;li&gt;Product availability&lt;/li&gt;
&lt;li&gt;Memory consent&lt;/li&gt;
&lt;li&gt;Return/refund escalation&lt;/li&gt;
&lt;li&gt;Specialist-agent handoff&lt;/li&gt;
&lt;li&gt;Outbound calling&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For testing screenshots and demos, use dummy customer information rather than real personal data.&lt;/p&gt;




&lt;h1&gt;
  
  
  📸 Evidence From My Build
&lt;/h1&gt;

&lt;p&gt;The project evolved throughout the 10-day challenge, and I documented different capabilities as I built them.&lt;/p&gt;

&lt;p&gt;The most useful evidence includes:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;The final voice-agent interface&lt;/li&gt;
&lt;li&gt;A real conversation with the agent&lt;/li&gt;
&lt;li&gt;Product lookup in action&lt;/li&gt;
&lt;li&gt;The call analytics dashboard&lt;/li&gt;
&lt;li&gt;Memory/consent flow&lt;/li&gt;
&lt;li&gt;Human escalation&lt;/li&gt;
&lt;li&gt;Specialist-agent handoff&lt;/li&gt;
&lt;li&gt;Outbound calling&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;I don't need to include every screenshot from every day.&lt;/p&gt;

&lt;p&gt;Instead, I want the screenshots to show the progression from a simple voice agent into a more complete voice system.&lt;/p&gt;




&lt;h1&gt;
  
  
  🚀 What I Learned
&lt;/h1&gt;

&lt;p&gt;The biggest lesson from this challenge is that building a voice agent isn't just about making AI talk.&lt;/p&gt;

&lt;p&gt;A useful voice agent needs:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Voice + Reasoning + Tools + Memory + Safety + Real-time communication + Observability + Human handoff&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The voice is what the user experiences.&lt;/p&gt;

&lt;p&gt;But the tools, data validation, consent, fallback behavior, analytics and escalation logic are what make the system useful.&lt;/p&gt;

&lt;p&gt;Over these 10 days, I learned how these different pieces can come together to create something much closer to a real-world voice application.&lt;/p&gt;




&lt;h1&gt;
  
  
  🔮 What's Next?
&lt;/h1&gt;

&lt;p&gt;There is still a lot I would like to improve:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;More Indian languages&lt;/li&gt;
&lt;li&gt;Better production telephony&lt;/li&gt;
&lt;li&gt;More business integrations&lt;/li&gt;
&lt;li&gt;More advanced call analytics&lt;/li&gt;
&lt;li&gt;Better observability&lt;/li&gt;
&lt;li&gt;More specialist agents&lt;/li&gt;
&lt;li&gt;Production deployment&lt;/li&gt;
&lt;li&gt;Automated voice-agent evaluation&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;But this challenge gave me a strong foundation for exploring all of these areas.&lt;/p&gt;




&lt;h1&gt;
  
  
  Final Thoughts
&lt;/h1&gt;

&lt;p&gt;What started as a basic voice agent became a multilingual local-commerce assistant capable of using tools, remembering users with consent, making calls, escalating problems, handing conversations to specialists and analyzing calls.&lt;/p&gt;

&lt;p&gt;The most important thing I learned is:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;A good voice agent shouldn't just sound intelligent. It should be useful, accurate, safe and measurable.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I'm grateful to &lt;strong&gt;Murf AI&lt;/strong&gt; for organizing &lt;strong&gt;10 Days of Voice Agents — VoiceForBharat Edition&lt;/strong&gt; and giving me the opportunity to build and experiment with voice AI over 10 days.&lt;/p&gt;

&lt;p&gt;🔗 &lt;strong&gt;Project:&lt;/strong&gt; &lt;a href="https://github.com/kusalar/agentvoice" rel="noopener noreferrer"&gt;https://github.com/kusalar/agentvoice&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Built with:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Murf Falcon + LiveKit + Deepgram + LLM + Python + Next.js&lt;/strong&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  VoiceForBharat #MurfAI #VoiceAI #GenerativeAI #AI #BuildInPublic
&lt;/h1&gt;

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