<?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: Ishan Singh</title>
    <description>The latest articles on DEV Community by Ishan Singh (@ishan_singh_1f625ad095134).</description>
    <link>https://dev.to/ishan_singh_1f625ad095134</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%2F4078934%2Fe4ecb863-3365-463a-ae1e-0cdb8f2e5f72.png</url>
      <title>DEV Community: Ishan Singh</title>
      <link>https://dev.to/ishan_singh_1f625ad095134</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/ishan_singh_1f625ad095134"/>
    <language>en</language>
    <item>
      <title>Building ShikshaBharat: How I Built an AI Voice Companion for Rural Primary Education in 10 Days</title>
      <dc:creator>Ishan Singh</dc:creator>
      <pubDate>Sat, 15 Aug 2026 12:27:47 +0000</pubDate>
      <link>https://dev.to/ishan_singh_1f625ad095134/building-shikshabharat-how-i-built-an-ai-voice-companion-for-rural-primary-education-in-10-days-12e9</link>
      <guid>https://dev.to/ishan_singh_1f625ad095134/building-shikshabharat-how-i-built-an-ai-voice-companion-for-rural-primary-education-in-10-days-12e9</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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F160kcywkovctqegpnrsh.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%2F160kcywkovctqegpnrsh.png" alt=" " width="800" height="473"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Track:&lt;/strong&gt; Learning &amp;amp; Literacy&lt;br&gt;&lt;br&gt;
&lt;strong&gt;Tech Stack:&lt;/strong&gt; Python, LiveKit Agents SDK, Murf Falcon TTS, Google Gemini, Deepgram Nova-3, Next.js, SQLite, LiveKit SIP / Twilio&lt;br&gt;&lt;br&gt;
&lt;strong&gt;Public Code Repository:&lt;/strong&gt; &lt;a href="https://github.com/murf-ai/murf-livekit-starter" rel="noopener noreferrer"&gt;github.com/murf-ai/murf-livekit-starter&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  1. The Problem and The Users
&lt;/h2&gt;

&lt;p&gt;In many rural primary schools across India, student-to-teacher ratios frequently exceed 40:1. Young children (ages 5–12) rarely receive personalized attention when practicing reading, pronunciation, basic vocabulary, or foundational science concepts.&lt;/p&gt;

&lt;h3&gt;
  
  
  Key Pain Points:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;UI Friction for Early Learners:&lt;/strong&gt; Text-heavy graphical user interfaces fail because early learners cannot read complex UI menus, buttons, or navigation instructions.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Typing Barrier:&lt;/strong&gt; Traditional text chat interfaces create immense friction for young kids who speak and converse far better than they write.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Linguistic &amp;amp; Cultural Mismatch:&lt;/strong&gt; Existing voice assistants often use Western accents that fail to pronounce Indian names, phonics, or Hinglish phrases naturally.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  2. What The Voice Agent Does
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;ShikshaBharat&lt;/strong&gt; is a voice-first educational platform designed to remove all UI friction. Children simply talk naturally in &lt;strong&gt;English, Hindi, or Hinglish&lt;/strong&gt;, receive instant spoken feedback in a warm Indian accent, and view real-time visual learning cards on an interactive digital classroom chalkboard.&lt;/p&gt;

&lt;h3&gt;
  
  
  Two Dedicated AI Personas:
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Aarvi (Literacy Buddy):&lt;/strong&gt; A warm, encouraging female AI companion (voiced by Murf Falcon &lt;code&gt;Anisha&lt;/code&gt;) who guides students through reading passages, dictionary definitions, phonics, and guided spelling.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Vigyan Buddy (Science Specialist):&lt;/strong&gt; An enthusiastic male AI agent (voiced by Murf Falcon &lt;code&gt;Karan&lt;/code&gt;) who handles science experiments, space, nature, and interactive Q&amp;amp;A.&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  3. How The System Works
&lt;/h2&gt;

&lt;p&gt;ShikshaBharat uses an end-to-end real-time audio pipeline built with &lt;strong&gt;LiveKit Agents SDK&lt;/strong&gt;, &lt;strong&gt;Murf Falcon TTS&lt;/strong&gt;, &lt;strong&gt;Google Gemini LLM&lt;/strong&gt;, and &lt;strong&gt;Deepgram Nova-3 STT&lt;/strong&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Architecture Overview
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;flowchart LR
    A[🎙️ User Speaks] --&amp;gt;|Audio Stream| B[Deepgram STT Nova-3]
    B --&amp;gt;|Transcribed Text| C[Google Gemini LLM]
    C --&amp;gt;|Tool Selection / Prompt| D[Murf Falcon TTS Streaming]
    D --&amp;gt;|Audio Stream| E[LiveKit WebRTC Room]
    E --&amp;gt;|Audio Output| F[🔊 User Hears Agent]
    C -.-&amp;gt;|Data Packets| G[📺 Next.js UI Chalkboard]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Core Pipeline Code (&lt;code&gt;backend/src/agent.py&lt;/code&gt;)
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;session&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;AgentSession&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;stt&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;deepgram&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;STT&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;nova-3&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;language&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;multi&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
    &lt;span class="n"&gt;llm&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;google&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;LLM&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;gemini-3.5-flash-lite&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
    &lt;span class="n"&gt;tts&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;murf&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;TTS&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="n"&gt;voice&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Anisha&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;locale&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;en-IN&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;style&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Conversation&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;tokenizer&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;tokenize&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;basic&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;SentenceTokenizer&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;min_sentence_len&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
        &lt;span class="n"&gt;text_pacing&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="p"&gt;),&lt;/span&gt;
    &lt;span class="n"&gt;turn_detection&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nc"&gt;MultilingualModel&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt;
    &lt;span class="n"&gt;vad&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;ctx&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;proc&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;userdata&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;vad&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
    &lt;span class="n"&gt;preemptive_generation&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  4. The Most Important Features
&lt;/h2&gt;

&lt;p&gt;Here is a breakdown of the core features built across the 10-day sprint:&lt;/p&gt;

&lt;h3&gt;
  
  
  🎙️ 1. Ultra-Fast Indian Voice Powered by Murf Falcon
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Voices:&lt;/strong&gt; &lt;code&gt;Anisha&lt;/code&gt; (Warm Female) and &lt;code&gt;Karan&lt;/code&gt; (Enthusiastic Male).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Performance:&lt;/strong&gt; Murf Falcon streaming TTS delivers &lt;strong&gt;55ms model latency&lt;/strong&gt; and &lt;strong&gt;~130ms time-to-first-audio&lt;/strong&gt;, enabling natural, conversational turn-taking without awkward delays.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  🗣️ 2. Indian Language &amp;amp; Hinglish Code-Mixing
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Naturally handles code-mixed conversations (English + Hindi). Hindi words are rendered in Devanagari script (e.g., &lt;em&gt;"नमस्ते! आज हम new words practice करेंगे"&lt;/em&gt;) so Murf Falcon synthesizes native phonetic accents.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  📺 3. Interactive Frontend Chalkboard &amp;amp; State Visualizer
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Custom LiveKit data packets (&lt;code&gt;RoomEvent.DataReceived&lt;/code&gt;) broadcast state updates to the Next.js frontend (&lt;code&gt;ExerciseCard.tsx&lt;/code&gt;), rendering real-time chalkboard cards for reading passages, dictionary definitions, and teacher handoffs.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  🧠 4. Returning User Memory &amp;amp; Privacy Consent Guardrails
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;SQLite Persistence (&lt;code&gt;db.py&lt;/code&gt;):&lt;/strong&gt; Remembers student name, reading level (&lt;code&gt;Beginner&lt;/code&gt;, &lt;code&gt;Intermediate&lt;/code&gt;, &lt;code&gt;Advanced&lt;/code&gt;), and previous practice topics.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Consent Guardrail:&lt;/strong&gt; Aarvi asks for explicit verbal permission before saving profile data or executing a "Forget Me" deletion request (&lt;code&gt;forget_caller_info&lt;/code&gt;).&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  🛠️ 5. Real-Time Domain Tools &amp;amp; Tool Chaining
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;fetch_next_exercise&lt;/code&gt;:&lt;/strong&gt; Retrieves graded reading passages. If level is omitted, automatically queries the student's stored SQLite profile (&lt;strong&gt;Tool Chaining&lt;/strong&gt;).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;lookup_word_definition&lt;/code&gt;:&lt;/strong&gt; Fetches live dictionary definitions, IPA phonetics, and sample sentences.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  📞 6. Outbound Practice Telephony Calls (SIP)
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Uses &lt;strong&gt;LiveKit SIP &amp;amp; Twilio&lt;/strong&gt; to initiate daily outbound practice nudge calls (&lt;code&gt;outbound.py&lt;/code&gt;). Aarvi speaks first upon connection: &lt;em&gt;"नमस्ते Rahul! This is Aarvi calling from ShikshaBharat..."&lt;/em&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  🚨 7. Consent-Guarded Human Teacher Escalation
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Triggers when a student is upset or asks for a real teacher. Requests explicit consent before creating a reference ID (e.g., &lt;code&gt;ESC-849201&lt;/code&gt;) and dispatching an automated email notification (&lt;code&gt;email_service.py&lt;/code&gt;).&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  📊 8. Real-Time Call Analytics Dashboard
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Accessible via &lt;code&gt;/dashboard&lt;/code&gt; route in Next.js. Tracks &lt;strong&gt;Total Calls&lt;/strong&gt;, &lt;strong&gt;Success Rate %&lt;/strong&gt;, and call history logs with automatic privacy masking.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  🔀 9. Multi-Agent Specialist Handoffs
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Bi-directional handoffs between &lt;strong&gt;Aarvi&lt;/strong&gt; and &lt;strong&gt;Vigyan Buddy&lt;/strong&gt; (&lt;code&gt;session.update_agent()&lt;/code&gt; and &lt;code&gt;session._tts = murf.TTS(voice="Karan")&lt;/code&gt;) while updating the UI chalkboard in real time.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  5. Challenges and How I Overcame Them
&lt;/h2&gt;

&lt;p&gt;Building a real-time voice agent presents unique engineering challenges. Here are three major hurdles faced and solved:&lt;/p&gt;

&lt;h3&gt;
  
  
  Challenge 1: TTS Spoken Output Mismatching UI Chalkboard Text
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;The Cause:&lt;/strong&gt; When &lt;code&gt;fetch_next_exercise&lt;/code&gt; fetched a reading passage string for the LLM, the LLM paraphrased the passage when speaking it—causing the student to hear text different from what was displayed on screen.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The Solution:&lt;/strong&gt; Implemented direct audio rendering inside the tool function using &lt;code&gt;await session.say(passage, allow_interruptions=False)&lt;/code&gt; to speak the exact passage text, bypassing LLM paraphrasing.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Challenge 2: Audio Handshake Delays on Outbound Telephony (SIP)
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;The Cause:&lt;/strong&gt; On outbound phone calls over Twilio/SIP, the media channel takes ~1–2 seconds to establish the RTP audio stream after answering, chopping off the first 2 seconds of the agent's greeting.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The Solution:&lt;/strong&gt; Added a 2.0-second media settling delay (&lt;code&gt;await asyncio.sleep(2.0)&lt;/code&gt;) specifically for outbound SIP sessions before triggering the greeting.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Challenge 3: Dynamic Voice &amp;amp; Agent Handoff Without Disconnection
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;The Cause:&lt;/strong&gt; Swapping personas (Aarvi ↔ Vigyan Buddy) required changing both system prompts and TTS voices (Anisha ↔ Karan) inside an active LiveKit WebRTC room without disconnecting the caller.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The Solution:&lt;/strong&gt; Called &lt;code&gt;session.update_agent(ScienceAgent())&lt;/code&gt; and re-instantiated &lt;code&gt;session._tts = murf.TTS(voice="Karan")&lt;/code&gt; while publishing a LiveKit data packet (&lt;code&gt;topic="agent_handoff"&lt;/code&gt;) to update the frontend UI simultaneously.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  6. How Readers Can Build and Run It
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Step 1: Prerequisites
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Python 3.10+&lt;/strong&gt; and &lt;strong&gt;&lt;a href="https://docs.astral.sh/uv/" rel="noopener noreferrer"&gt;uv&lt;/a&gt;&lt;/strong&gt; package manager.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Node.js 18+&lt;/strong&gt; and &lt;strong&gt;pnpm&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;A free &lt;strong&gt;&lt;a href="https://cloud.livekit.io/" rel="noopener noreferrer"&gt;LiveKit Cloud&lt;/a&gt;&lt;/strong&gt; account.&lt;/li&gt;
&lt;li&gt;A &lt;strong&gt;&lt;a href="https://murf.ai/api/dashboard" rel="noopener noreferrer"&gt;Murf AI API Key&lt;/a&gt;&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Step 2: Environment Variables
&lt;/h3&gt;

&lt;p&gt;Create &lt;code&gt;.env.local&lt;/code&gt; in &lt;code&gt;backend/&lt;/code&gt; and &lt;code&gt;frontend/&lt;/code&gt;:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;code&gt;backend/.env.local&lt;/code&gt;:&lt;/strong&gt;&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=wss://your-project.livekit.cloud
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_google_gemini_api_key
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;&lt;code&gt;frontend/.env.local&lt;/code&gt;:&lt;/strong&gt;&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=wss://your-project.livekit.cloud
LIVEKIT_API_KEY=your_livekit_api_key
LIVEKIT_API_SECRET=your_livekit_api_secret
AGENT_NAME=my-agent
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Step 3: Launch Backend &amp;amp; Frontend
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Terminal 1: Backend Agent&lt;/span&gt;
&lt;span class="nb"&gt;cd &lt;/span&gt;backend
uv &lt;span class="nb"&gt;sync
&lt;/span&gt;uv run python src/agent.py dev

&lt;span class="c"&gt;# Terminal 2: Frontend UI&lt;/span&gt;
&lt;span class="nb"&gt;cd &lt;/span&gt;frontend
pnpm &lt;span class="nb"&gt;install
&lt;/span&gt;pnpm dev
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Open &lt;strong&gt;&lt;code&gt;http://localhost:3000&lt;/code&gt;&lt;/strong&gt; in your browser and click &lt;strong&gt;Start talking&lt;/strong&gt;!&lt;/p&gt;




&lt;h2&gt;
  
  
  7. What I Would Improve Next
&lt;/h2&gt;

&lt;p&gt;Looking ahead, here are three key enhancements planned for ShikshaBharat:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Edge Offline Mode:&lt;/strong&gt; Integrate lightweight local STT and TTS models for deployment on low-cost hardware in classrooms with zero internet connectivity.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Expanded Regional Languages:&lt;/strong&gt; Add support for regional Indian languages including Tamil, Telugu, Bengali, Kannada, and Marathi using localized Murf voices.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Gamified Progress Badges:&lt;/strong&gt; Introduce star badges, daily streaks, and printable achievement cards directly on the classroom chalkboard.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Check out the full source code and star the repo on GitHub:&lt;br&gt;&lt;br&gt;
👉 &lt;strong&gt;&lt;a href="https://github.com/ishan200716/murf-livekit-starter" rel="noopener noreferrer"&gt;github.com/ishan200716/murf-livekit-starter&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

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