<?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: jaysid97</title>
    <description>The latest articles on DEV Community by jaysid97 (@jaysid97).</description>
    <link>https://dev.to/jaysid97</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%2F3645845%2Fd9725601-8733-4d5b-9092-a49e068f18c8.jpeg</url>
      <title>DEV Community: jaysid97</title>
      <link>https://dev.to/jaysid97</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/jaysid97"/>
    <language>en</language>
    <item>
      <title>PR Pilot: Putting Multi-Agent AI Code Reviewers Inside Discord</title>
      <dc:creator>jaysid97</dc:creator>
      <pubDate>Sun, 08 Nov 2026 06:19:57 +0000</pubDate>
      <link>https://dev.to/jaysid97/pr-pilot-putting-multi-agent-ai-code-reviewers-inside-discord-36a8</link>
      <guid>https://dev.to/jaysid97/pr-pilot-putting-multi-agent-ai-code-reviewers-inside-discord-36a8</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/mlh-hackathon"&gt;MLH x DEV Writing Challenge&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

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

&lt;p&gt;Every developer knows the dread of the &lt;strong&gt;Pull Request bottleneck&lt;/strong&gt;: you push a feature, open a PR, and... silence. Days pass. Context is lost. Reviewers get dragged away by meetings, while authors juggle stale branches. Meanwhile, your team chat (Discord/Slack) is buzzing with activity, completely disconnected from what’s happening on GitHub.&lt;/p&gt;

&lt;p&gt;To bridge this divide, I built &lt;strong&gt;PR Pilot&lt;/strong&gt;: an automated, dual-agent AI code review system that lives directly inside your team's Discord &lt;code&gt;#pr-reviews&lt;/code&gt; channel.&lt;/p&gt;

&lt;p&gt;Instead of a noisy bot that just dumps notifications, PR Pilot acts like two junior-to-senior pair programmers sitting in the room:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;@pr-reviewer&lt;/code&gt; (The Strategic Reviewer)&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Ingests the GitHub diff upon PR creation.&lt;/li&gt;
&lt;li&gt;Summarizes the "why" and "what" in 2–3 concise sentences.&lt;/li&gt;
&lt;li&gt;Assesses a risk tier (&lt;strong&gt;LOW / MEDIUM / HIGH&lt;/strong&gt;) targeting security, auth, migrations, and breaking changes.&lt;/li&gt;
&lt;li&gt;Prompts the author with 2–3 pointed questions about edge cases and maintainability.&lt;/li&gt;
&lt;li&gt;Listens for team instructions: typing &lt;code&gt;approve&lt;/code&gt; or &lt;code&gt;request changes&lt;/code&gt; will execute the actual GitHub API review directly from Discord!&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;@pr-standards&lt;/code&gt; (The Automated Gatekeeper)&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Triggered automatically by &lt;code&gt;@pr-reviewer&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Runs an objective 6-point checklist:

&lt;ul&gt;
&lt;li&gt;✅ Conventional Commit title (&lt;code&gt;feat:&lt;/code&gt;, &lt;code&gt;fix:&lt;/code&gt;, etc.)&lt;/li&gt;
&lt;li&gt;✅ Non-empty description explaining the intent&lt;/li&gt;
&lt;li&gt;⚠️ Test coverage check (flags if source changed without tests)&lt;/li&gt;
&lt;li&gt;✅ Unlinked &lt;code&gt;TODO&lt;/code&gt; / &lt;code&gt;FIXME&lt;/code&gt; detection (must cite issue numbers)&lt;/li&gt;
&lt;li&gt;✅ Documentation updates for public APIs / config&lt;/li&gt;
&lt;li&gt;✅ PR diff size check (&amp;lt; 400 lines)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  How It Works
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;┌──────────────┐   GitHub Webhook   ┌─────────────────┐   SSE / Room Event   ┌──────────────────┐
│   GitHub     │ ─────────────────► │    PR Pilot     │ ───────────────────► │  Switch Server   │
│  (PR event)  │                    │ Webhook Receiver│                      │ (Local / Docker) │
└──────────────┘                    └─────────────────┘                      └────────┬─────────┘
                                                                                      │ Discord Bridge
                                                                             ┌────────▼─────────┐
                                                                             │     Discord      │
                                                                             │   #pr-reviews    │
                                                                             │                  │
                                                                             │  @pr-reviewer    │
                                                                             │  @pr-standards   │
                                                                             │  👤 Team Humans  │
                                                                             └──────────────────┘
                                                                                      │
                                                                             GitHub API Execution
                                                                             (Approve / Block)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;A developer opens a PR on GitHub.&lt;/li&gt;
&lt;li&gt;A GitHub webhook hits the PR Pilot FastAPI service.&lt;/li&gt;
&lt;li&gt;The event routes to the Discord room through &lt;strong&gt;Switch&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;@pr-reviewer&lt;/code&gt; reads the diff, writes a review, and tags &lt;code&gt;@pr-standards&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;@pr-standards&lt;/code&gt; posts its pass/warn/fail scorecard.&lt;/li&gt;
&lt;li&gt;Teammates can ask questions in the thread, discuss with the AI, and type &lt;code&gt;approve&lt;/code&gt; to officially approve the PR on GitHub without ever leaving Discord.&lt;/li&gt;
&lt;/ol&gt;




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

&lt;ul&gt;
&lt;li&gt;📦 &lt;strong&gt;GitHub Repository&lt;/strong&gt;: &lt;a href="https://github.com/jaysid97/pr-pilot" rel="noopener noreferrer"&gt;github.com/jaysid97/pr-pilot&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;📹 &lt;strong&gt;Demo Walkthrough Video&lt;/strong&gt;: &lt;em&gt;[Insert your demo video link or walkthrough here]&lt;/em&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Live Walkthrough in Discord
&lt;/h3&gt;

&lt;p&gt;Here is what the interaction looks like when a developer opens a pull request:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;PR Opened:&lt;/strong&gt; &lt;code&gt;feat: add JWT authentication logic&lt;/code&gt; (#42)&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;code&gt;@pr-reviewer&lt;/code&gt;&lt;/strong&gt;:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;🔍 &lt;strong&gt;Summary&lt;/strong&gt;: Implements JWT verification middleware and token renewal endpoints.&lt;br&gt;
⚠️ &lt;strong&gt;Risk Level&lt;/strong&gt;: &lt;strong&gt;HIGH&lt;/strong&gt; — modifies core authentication logic and security headers.&lt;br&gt;
❓ &lt;strong&gt;Questions for @author&lt;/strong&gt;:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Have we accounted for token replay prevention during silent refresh?&lt;/li&gt;
&lt;li&gt;Is the secret rotation strategy compatible with multi-instance clustering?&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;code&gt;@pr-standards please run your checklist on this PR: https://github.com/demo/repo/pull/42&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;&lt;code&gt;@pr-standards&lt;/code&gt;&lt;/strong&gt;:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;📋 &lt;strong&gt;Standards Check for PR #42&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;✅ Conventional commit title&lt;/li&gt;
&lt;li&gt;✅ Description present&lt;/li&gt;
&lt;li&gt;⚠️ No test files updated (&lt;code&gt;tests/test_auth.py&lt;/code&gt; missing)&lt;/li&gt;
&lt;li&gt;✅ No unlinked TODOs&lt;/li&gt;
&lt;li&gt;✅ PR size: 142 lines (healthy)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Overall&lt;/strong&gt;: PASS with 1 warning.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;Developer&lt;/strong&gt;: &lt;em&gt;"Does this handle token refresh edge cases?"&lt;/em&gt;&lt;br&gt;&lt;br&gt;
&lt;strong&gt;&lt;code&gt;@pr-reviewer&lt;/code&gt;&lt;/strong&gt;: &lt;em&gt;"Yes, in &lt;code&gt;auth_service.py:84&lt;/code&gt;, expired tokens return &lt;code&gt;401 TOKEN_EXPIRED&lt;/code&gt;, but network retry backoff should still be handled by the client."&lt;/em&gt;  &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Developer&lt;/strong&gt;: &lt;em&gt;"approve"&lt;/em&gt;&lt;br&gt;&lt;br&gt;
&lt;strong&gt;&lt;code&gt;@pr-reviewer&lt;/code&gt;&lt;/strong&gt;: &lt;em&gt;"✅ Approved on GitHub on behalf of @developer."&lt;/em&gt;&lt;/p&gt;


&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  Partner Technologies
&lt;/h2&gt;

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

&lt;p&gt;&lt;a href="https://github.com/sandbox-quantum/switch" rel="noopener noreferrer"&gt;Switch&lt;/a&gt; served as the foundational infrastructure for PR Pilot. Rather than building custom Discord bot handlers, websocket daemons, and session trackers from scratch:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Declarative Room Templates&lt;/strong&gt;: With &lt;code&gt;pr-pilot.template.yaml&lt;/code&gt;, the entire multi-agent environment (agent identities, instruction prompts, communication policies, and channel bindings) is spin-up ready in a single click via Switch Console.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Agent Communication Protocol&lt;/strong&gt;: &lt;code&gt;@pr-reviewer&lt;/code&gt; and &lt;code&gt;@pr-standards&lt;/code&gt; consume room events via Server-Sent Events (SSE) and post through HTTP back to Switch.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Discord Bridge&lt;/strong&gt;: Switch translates bidirectional messages between Discord's API and the agents seamlessly, allowing agents to react to human input in natural conversational threads.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  2. Antigravity &amp;amp; Agent Runtimes
&lt;/h3&gt;

&lt;p&gt;I leveraged &lt;strong&gt;Antigravity&lt;/strong&gt; to formulate the agent personalities, system prompts, and strict guardrails. The dual-agent separation prevents prompt bloat: &lt;code&gt;@pr-reviewer&lt;/code&gt; specializes in qualitative reasoning, code comprehension, and API execution, while &lt;code&gt;@pr-standards&lt;/code&gt; operates as a deterministic, objective checklist engine.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. FastAPI &amp;amp; Docker
&lt;/h3&gt;

&lt;p&gt;The webhook receiver was built with FastAPI, containerized using Docker Compose, and securely exposed via tunnels to handle GitHub payload verification (&lt;code&gt;HMAC-SHA256&lt;/code&gt;) and dispatch events to the Switch network with sub-second latency.&lt;/p&gt;




&lt;h2&gt;
  
  
  Hackathon Experience
&lt;/h2&gt;

&lt;p&gt;Building PR Pilot during the hackathon was an absolute blast. &lt;/p&gt;

&lt;p&gt;Hackathons are famous for high adrenaline and tight timelines, but the biggest revelation for me was how natural multi-agent architectures feel when anchored inside a team chat application. Instead of isolating AI into web dashboards or CLI tools that people forget to check, putting them where developers already hang out (Discord) transforms AI from a passive utility into an active pair-programming teammate.&lt;/p&gt;

&lt;p&gt;The most memorable moment was testing the full loop for the first time: pushing a mock breaking commit, watching Discord light up 3 seconds later with a targeted warning from &lt;code&gt;@pr-reviewer&lt;/code&gt;, discussing it in the channel, and seeing the PR status tick green on GitHub just by typing "approve" in chat.&lt;/p&gt;

&lt;h3&gt;
  
  
  What's Next for PR Pilot
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Support for GitLab and Bitbucket webhooks.&lt;/li&gt;
&lt;li&gt;Inline PR code comment suggestions directly generated from Discord threads.&lt;/li&gt;
&lt;li&gt;Custom organization rulebooks that let teams define their own &lt;code&gt;@pr-standards&lt;/code&gt; checklists via simple YAML files.&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;&lt;em&gt;Check out the repository on &lt;a href="https://github.com/jaysid97/pr-pilot" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt; and feel free to try running the Switch template in your own server! Let me know in the comments how your team manages pull request reviews.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>mlhacks</category>
      <category>devchallenge</category>
      <category>hackathon</category>
      <category>ai</category>
    </item>
    <item>
      <title>PR Pilot: Putting Multi-Agent AI Code Reviewers Inside Discord</title>
      <dc:creator>jaysid97</dc:creator>
      <pubDate>Sun, 08 Nov 2026 06:18:51 +0000</pubDate>
      <link>https://dev.to/jaysid97/pr-pilot-putting-multi-agent-ai-code-reviewers-inside-discord-17gl</link>
      <guid>https://dev.to/jaysid97/pr-pilot-putting-multi-agent-ai-code-reviewers-inside-discord-17gl</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/mlh-hackathon"&gt;MLH x DEV Writing Challenge&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

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

&lt;p&gt;Every developer knows the dread of the &lt;strong&gt;Pull Request bottleneck&lt;/strong&gt;: you push a feature, open a PR, and... silence. Days pass. Context is lost. Reviewers get dragged away by meetings, while authors juggle stale branches. Meanwhile, your team chat (Discord/Slack) is buzzing with activity, completely disconnected from what’s happening on GitHub.&lt;/p&gt;

&lt;p&gt;To bridge this divide, I built &lt;strong&gt;PR Pilot&lt;/strong&gt;: an automated, dual-agent AI code review system that lives directly inside your team's Discord &lt;code&gt;#pr-reviews&lt;/code&gt; channel.&lt;/p&gt;

&lt;p&gt;Instead of a noisy bot that just dumps notifications, PR Pilot acts like two junior-to-senior pair programmers sitting in the room:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;@pr-reviewer&lt;/code&gt; (The Strategic Reviewer)&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Ingests the GitHub diff upon PR creation.&lt;/li&gt;
&lt;li&gt;Summarizes the "why" and "what" in 2–3 concise sentences.&lt;/li&gt;
&lt;li&gt;Assesses a risk tier (&lt;strong&gt;LOW / MEDIUM / HIGH&lt;/strong&gt;) targeting security, auth, migrations, and breaking changes.&lt;/li&gt;
&lt;li&gt;Prompts the author with 2–3 pointed questions about edge cases and maintainability.&lt;/li&gt;
&lt;li&gt;Listens for team instructions: typing &lt;code&gt;approve&lt;/code&gt; or &lt;code&gt;request changes&lt;/code&gt; will execute the actual GitHub API review directly from Discord!&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;@pr-standards&lt;/code&gt; (The Automated Gatekeeper)&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Triggered automatically by &lt;code&gt;@pr-reviewer&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Runs an objective 6-point checklist:

&lt;ul&gt;
&lt;li&gt;✅ Conventional Commit title (&lt;code&gt;feat:&lt;/code&gt;, &lt;code&gt;fix:&lt;/code&gt;, etc.)&lt;/li&gt;
&lt;li&gt;✅ Non-empty description explaining the intent&lt;/li&gt;
&lt;li&gt;⚠️ Test coverage check (flags if source changed without tests)&lt;/li&gt;
&lt;li&gt;✅ Unlinked &lt;code&gt;TODO&lt;/code&gt; / &lt;code&gt;FIXME&lt;/code&gt; detection (must cite issue numbers)&lt;/li&gt;
&lt;li&gt;✅ Documentation updates for public APIs / config&lt;/li&gt;
&lt;li&gt;✅ PR diff size check (&amp;lt; 400 lines)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  How It Works
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;┌──────────────┐   GitHub Webhook   ┌─────────────────┐   SSE / Room Event   ┌──────────────────┐
│   GitHub     │ ─────────────────► │    PR Pilot     │ ───────────────────► │  Switch Server   │
│  (PR event)  │                    │ Webhook Receiver│                      │ (Local / Docker) │
└──────────────┘                    └─────────────────┘                      └────────┬─────────┘
                                                                                      │ Discord Bridge
                                                                             ┌────────▼─────────┐
                                                                             │     Discord      │
                                                                             │   #pr-reviews    │
                                                                             │                  │
                                                                             │  @pr-reviewer    │
                                                                             │  @pr-standards   │
                                                                             │  👤 Team Humans  │
                                                                             └──────────────────┘
                                                                                      │
                                                                             GitHub API Execution
                                                                             (Approve / Block)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;A developer opens a PR on GitHub.&lt;/li&gt;
&lt;li&gt;A GitHub webhook hits the PR Pilot FastAPI service.&lt;/li&gt;
&lt;li&gt;The event routes to the Discord room through &lt;strong&gt;Switch&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;@pr-reviewer&lt;/code&gt; reads the diff, writes a review, and tags &lt;code&gt;@pr-standards&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;@pr-standards&lt;/code&gt; posts its pass/warn/fail scorecard.&lt;/li&gt;
&lt;li&gt;Teammates can ask questions in the thread, discuss with the AI, and type &lt;code&gt;approve&lt;/code&gt; to officially approve the PR on GitHub without ever leaving Discord.&lt;/li&gt;
&lt;/ol&gt;




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

&lt;ul&gt;
&lt;li&gt;📦 &lt;strong&gt;GitHub Repository&lt;/strong&gt;: &lt;a href="https://github.com/jaysid97/pr-pilot" rel="noopener noreferrer"&gt;github.com/jaysid97/pr-pilot&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;📹 &lt;strong&gt;Demo Walkthrough Video&lt;/strong&gt;: &lt;em&gt;[Insert your demo video or Loom/YouTube link here]&lt;/em&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Live Walkthrough in Discord
&lt;/h3&gt;

&lt;p&gt;Here is what the interaction looks like when a developer opens a pull request:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;PR Opened:&lt;/strong&gt; &lt;code&gt;feat: add JWT authentication logic&lt;/code&gt; (#42)&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;code&gt;@pr-reviewer&lt;/code&gt;&lt;/strong&gt;:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;🔍 &lt;strong&gt;Summary&lt;/strong&gt;: Implements JWT verification middleware and token renewal endpoints.&lt;br&gt;
⚠️ &lt;strong&gt;Risk Level&lt;/strong&gt;: &lt;strong&gt;HIGH&lt;/strong&gt; — modifies core authentication logic and security headers.&lt;br&gt;
❓ &lt;strong&gt;Questions for @author&lt;/strong&gt;:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Have we accounted for token replay prevention during silent refresh?&lt;/li&gt;
&lt;li&gt;Is the secret rotation strategy compatible with multi-instance clustering?&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;code&gt;@pr-standards please run your checklist on this PR: https://github.com/demo/repo/pull/42&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;&lt;code&gt;@pr-standards&lt;/code&gt;&lt;/strong&gt;:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;📋 &lt;strong&gt;Standards Check for PR #42&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;✅ Conventional commit title&lt;/li&gt;
&lt;li&gt;✅ Description present&lt;/li&gt;
&lt;li&gt;⚠️ No test files updated (&lt;code&gt;tests/test_auth.py&lt;/code&gt; missing)&lt;/li&gt;
&lt;li&gt;✅ No unlinked TODOs&lt;/li&gt;
&lt;li&gt;✅ PR size: 142 lines (healthy)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Overall&lt;/strong&gt;: PASS with 1 warning.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;Developer&lt;/strong&gt;: &lt;em&gt;"Does this handle token refresh edge cases?"&lt;/em&gt;&lt;br&gt;&lt;br&gt;
&lt;strong&gt;&lt;code&gt;@pr-reviewer&lt;/code&gt;&lt;/strong&gt;: &lt;em&gt;"Yes, in &lt;code&gt;auth_service.py:84&lt;/code&gt;, expired tokens return &lt;code&gt;401 TOKEN_EXPIRED&lt;/code&gt;, but network retry backoff should still be handled by the client."&lt;/em&gt;  &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Developer&lt;/strong&gt;: &lt;em&gt;"approve"&lt;/em&gt;&lt;br&gt;&lt;br&gt;
&lt;strong&gt;&lt;code&gt;@pr-reviewer&lt;/code&gt;&lt;/strong&gt;: &lt;em&gt;"✅ Approved on GitHub on behalf of @developer."&lt;/em&gt;&lt;/p&gt;


&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  Partner Technologies
&lt;/h2&gt;

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

&lt;p&gt;&lt;a href="https://github.com/sandbox-quantum/switch" rel="noopener noreferrer"&gt;Switch&lt;/a&gt; served as the foundational infrastructure for PR Pilot. Rather than building custom Discord bot handlers, websocket daemons, and session trackers from scratch:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Declarative Room Templates&lt;/strong&gt;: With &lt;code&gt;pr-pilot.template.yaml&lt;/code&gt;, the entire multi-agent environment (agent identities, instruction prompts, communication policies, and channel bindings) is spin-up ready in a single click via Switch Console.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Agent Communication Protocol&lt;/strong&gt;: &lt;code&gt;@pr-reviewer&lt;/code&gt; and &lt;code&gt;@pr-standards&lt;/code&gt; consume room events via Server-Sent Events (SSE) and post through HTTP back to Switch.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Discord Bridge&lt;/strong&gt;: Switch translates bidirectional messages between Discord's API and the agents seamlessly, allowing agents to react to human input in natural conversational threads.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  2. Antigravity &amp;amp; Agent Runtimes
&lt;/h3&gt;

&lt;p&gt;I leveraged &lt;strong&gt;Antigravity&lt;/strong&gt; to formulate the agent personalities, system prompts, and strict guardrails. The dual-agent separation prevents prompt bloat: &lt;code&gt;@pr-reviewer&lt;/code&gt; specializes in qualitative reasoning, code comprehension, and API execution, while &lt;code&gt;@pr-standards&lt;/code&gt; operates as a deterministic, objective checklist engine.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. FastAPI &amp;amp; Docker
&lt;/h3&gt;

&lt;p&gt;The webhook receiver was built with FastAPI, containerized using Docker Compose, and securely exposed via tunnels to handle GitHub payload verification (&lt;code&gt;HMAC-SHA256&lt;/code&gt;) and dispatch events to the Switch network with sub-second latency.&lt;/p&gt;




&lt;h2&gt;
  
  
  Hackathon Experience
&lt;/h2&gt;

&lt;p&gt;Building PR Pilot during the hackathon was an absolute blast. &lt;/p&gt;

&lt;p&gt;Hackathons are famous for high adrenaline and tight timelines, but the biggest revelation for me was how natural multi-agent architectures feel when anchored inside a team chat application. Instead of isolating AI into web dashboards or CLI tools that people forget to check, putting them where developers already hang out (Discord) transforms AI from a passive utility into an active pair-programming teammate.&lt;/p&gt;

&lt;p&gt;The most memorable moment was testing the full loop for the first time: pushing a mock breaking commit, watching Discord light up 3 seconds later with a targeted warning from &lt;code&gt;@pr-reviewer&lt;/code&gt;, discussing it in the channel, and seeing the PR status tick green on GitHub just by typing "approve" in chat.&lt;/p&gt;

&lt;h3&gt;
  
  
  What's Next for PR Pilot
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Support for GitLab and Bitbucket webhooks.&lt;/li&gt;
&lt;li&gt;Inline PR code comment suggestions directly generated from Discord threads.&lt;/li&gt;
&lt;li&gt;Custom organization rulebooks that let teams define their own &lt;code&gt;@pr-standards&lt;/code&gt; checklists via simple YAML files.&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;&lt;em&gt;Check out the repository on &lt;a href="https://github.com/jaysid97/pr-pilot" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt; and feel free to try running the Switch template in your own server! Let me know in the comments how your team manages pull request reviews.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>agents</category>
      <category>ai</category>
      <category>discord</category>
      <category>github</category>
    </item>
    <item>
      <title>How I Built a Real-Time Multilingual AI Voice Tutor for Bharat (And Solved the 55ms Latency Problem)</title>
      <dc:creator>jaysid97</dc:creator>
      <pubDate>Sat, 15 Aug 2026 11:38:52 +0000</pubDate>
      <link>https://dev.to/jaysid97/how-i-built-a-real-time-multilingual-ai-voice-tutor-for-bharat-and-solved-the-55ms-latency-problem-1epc</link>
      <guid>https://dev.to/jaysid97/how-i-built-a-real-time-multilingual-ai-voice-tutor-for-bharat-and-solved-the-55ms-latency-problem-1epc</guid>
      <description>&lt;h1&gt;
  
  
  How I Built a Real-Time Multilingual AI Voice Tutor for Bharat (And Solved the 55ms Latency Problem)
&lt;/h1&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;10 Days of Voice AI Challenge — VoiceForBharat Edition&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
&lt;em&gt;Author: Jay | Track: Learning &amp;amp; Literacy (EdTech)&lt;/em&gt;&lt;br&gt;&lt;br&gt;
&lt;em&gt;Open-Source Repository: &lt;a href="https://github.com/jaysid97/Ten-day-of-voice-challenges-bharat-edition" rel="noopener noreferrer"&gt;github.com/jaysid97/Ten-day-of-voice-challenges-bharat-edition&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;




&lt;p&gt;When you build a traditional text chatbot, a 1.5-second API delay feels completely normal. But in &lt;strong&gt;conversational voice AI&lt;/strong&gt;, a 1.5-second delay feels like an uncomfortable eternity. &lt;/p&gt;

&lt;p&gt;Now imagine building a voice tutor for students across India — where learners naturally flip mid-sentence between English, Hindi, and regional terms (&lt;em&gt;"Bhaiya, is quadratic equation ko solve karne ka simple trick kya hai?"&lt;/em&gt;). Suddenly, latency isn't just a performance metric. &lt;strong&gt;Latency is the entire user experience.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Over the last 10 days, as part of the &lt;strong&gt;#VoiceForBharat AI Challenge&lt;/strong&gt;, I built &lt;strong&gt;Shiksha AI (शिक्षा AI)&lt;/strong&gt; — an empathetic, multilingual voice tutor powered by &lt;strong&gt;Murf Falcon TTS&lt;/strong&gt;, &lt;strong&gt;LiveKit Agents&lt;/strong&gt;, &lt;strong&gt;Deepgram Nova-3&lt;/strong&gt;, and &lt;strong&gt;Google Gemini&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;In this article, I want to break down how I built it, the architecture decisions behind sub-100ms voice responses, the hardest bugs I ran into, and how you can run the entire open-source setup yourself in under two minutes.&lt;/p&gt;




&lt;h2&gt;
  
  
  🎯 The Core Problem: Why Voice AI for Bharat?
&lt;/h2&gt;

&lt;p&gt;Quality 1-on-1 tutoring in India is expensive, geographically unequal, and often intimidating. Students in Tier 2, Tier 3, and rural towns face four massive hurdles:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;The Cost Barrier&lt;/strong&gt;: Private home tutors cost thousands of rupees per month, making personalized guidance inaccessible for low-income households.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The Language &amp;amp; Code-Mixing Barrier&lt;/strong&gt;: Most educational apps force students into formal English, whereas Indian kids think and speak in &lt;strong&gt;Hinglish&lt;/strong&gt; (a blend of Hindi and English).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The "Fear of Shaming"&lt;/strong&gt;: Students frequently hesitate to ask "stupid questions" in crowded classrooms for fear of being ridiculed by peers or teachers.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Keyboard Friction&lt;/strong&gt;: Try typing &lt;code&gt;2x² + 5x + 3 = 0&lt;/code&gt; or asking about photosynthesis on a small smartphone screen — it's awkward and slow.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Voice changes everything. By giving students a patient, non-judgmental voice tutor that speaks their language, understands their accent, and responds instantly, we can democratize personalized learning.&lt;/p&gt;




&lt;h2&gt;
  
  
  🏗️ System Architecture: How Audio Moves in Real Time
&lt;/h2&gt;

&lt;p&gt;A real-time voice agent is a continuous, bi-directional pipeline. Audio flows from the student's microphone, gets transcribed into text, passes through an LLM for reasoning and tool execution, and is streamed back as high-quality speech.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;flowchart TD
    User[🎙️ Learner / Voice Caller / Outbound SIP] --&amp;gt;|Audio Stream via WebRTC or SIP| STT[Deepgram STT Nova-3 Multi]
    STT --&amp;gt;|Text Transcript| LLM[Google Gemini LLM]

    subgraph Agent &amp;amp; Multi-Agent Domain Layer
        LLM &amp;lt;--&amp;gt;|Active Session Agent| MainAgent[Shiksha AI Main Tutor]
        LLM &amp;lt;--&amp;gt;|Handoff via session.update_agent| Specialist[MathsPracticeSpecialist Agent]
    end

    subgraph Memory, Tools &amp;amp; Safety Layer
        MainAgent &amp;lt;--&amp;gt;|Learner Facts &amp;amp; Consent| SQLiteMemory[(SQLite: agent_memory.db)]
        MainAgent &amp;lt;--&amp;gt;|Live Syllabus / Concepts| WikiAPI[Wikipedia Educational REST API]
        MainAgent &amp;lt;--&amp;gt;|Dictionary &amp;amp; Phonetics| DictAPI[Free Dictionary REST API]
        MainAgent &amp;lt;--&amp;gt;|PII Scrub &amp;amp; Webhook| Escalation[Human Support Engine / Discord]
        Specialist &amp;lt;--&amp;gt;|Step-by-Step Math Solver| MathTool[solve_math_step_by_step Tool]
    end

    subgraph Telephony &amp;amp; Analytics Layer
        MainAgent &amp;lt;--&amp;gt;|2-Sentence Opening &amp;amp; Retry Rules| Outbound[src/outbound_call.py]
        MainAgent --&amp;gt;|Teardown Metrics| Analytics[SQLite call_analytics Table]
    end

    LLM --&amp;gt;|Spoken Response Text| TTS[Murf Falcon Streaming TTS]
    TTS --&amp;gt;|High-Quality Audio (55ms)| Transport[LiveKit Agent Transport]
    Transport --&amp;gt;|Audio Output| Speaker[🔊 Learner Hears Shiksha AI]

    style User fill:#1E293B,stroke:#38BDF8,color:#fff
    style STT fill:#064E3B,stroke:#10B981,color:#fff
    style LLM fill:#1E1B4B,stroke:#818CF8,color:#fff
    style MainAgent fill:#431407,stroke:#F97316,color:#fff
    style Specialist fill:#365314,stroke:#84CC16,color:#fff
    style SQLiteMemory fill:#78350F,stroke:#F59E0B,color:#fff
    style Outbound fill:#831843,stroke:#F43F5E,color:#fff
    style WikiAPI fill:#0284C7,stroke:#38BDF8,color:#fff
    style DictAPI fill:#4C1D95,stroke:#C084FC,color:#fff
    style Escalation fill:#701A75,stroke:#F43F5E,color:#fff
    style Analytics fill:#1E3A8A,stroke:#60A5FA,color:#fff
    style TTS fill:#065F46,stroke:#34D399,color:#fff
    style Transport fill:#1E293B,stroke:#F59E0B,color:#fff
    style Speaker fill:#1E293B,stroke:#10B981,color:#fff
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  The Tech Stack
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;TTS (Text-to-Speech)&lt;/strong&gt;: &lt;strong&gt;Murf Falcon TTS&lt;/strong&gt; — Delivering ultra-low &lt;strong&gt;55ms streaming latency&lt;/strong&gt; with authentic Indian voice synthesis and flawless pronunciation of Hindi and English terms.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;STT (Speech-to-Text)&lt;/strong&gt;: &lt;strong&gt;Deepgram Nova-3 Multi-Language&lt;/strong&gt; — Handling real-time speech recognition across English, Hindi (Devanagari script), and Hinglish.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;LLM Engine&lt;/strong&gt;: &lt;strong&gt;Google Gemini 1.5 Flash&lt;/strong&gt; — Providing empathetic reasoning, guardrail compliance, and zero-shot function execution.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Real-Time Transport&lt;/strong&gt;: &lt;strong&gt;LiveKit Agents&lt;/strong&gt; — Orchestrating WebRTC audio streaming, VAD (Voice Activity Detection), and SIP telephony.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Database&lt;/strong&gt;: &lt;strong&gt;SQLite (&lt;code&gt;agent_memory.db&lt;/code&gt;)&lt;/strong&gt; — Storing learner memory, call logs, human escalation tickets, and analytics.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  💡 The 4 Engineering Breakthroughs in Shiksha AI
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Achieving 55ms Latency with Murf Falcon TTS
&lt;/h3&gt;

&lt;p&gt;Traditional TTS engines wait for the LLM to generate an entire paragraph before synthesizing audio. This introduces a 1.5 to 2.5 second delay — killing the natural flow of conversation.&lt;/p&gt;

&lt;p&gt;Using &lt;strong&gt;Murf Falcon's streaming API&lt;/strong&gt;, as soon as Gemini outputs the first few tokens, Murf Falcon immediately synthesizes and streams raw PCM audio frames over WebRTC. The total time from the student stopping their speech to hearing the first spoken word dropped to under &lt;strong&gt;100ms&lt;/strong&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Persistent Learner Memory with "Hard Consent"
&lt;/h3&gt;

&lt;p&gt;Shiksha AI remembers returning students (&lt;em&gt;"Welcome back Ramesh! Last time we revised Class 10 Biology Photosynthesis..."&lt;/em&gt;). But storing voice conversation data without explicit consent is a major privacy violation.&lt;/p&gt;

&lt;p&gt;I built a &lt;strong&gt;Hard Consent Rule&lt;/strong&gt;: The LLM is strictly instructed to ask aloud (&lt;em&gt;"Should I remember your grade level and weak topics for next time?"&lt;/em&gt;) before invoking &lt;code&gt;save_caller_facts&lt;/code&gt;. If the student says "No", zero records are saved to SQLite.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Outbound SIP Telephony &amp;amp; Mandatory Opening Script
&lt;/h3&gt;

&lt;p&gt;Not every student in India has a high-speed laptop or desktop. To reach students on feature phones, I integrated LiveKit SIP and Twilio (&lt;code&gt;src/outbound_call.py&lt;/code&gt;) to trigger automated outbound revision calls.&lt;/p&gt;

&lt;p&gt;Every outbound call strictly enforces a 2-sentence compliance opening:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Who &amp;amp; Why&lt;/strong&gt;: &lt;em&gt;"Namaste Ramesh ji! I am Shiksha AI calling for your daily 5-minute NCERT Science practice call."&lt;/em&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Opt-Out Notice&lt;/strong&gt;: &lt;em&gt;"If you want to stop receiving these calls, just say 'stop' or 'opt out'."&lt;/em&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Retry Logic&lt;/strong&gt;: Automatically categorizes call outcomes (&lt;code&gt;ANSWERED&lt;/code&gt;, &lt;code&gt;BUSY&lt;/code&gt;, &lt;code&gt;NO_ANSWER&lt;/code&gt;, &lt;code&gt;VOICEMAIL&lt;/code&gt;, &lt;code&gt;OPT_OUT&lt;/code&gt;) and reschedules missed calls.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  4. Multi-Agent Handoff to &lt;code&gt;MathsPracticeSpecialist&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;Prompting a single LLM agent to handle general subjects, languages, quizzes, guardrails, &lt;em&gt;and&lt;/em&gt; step-by-step calculus causes prompt pollution and degrades reasoning quality.&lt;/p&gt;

&lt;p&gt;Instead, I built a &lt;strong&gt;Multi-Agent Handoff Architecture&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Main Tutor (&lt;code&gt;Shiksha AI&lt;/code&gt;)&lt;/strong&gt;: Handles general queries, history, biology, and language lessons.&lt;/li&gt;
&lt;li&gt;When a student asks for complex math help (&lt;em&gt;"Help me solve 2x² + 5x + 3 = 0"&lt;/em&gt;), &lt;code&gt;Shiksha AI&lt;/code&gt; calls the &lt;code&gt;hand_off_to_math_specialist&lt;/code&gt; tool.&lt;/li&gt;
&lt;li&gt;The session updates dynamically via &lt;code&gt;session.update_agent(math_specialist)&lt;/code&gt; while retaining the full &lt;code&gt;session.history&lt;/code&gt; array.&lt;/li&gt;
&lt;li&gt;The &lt;strong&gt;Maths Practice Specialist AI&lt;/strong&gt; takes over seamlessly, greets the student, and uses the &lt;code&gt;solve_math_step_by_step&lt;/code&gt; tool without asking the student to re-explain the problem!&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  🛠️ The Hardest Bugs I Had to Solve
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Bug #1: The Hinglish Code-Switching Latency Trap
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;The Problem&lt;/strong&gt;: Standard STTs frequently misheard English technical terms mixed into Hindi sentences (e.g. transcribing "quadratic equation" as random Devanagari noise). If the STT output garbage, the LLM took extra time trying to make sense of it, spiking latency past 1.5 seconds.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The Fix&lt;/strong&gt;: Paired Deepgram Nova-3's &lt;code&gt;multi&lt;/code&gt; language model with Murf Falcon TTS. Deepgram correctly captures mixed Devanagari and Latin script text, and Murf Falcon streams the output audio within 55ms, keeping the conversation instantaneous.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Bug #2: Context Wipeout During Agent Handoffs
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;The Problem&lt;/strong&gt;: On the first iteration of &lt;code&gt;session.update_agent()&lt;/code&gt;, the newly active &lt;code&gt;MathsPracticeSpecialist&lt;/code&gt; agent wiped out the conversation buffer, responding with a generic &lt;em&gt;"Hello, how can I help you?"&lt;/em&gt; right after the main agent had already promised to solve the quadratic equation.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The Fix&lt;/strong&gt;: Passed the active &lt;code&gt;session.history&lt;/code&gt; array into the specialist agent's initialization parameters. The specialist immediately scans the existing transcript context and jumps straight into the step-by-step solution.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Bug #3: Voice PII Scrubbing on Human Escalations
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;The Problem&lt;/strong&gt;: When a student gets repeatedly stuck on a concept or has an exam dispute, &lt;code&gt;Shiksha AI&lt;/code&gt; escalates the issue to a human teacher via a &lt;strong&gt;Discord Webhook&lt;/strong&gt; and SQLite ticket. However, students occasionally blurt out phone numbers, OTPs, or Aadhaar numbers during voice calls.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The Fix&lt;/strong&gt;: Implemented a backend regex sanitizer (&lt;code&gt;sanitize_summary&lt;/code&gt; in &lt;code&gt;src/db.py&lt;/code&gt;) that scrubs passwords, 6-digit OTPs, and 12-digit Aadhaar patterns from the transcript summary &lt;em&gt;before&lt;/em&gt; creating the database record or sending the Discord alert card.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  💻 Code Breakdown: Core Implementation Snippets
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Initializing Murf Falcon TTS in LiveKit (&lt;code&gt;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="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;livekit.plugins&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;murf&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;deepgram&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;google&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;livekit.agents&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;AgentSession&lt;/span&gt;

&lt;span class="c1"&gt;# Setup Murf Falcon Streaming TTS (55ms latency with authentic Indian accent)
&lt;/span&gt;&lt;span class="n"&gt;tts_engine&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;api_key&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getenv&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;MURF_API_KEY&lt;/span&gt;&lt;span class="sh"&gt;"&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;en-IN-falcon-female&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;conversational&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&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-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-1.5-flash&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;tts_engine&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;h3&gt;
  
  
  2. Human Escalation with PII Scrubbing (&lt;code&gt;src/tools.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="nd"&gt;@llm.function_tool&lt;/span&gt;
&lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;create_escalation&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;caller_name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;phone_number&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;issue_category&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;summary&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;user_consent_given&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;bool&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="sh"&gt;"""&lt;/span&gt;&lt;span class="s"&gt;Escalates complex issues to human teachers after explicit consent.&lt;/span&gt;&lt;span class="sh"&gt;"""&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="ow"&gt;not&lt;/span&gt; &lt;span class="n"&gt;user_consent_given&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;ERROR: Consent was not provided by caller. Ticket creation aborted.&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;

    &lt;span class="c1"&gt;# Redact sensitive PII before storing
&lt;/span&gt;    &lt;span class="n"&gt;clean_summary&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;sanitize_summary&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;summary&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="n"&gt;ticket_id&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;save_human_escalation_ticket&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="n"&gt;caller_name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;caller_name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;phone_number&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;phone_number&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;category&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;issue_category&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;summary&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;clean_summary&lt;/span&gt;
    &lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="c1"&gt;# Trigger Discord Webhook Notification asynchronously
&lt;/span&gt;    &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;send_discord_escalation_alert&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ticket_id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;caller_name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;clean_summary&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;SUCCESS: Escalation logged (Ref ID: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;ticket_id&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;). Teacher will call back in 2-4 hours.&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  3. Specialist Agent Handoff Tool (&lt;code&gt;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="nd"&gt;@llm.function_tool&lt;/span&gt;
&lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;hand_off_to_math_specialist&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;session&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;AgentSession&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="sh"&gt;"""&lt;/span&gt;&lt;span class="s"&gt;Transfers the live voice session to the Maths Practice Specialist AI.&lt;/span&gt;&lt;span class="sh"&gt;"""&lt;/span&gt;
    &lt;span class="c1"&gt;# Spoken announcement to the learner
&lt;/span&gt;    &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;session&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;say&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;I am transferring you to our Maths Practice Specialist AI now!&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="c1"&gt;# Update session agent while preserving session.history context
&lt;/span&gt;    &lt;span class="n"&gt;math_specialist&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;MathsPracticeSpecialist&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;session&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;update_agent&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;math_specialist&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;SUCCESS: Handed off conversation to MathsPracticeSpecialist.&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  🧪 Testing &amp;amp; Verification
&lt;/h2&gt;

&lt;p&gt;To verify that all 10 days of features remain stable, I wrote automated Pytest suites covering guardrail compliance, tool invocations, outbound telephony status handling, human escalation ticket creation, analytics logging, and handoff transitions:&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
python &lt;span class="nt"&gt;-m&lt;/span&gt; pytest tests/
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;============================= 32 passed in 55.35s =============================
tests/test_agent.py            ... (3/3 passed)
tests/test_day2_guardrails.py   .... (4/4 passed)
tests/test_day5_tools.py        ...... (6/6 passed)
tests/test_day6_outbound.py     ..... (5/5 passed)
tests/test_day7_escalation.py   ...... (6/6 passed)
tests/test_day8_analytics.py    .... (4/4 passed)
tests/test_day9_handoff.py      .... (4/4 passed)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  🚀 Quickstart: Run Shiksha AI in 2 Minutes
&lt;/h2&gt;

&lt;p&gt;Want to test or inspect the codebase yourself? Follow these simple steps:&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Clone the Repository
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git clone https://github.com/jaysid97/Ten-day-of-voice-challenges-bharat-edition.git
&lt;span class="nb"&gt;cd &lt;/span&gt;Ten-day-of-voice-challenges-bharat-edition
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  2. Configure Environment Keys
&lt;/h3&gt;

&lt;p&gt;Copy &lt;code&gt;.env.example&lt;/code&gt; to &lt;code&gt;murf-livekit-starter/backend/.env.local&lt;/code&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-livekit-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;h3&gt;
  
  
  3. Launch the Application
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Windows (PowerShell)&lt;/strong&gt;:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;\start_app.ps1&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;macOS / Linux (Bash)&lt;/strong&gt;:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;  &lt;span class="nb"&gt;chmod&lt;/span&gt; +x start_app.sh
  ./start_app.sh
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Open &lt;code&gt;http://localhost:3000&lt;/code&gt; in your browser, click &lt;strong&gt;"Start Conversation"&lt;/strong&gt;, grant mic permissions, and start talking to Shiksha AI!&lt;/p&gt;




&lt;h2&gt;
  
  
  🔮 What's Next for Shiksha AI?
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Offline Voice Caching&lt;/strong&gt;: Caching common NCERT definitions directly on mobile devices to support learners in rural areas with poor 3G/4G connectivity.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;South Indian Language Expansion&lt;/strong&gt;: Extending native voice models to Tamil, Telugu, Kannada, and Malayalam.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Multi-Modal Interactive Whiteboard&lt;/strong&gt;: Rendering real-time math diagrams and geometric shapes alongside Murf Falcon voice explanations.&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  🔗 Project Links &amp;amp; Credits
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;💻 &lt;strong&gt;Open-Source Codebase&lt;/strong&gt;: &lt;a href="https://github.com/jaysid97/Ten-day-of-voice-challenges-bharat-edition" rel="noopener noreferrer"&gt;github.com/jaysid97/Ten-day-of-voice-challenges-bharat-edition&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;🎙️ &lt;strong&gt;TTS Provider&lt;/strong&gt;: &lt;a href="https://murf.ai/" rel="noopener noreferrer"&gt;Murf Falcon TTS (55ms Latency)&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;📦 &lt;strong&gt;Transport Engine&lt;/strong&gt;: &lt;a href="https://livekit.io/" rel="noopener noreferrer"&gt;LiveKit Agents&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  💼 LinkedIn Share Template (#VoiceForBharat)
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;🎉 Day 10 of 10 Days of Voice Agents: Sharing My Voice AI Journey! 🎙️🇮🇳 #VoiceForBharat

Over the past 10 days, I built Shiksha AI (शिक्षा AI) — a Human-Type AI Voice Tutor designed for learners across Bharat (EdTech Track)!

What started as a simple real-time voice pipeline evolved into an enterprise-grade voice agent featuring:
✨ Ultra-fast 55ms Indian Voice synthesis powered by Murf Falcon TTS
🧠 Persistent Learner Memory &amp;amp; Hard Consent Rules (SQLite DB)
🛠️ Live Domain Tools (NCERT Wikipedia REST API &amp;amp; Dictionary Integration)
📞 Outbound Telephony &amp;amp; Mandatory 2-Sentence Opening Scripts (LiveKit SIP &amp;amp; Twilio)
🚨 Human Escalation Engine with PII Scrubbing &amp;amp; Discord Webhooks
📊 Real-Time Call Analytics Dashboard (/analytics)
🧮 Multi-Agent Specialist Handoffs (MathsPracticeSpecialist AI)

The highlight of this journey was building with Murf Falcon TTS — hands down the fastest, most natural-sounding Text-to-Speech API for Indian accents and multilingual speech!

📖 Read my complete step-by-step guide &amp;amp; architecture breakdown:
[INSERT YOUR PUBLISHED BLOG URL HERE]

💻 Inspect the open-source code on GitHub:
https://github.com/jaysid97/Ten-day-of-voice-challenges-bharat-edition

A huge thank you to @Murf AI for organizing the 10 Days of Voice Agents — VoiceForBharat Edition! 🚀

#VoiceForBharat #MurfAI #VoiceAI #EdTech #ArtificialIntelligence #LiveKit #Python #NextJS #WebRTC #BuildInPublic #BharatAI
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;p&gt;&lt;em&gt;Thanks for reading! If you're building real-time voice applications or experimenting with LiveKit and Murf AI, drop a comment or reach out — I'd love to swap notes!&lt;/em&gt;&lt;/p&gt;

</description>
      <category>voiceai</category>
      <category>ai</category>
      <category>webdev</category>
      <category>python</category>
    </item>
    <item>
      <title>EcoTwin: An AI Climate Coach for Real-World Emissions Cuts</title>
      <dc:creator>jaysid97</dc:creator>
      <pubDate>Mon, 20 Apr 2026 13:21:08 +0000</pubDate>
      <link>https://dev.to/jaysid97/ecotwin-an-ai-climate-coach-for-real-world-emissions-cuts-4dk7</link>
      <guid>https://dev.to/jaysid97/ecotwin-an-ai-climate-coach-for-real-world-emissions-cuts-4dk7</guid>
      <description>&lt;p&gt;What I Built&lt;br&gt;
Most climate tools diagnose. EcoTwin prescribes.&lt;/p&gt;

&lt;p&gt;EcoTwin is a personalized climate action coach that turns a few everyday inputs, like commute habits, food choices, home energy use, and travel frequency, into a practical action plan with estimated annual CO2e savings.&lt;/p&gt;

&lt;p&gt;Instead of stopping at a “guilt score,” EcoTwin estimates a baseline footprint, shows a before/after projection, and recommends the highest-impact changes first.&lt;/p&gt;

&lt;p&gt;Users get:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A baseline annual footprint estimate&lt;/li&gt;
&lt;li&gt;A personalized set of top climate actions&lt;/li&gt;
&lt;li&gt;Projected annual CO2e savings&lt;/li&gt;
&lt;li&gt;A concise AI coaching summary powered by Gemini (with fallback if a key is unavailable)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Demo&lt;br&gt;
Live demo:&lt;a href="https://ecotwin-qsgv.onrender.com/" rel="noopener noreferrer"&gt;https://ecotwin-qsgv.onrender.com/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Quick walkthrough:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Open the app&lt;/li&gt;
&lt;li&gt;Enter a city and lifestyle inputs&lt;/li&gt;
&lt;li&gt;Click Generate My Climate Plan&lt;/li&gt;
&lt;li&gt;Review before/after footprint and recommended actions&lt;/li&gt;
&lt;li&gt;Read the AI coach summary&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Code&lt;br&gt;
Source code is in the project folder and includes:&lt;br&gt;
-Backend:Flask API for scoring, recommendations, and AI summary&lt;br&gt;
-Frontend:HTML/CSS/JS dashboard with interactive results&lt;br&gt;
-Data:Curated action library with estimated CO2e savings&lt;/p&gt;

&lt;p&gt;Core implementation highlights:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Transparent footprint estimation model&lt;/li&gt;
&lt;li&gt;Rule-based personalization by user profile&lt;/li&gt;
&lt;li&gt;Gemini API integration for natural-language coaching&lt;/li&gt;
&lt;li&gt;Stable local fallback summary for reliability&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;How I Built It&lt;br&gt;
I built EcoTwin as a focused full-stack Flask app to keep it easy to run, easy to demo, and easy to judge.&lt;/p&gt;

&lt;p&gt;Architecture flow:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Frontend collects a lightweight user profile&lt;/li&gt;
&lt;li&gt;Backend computes annual baseline emissions&lt;/li&gt;
&lt;li&gt;Action library is filtered by relevance and sorted by impact&lt;/li&gt;
&lt;li&gt;App calculates projected reductions and renders before/after metrics&lt;/li&gt;
&lt;li&gt;Gemini generates a short personalized coaching summary&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Design decisions:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Kept input friction low so users can get value in seconds&lt;/li&gt;
&lt;li&gt;Prioritized practical behavior-change suggestions over abstract climate theory&lt;/li&gt;
&lt;li&gt;Added clear before/after visuals to make impact tangible during a live demo&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Prize Categories&lt;br&gt;
This submission is for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Best Use of Google Gemini&lt;/li&gt;
&lt;li&gt;Best Use of GitHub Copilot&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Team&lt;br&gt;
Solo submission.&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>weekendchallenge</category>
      <category>ai</category>
      <category>earthday</category>
    </item>
  </channel>
</rss>
