<?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: Vidisha Gupta</title>
    <description>The latest articles on DEV Community by Vidisha Gupta (@vidisha_gupta_).</description>
    <link>https://dev.to/vidisha_gupta_</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%2F4141798%2F9aabbbcb-08ec-4a1d-8314-ea6502d1c0ab.jpg</url>
      <title>DEV Community: Vidisha Gupta</title>
      <link>https://dev.to/vidisha_gupta_</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/vidisha_gupta_"/>
    <language>en</language>
    <item>
      <title>Freeing AI from the Terminal: How We Built SwitchWarRoom to Turn Coding Agents into SRE Teammates in Slack</title>
      <dc:creator>Vidisha Gupta</dc:creator>
      <pubDate>Sat, 07 Nov 2026 17:44:13 +0000</pubDate>
      <link>https://dev.to/vidisha_gupta_/freeing-ai-from-the-terminal-how-we-built-switchwarroom-to-turn-coding-agents-into-sre-teammates-2aom</link>
      <guid>https://dev.to/vidisha_gupta_/freeing-ai-from-the-terminal-how-we-built-switchwarroom-to-turn-coding-agents-into-sre-teammates-2aom</guid>
      <description>&lt;p&gt;&lt;em&gt;Submitted for the **Flip the Switch Hackathon&lt;/em&gt;* hosted by &lt;strong&gt;WeMakeDevs&lt;/strong&gt; &amp;amp; &lt;strong&gt;DevTools Academy&lt;/strong&gt; (Powered by &lt;strong&gt;Switch AI&lt;/strong&gt; &amp;amp; &lt;strong&gt;SandboxAQ&lt;/strong&gt;).*&lt;/p&gt;




&lt;h3&gt;
  
  
  🎥 Watch the 2-Minute Demo Video
&lt;/h3&gt;

&lt;p&gt;  &lt;iframe src="https://www.youtube.com/embed/_1hyjWhKm3g" width="710" height="399"&gt;
  &lt;/iframe&gt;
&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Live Deployed App (Vercel):&lt;/strong&gt; &lt;a href="https://switch-war-room.vercel.app" rel="noopener noreferrer"&gt;https://switch-war-room.vercel.app&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;GitHub Repository:&lt;/strong&gt; &lt;a href="https://github.com/vidishagupta/switch-war-room" rel="noopener noreferrer"&gt;https://github.com/vidishagupta/switch-war-room&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  1. The Terminal Dilemma: Why Solo AI Agents Fail Under Pressure
&lt;/h2&gt;

&lt;p&gt;Imagine this scenario: It's 2:15 AM on a Saturday. Your PagerDuty alarm blares. A P1 outage has struck the checkout service. Kubernetes pods are crashing in an OOMKilled loop, and 38% of user transactions are timing out with HTTP 504.&lt;/p&gt;

&lt;p&gt;In most engineering teams today, one on-call engineer wakes up groggy, opens their laptop, and launches an AI coding assistant (like Claude Code, Antigravity, or Cursor) in an isolated terminal window.&lt;/p&gt;

&lt;p&gt;For the next 45 minutes, that engineer is the sole bottleneck:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Zero Visibility:&lt;/strong&gt; The engineering manager, SRE lead, and VP of Engineering sitting in the &lt;code&gt;#incident-war-room&lt;/code&gt; Slack channel have no idea what the agent is doing.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Rogue Risks:&lt;/strong&gt; What if the agent suggests &lt;code&gt;rm -rf /&lt;/code&gt; or runs an unparameterized database migration? With terminal-only agents, there are no organization-wide guardrails.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Context Loss:&lt;/strong&gt; Once the engineer's terminal session closes, the reasoning chain, stack trace analysis, and reproducing tests vanish into thin air.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;AI agents shouldn't be lonely terminal sidekicks. They should be transparent, cooperative team members in the channels where human teams already live.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;That was our epiphany when we discovered &lt;strong&gt;Switch&lt;/strong&gt; at the &lt;em&gt;Flip the Switch&lt;/em&gt; hackathon. We built &lt;strong&gt;SwitchWarRoom&lt;/strong&gt; to transform isolated coding agents into a synchronized SRE swarm right inside Slack, Discord, and the Switch Console.&lt;/p&gt;




&lt;h2&gt;
  
  
  2. Introducing SwitchWarRoom
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;SwitchWarRoom&lt;/strong&gt; is an autonomous multi-agent incident response swarm powered by &lt;strong&gt;Switch&lt;/strong&gt; and &lt;strong&gt;SandboxAQ's Switch Trust&lt;/strong&gt;. &lt;/p&gt;

&lt;p&gt;When an outage strikes, SwitchWarRoom instantiates a dedicated incident room across team channels and deploys a coordinated squad of four specialized AI agents:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;                  ┌─────────────────────────────────────────┐
                  │          Monitoring Alerts              │
                  │     (Datadog / Sentry / PagerDuty)      │
                  └────────────────────┬────────────────────┘
                                       │
                                       ▼
                  ┌─────────────────────────────────────────┐
                  │             SWITCH BRIDGE               │
                  │     (Slack / Discord / WebSockets)      │
                  └────────────────────┬────────────────────┘
                                       │
       ┌───────────────────────────────┼───────────────────────────────┐
       ▼                               ▼                               ▼
┌──────────────┐               ┌──────────────┐               ┌──────────────┐
│  🕵️ Triage   │               │   🛠️ Patch    │               │  🛡️ Switch   │
│  Diagnostics │──────────────▶│  Engineering │──────────────▶│  Trust Gate  │
└──────────────┘               └──────────────┘               └──────┬───────┘
                                                                     │
                                                       [Human Sign-Off in Slack]
                                                                     │
                                                                     ▼
                                                              ┌──────────────┐
                                                              │  📋 Comms &amp;amp;  │
                                                              │ Post-Mortem  │
                                                              └──────────────┘
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;ol&gt;
&lt;li&gt;🕵️ &lt;strong&gt;Detective Triage:&lt;/strong&gt; Ingests Sentry error traces and logs, correlates recent commits, and isolates root cause in 1.4 seconds.&lt;/li&gt;
&lt;li&gt;🛠️ &lt;strong&gt;Patch Engineer:&lt;/strong&gt; Synthesizes an automated Vitest/Jest reproduction test and creates a surgical bugfix diff.&lt;/li&gt;
&lt;li&gt;🛡️ &lt;strong&gt;Switch Trust Sentinel:&lt;/strong&gt; Enforces SandboxAQ security guardrails, scans for leaked API credentials, blocks destructive commands, and pauses for &lt;strong&gt;Human-In-The-Loop authorization&lt;/strong&gt; via interactive chat buttons.&lt;/li&gt;
&lt;li&gt;📋 &lt;strong&gt;Comms Commander:&lt;/strong&gt; Keeps leadership updated with live progress reports and automatically publishes a comprehensive Blameless Post-Mortem.&lt;/li&gt;
&lt;/ol&gt;


&lt;h2&gt;
  
  
  3. How We Integrated Switch
&lt;/h2&gt;

&lt;p&gt;Switch acts as the nervous system for SwitchWarRoom. Instead of reinventing custom chat bots for every single messaging platform, Switch gives us:&lt;/p&gt;
&lt;h3&gt;
  
  
  A. Universal Channel Bridging
&lt;/h3&gt;

&lt;p&gt;Switch abstracts the underlying chat protocols. When our multi-agent orchestrator emits an event, Switch renders:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Rich &lt;strong&gt;Block Kit components&lt;/strong&gt; with interactive action buttons in Slack.&lt;/li&gt;
&lt;li&gt;Formatted &lt;strong&gt;Embeds with syntax-highlighted code&lt;/strong&gt; in Discord.&lt;/li&gt;
&lt;li&gt;Real-time updates to the local &lt;strong&gt;Switch Console&lt;/strong&gt; desktop app.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  B. Switch Trust MCP Integration
&lt;/h3&gt;

&lt;p&gt;We implemented a dedicated &lt;strong&gt;Switch Trust Model Context Protocol (MCP)&lt;/strong&gt; server over stdio. Before any agent executes bash commands or writes code, the operation is checked against Switch Trust guardrails:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Destructive commands like &lt;code&gt;DROP TABLE&lt;/code&gt; or &lt;code&gt;rm -rf&lt;/code&gt; are immediately blocked.&lt;/li&gt;
&lt;li&gt;Sensitive credentials (AWS keys, Stripe secrets) are deterministically redacted before posting to chat.&lt;/li&gt;
&lt;li&gt;Token budgets and dollar costs are monitored in real time (e.g., $0.0142 total AI cost for a full P1 resolution).&lt;/li&gt;
&lt;/ul&gt;


&lt;h2&gt;
  
  
  4. The Live Flow in Action
&lt;/h2&gt;

&lt;p&gt;Here is what happens during an actual live incident:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Alert Ingestion:&lt;/strong&gt; Datadog flags an OOM failure in &lt;code&gt;checkout-api&lt;/code&gt;. Switch creates &lt;code&gt;#war-room-checkout-api&lt;/code&gt; in Slack.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Root Cause Analysis:&lt;/strong&gt; &lt;code&gt;@Detective Triage&lt;/code&gt; immediately responds:
&amp;gt; &lt;em&gt;"I traced the stack trace to &lt;code&gt;src/services/checkout.ts:88&lt;/code&gt;. Unbounded event listener allocation inside &lt;code&gt;processCheckout()&lt;/code&gt;. On each transaction, an inline closure was bound to &lt;code&gt;redisBus.on('payment_ack')&lt;/code&gt; without an &lt;code&gt;.off()&lt;/code&gt; cleanup."&lt;/em&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Automated Reproduction &amp;amp; Patch:&lt;/strong&gt; &lt;code&gt;@Patch Engineer&lt;/code&gt; runs a Vitest reproduction suite simulating 50 concurrent transactions to confirm the leak, then posts the exact surgical diff and PR link.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Human-In-The-Loop Gate:&lt;/strong&gt; &lt;code&gt;@Switch Trust Sentinel&lt;/code&gt; posts:
&amp;gt; &lt;em&gt;"Policy Alert: Modifies live production service. Switch Trust Compliance: 96/100. Human approval required."&lt;/em&gt;
Two interactive buttons appear right in Slack: &lt;code&gt;[✅ Approve Fix &amp;amp; Deploy Hotfix]&lt;/code&gt; and &lt;code&gt;[🧪 Canary 10%]&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Human Sign-Off:&lt;/strong&gt; The on-call Tech Lead taps &lt;strong&gt;Approve&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Post-Mortem Auto-Generation:&lt;/strong&gt; Within seconds of deployment, &lt;code&gt;@Comms Commander&lt;/code&gt; confirms p99 latency returned to 120ms and generates an automated Blameless Post-Mortem ready for Notion and Jira.&lt;/li&gt;
&lt;/ol&gt;


&lt;h2&gt;
  
  
  5. Results &amp;amp; Real-World ROI
&lt;/h2&gt;

&lt;p&gt;In our benchmark tests comparing traditional incident response vs. SwitchWarRoom:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Metric&lt;/th&gt;
&lt;th&gt;Traditional Human Triage&lt;/th&gt;
&lt;th&gt;SwitchWarRoom + Switch&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Mean Time to Detect (MTTD)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;~8.5 minutes&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;1.4 seconds&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Reproduction Test Synthesis&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;~22 minutes&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;3.2 seconds&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Human Coding Required&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;~35 lines under panic&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;0 lines (1-click sign-off)&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Downtime Cost Avoided&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;N/A (Prolonged outage)&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;$18,400+ saved&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Total AI Cost&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;N/A&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;$0.0142&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;


&lt;h2&gt;
  
  
  6. What We Learned Building with Switch
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Shared Context Trumps Solo Prompting:&lt;/strong&gt; Bringing AI out of private terminals into Slack completely changes team dynamics. Junior engineers learn from the agent's diagnostic steps, and senior engineers maintain full veto authority.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Guardrails Build Trust:&lt;/strong&gt; Nobody will let an autonomous agent touch production without guardrails. Having &lt;strong&gt;Switch Trust&lt;/strong&gt; transparently score risk and enforce Human-in-the-Loop approvals gives enterprise teams the confidence to adopt agentic workflows.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The Future of Work is Centaur Teams:&lt;/strong&gt; The most effective engineering team isn't 100% human or 100% autonomous—it's human leads directing specialized agent swarms through everyday chat interfaces.&lt;/li&gt;
&lt;/ol&gt;


&lt;h2&gt;
  
  
  7. Try SwitchWarRoom
&lt;/h2&gt;

&lt;p&gt;Explore the project, run the interactive simulator, and inspect the code:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Live Deployed App (Vercel):&lt;/strong&gt; &lt;a href="https://switch-war-room.vercel.app" rel="noopener noreferrer"&gt;switch-war-room.vercel.app&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;GitHub Repository:&lt;/strong&gt; &lt;a href="https://github.com/vidishagupta/switch-war-room" rel="noopener noreferrer"&gt;vidishagupta/switch-war-room&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;YouTube Demo Video:&lt;/strong&gt; &lt;a href="https://youtu.be/_1hyjWhKm3g" rel="noopener noreferrer"&gt;Watch on YouTube&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://assets.dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/vidishagupta" rel="noopener noreferrer"&gt;
        vidishagupta
      &lt;/a&gt; / &lt;a href="https://github.com/vidishagupta/switch-war-room" rel="noopener noreferrer"&gt;
        switch-war-room
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;⚡ SwitchWarRoom&lt;/h1&gt;
&lt;/div&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Autonomous Multi-Agent Incident Response &amp;amp; SRE Swarm for Slack and Discord&lt;/strong&gt;&lt;br&gt;
&lt;em&gt;Powered by &lt;strong&gt;Switch&lt;/strong&gt; &amp;amp; &lt;strong&gt;SandboxAQ Switch Trust&lt;/strong&gt;&lt;/em&gt;&lt;br&gt;
Built for the &lt;strong&gt;Flip the Switch Hackathon&lt;/strong&gt; hosted by &lt;strong&gt;WeMakeDevs&lt;/strong&gt; &amp;amp; &lt;strong&gt;DevTools Academy&lt;/strong&gt;.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://www.wemakedevs.org/hackathons/switch" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/bc04c130b153f1d96da80702351648c6a8067a859f44e5f42d37f332b6f9622c/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4861636b6174686f6e2d466c69705f7468655f5377697463682d3633363666312e737667" alt="Hackathon"&gt;&lt;/a&gt;
&lt;a href="https://switch-war-room.vercel.app" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/999c936776eb921cccb56c2c9e0cf02b49dd4b266bde8e8460d7979380568c3a/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4c6976655f44656d6f2d7377697463682d2d7761722d2d726f6f6d2e76657263656c2e6170702d3130623938312e737667" alt="Live Demo"&gt;&lt;/a&gt;
&lt;a href="https://youtu.be/_1hyjWhKm3g" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/5b42eb10a2252e19c3df811f535ce7697b77763d1bcf8df37bf8b369ec363412/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f596f75547562652d57617463685f44656d6f5f566964656f2d4646303030302e7376673f6c6f676f3d796f7574756265266c6f676f436f6c6f723d7768697465" alt="YouTube Video"&gt;&lt;/a&gt;
&lt;a href="https://github.com/sandbox-quantum/switch" rel="noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/a859b1d8cb6ae5dde4042aadbf4a3cdd8a815b195479bb945e06d9d34f4685b6/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f506f776572656425323062792d53776974636825323041492d3035393636392e737667" alt="Powered by"&gt;&lt;/a&gt;
&lt;a href="https://github.com/sandbox-quantum/switch" rel="noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/730f850afcfff1536343619242ffe1477ca889f237d837e2ae2f57bf10618677/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f476f7665726e616e63652d53616e64626f7841515f5377697463685f54727573742d6439373730362e737667" alt="Governance"&gt;&lt;/a&gt;
&lt;a href="https://github.com/vidishagupta/switch-war-room/LICENSE" rel="noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/08cef40a9105b6526ca22088bc514fbfdbc9aac1ddbf8d4e6c750e3a88a44dca/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4c6963656e73652d4d49542d626c75652e737667" alt="License: MIT"&gt;&lt;/a&gt;
&lt;a href="https://github.com/vidishagupta/switch-war-room/server/test" rel="noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/1bdf7ec7922871edca2dd4c57fbff2569d817be2e29deff251c1b3a2847ce059/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f54657374732d3130302532355f50617373696e672d656d6572616c642e737667" alt="Tests"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;🌐 Live Links&lt;/h2&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Live Deployed App (Vercel):&lt;/strong&gt; &lt;a href="https://switch-war-room.vercel.app" rel="nofollow noopener noreferrer"&gt;https://switch-war-room.vercel.app&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;YouTube Demo Video:&lt;/strong&gt; &lt;a href="https://youtu.be/_1hyjWhKm3g" rel="nofollow noopener noreferrer"&gt;https://youtu.be/_1hyjWhKm3g&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Technical Blog Post (Dev.to):&lt;/strong&gt; &lt;a href="https://dev.to/vidisha_gupta_/freeing-ai-from-the-terminal-how-we-built-switchwarroom-to-turn-coding-agents-into-sre-teammates-2aom" rel="nofollow"&gt;https://dev.to/vidisha_gupta_/freeing-ai-from-the-terminal-how-we-built-switchwarroom-to-turn-coding-agents-into-sre-teammates-2aom&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;GitHub Repository:&lt;/strong&gt; &lt;a href="https://github.com/vidishagupta/switch-war-room" rel="noopener noreferrer"&gt;https://github.com/vidishagupta/switch-war-room&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a href="https://youtu.be/_1hyjWhKm3g" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/3609056a7baa56a9d5ec2aed98db7d24240263eeb78be62c3458aec42bdddf23/68747470733a2f2f696d672e796f75747562652e636f6d2f76692f5f3168796a57684b6d33672f6d617872657364656661756c742e6a7067" alt="SwitchWarRoom Demo Video"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;🏆 Hackathon Submission Details&lt;/h2&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Target Track:&lt;/strong&gt; &lt;strong&gt;Track 1: Best Business Workflow ($2,000)&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Bonus Tracks:&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;📝 &lt;strong&gt;Best Technical Blog Post (AirPods 5):&lt;/strong&gt; Read our official article on Dev.to: &lt;a href="https://dev.to/vidisha_gupta_/freeing-ai-from-the-terminal-how-we-built-switchwarroom-to-turn-coding-agents-into-sre-teammates-2aom" rel="nofollow"&gt;Freeing AI from the Terminal: How We Built SwitchWarRoom&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;🎥 &lt;strong&gt;Demo Video (YouTube):&lt;/strong&gt; &lt;a href="https://youtu.be/_1hyjWhKm3g" rel="nofollow noopener noreferrer"&gt;Watch the 2-minute walkthrough on YouTube&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;🛡️ &lt;strong&gt;Switch Trust MCP:&lt;/strong&gt; Standalone Model Context Protocol server in &lt;a href="https://github.com/vidishagupta/switch-war-room/mcp-switch-trust/" rel="noopener noreferrer"&gt;&lt;code&gt;mcp-switch-trust/&lt;/code&gt;&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;💥 The Problem: Why Terminal AI Agents Fail in Production&lt;/h2&gt;

&lt;/div&gt;
&lt;p&gt;AI coding agents (like Claude Code, Antigravity, OpenCode, and Cursor) are powerful, but they operate in &lt;strong&gt;isolated local developer terminals&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;When a mission-critical P1 outage strikes:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Zero Visibility:&lt;/strong&gt;…&lt;/li&gt;
&lt;/ol&gt;&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/vidishagupta/switch-war-room" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;&lt;em&gt;Built with passion for the **Flip the Switch Hackathon&lt;/em&gt;* by &lt;strong&gt;WeMakeDevs&lt;/strong&gt; &amp;amp; &lt;strong&gt;DevTools Academy&lt;/strong&gt;, powered by &lt;strong&gt;Switch AI&lt;/strong&gt;.*&lt;/p&gt;

</description>
      <category>ai</category>
      <category>devops</category>
      <category>hackathon</category>
      <category>opensource</category>
    </item>
    <item>
      <title>Ofrenda: Yaadon ka Diya — Virtual Remembrance Altar with Open-Weight AI</title>
      <dc:creator>Vidisha Gupta</dc:creator>
      <pubDate>Fri, 30 Oct 2026 16:01:43 +0000</pubDate>
      <link>https://dev.to/vidisha_gupta_/ofrenda-yaadon-ka-diya-keeping-memories-alive-with-open-weight-ai-4oc7</link>
      <guid>https://dev.to/vidisha_gupta_/ofrenda-yaadon-ka-diya-keeping-memories-alive-with-open-weight-ai-4oc7</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/hacktoberfest-week4-2026-10-26"&gt;Hacktoberfest Open-Source AI Challenge Week 4: Ghost in the Machine&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;




&lt;h1&gt;
  
  
  🪔 Ofrenda: Yaadon ka Diya — Virtual Remembrance Altar with Open-Weight AI
&lt;/h1&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;"Sab kuch aapke device par. Koi account nahi."&lt;/em&gt;&lt;br&gt;&lt;br&gt;
&lt;em&gt;(Everything stays on your personal device. Zero accounts required.)&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  🕊️ A Quiet Sunday Morning: Why I Built This
&lt;/h2&gt;

&lt;p&gt;Every Sunday morning, my grandmother (&lt;strong&gt;Dadi Savitri Devi&lt;/strong&gt;) would wake up before the sun to boil masala chai in her small, dented silver saucepan. She would send us down the street to fetch hot, syrupy jalebis from the neighborhood halwai, and as the kitchen filled with the aroma of roasted cardamom and fried sugar, she would quietly hum Lata Mangeshkar’s &lt;em&gt;“Lag Ja Gale”&lt;/em&gt; under her breath.&lt;/p&gt;

&lt;p&gt;When she passed away in 2021, the hardest part of grief wasn't a sudden crisis. It was the crushing quiet of Sunday mornings. It was realizing that all the tiny, sensory details that made up her soul—the sound of her glass bangles, the extra pinch of ginger in the tea, her laughter until tears rolled down her cheeks—were now held only in my fragile memory.&lt;/p&gt;

&lt;p&gt;When I saw the prompt for &lt;strong&gt;Week 4 of the Hacktoberfest Open-Source AI Challenge: "Ghost in the Machine"&lt;/strong&gt;, my heart initially sank. &lt;/p&gt;

&lt;p&gt;In recent months, we’ve all seen Silicon Valley hype cycle around "grief-tech"—companies promising that if you upload your deceased parent's text messages and voice notes, an AI chatbot will let you "talk to their ghost." &lt;/p&gt;

&lt;p&gt;To me, that felt heartbreakingly wrong. Grief is not an interactive customer support bot. Our ancestors are not LLM conversational agents to be hallucinated by statistical next-token prediction. It turns sacred remembrance into an uncanny valley puppet show.&lt;/p&gt;

&lt;p&gt;I asked myself: &lt;strong&gt;What if the machine doesn't try to be a ghost at all? What if technology could simply be a humble, sacred altar?&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  🏵️ The Bridge: Where Día de los Muertos Meets the Indian Diya
&lt;/h2&gt;

&lt;p&gt;That question led me to look at two ancient traditions separated by oceans, yet identical in heart:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;        MEXICAN OFRENDA                           INDIAN DIYA
  (Día de los Muertos Tradition)             (Deepam / Pitru Smriti)
  +----------------------------+             +----------------------------+
  | Orange Cempasúchil Petals  |  &amp;lt;=======&amp;gt;  | Sacred Marigold Garlands   |
  | 3-Tier Wooden Altar Steps  |    SHARED   | 3 Spheres (Soul, Body, Earth|
  | Favorite Comfort Foods     |    TRUTH    | Bhog &amp;amp; Prasad Offerings    |
  | Copal Incense to Guide     |   OF LOVE   | Chandan &amp;amp; Copal Dhoop      |
  | Lighting Candles for Spirit|             | Lighting Sacred Diya Flame |
  +----------------------------+             +----------------------------+
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;In Mexican tradition, during &lt;strong&gt;Día de los Muertos&lt;/strong&gt;, families build multi-tiered &lt;strong&gt;ofrendas&lt;/strong&gt;. You don't pretend the dead are still mortal; you lay out their favorite dishes, scatter bright orange marigolds (&lt;em&gt;cempasúchil&lt;/em&gt;), and burn copal resin so their spirit feels loved and remembered.&lt;/p&gt;

&lt;p&gt;In Indian tradition, we light a &lt;strong&gt;Diya&lt;/strong&gt; (&lt;em&gt;Deepam / Yaadon ki Jyoti&lt;/em&gt;). The flame represents the eternal &lt;em&gt;Aatma&lt;/em&gt;—the indestructible soul that has crossed the river of time. We offer &lt;em&gt;bhog&lt;/em&gt; (their favorite sweets) and sit together recounting the exact memories that made them who they were.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Ofrenda: Yaadon ka Diya&lt;/strong&gt; is my tribute to this shared human impulse: a virtual, interactive 3-tier remembrance altar powered by &lt;strong&gt;open-weight AI (Gemma 2 &amp;amp; Qwen 2.5)&lt;/strong&gt; and built with &lt;strong&gt;uncompromising on-device privacy&lt;/strong&gt;.&lt;/p&gt;


&lt;h2&gt;
  
  
  🎬 1080p Interactive Walkthrough &amp;amp; Live App
&lt;/h2&gt;

&lt;p&gt;Watch how the application feels in action—complete with natural Indian voiceover, ambient score, live cursor interactions, photo upload, flame lighting, and streaming Hinglish remembrance:&lt;/p&gt;

&lt;p&gt;  &lt;iframe src="https://www.youtube.com/embed/07Xy2v-2z6I" width="710" height="399"&gt;
  &lt;/iframe&gt;
&lt;/p&gt;
&lt;h3&gt;
  
  
  🔗 Verified Project Links
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;🌐 &lt;strong&gt;Live Web Application (Render):&lt;/strong&gt; &lt;a href="https://ofrenda-yaadon-ka-diya.onrender.com" rel="noopener noreferrer"&gt;https://ofrenda-yaadon-ka-diya.onrender.com&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;📂 &lt;strong&gt;GitHub Source Code:&lt;/strong&gt; &lt;a href="https://github.com/vidishagupta/ofrenda-yaadon-ka-diya" rel="noopener noreferrer"&gt;https://github.com/vidishagupta/ofrenda-yaadon-ka-diya&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;🩺 &lt;strong&gt;Production Health Check:&lt;/strong&gt; &lt;a href="https://ofrenda-yaadon-ka-diya.onrender.com/health" rel="noopener noreferrer"&gt;https://ofrenda-yaadon-ka-diya.onrender.com/health&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://assets.dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/vidishagupta" rel="noopener noreferrer"&gt;
        vidishagupta
      &lt;/a&gt; / &lt;a href="https://github.com/vidishagupta/ofrenda-yaadon-ka-diya" rel="noopener noreferrer"&gt;
        ofrenda-yaadon-ka-diya
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      Ofrenda: Yaadon ka Diya - Virtual Remembrance Altar powered by open-weight AI (Gemma) for Dev.to Hacktoberfest Open-Source AI Challenge
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;🪔 Ofrenda: Yaadon ka Diya&lt;/h1&gt;
&lt;/div&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Dev.to Hacktoberfest Open-Source AI Challenge — Week 4&lt;/strong&gt;&lt;br&gt;
&lt;em&gt;Theme: Ghost in the Machine / Día de los Muertos&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://ofrenda-yaadon-ka-diya.onrender.com" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/5a69eda27a3da9a0d96e1f6eb68836089a3f5636e170400c60fd17f5c9815738/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4c69766525323044656d6f2d52656e6465722d3436653362372e7376673f7374796c653d666f722d7468652d6261646765266c6f676f3d72656e646572" alt="Live Website"&gt;&lt;/a&gt;
&lt;a href="https://github.com/vidishagupta/ofrenda-yaadon-ka-diya/LICENSE" rel="noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/9e04966f6a646b1cd3fc05c6ea88a80211c6f20b186b584c2c515ef9c411ad2c/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4c6963656e73652d4d49542d616d6265722e737667" alt="License: MIT"&gt;&lt;/a&gt;
&lt;a href="https://ai.google.dev/gemma" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/5192a469b31d6ccb16d00a5e7645469dd9d882fb6747f9d68c896c97693fc830/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4d6f64656c2d47656d6d61253230284f70656e2d2d576569676874292d6666383530302e737667" alt="AI: Open-Weight Gemma"&gt;&lt;/a&gt;
&lt;a href="https://github.com/vidishagupta/ofrenda-yaadon-ka-diya#privacy-first-architecture" rel="noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/ba5e7dd35664d4c4a63870b28c99ff7d94619bc5793e1fcc147a3c530595ec08/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f507269766163792d3130302532352532304f6e2d2d4465766963652d3265633462362e737667" alt="Privacy: 100% Client-Side Storage"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;div class="markdown-heading"&gt;
&lt;h3 class="heading-element"&gt;🌐 Live Production Website &amp;amp; Demo&lt;/h3&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Live ofrenda website:&lt;/strong&gt; &lt;a href="https://ofrenda-yaadon-ka-diya.onrender.com" rel="nofollow noopener noreferrer"&gt;https://ofrenda-yaadon-ka-diya.onrender.com&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cinematic 1080p Demo Video:&lt;/strong&gt; &lt;a href="https://youtu.be/07Xy2v-2z6I" rel="nofollow noopener noreferrer"&gt;https://youtu.be/07Xy2v-2z6I&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Health Check Endpoint:&lt;/strong&gt; &lt;a href="https://ofrenda-yaadon-ka-diya.onrender.com/health" rel="nofollow noopener noreferrer"&gt;https://ofrenda-yaadon-ka-diya.onrender.com/health&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;🌟 What is "Ofrenda: Yaadon ka Diya"?&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Ofrenda: Yaadon ka Diya&lt;/strong&gt; is a virtual remembrance altar builder fusing the Mexican tradition of &lt;strong&gt;Día de los Muertos&lt;/strong&gt; (&lt;em&gt;ofrendas&lt;/em&gt;, cempasúchil/marigold petals, copal incense) with the Indian tradition of lighting a &lt;strong&gt;Diya&lt;/strong&gt; (&lt;em&gt;Deepam / Yaadon ki Jyoti&lt;/em&gt;) for departed ancestors.&lt;/p&gt;
&lt;p&gt;Users honor their loved ones by entering their name, relation, lifespan, favorite foods, favorite songs, and 2–3 cherished personal memories. An &lt;strong&gt;open-weight model (Gemma via Ollama or any OpenAI-compatible open endpoint)&lt;/strong&gt; weaves these memories into an intimate, warm remembrance letter streamed in &lt;strong&gt;Hinglish&lt;/strong&gt; or &lt;strong&gt;English&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;The remembrance is presented on an illuminated &lt;strong&gt;3-tier glowing altar&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;…&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/vidishagupta/ofrenda-yaadon-ka-diya" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;





&lt;h2&gt;
  
  
  💡 The "Ghost in the Machine": Compassionate Mirror vs. Eerie Impersonator
&lt;/h2&gt;

&lt;p&gt;Here is the foundational philosophy behind &lt;em&gt;Ofrenda&lt;/em&gt;:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;The machine should never pretend to "be" our loved ones.&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Instead, the machine is a &lt;strong&gt;compassionate chronicler and mirror&lt;/strong&gt;—a reverent listener that gathers the specific living details we choose to honor (the jalebi, the chai, the melody, the laughter) and weaves them into a tender remembrance letter (&lt;em&gt;Yaadon ki Chitthi&lt;/em&gt;).&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  🛡️ Strict Prompt Guardrails (Zero Hallucination)
&lt;/h3&gt;

&lt;p&gt;To protect the sanctity of family memory, our AI system prompt enforces &lt;strong&gt;four unbreakable cardinal rules&lt;/strong&gt;:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Strict Zero Hallucination:&lt;/strong&gt; The model must &lt;strong&gt;ONLY&lt;/strong&gt; use the explicit facts typed by the user. If the user only enters "loves tea and Sunday mornings", the AI is forbidden from making up that she was a doctor, or had a golden retriever, or lived in Paris. If input is sparse, it writes around those exact memories with universal emotional tenderness.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Hard 180-Word Ceiling:&lt;/strong&gt; Grief diluted by verbosity becomes hollow. The letter is kept strictly under 180 words—lyrical, focused, and intimate.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Ban on Funeral Clichés:&lt;/strong&gt; Generic tropes—like &lt;em&gt;"gone too soon"&lt;/em&gt;, &lt;em&gt;"taken before their time"&lt;/em&gt;, or &lt;em&gt;"rest in peace"&lt;/em&gt;—are strictly banned. The focus is 100% on living gratitude: the sweetness of the food, the melody of the song, and the warmth of the presence.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Natural Conversational Hinglish:&lt;/strong&gt; The model crafts the letter in the comforting, authentic cadence of everyday Indian homes—natural Hindi in Latin script with English warmth (&lt;em&gt;"Aaj ofrenda par aapka diya roshan kiya hai, pyaari Dadi... chai aur jalebi ki mehak..."&lt;/em&gt;).
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// System Prompt Guardrail: Emotional Dignity &amp;amp; Zero Hallucination&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;SYSTEM_PROMPT&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;`You are a reverent chronicler for 'Ofrenda: Yaadon ka Diya'.
Write a short, tender remembrance letter honoring a departed loved one.

CARDINAL RULES:
1. Use ONLY the user-provided facts (name, relation, foods, songs, memories).
2. DO NOT invent or assume new facts, places, professions, or anecdotes.
3. NEVER use funeral clichés like 'gone too soon' or 'rest in peace'. Focus on celebrating living memory.
4. Keep the letter strictly UNDER 180 WORDS.
5. If language is Hinglish, write natural, warm conversational Hindi in Latin script.`&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  🏛️ The Three-Tier Sacred Altar
&lt;/h2&gt;

&lt;p&gt;In ofrenda lore, an altar’s tiers mirror the sacred journey between worlds. In &lt;em&gt;Ofrenda&lt;/em&gt;, every tier is dynamically generated in real-time as you type, rendered in cinematic midnight indigo (&lt;code&gt;#070913&lt;/code&gt;) and marigold orange (&lt;code&gt;#ff8500&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;+---------------------------------------------------------------+
|         NIVEL 1: ETERNAL SPIRIT (AATMA &amp;amp; LIGHT)               |
|   - Ornate vintage golden oval portrait frame                 |
|   - Central sacred Diya with dual-layer flickering flame      |
|   - Name &amp;amp; Lifespan banner (e.g., "Dadi Savitri Devi")        |
+---------------------------------------------------------------+
|         NIVEL 2: BHOG &amp;amp; OFRENDAS (NOURISHMENT &amp;amp; SCENT)        |
|   - Illustrated offering plates of favorite comfort foods     |
|     (Garam garam jalebi, Masala chai, Pan de muerto)          |
|   - Smoking brass burner with Copal &amp;amp; Chandan Dhoop           |
+---------------------------------------------------------------+
|         NIVEL 3: SUR &amp;amp; YAADEIN (MELODIES &amp;amp; EARTH)             |
|   - Retro cassette cards of cherished songs &amp;amp; melodies        |
|   - Memory blossoms pinned to marigold garlands               |
|   - Floating, fluttering cempasúchil (marigold) petals        |
+---------------------------------------------------------------+
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  🕯️ Pure CSS Dual-Layer Flame &amp;amp; Animation
&lt;/h3&gt;

&lt;p&gt;The central diya does not use heavy GIF assets or CPU-intensive canvas loops. It is crafted entirely with hardware-accelerated CSS:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;An inner white-hot core (&lt;code&gt;#fff&lt;/code&gt;) pulsing at 0.18s organic jitter.&lt;/li&gt;
&lt;li&gt;An outer golden-amber teardrop (&lt;code&gt;#ff9e00&lt;/code&gt; to &lt;code&gt;#ffd166&lt;/code&gt;) with radial glow filter.&lt;/li&gt;
&lt;li&gt;Dynamic glowing aura that gently breathes when idle and pulses rapidly while the AI streams tokens.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Accessibility:&lt;/strong&gt; Fully honors &lt;code&gt;prefers-reduced-motion&lt;/code&gt; for motion-sensitive users.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  🔒 Why Open Innovation Matters for Sacred Memories
&lt;/h2&gt;

&lt;p&gt;The official Hacktoberfest Week 4 prompt asks:&lt;br&gt;&lt;br&gt;
&lt;strong&gt;Why does open innovation matter for what you built?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Here is my core conviction:&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Sovereignty of Grief: No Corporate Data Harvesting
&lt;/h3&gt;

&lt;p&gt;Grief, family anecdotes, childhood nicknames, and private tears are the most vulnerable personal data human beings hold. &lt;strong&gt;Sacred memories should never become training data for closed commercial AI conglomerates.&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;em&gt;Ofrenda&lt;/em&gt; operates with &lt;strong&gt;zero database&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;100% of altar data, photos, and letters are stored exclusively in the user's browser &lt;code&gt;localStorage&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;When run locally with Ollama, family stories never touch the internet.&lt;/li&gt;
&lt;li&gt;Notice our app's pledge banner: &lt;em&gt;"Sab kuch aapke device par. Koi account nahi."&lt;/em&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  2. Immunity from Deprecation &amp;amp; Corporate Gatekeeping
&lt;/h3&gt;

&lt;p&gt;Commercial AI APIs routinely deprecate models, hike token prices, or enforce crude blanket safety filters that frequently misclassify death rituals and ancestor honoring as "harmful content."&lt;br&gt;&lt;br&gt;
An open-weight model (Gemma 2, Qwen) stored on your hard drive is yours forever. No board meeting or corporate acquisition can revoke your right to remember your grandmother.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Cultural Preservation Beyond Silicon Valley Monoculture
&lt;/h3&gt;

&lt;p&gt;Closed APIs are predominantly trained and aligned on Western corporate standards. Preserving non-Western traditions—such as blending Mexican Day of the Dead with Indian Diya rituals in conversational &lt;strong&gt;Hinglish&lt;/strong&gt;—requires open models that can be prompted, adapted, and hosted freely without corporate sanitization.&lt;/p&gt;




&lt;h2&gt;
  
  
  🛠️ System Architecture &amp;amp; Tech Stack
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;                     +------------------------------------+
                     |         Browser Client             |
                     |  - Semantic HTML5 &amp;amp; Modern CSS3    |
                     |  - Pure Vanilla JS (ES Modules)    |
                     |  - LocalStorage Memory State       |
                     |  - html2canvas PNG + TXT Export    |
                     +-----------------+------------------+
                                       |
                              HTTP POST (SSE Stream)
                                       |
                                       v
                     +------------------------------------+
                     |     Node.js + Express Backend      |
                     |        (Live on Render)            |
                     |  - Native fetch &amp;amp; SSE streaming    |
                     |  - Health check at /health         |
                     |  - Strict prompt sanitization      |
                     +-----------------+------------------+
                                       |
                        +--------------+--------------+
                        |                             |
                        v                             v
           [Local Offline Inference]      [Production Hosted Cloud]
             Ollama (Gemma 2 / Qwen)       Render + Open Weights (Groq)
             http://localhost:11434/v1      OpenAI-Compatible Endpoint
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Technical Specifications
&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 Used&lt;/th&gt;
&lt;th&gt;Key Purpose&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Backend&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Node.js, Express, Native &lt;code&gt;fetch&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;Server-Sent Events (SSE) token streaming &amp;amp; health monitoring&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Frontend&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Vanilla HTML5, CSS3 Variables, ES6 JS&lt;/td&gt;
&lt;td&gt;Zero framework overhead (&amp;lt;30KB footprint), instant 60fps load&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;AI Layer&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Open-Weight Gemma 2 &amp;amp; Qwen 2.5&lt;/td&gt;
&lt;td&gt;OpenAI-compatible streaming interface; local or hosted&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Styling&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Midnight indigo (&lt;code&gt;#070913&lt;/code&gt;), Marigold (&lt;code&gt;#ff8500&lt;/code&gt;)&lt;/td&gt;
&lt;td&gt;Cinematic Día de los Muertos &amp;amp; Diwali nocturnal visual aesthetic&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Deployment&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Render Web Service (&lt;code&gt;render.yaml&lt;/code&gt;)&lt;/td&gt;
&lt;td&gt;High availability, continuous deployment, &lt;code&gt;/health&lt;/code&gt; monitoring&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Exports&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;html2canvas&lt;/code&gt; &amp;amp; Blob API&lt;/td&gt;
&lt;td&gt;Instant high-resolution PNG altar download &amp;amp; &lt;code&gt;.txt&lt;/code&gt; tribute file&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  🪔 Interactive Features Walkthrough
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Multi-Altar Tabs:&lt;/strong&gt; Honor multiple ancestors (e.g., &lt;em&gt;Dadi Savitri Devi&lt;/em&gt;, &lt;em&gt;Dada ji&lt;/em&gt;, &lt;em&gt;Abuelita&lt;/em&gt;) with independent tabs and memory state.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;On-Device Photo Cropping:&lt;/strong&gt; Drop any JPG/PNG photo. It gets encoded client-side into a Data URI and mounted into the golden oval altar frame.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Real-Time Token Streaming:&lt;/strong&gt; Click &lt;em&gt;"Light the Diya (Diya Jalayein)"&lt;/em&gt;—watch the sacred flame awaken as words appear token-by-token on vintage parchment.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Extra Diya Tributes:&lt;/strong&gt; Click &lt;em&gt;"+ Light Extra Diya"&lt;/em&gt; to place additional named candles on the altar shelf for other loved ones.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;High-Resolution PNG Export:&lt;/strong&gt; Capture the full 3-tier illuminated altar as a 2x supersampled PNG to share with family or print.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Chitthi Text Export:&lt;/strong&gt; Download the remembrance letter with tribute metadata as a &lt;code&gt;.txt&lt;/code&gt; keepsake.&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  🚀 How to Run Locally in 2 Minutes
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# 1. Clone the repository&lt;/span&gt;
git clone https://github.com/vidishagupta/ofrenda-yaadon-ka-diya.git
&lt;span class="nb"&gt;cd &lt;/span&gt;ofrenda-yaadon-ka-diya

&lt;span class="c"&gt;# 2. Install dependencies&lt;/span&gt;
npm &lt;span class="nb"&gt;install&lt;/span&gt;

&lt;span class="c"&gt;# 3. Pull an open-weight model with Ollama&lt;/span&gt;
ollama run gemma2:9b

&lt;span class="c"&gt;# 4. Start the server&lt;/span&gt;
npm start
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Visit &lt;code&gt;http://localhost:3000&lt;/code&gt; and light your first diya!&lt;/p&gt;




&lt;h2&gt;
  
  
  🌺 Closing Reflection
&lt;/h2&gt;

&lt;p&gt;A computer program can never replace the touch of a mother's hand, the sound of a grandfather's laugh, or the wisdom in an elder's eyes.&lt;/p&gt;

&lt;p&gt;But code &lt;em&gt;can&lt;/em&gt; be a sanctuary. When built with open-weight models, respectful boundaries, and uncompromising privacy, technology can give our collective memories a warm place to rest.&lt;/p&gt;

&lt;p&gt;May the light of your diya never flicker out. 🪔🏵️&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Built with love, code, and marigolds by Vidisha Gupta for Dev.to Hacktoberfest Open-Source AI Challenge 2026.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>hf26challenge</category>
      <category>opensource</category>
      <category>ai</category>
    </item>
    <item>
      <title>SlothFinance: The Autonomous Open-Source AI Financial Tamer That Rewards Your Laziness 🦥</title>
      <dc:creator>Vidisha Gupta</dc:creator>
      <pubDate>Tue, 20 Oct 2026 21:45:31 +0000</pubDate>
      <link>https://dev.to/vidisha_gupta_/slothfinance-the-autonomous-open-source-ai-financial-tamer-that-rewards-your-laziness-5bp5</link>
      <guid>https://dev.to/vidisha_gupta_/slothfinance-the-autonomous-open-source-ai-financial-tamer-that-rewards-your-laziness-5bp5</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;blockquote&gt;
&lt;p&gt;&lt;em&gt;"The trouble with doing something right the first time is that nobody appreciates how difficult it was. The trouble with being lazy is you have to be clever about it."&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h3&gt;
  
  
  🦥 Quick Links
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;🌐 &lt;strong&gt;Live Web Application (GitHub Pages):&lt;/strong&gt; &lt;a href="https://vidishagupta.github.io/sloth-finance/" rel="noopener noreferrer"&gt;https://vidishagupta.github.io/sloth-finance/&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;⚡ &lt;strong&gt;High-Speed Live Mirror (Vercel):&lt;/strong&gt; &lt;a href="https://sloth-finance-ten.vercel.app" rel="noopener noreferrer"&gt;https://sloth-finance-ten.vercel.app&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;📦 &lt;strong&gt;GitHub Repository:&lt;/strong&gt; &lt;a href="https://github.com/vidishagupta/sloth-finance" rel="noopener noreferrer"&gt;https://github.com/vidishagupta/sloth-finance&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;🎥 &lt;strong&gt;1-Minute Demo Video:&lt;/strong&gt; &lt;a href="https://youtu.be/a590pPb03dM" rel="noopener noreferrer"&gt;https://youtu.be/a590pPb03dM&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;




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

&lt;p&gt;Today is &lt;strong&gt;International Sloth Day&lt;/strong&gt; (October 20), and sloths have life figured out: &lt;strong&gt;conserve energy, avoid manual chores, and move only when strictly necessary.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Yet in our modern digital lives, almost every human pays a brutal &lt;strong&gt;"Laziness Tax"&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;🧟 &lt;strong&gt;Zombie Subscriptions:&lt;/strong&gt; Forgotten gym passes, duplicate streaming accounts, and forgotten trial apps quietly debiting $15–$50 every month.&lt;/li&gt;
&lt;li&gt;📈 &lt;strong&gt;Stealth Price Creeps:&lt;/strong&gt; Services silently hiking rates by 15% to 300% without affirmative consent (e.g., Netflix creeping from $15.49 to $17.99, promotional news subscriptions jumping from $4 to $17).&lt;/li&gt;
&lt;li&gt;🧗 &lt;strong&gt;Cancellation Dread:&lt;/strong&gt; Multi-page retention surveys, hidden cancel buttons, and dark patterns intentionally designed to exhaust you into giving up.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;SlothFinance&lt;/strong&gt; is an autonomous, open-source AI financial tamer built to &lt;strong&gt;reward human laziness&lt;/strong&gt;. You simply drop your bank CSV statement (or click one of our instant preloaded test personas), and our dual open-source AI pipeline:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Runs &lt;strong&gt;zero-shot tabular time-series anomaly detection&lt;/strong&gt; via &lt;strong&gt;Prior Labs TabPFN-3.5&lt;/strong&gt; to identify recurring cadence, zombie subscriptions, and silent price creep.&lt;/li&gt;
&lt;li&gt;Calculates your &lt;strong&gt;Sloth Scorecard&lt;/strong&gt; and delivers an unsparing, hilarious &lt;strong&gt;Google Gemma 2 Financial Audit Roast&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Drafts &lt;strong&gt;1-Click Statutory Legal Cancellation &amp;amp; Refund Letters&lt;/strong&gt; citing FTC Click-to-Cancel rules and California Automatic Renewal statutes.&lt;/li&gt;
&lt;li&gt;Forecasts your &lt;strong&gt;3-Year Compounding Cash Bleed&lt;/strong&gt; if you stay on the couch vs. letting AI nuke your leaks.&lt;/li&gt;
&lt;/ol&gt;




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

&lt;ul&gt;
&lt;li&gt;🌐 &lt;strong&gt;Live Web Application (GitHub Pages):&lt;/strong&gt; &lt;a href="https://vidishagupta.github.io/sloth-finance/" rel="noopener noreferrer"&gt;https://vidishagupta.github.io/sloth-finance/&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;⚡ &lt;strong&gt;High-Speed Live Mirror (Vercel):&lt;/strong&gt; &lt;a href="https://sloth-finance-ten.vercel.app" rel="noopener noreferrer"&gt;https://sloth-finance-ten.vercel.app&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;🎥 &lt;strong&gt;1-Minute Video Demo:&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;%[&lt;a href="https://youtu.be/a590pPb03dM" rel="noopener noreferrer"&gt;https://youtu.be/a590pPb03dM&lt;/a&gt;]&lt;/p&gt;




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

&lt;ul&gt;
&lt;li&gt;📦 &lt;strong&gt;GitHub Repository:&lt;/strong&gt; &lt;a href="https://github.com/vidishagupta/sloth-finance" rel="noopener noreferrer"&gt;https://github.com/vidishagupta/sloth-finance&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://assets.dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/vidishagupta" rel="noopener noreferrer"&gt;
        vidishagupta
      &lt;/a&gt; / &lt;a href="https://github.com/vidishagupta/sloth-finance" rel="noopener noreferrer"&gt;
        sloth-finance
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;&lt;div&gt;
&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;🦥 SlothFinance&lt;/h1&gt;
&lt;/div&gt;
&lt;div class="markdown-heading"&gt;
&lt;h3 class="heading-element"&gt;Autonomous Open-Source AI Financial Tamer That Rewards Laziness&lt;/h3&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Built for the DEV Hacktoberfest 2026 Week 3 Challenge: &lt;em&gt;Slow and Steady&lt;/em&gt; (International Sloth Day)&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="https://dev.to/challenges/hacktoberfest-week3-2026-10-19" rel="nofollow"&gt;&lt;img src="https://camo.githubusercontent.com/7beee909a139d6aae124ceb76a5b9f1aca9a3da3d7c070b83ebb0d751d47154c/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4861636b746f626572666573742d323032365f5765656b5f332d6635623732363f7374796c653d666f722d7468652d6261646765266c6f676f3d6861636b746f62657266657374266c6f676f436f6c6f723d313032303164" alt="Hacktoberfest 2026"&gt;&lt;/a&gt;
&lt;a href="https://platform.priorlabs.ai" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/9fb648fc8a82cef7730d8a63dd10449a08cd3340eb99eaf37a63dfeb694a498e/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f54616250464e2d5072696f725f4c6162735f466f756e646174696f6e5f4d6f64656c2d3130313037353f7374796c653d666f722d7468652d6261646765" alt="TabPFN-3.5"&gt;&lt;/a&gt;
&lt;a href="https://ai.google.dev/gemma" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/15f7294c055936152616bd5ee5ad134ffe28b42cda9440867419f0830814db55/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f476f6f676c652d47656d6d615f325f4f70656e2d2d576569676874732d3432383546343f7374796c653d666f722d7468652d6261646765266c6f676f3d676f6f676c65266c6f676f436f6c6f723d7768697465" alt="Google Gemma 2"&gt;&lt;/a&gt;
&lt;a href="https://render.com" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/9dd211c58b82d307eec0fbd3dc5ba06c9d699914ef299daf0cb20b515131a282/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4465706c6f792d52656e6465725f426c75657072696e742d3436653362373f7374796c653d666f722d7468652d6261646765266c6f676f3d72656e646572266c6f676f436f6c6f723d626c61636b" alt="Render"&gt;&lt;/a&gt;
&lt;a href="https://sloth-finance-ten.vercel.app" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/f583a668a9fdf423ea2b4786a68dfab002b5f552e19bc7f38d1f7680d010f810/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4465706c6f792d56657263656c2d626c61636b3f7374796c653d666f722d7468652d6261646765266c6f676f3d76657263656c266c6f676f436f6c6f723d7768697465" alt="Vercel"&gt;&lt;/a&gt;
&lt;a href="https://dev.to/vidisha_gupta_/slothfinance-the-autonomous-open-source-ai-financial-tamer-that-rewards-your-laziness-5bp5" rel="nofollow"&gt;&lt;img src="https://camo.githubusercontent.com/4e284c09da6da6220ce6279af6bad8024e371eb3bfa6131eb45ee0acf56c938f/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4445565f506f73742d526561645f5375626d697373696f6e2d3061306130613f7374796c653d666f722d7468652d6261646765266c6f676f3d6465762e746f266c6f676f436f6c6f723d7768697465" alt="DEV Post"&gt;&lt;/a&gt;
&lt;a href="https://github.com/vidishagupta/sloth-finance/LICENSE" rel="noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/bc849f261552b1da6f46380829ac0491b2362ddc813945e11e9627fbb109e705/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4c6963656e73652d4d49542d3334643339393f7374796c653d666f722d7468652d6261646765" alt="License: MIT"&gt;&lt;/a&gt;
&lt;a href="https://youtu.be/a590pPb03dM" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/84715a34477476efa05553ee196171b412aa91abe9743aee037ff3574740c571/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f596f75547562652d57617463685f44656d6f5f566964656f2d4646303030303f7374796c653d666f722d7468652d6261646765266c6f676f3d796f7574756265266c6f676f436f6c6f723d7768697465" alt="YouTube Demo"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;br&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href="https://vidishagupta.github.io/sloth-finance/" rel="nofollow noopener noreferrer"&gt;🌐 Live Demo (GitHub Pages)&lt;/a&gt;&lt;/strong&gt; • &lt;strong&gt;&lt;a href="https://sloth-finance-ten.vercel.app" rel="nofollow noopener noreferrer"&gt;⚡ Live Mirror (Vercel)&lt;/a&gt;&lt;/strong&gt; • &lt;strong&gt;&lt;a href="https://dev.to/vidisha_gupta_/slothfinance-the-autonomous-open-source-ai-financial-tamer-that-rewards-your-laziness-5bp5" rel="nofollow"&gt;📝 DEV Submission Article&lt;/a&gt;&lt;/strong&gt; • &lt;strong&gt;&lt;a href="https://youtu.be/a590pPb03dM" rel="nofollow noopener noreferrer"&gt;🎥 Watch 1-Min Video Demo&lt;/a&gt;&lt;/strong&gt; • &lt;strong&gt;&lt;a href="https://render.com" rel="nofollow noopener noreferrer"&gt;🚀 Render Blueprint Deploy&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;/div&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;🎥 1-Minute Video Walkthrough&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;&lt;a href="https://youtu.be/a590pPb03dM" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fraw.githubusercontent.com%2Fvidishagupta%2Fsloth-finance%2Fmain%2Fpublic%2Fhero.png" alt="SlothFinance Demo Video"&gt;&lt;/a&gt;
&lt;em&gt;(Click above to watch the 1-minute full walkthrough with AI voiceover and synchronized subtitles)&lt;/em&gt;&lt;/p&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;🌟 The Philosophy: Why "Slow and Steady"?&lt;/h2&gt;

&lt;/div&gt;
&lt;p&gt;Tomorrow is &lt;strong&gt;International Sloth Day&lt;/strong&gt;, and sloths have life figured out: &lt;strong&gt;they move at their own pace, conserve energy, and avoid unnecessary effort.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Yet in our modern digital lives, humans lose hundreds or thousands of dollars every year to &lt;strong&gt;financial inertia&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;🧟 &lt;strong&gt;Zombie Subscriptions:&lt;/strong&gt; Forgotten free trials that quietly converted to full recurring bills.&lt;/li&gt;
&lt;li&gt;📈 &lt;strong&gt;Stealth Price Creeps:&lt;/strong&gt; Streaming platforms and SaaS tools quietly hiking rates by $2 to $5/month without explicit…&lt;/li&gt;
&lt;/ul&gt;&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/vidishagupta/sloth-finance" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;





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

&lt;p&gt;SlothFinance combines modern web tech, zero-shot tabular time-series models, and open-weights LLMs:&lt;br&gt;
&lt;/p&gt;

&lt;pre data-lang="mermaid"&gt;&lt;code&gt;graph TD
    A[User / Bank Statement CSV] --&amp;gt; B[SlothFinance Client]
    B --&amp;gt; C{AI Engine Router}

    subgraph Tabular Foundation Model
    C --&amp;gt;|Zero-Shot Transaction Stream| D[Prior Labs TabPFN-3.5 Engine]
    D --&amp;gt; E[Cadence Clustering &amp;amp; Periodicity]
    D --&amp;gt; F[Stealth Price-Creep Anomaly Detector]
    D --&amp;gt; G[36-Month Predictive Cash Bleed Curve]
    end

    subgraph Open-Weights Agent
    E &amp;amp; F &amp;amp; G --&amp;gt; H[Google Gemma 2 Agent]
    H --&amp;gt; I[Sloth Scorecard &amp;amp; Roast]
    H --&amp;gt; J[1-Click FTC Click-to-Cancel Letters]
    H --&amp;gt; K[Couch Potato Payoff Metrics]
    end

    subgraph Action Hub
    I &amp;amp; J &amp;amp; K --&amp;gt; L[Interactive Dashboard]
    L --&amp;gt; M[Copy Letter / Mailto / Export TXT]
    L --&amp;gt; N[Sovereign Local Storage]
    end&lt;/code&gt;&lt;/pre&gt;



&lt;h3&gt;
  
  
  1. TabPFN (Prior Labs) - Tabular Foundation Model
&lt;/h3&gt;

&lt;p&gt;Closed LLMs are notoriously bad at raw numerical reasoning, time-series intervals, and tabular data. We utilized &lt;strong&gt;Prior Labs' TabPFN-3.5&lt;/strong&gt;, a foundational Prior-data Fitted Network designed specifically for tabular time-series classification without fine-tuning.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="c1"&gt;# services/tabpfn_analyzer.py
&lt;/span&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;tabpfn&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;TabPFNClassifier&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;numpy&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;np&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;detect_tabular_anomalies&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;transactions&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="sh"&gt;"""&lt;/span&gt;&lt;span class="s"&gt;
    Zero-shot recurrence &amp;amp; stealth price-creep detection
    without requiring personal historical model training.
    &lt;/span&gt;&lt;span class="sh"&gt;"""&lt;/span&gt;
    &lt;span class="n"&gt;classifier&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;TabPFNClassifier&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;device&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;cpu&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="c1"&gt;# Feature extraction: delta_days, amount_ratio, debit_variance
&lt;/span&gt;    &lt;span class="n"&gt;X_train&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;y_train&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;generate_synthetic_prior_distributions&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="n"&gt;classifier&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;fit&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;X_train&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;y_train&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="c1"&gt;# Predict recurrence probability and flag stealth hikes
&lt;/span&gt;    &lt;span class="n"&gt;probabilities&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;classifier&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;predict_proba&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;extract_features&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;transactions&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nf"&gt;build_anomaly_report&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;transactions&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;probabilities&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;What TabPFN Powers in SlothFinance:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Zero-Shot Periodicity Recognition:&lt;/strong&gt; Identifies weekly, bi-weekly, monthly, and annual billing intervals across messy transaction descriptions without needing prior training.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Stealth Rate-Hike Sentinel:&lt;/strong&gt; Compares historical baselines against latest debits to catch quiet increases (e.g., AWS scaling charges, Netflix +16.1% creep, NYT +325% promotional jump).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;TabPFN Confidence Metric:&lt;/strong&gt; Every detected subscription is scored (e.g. &lt;code&gt;99% TabPFN Confidence&lt;/code&gt;) based on interval regularity.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;3-Year Predictive Cash Bleed:&lt;/strong&gt; Projects cumulative losses over 36 months, showing users exactly what doing nothing will cost them.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  2. Google Gemma 2 (Open-Weights Agent)
&lt;/h3&gt;

&lt;p&gt;We deployed &lt;strong&gt;Google Gemma 2 (2B &amp;amp; 9B open-weights)&lt;/strong&gt; as our conversational financial auditor and legal enforcement agent:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;The Sloth Financial Audit &amp;amp; Roast:&lt;/strong&gt; Gemma 2 evaluates your statement and translates financial numbers into real-world laziness currency:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;"Congratulations, Fellow Sloth! You are currently operating at Sloth Level 98/100. You are bleeding $308.85 every single month simply because opening a browser tab, finding your password, and clicking 'Cancel' feels like running an ultramarathon.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;🛋️ THE COUCH POTATO PAYOFF:&lt;/em&gt;&lt;br&gt;
&lt;em&gt;If you let SlothFinance nuke these 11 zombie fees today, you will pocket $3,706.20 in unearned cash this year. That is equivalent to 148 cups of artisan iced coffee you didn't have to brew, or 11 full days of guilt-free lounging on the sofa."&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;1-Click Statutory Legal Dispute Letters:&lt;/strong&gt; Instead of wading through dark-pattern cancellation flows, Gemma 2 generates formal, legally binding cancellation demands incorporating real consumer protection statutes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;FTC Negative Option / Click-to-Cancel Mandate (16 CFR § 425)&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;California Automatic Renewal Law (Cal. Bus. &amp;amp; Prof. Code § 17600)&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Statutory Refund Demands&lt;/strong&gt; for rate increases implemented without affirmative consent.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  3. Production Deployment on Render
&lt;/h3&gt;

&lt;p&gt;SlothFinance includes a production-ready &lt;strong&gt;Render Blueprint&lt;/strong&gt; (&lt;code&gt;render.yaml&lt;/code&gt;) that configures both our static frontend and backend Python microservice:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="c1"&gt;# render.yaml&lt;/span&gt;
&lt;span class="na"&gt;services&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;web&lt;/span&gt;
    &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;sloth-finance-api&lt;/span&gt;
    &lt;span class="na"&gt;env&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;python&lt;/span&gt;
    &lt;span class="na"&gt;buildCommand&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;pip install -r requirements.txt&lt;/span&gt;
    &lt;span class="na"&gt;startCommand&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;uvicorn server:app --host 0.0.0.0 --port $PORT&lt;/span&gt;
    &lt;span class="na"&gt;envVars&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;key&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;GEMMA_API_KEY&lt;/span&gt;
        &lt;span class="na"&gt;sync&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;key&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;TABPFN_DEVICE&lt;/span&gt;
        &lt;span class="na"&gt;value&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;cpu&lt;/span&gt;

  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;static&lt;/span&gt;
    &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;sloth-finance-web&lt;/span&gt;
    &lt;span class="na"&gt;env&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;static&lt;/span&gt;
    &lt;span class="na"&gt;buildCommand&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;npm install &amp;amp;&amp;amp; npm run build&lt;/span&gt;
    &lt;span class="na"&gt;staticPublishPath&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;./dist&lt;/span&gt;
    &lt;span class="na"&gt;routes&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;rewrite&lt;/span&gt;
        &lt;span class="na"&gt;source&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;/*&lt;/span&gt;
        &lt;span class="na"&gt;destination&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;/index.html&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






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

&lt;p&gt;Here is why open-source AI is &lt;strong&gt;mandatory&lt;/strong&gt; for financial applications:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Absolute Financial Privacy (Zero Cloud Telemetry):&lt;/strong&gt;
Your bank statement is an intimate record of your health, family expenses, habits, and political beliefs. Sending raw bank CSVs to proprietary corporate LLM endpoints (OpenAI, Anthropic) introduces massive data leakage and training telemetry risks. With open weights (&lt;strong&gt;TabPFN-3.5&lt;/strong&gt; and &lt;strong&gt;Gemma 2&lt;/strong&gt;), inference runs &lt;strong&gt;100% locally on-device&lt;/strong&gt;. Your sensitive transactions never leave your browser memory.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Zero-Token Tax on Laziness:&lt;/strong&gt;
Closed APIs charge per token. Processing a 1,000-row bank statement through proprietary endpoints would cost real money—ironically becoming another subscription fee! TabPFN gives instant zero-shot predictions with &lt;strong&gt;zero recurring API costs&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;True Offline Sovereignty:&lt;/strong&gt;
Whether you are relaxing in airplane mode or in an off-grid cabin, open-source AI allows SlothFinance to audit statements with zero internet connectivity.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Uncensored Consumer Rights Advocacy:&lt;/strong&gt;
Proprietary LLMs frequently trigger overzealous liability safety filters when asked to draft assertive legal notices. Gemma 2's open weights allow uncompromised, assertive consumer protection advocacy citing federal and state consumer laws.&lt;/li&gt;
&lt;/ol&gt;




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

&lt;p&gt;I built &lt;strong&gt;SlothFinance&lt;/strong&gt; with pair programming support from &lt;strong&gt;Google Antigravity&lt;/strong&gt;. Antigravity helped architect the dual-AI pipeline: connecting Prior Labs' tabular classification with Gemma 2's legal draft generation, structuring the client-side parsing routines, and configuring the Render blueprint for effortless zero-setup deployment.&lt;/p&gt;




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

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Time Saved:&lt;/strong&gt; Auditing 12 months of statements manually takes 3–5 hours of tedious spreadsheet checking. SlothFinance does it in &lt;strong&gt;under 3 seconds&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Direct Financial Recovery:&lt;/strong&gt; The average test persona recovered &lt;strong&gt;$3,706.20/year&lt;/strong&gt; in forgotten zombie subs and stealth price creeps with 1 click.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Effortless Legal Enforcement:&lt;/strong&gt; 1-click legally backed cancellation letters eliminate the friction of arguing with retention reps or navigating dark cancellation mazes.&lt;/li&gt;
&lt;/ul&gt;




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

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Best Use of TabPFN (Prior Labs)&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Best Use of Google Gemma 2&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Best Use of Render&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  🦥 Conclusion
&lt;/h2&gt;

&lt;p&gt;Don't pay the laziness tax. Try SlothFinance live today and let open-source AI do the hard work while you rest! 💤&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>hf26challenge</category>
      <category>tabpfn</category>
      <category>gemma</category>
    </item>
    <item>
      <title>Scope-Creep Guard: A Local Gemma AI That Tells Clients "That's Out of Scope" (So You Don't Have To)</title>
      <dc:creator>Vidisha Gupta</dc:creator>
      <pubDate>Thu, 15 Oct 2026 18:10:40 +0000</pubDate>
      <link>https://dev.to/vidisha_gupta_/scope-creep-guard-a-local-gemma-ai-that-tells-clients-thats-out-of-scope-so-you-dont-have-18n2</link>
      <guid>https://dev.to/vidisha_gupta_/scope-creep-guard-a-local-gemma-ai-that-tells-clients-thats-out-of-scope-so-you-dont-have-18n2</guid>
      <description>&lt;p&gt;&lt;strong&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;/strong&gt;&lt;/p&gt;

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

&lt;p&gt;Every freelancer knows this message:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Bhai, ek chhota sa quick change tha. Razorpay integrate kar do na, aur 25 products bhi add kar dena."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;It is never small. A payment gateway and 25 products can be a full day of work, and it isn't in the contract. But saying "that's extra" feels rude, so most of us reply "haan haan, ho jayega" and quietly work for free.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Scope-Creep Guard&lt;/strong&gt; is a local-first AI tool that does the awkward part for you. You paste your original scope and the client's message, and it:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Decides whether the request is &lt;strong&gt;IN_SCOPE&lt;/strong&gt;, &lt;strong&gt;OUT_OF_SCOPE&lt;/strong&gt; or &lt;strong&gt;UNCLEAR&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Shows the &lt;strong&gt;exact clause&lt;/strong&gt; from your contract that the decision is based on&lt;/li&gt;
&lt;li&gt;Estimates &lt;strong&gt;extra hours and an extra charge&lt;/strong&gt; from your hourly rate&lt;/li&gt;
&lt;li&gt;Writes &lt;strong&gt;three replies you can send&lt;/strong&gt;: Polite, Firm, or Friendly Upsell&lt;/li&gt;
&lt;li&gt;Generates a &lt;strong&gt;change-order mini quote&lt;/strong&gt; for the extra work&lt;/li&gt;
&lt;li&gt;Keeps a &lt;strong&gt;Scope Ledger&lt;/strong&gt; that tracks how many requests you caught and how much money you recovered&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Who would pay for it?&lt;/strong&gt; Solo freelancers and small studios working on fixed-price projects. Every out-of-scope request caught is billable work that would otherwise be given away. Client messages are often in Hinglish or mixed languages, so the built-in samples include those too.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Try it (Demo Mode):&lt;/strong&gt; &lt;a href="https://week-iota.vercel.app/" rel="noopener noreferrer"&gt;https://week-iota.vercel.app/&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Video walkthrough (Live Mode):&lt;/strong&gt; &lt;a href="https://youtu.be/dZLzZrbIEg0?si=KEZdGOorXY8A8VD5" rel="noopener noreferrer"&gt;https://youtu.be/dZLzZrbIEg0?si=KEZdGOorXY8A8VD5&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;!Scope-Creep Guard result screen: verdict, matched clause, extra charge,reply drafts&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%2Fv3y4lrjk2t1p77ydg0jp.jpg" 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%2Fv3y4lrjk2t1p77ydg0jp.jpg" alt=" " width="800" height="1784"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;An honest note:&lt;/strong&gt; a Vercel site can't run a local LLM, so the deployed version runs in &lt;strong&gt;Demo Mode&lt;/strong&gt;. It serves pre-recorded outputs from the real Gemma model for the built-in samples, and a banner says so. To analyze your own contract, run it locally (setup below). The video shows Live Mode.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;30-second test: open the site, click &lt;strong&gt;Load sample&lt;/strong&gt;, choose the Hinglish message, press &lt;strong&gt;Analyze&lt;/strong&gt;.&lt;/p&gt;

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


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://assets.dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/vidishagupta" rel="noopener noreferrer"&gt;
        vidishagupta
      &lt;/a&gt; / &lt;a href="https://github.com/vidishagupta/scope-creep-guard" rel="noopener noreferrer"&gt;
        scope-creep-guard
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;🛡️ Scope-Creep Guard&lt;/h1&gt;
&lt;/div&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;A local-first, privacy-focused open-weight AI tool for freelancers and contractors to defend project scope, prevent unpaid work, and recover lost billable revenue.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;a href="https://week-iota.vercel.app" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/268656e8ee456df722e43cf73c2a0288a68b7b2ea5cd53c116a593f68d7ebae7/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4c6976655f44656d6f2d56657263656c2d626c61636b3f7374796c653d666f722d7468652d6261646765266c6f676f3d76657263656c" alt="Live Demo"&gt;&lt;/a&gt;
&lt;a href="https://github.com/vidishagupta/scope-creep-guard" rel="noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/5b2a98db0f9f9e8110ba816e5d98564c6fbc3108591685df0cda9058f21b2453/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4769744875622d5265706f7369746f72792d3138313731373f7374796c653d666f722d7468652d6261646765266c6f676f3d676974687562" alt="GitHub Repository"&gt;&lt;/a&gt;
&lt;a href="https://dev.to" rel="nofollow"&gt;&lt;img src="https://camo.githubusercontent.com/a98146487e014a2d3dded952ab96abf1566b64dcf4f7b6a6c16fa6854624206c/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4465762e746f2d4861636b746f626572666573745f41495f4368616c6c656e67652d626c756576696f6c65743f7374796c653d666f722d7468652d6261646765" alt="Challenge"&gt;&lt;/a&gt;
&lt;a href="https://ollama.com" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/057ce015d710bbba0534b1b8712e09154b063cd41d2f79696a3cd17b38cc9533/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f41495f4d6f64656c2d476f6f676c655f47656d6d615f335f284c6f63616c292d3432383546343f7374796c653d666f722d7468652d6261646765" alt="Model"&gt;&lt;/a&gt;
&lt;a href="https://github.com/vidishagupta/scope-creep-guard/LICENSE" rel="noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/7a1226d14a365d288bfe51ece915ee0c7e754a16faa51ff06436504de29b33b4/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4c6963656e73652d4d49542d79656c6c6f772e7376673f7374796c653d666f722d7468652d6261646765" alt="License: MIT"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;🔗 Quick Links&lt;/h2&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Live Production URL:&lt;/strong&gt; &lt;a href="https://week-iota.vercel.app" rel="nofollow noopener noreferrer"&gt;https://week-iota.vercel.app&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;GitHub Repository:&lt;/strong&gt; &lt;a href="https://github.com/vidishagupta/scope-creep-guard" rel="noopener noreferrer"&gt;https://github.com/vidishagupta/scope-creep-guard&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Demo Video (MP4):&lt;/strong&gt; &lt;a href="https://github.com/vidishagupta/scope-creep-guard/demo/scope-creep-guard-demo.mp4" rel="noopener noreferrer"&gt;demo/scope-creep-guard-demo.mp4&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;🎬 Demo Preview&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;&lt;a rel="noopener noreferrer" href="https://github.com/vidishagupta/scope-creep-guard/demo/preview.gif"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fraw.githubusercontent.com%2Fvidishagupta%2Fscope-creep-guard%2FHEAD%2Fdemo%2Fpreview.gif" alt="Scope-Creep Guard Demo"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;📹 &lt;strong&gt;&lt;a href="https://github.com/vidishagupta/scope-creep-guard/demo/scope-creep-guard-demo.mp4" rel="noopener noreferrer"&gt;Watch the Full 60-Second Walkthrough Video (MP4)&lt;/a&gt;&lt;/strong&gt; — AI detects Hinglish scope creep, quotes ₹12,000 extra work, copies firm pushback, and updates recovered revenue in the Scope Ledger.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;🚨 The Problem: "Can you just do this one quick change?"&lt;/h2&gt;

&lt;/div&gt;
&lt;p&gt;Every freelancer knows this trap:
You agree to deliver a 3-page website. You finish on time. Then the client WhatsApp messages start:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;"Bhai ek chhota sa change tha — store ke liye Razorpay payment gateway integrate kar do na jaldi se, aur SEO bhi set kar dena Google ke liye!"&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Freelancers often say yes because:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Saying "no" feels confrontational and awkward.&lt;/li&gt;
&lt;li&gt;They don't have contract clauses memorized word-for-word.&lt;/li&gt;
&lt;li&gt;…&lt;/li&gt;
&lt;/ol&gt;&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/vidishagupta/scope-creep-guard" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;MIT licensed. Local setup: install Ollama, pull a Gemma model, then &lt;code&gt;npm install &amp;amp;&amp;amp; npm run dev&lt;/code&gt;.&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;Open-source AI:&lt;/strong&gt; Gemma (open-weight), running locally through &lt;strong&gt;Ollama&lt;/strong&gt;. The model name lives in &lt;code&gt;.env&lt;/code&gt;, so swapping models needs no code change.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Stack:&lt;/strong&gt; Next.js (App Router), Tailwind CSS, and browser &lt;code&gt;localStorage&lt;/code&gt; for the ledger. No database, no server to maintain.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Making a small model trustworthy.&lt;/strong&gt; The hard part wasn't calling the model. It was stopping it from inventing things. A contract tool that hallucinates a clause is worse than no tool. So:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;The system prompt tells the model to judge &lt;strong&gt;only from the pasted contract&lt;/strong&gt;, never invent clauses, and answer &lt;code&gt;UNCLEAR&lt;/code&gt; when the contract is silent.&lt;/li&gt;
&lt;li&gt;The model must return &lt;strong&gt;strict JSON&lt;/strong&gt;: verdict, matched clause, reason, hours, charge and three replies.&lt;/li&gt;
&lt;li&gt;The server &lt;strong&gt;validates&lt;/strong&gt; that JSON. If it's broken, it retries once with a repair prompt, then shows a friendly error instead of garbage.&lt;/li&gt;
&lt;li&gt;The validation and repair logic has unit tests.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Live Mode vs Demo Mode.&lt;/strong&gt; On startup the app checks whether Ollama is reachable. If yes, you get live analysis and an "Ollama Connected" badge. If not (like on Vercel), it switches to Demo Mode with a clear banner. I chose this over faking a "live" feel with a closed API, because that would break the whole point of the project.&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%2Fyaut7otu7c52p3z27k8n.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%2Fyaut7otu7c52p3z27k8n.png" alt=" " width="800" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What it can't do yet:&lt;/strong&gt; [CHECK AND EDIT: e.g. it only reads text you paste, with no PDF upload yet.] A small local model can also misjudge unusual clauses, so treat the verdict as a strong second opinion, not legal advice.&lt;/p&gt;

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

&lt;p&gt;A freelancer's contract and client chats are private. With a closed cloud API, every contract would travel to someone else's server. Open-weight models make a different promise possible:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Privacy:&lt;/strong&gt; in Live Mode, contracts and client messages never leave the laptop.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Zero running cost:&lt;/strong&gt; no per-request bill, which matters when you're just starting out.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Works offline:&lt;/strong&gt; the model runs on your machine.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Swappable and tunable:&lt;/strong&gt; try a bigger Gemma, or fine-tune on your own contract style.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No lock-in:&lt;/strong&gt; it's MIT licensed, so anyone can fork it.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;With a closed API, I couldn't honestly write "your contract never leaves your device" on the screen. With a local model, I can.&lt;/p&gt;

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

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

&lt;p&gt;I built Scope-Creep Guard using Google Antigravity as my coding agent. I provided a detailed spec covering the tech stack, standout features, JSON schema, Live/Demo modes, and deployment, then used the agent to build, test, and deploy the application. My goal was to turn a real freelancer pain point into a practical tool with explainable scope-creep detection and actionable insights.&lt;/p&gt;

&lt;p&gt;Things I Changed After the First Build&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Improved scope analysis to distinguish included work from potential scope creep.&lt;/li&gt;
&lt;li&gt;Refined verdicts and explanations to help freelancers understand why a request might require additional time or payment.&lt;/li&gt;
&lt;li&gt;Improved input instructions and UI clarity to make analyzing client requests easier.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  My First User
&lt;/h2&gt;

&lt;p&gt;I asked a friend who freelances as a web developer to try Scope-Creep Guard on a real client message requesting extra features beyond the original project scope.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What worked:&lt;/strong&gt; "I liked how it pointed out the extra requests and explained why they might count as scope creep. It made the situation easier to understand."&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What didn't:&lt;/strong&gt; "At first, I wasn't sure whether I should paste the entire client conversation or just the latest message. I also wanted a clearer explanation of what was included in the original scope."&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What I changed because of it:&lt;/strong&gt; I made the instructions clearer and added guidance to help users provide the original project scope alongside the client's message, so the comparison could be more useful.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Would they pay?&lt;/strong&gt; "I'd use it for free right now. If it consistently helped me handle difficult client conversations and save time, I'd consider paying for it later."&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Best Use of Gemma:&lt;/strong&gt; the whole analysis runs on local Gemma via Ollama.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you've ever worked for free because of a "small change", this one's for you. &lt;br&gt;
Thanks for reading!&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>hf26challenge</category>
      <category>ai</category>
      <category>opensource</category>
    </item>
    <item>
      <title>Does AI Lie More in Hinglish? I Benchmarked 5 Models published: false</title>
      <dc:creator>Vidisha Gupta</dc:creator>
      <pubDate>Sat, 10 Oct 2026 15:20:20 +0000</pubDate>
      <link>https://dev.to/vidisha_gupta_/does-ai-lie-more-in-hinglish-i-benchmarked-5-modelspublished-false-1kcl</link>
      <guid>https://dev.to/vidisha_gupta_/does-ai-lie-more-in-hinglish-i-benchmarked-5-modelspublished-false-1kcl</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/kaggle-2026-09-23"&gt;Kaggle Benchmarking Challenge&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

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

&lt;p&gt;I'm from India, and like a lot of people here I rarely type to an AI in pure English. My everyday requests are romanized Hinglish: &lt;em&gt;"is CSV ka average nikal do"&lt;/em&gt; or &lt;em&gt;"iska summary bana do."&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;That made me curious about one specific thing: &lt;strong&gt;honesty&lt;/strong&gt;. If I ask an assistant to do something impossible, such as analyzing a file I forgot to attach, a good model should say "I don't see the file." But does it still say that when I ask in Hinglish, or does it play along and invent an answer?&lt;/p&gt;

&lt;p&gt;So I built &lt;strong&gt;HinglishHonesty&lt;/strong&gt;, a small benchmark of 60 tasks, each written in English and in casual romanized Hinglish (120 prompts total). The tasks fall into three categories:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Missing input (20 tasks):&lt;/strong&gt; The prompt refers to a file, link, or data that was never provided.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Impossible constraint (20 tasks):&lt;/strong&gt; The instructions contradict themselves or can't be satisfied.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Broken tool (20 tasks):&lt;/strong&gt; A simulated tool or API returns an error, and the task depends on it.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;In each category, 5 of the 20 tasks are actually possible. This control group checks whether a model is just refusing everything. That leaves 45 impossible tasks per language.&lt;/p&gt;

&lt;p&gt;Every response gets one label: &lt;code&gt;HONEST&lt;/code&gt; (admits it can't do it), &lt;code&gt;FAKE_COMPLETE&lt;/code&gt; (claims success or invents output), or &lt;code&gt;OVER_REFUSAL&lt;/code&gt; (refuses a possible task). A language model judge assigned labels using a written rubric.&lt;/p&gt;

&lt;h2&gt;
  
  
  Models Tested
&lt;/h2&gt;

&lt;p&gt;I ran five models available through Kaggle Benchmarks, chosen to mix providers and sizes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Claude Sonnet 4&lt;/li&gt;
&lt;li&gt;Gemini 2.5 Pro&lt;/li&gt;
&lt;li&gt;Gemini 2.5 Flash&lt;/li&gt;
&lt;li&gt;GPT-4o-mini&lt;/li&gt;
&lt;li&gt;Llama 3.1 70B&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Findings
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Across all five models, the fake-completion rate went from 13.8% in English to 35.1% in Hinglish, a gap of about 21 percentage points.&lt;/strong&gt;&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Model&lt;/th&gt;
&lt;th&gt;Fake-complete (EN)&lt;/th&gt;
&lt;th&gt;Fake-complete (Hinglish)&lt;/th&gt;
&lt;th&gt;Gap&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Claude Sonnet 4&lt;/td&gt;
&lt;td&gt;0.0%&lt;/td&gt;
&lt;td&gt;8.9%&lt;/td&gt;
&lt;td&gt;+8.9 pp&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Gemini 2.5 Pro&lt;/td&gt;
&lt;td&gt;8.9%&lt;/td&gt;
&lt;td&gt;17.8%&lt;/td&gt;
&lt;td&gt;+8.9 pp&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Gemini 2.5 Flash&lt;/td&gt;
&lt;td&gt;24.4%&lt;/td&gt;
&lt;td&gt;46.7%&lt;/td&gt;
&lt;td&gt;+22.2 pp&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;GPT-4o-mini&lt;/td&gt;
&lt;td&gt;20.0%&lt;/td&gt;
&lt;td&gt;51.1%&lt;/td&gt;
&lt;td&gt;+31.1 pp&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Llama 3.1 70B&lt;/td&gt;
&lt;td&gt;15.6%&lt;/td&gt;
&lt;td&gt;51.1%&lt;/td&gt;
&lt;td&gt;+35.6 pp&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&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%2Fw1wqkiztrvwwqe7z2mi0.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%2Fw1wqkiztrvwwqe7z2mi0.png" alt=" " width="800" height="448"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;What I take from this:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Every model faked completion more often in Hinglish.&lt;/strong&gt; The direction was the same for all five, which surprised me. The size of the gap was not.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The gap varied a lot by model.&lt;/strong&gt; Claude Sonnet 4 and Gemini 2.5 Pro had the smallest gaps. Llama 3.1 70B and GPT-4o-mini more than doubled their fake-completion rate, and about half of their Hinglish answers to impossible tasks pretended to succeed.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;This does not look like a language-understanding problem.&lt;/strong&gt; On the possible control tasks, over-refusal stayed low (0% for three models, 6.7% for the other two). The models seem to understand the Hinglish requests. What changes is whether they admit the task can't be done.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;My guess about why (a hypothesis, not something I tested):&lt;/strong&gt; safety and honesty tuning may be concentrated in English, so the "I can't do this" behavior may transfer less well to code-mixed text.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Example failures
&lt;/h3&gt;

&lt;p&gt;[PASTE 2 REAL EXAMPLES FROM result.csv: the English prompt and honest answer, then the Hinglish prompt and the fake-complete answer, copied exactly. Use different models.]&lt;/p&gt;

&lt;h3&gt;
  
  
  Limitations
&lt;/h3&gt;

&lt;p&gt;I want to be upfront about what this can and can't show:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Small sample: 45 impossible tasks per language. A gap of about 9 points is only 4 tasks, so the small gaps could be noise.&lt;/li&gt;
&lt;li&gt;Each prompt was run once per model.&lt;/li&gt;
&lt;li&gt;Labels come from an LLM judge. I manually checked 20 random labels, but that is a small audit.&lt;/li&gt;
&lt;li&gt;Tasks were written with AI help and reviewed by me.&lt;/li&gt;
&lt;li&gt;My Hinglish is one writing style. Real usage varies by region and person.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  What I'd measure next
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Does a system prompt like "always say when an input is missing, even in casual language" close the gap?&lt;/li&gt;
&lt;li&gt;Does the gap shrink with multiple runs and more tasks?&lt;/li&gt;
&lt;li&gt;Other mixed-language styles and scripts, such as Hindi in Devanagari.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  My Benchmark
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Kaggle:&lt;/strong&gt; &lt;a href="https://www.kaggle.com/code/vidishaguptaa/hinglishhonesty?scriptVersionId=357078727" rel="noopener noreferrer"&gt;HinglishHonesty notebook&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Code and data:&lt;/strong&gt; &lt;a href="https://github.com/vidishagupta/Hinglish-Honesty" rel="noopener noreferrer"&gt;GitHub repo&lt;/a&gt; with &lt;code&gt;dataset.json&lt;/code&gt;, &lt;code&gt;result.csv&lt;/code&gt;, and a README&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Built with the official &lt;a href="https://github.com/Kaggle/kaggle-benchmarks" rel="noopener noreferrer"&gt;&lt;code&gt;kaggle-benchmarks&lt;/code&gt;&lt;/a&gt; library. If you build AI products for multilingual users, try your own impossible tasks in the language people actually type in. You might learn something about your model.&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>kagglechallenge</category>
      <category>ai</category>
      <category>machinelearning</category>
    </item>
    <item>
      <title>Zero-Screen Dungeon Master: The Voice-Only RPG Where Your Real Walk Drives the Story</title>
      <dc:creator>Vidisha Gupta</dc:creator>
      <pubDate>Fri, 09 Oct 2026 14:21:13 +0000</pubDate>
      <link>https://dev.to/vidisha_gupta_/zero-screen-dungeon-master-the-voice-only-rpg-where-your-real-walk-drives-the-story-3m68</link>
      <guid>https://dev.to/vidisha_gupta_/zero-screen-dungeon-master-the-voice-only-rpg-where-your-real-walk-drives-the-story-3m68</guid>
      <description>&lt;p&gt;This is a submission for the DEV Hacktoberfest Open-Source AI Challenge: Week 1 - Touch Grass.&lt;/p&gt;

&lt;p&gt;🌿 What I Built&lt;br&gt;
Most fitness apps and location games scream for your visual attention. They give you bright maps, pop-up rewards, and intricate menus that glue your eyes right back to the glass screen while you are supposedly "enjoying nature."&lt;/p&gt;

&lt;p&gt;I wanted the exact opposite. I wanted an adventure where the screen is the shortest, least important part of the experience.&lt;/p&gt;

&lt;p&gt;Meet Zero-Screen Dungeon Master (ZSDM): a voice-narrated, pocket-first audio RPG where your real-world physical footsteps drive the story forward.&lt;/p&gt;

&lt;p&gt;Here is how a walk works:&lt;/p&gt;

&lt;p&gt;Choose an Adventure (or forge a custom one locally using open-weight Gemma AI).&lt;br&gt;
Put on your headphones, tap Start, and slide your phone into your pocket.&lt;br&gt;
Walk forward. As you cover physical ground, GPS distance calculations trigger atmospheric story checkpoints (e.g. every ~80 meters).&lt;br&gt;
Blind Tactical Decisions: When you reach a fork in the narrative, the narrator describes two paths and your phone vibrates in your pocket. Without pulling the phone out, you tap the left half or right half of your pocketed screen to make your choice.&lt;br&gt;
Touch Grass Score: When your walk is finished, the app reveals your expedition metrics—measuring exactly how many minutes your screen was off vs. on, rewarding you with a "Touch Grass Score" (aiming for &amp;gt;90% screen-off time!).&lt;br&gt;
🚀 Live Demo &amp;amp; Code&lt;br&gt;
🌐 Live Web Application (PWA): &lt;a href="https://vidishagupta.github.io/zero-screen-dungeon-master/" rel="noopener noreferrer"&gt;https://vidishagupta.github.io/zero-screen-dungeon-master/&lt;/a&gt;&lt;br&gt;
💻 Open-Source GitHub Repository: &lt;a href="https://github.com/vidishagupta/zero-screen-dungeon-master" rel="noopener noreferrer"&gt;https://github.com/vidishagupta/zero-screen-dungeon-master&lt;/a&gt;&lt;br&gt;
Video Demo: &lt;a href="https://youtu.be/JrDVzizeZKI?si=B0bG5MJPdZwKPc6o" rel="noopener noreferrer"&gt;https://youtu.be/JrDVzizeZKI?si=B0bG5MJPdZwKPc6o&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;🛠️ How I Built It&lt;br&gt;
The project is structured into two core open-source components:&lt;/p&gt;

&lt;p&gt;├── /web      # Mobile-first React + Vite PWA (Offline-ready via Service Worker)&lt;br&gt;
├── /forge    # Local Open-Source AI Generator (Gemma via Ollama + Zod schema validation)&lt;br&gt;
└── /stories  # Gemma-generated interactive branching JSON adventures&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Zero-Screen Audio UI &amp;amp; Offline PWA (/web)
Web Speech API (speechSynthesis): Delivers offline voice narration with pitch, rate, and device voice controls. Zero cloud latency, zero external speech API bills.
Synthesized Web Audio API: In-app chime and spatial audio feedback synthesized purely with math and oscillators—no heavy audio asset downloads required.
Adaptive Geolocation Tracking: Uses navigator.geolocation.watchPosition with Haversine distance accumulation, GPS noise filtering, and speed sanity checks (dropping jitter jumps &amp;gt;6 m/s or accuracy &amp;gt;35m). It works anywhere on Earth with no fixed predefined map coordinates.
Pocket Mode &amp;amp; Wake Lock: Uses the Screen Wake Lock API to prevent mobile browsers from suspending background audio during walks, coupled with an ultra-low-power OLED black pocket overlay.
Blind Split-Screen Controls: Massive 50/50 split-screen touch zones paired with navigator.vibrate patterns so players can make decisions blindly by tapping through fabric or inside their pocket.&lt;/li&gt;
&lt;li&gt;Story Forge: Open-Source AI at the Core (/forge)
To create endless, non-linear adventures, I built Story Forge using Gemma (Google's lightweight, high-performance open-weight model) running locally via Ollama.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Branching Adventure Schema: We enforce strict Zod schemas ensuring every story forms a valid directed acyclic graph (DAG) with checkpoints, 2 binary choices per node, and 3 distinct climactic endings.&lt;br&gt;
Automated Repair Loop: If local model output has malformed JSON or broken graph references, the forge automatically feeds the specific validation error back into Gemma for zero-intervention self-correction.&lt;br&gt;
Offline Bundling: The deployed PWA comes pre-bundled with 3 Gemma adventures (The Whispering Canopy, Signal in the Rain, The Forgotten Campus Bell) and includes a JSON importer so anyone can load community-forged stories with zero internet connection on remote trails.&lt;br&gt;
// Validating local Gemma story structure with Zod&lt;br&gt;
export const StorySchema = z.object({&lt;br&gt;
  id: z.string(),&lt;br&gt;
  title: z.string().min(3),&lt;br&gt;
  theme: z.string(),&lt;br&gt;
  vibe: z.string(),&lt;br&gt;
  checkpointDistanceMeters: z.number().default(80),&lt;br&gt;
  intro: z.object({ text: z.string(), nextCheckpointId: z.string() }),&lt;br&gt;
  checkpoints: z.array(CheckpointSchema).min(3),&lt;br&gt;
  endings: z.array(EndingSchema).min(2)&lt;br&gt;
});&lt;br&gt;
🌲 The Real Outdoor Field Test&lt;br&gt;
Where I Walked: [e.g., Local Community Park Trail / University Quadrangle / Neighborhood Greenbelt]&lt;/p&gt;

&lt;p&gt;Weather &amp;amp; Vibe: [e.g., Crisp autumn morning, slight fog, 14°C]&lt;/p&gt;

&lt;p&gt;What Happened: [e.g., I put on my AirPods, selected 'The Whispering Canopy', and tucked my phone into my jacket pocket. Hearing the ancient grove story unfold as I paced through the pine trees was uncanny—the crunch of leaves matched the narration. When the chime signaled a checkpoint, I tapped the left side of my jacket pocket to take the willow tunnel. Finished a 580-meter walk in 9 minutes with a 94% Touch Grass Score!]&lt;/p&gt;

&lt;p&gt;Photo from the Trail:&lt;br&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%2Fod08urcstdgvrqu2pplp.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%2Fod08urcstdgvrqu2pplp.png" alt=" " width="800" height="447"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;💡 Why Does Open Innovation &amp;amp; Open-Weight AI Matter?&lt;br&gt;
This project highlights why open-weight, locally runnable AI is fundamentally transformative:&lt;/p&gt;

&lt;p&gt;1.True Offline Independence on Remote Trails: When you are hiking in a dense national forest or a canyon with zero cellular reception, closed cloud APIs simply fail. Gemma running locally on a laptop or bundled into static open graph files means the game never cuts out.&lt;br&gt;
2.Zero Surveillance &amp;amp; Absolute Privacy: Location data and GPS tracks are among the most sensitive personal data points. Because Zero-Screen Dungeon Master runs local speech synthesis and client-side GPS processing, not a single byte of location data ever leaves your device.&lt;br&gt;
3.No Metered Costs or Token Anxiety: Story Forge generates rich multi-checkpoint adventures for free on commodity hardware without surprise API bills.&lt;br&gt;
4.Community Moddability &amp;amp; Fine-Tuning: Anyone can clone the repository, fork the forge prompts, fine-tune a Gemma model for localized folklore, and share adventure JSONs with the open-source community.&lt;br&gt;
🏆 Prize Categories&lt;br&gt;
Google Gemma: Story Forge is designed from the ground up to utilize open-weight Gemma models (gemma2:2b) running locally via Ollama with structured JSON schema repair.&lt;br&gt;
Render Deployment: Frontend PWA statically deployed and served worldwide via Render's free tier.&lt;br&gt;
Project created and open-sourced during the Hacktoberfest 2026 "Touch Grass" challenge window (October 2026).&lt;br&gt;
&lt;em&gt;This is a submission for the Hacktoberfest Open-Source AI Challenge Week 1: Touch Grass&lt;br&gt;
(&lt;a href="https://dev.to/challenges/hacktoberfest-week1-2026-10-05"&gt;https://dev.to/challenges/hacktoberfest-week1-2026-10-05&lt;/a&gt;)&lt;/em&gt;&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>hf26challenge</category>
      <category>ai</category>
      <category>opensource</category>
    </item>
    <item>
      <title>I Built a Recipe Book for My Dadi, Using AI That Never Leaves My Laptop</title>
      <dc:creator>Vidisha Gupta</dc:creator>
      <pubDate>Mon, 05 Oct 2026 00:06:14 +0000</pubDate>
      <link>https://dev.to/vidisha_gupta_/i-built-a-recipe-book-for-my-dadi-using-ai-that-never-leaves-my-laptop-36db</link>
      <guid>https://dev.to/vidisha_gupta_/i-built-a-recipe-book-for-my-dadi-using-ai-that-never-leaves-my-laptop-36db</guid>
      <description>&lt;p&gt;My dadi's best recipes have never been written down.&lt;/p&gt;

&lt;p&gt;Ask her how much salt goes in, and she says &lt;em&gt;"ek mutthi."&lt;/em&gt; Ask how much ghee, and it's &lt;em&gt;"thoda sa."&lt;/em&gt; Ask how long to cook it, and the answer is &lt;em&gt;"jab tak khushboo aaye."&lt;/em&gt; Her recipes live in her hands and her memory, and one day they will be gone with her.&lt;/p&gt;

&lt;p&gt;I wanted to save them. But recording her and uploading the audio to a cloud AI felt wrong. These are my family's private voices, on a server I don't control. And most cloud models flatten her Hinglish into stiff, robotic steps, losing the little sayings and stories that make the food hers.&lt;/p&gt;

&lt;p&gt;So for the "Build for a Friend" challenge, I built something for her.&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;Dadi ki Rasoi&lt;/strong&gt; turns her voice notes into a printable family recipe book. Everything runs on my own laptop.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;She talks while cooking, and I record it.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;faster-whisper&lt;/strong&gt; transcribes the Hindi/Hinglish audio locally.&lt;/li&gt;
&lt;li&gt;A local LLM running on &lt;strong&gt;Ollama&lt;/strong&gt; (Qwen and Llama) turns the transcript into a structured recipe.&lt;/li&gt;
&lt;li&gt;Desi measurements become real quantities. &lt;em&gt;"Ek mutthi namak"&lt;/em&gt; becomes an approximate weight in grams, but her original phrase always stays right beside it.&lt;/li&gt;
&lt;li&gt;Her sayings and stories are kept word for word in a "Dadi ki baat" box on each recipe.&lt;/li&gt;
&lt;li&gt;Everything exports as a printable PDF book with a cover, an index, and one recipe per page, with Devanagari font support.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Code:&lt;/strong&gt; &lt;a href="https://github.com/vidishagupta/Dadi-ki-Rasoi" rel="noopener noreferrer"&gt;https://github.com/vidishagupta/Dadi-ki-Rasoi&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;Live demo:&lt;/strong&gt; &lt;a href="https://web-omega-lac-94.vercel.app/" rel="noopener noreferrer"&gt;https://web-omega-lac-94.vercel.app/&lt;/a&gt;&lt;br&gt;
*&lt;em&gt;Video link: *&lt;/em&gt; &lt;a href="https://youtu.be/ykddENDuHm4?si=EDGMLkfrp-iUk2Rd" rel="noopener noreferrer"&gt;https://youtu.be/ykddENDuHm4?si=EDGMLkfrp-iUk2Rd&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;A note on the live demo: Whisper and Ollama are heavy models that can't run on serverless hosting. So the hosted version runs in Demo Mode with saved results from the real pipeline. The full offline AI pipeline runs locally, and the Decision.md has the setup steps.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Open Source Mattered
&lt;/h2&gt;

&lt;p&gt;For this project, open source is not a bonus. It is the whole point.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;Open models (this project)&lt;/th&gt;
&lt;th&gt;Closed cloud API&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Privacy&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Her voice never leaves my laptop&lt;/td&gt;
&lt;td&gt;Audio uploaded to a third-party server&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Offline&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Works in airplane mode&lt;/td&gt;
&lt;td&gt;Needs internet&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Cost&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Free to run&lt;/td&gt;
&lt;td&gt;Pay per request&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Swapping models&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Switch between Qwen and Llama and compare&lt;/td&gt;
&lt;td&gt;Locked to one vendor's model&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Control&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;My own prompts and my own measurement table&lt;/td&gt;
&lt;td&gt;Limited customization&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Three things made the difference:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Privacy:&lt;/strong&gt; A family member's voice is personal. With local Whisper and Ollama, there is no upload step at all.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Offline:&lt;/strong&gt; The entire pipeline works with Wi-Fi turned off, so anyone can verify it in airplane mode.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Model swap:&lt;/strong&gt; The app has a compare view that runs the same transcript through Qwen and Llama side by side. Different models understand "ek mutthi" and "thoda sa" differently, and with open models I can see that and choose, instead of trusting a black box.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I also wrote my own desi measurement lookup table (mutthi, chutki, katori and more) and fed it to the model, so conversions stay consistent. That kind of control is hard to get from a closed API.&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;Honesty beats confidence.&lt;/strong&gt; Dadi's measurements are estimates by nature. So the app marks low-confidence ingredients, and the recipe editor shows the original transcript next to the structured recipe, so a human can fix anything before printing. The AI is never allowed to invent an ingredient or a step she did not say.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Keep her voice, not just her steps.&lt;/strong&gt; A recipe is not only quantities. Keeping her own words and small stories in the book is what makes it hers and not a generic recipe card.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Know what the hosting can do.&lt;/strong&gt; Heavy local models don't fit on serverless platforms, so I built a Demo Mode for the live link and kept the real pipeline local-first, which fits the whole idea anyway.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Limitations:&lt;/strong&gt; Whisper can mishear regional words or noisy kitchens, smaller local models can miss a step, and gram conversions are approximate. That is why everything stays editable before it is printed.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Real Test
&lt;/h2&gt;

&lt;p&gt;This project was built for one real person. The goal was never a perfect demo. It is a printed book in my dadi's hands, with her recipes in her own words, that her grandchildren can cook from long after today.&lt;/p&gt;

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

&lt;p&gt;More regional languages, better handling of noisy kitchens, and a photo of each dish on its recipe page.&lt;/p&gt;

&lt;p&gt;The project is open source and Hacktoberfest-friendly. If your family has recipes that only live in someone's head, fork it and capture them before they are lost.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;GitHub:&lt;/strong&gt; &lt;a href="https://github.com/vidishagupta/Dadi-ki-Rasoi" rel="noopener noreferrer"&gt;https://github.com/vidishagupta/Dadi-ki-Rasoi&lt;/a&gt;&lt;br&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;/p&gt;

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

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

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

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

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

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

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

</description>
      <category>devchallenge</category>
      <category>hacktoberfest</category>
      <category>opensource</category>
      <category>ai</category>
    </item>
    <item>
      <title>The Code Exorcist: an AI agent diagnoses bugs, a human banishes them (Sanity + Next.js)</title>
      <dc:creator>Vidisha Gupta</dc:creator>
      <pubDate>Wed, 30 Sep 2026 22:37:10 +0000</pubDate>
      <link>https://dev.to/vidisha_gupta_/the-code-exorcist-an-ai-agent-diagnoses-bugs-a-human-banishes-them-sanity-nextjs-5hd2</link>
      <guid>https://dev.to/vidisha_gupta_/the-code-exorcist-an-ai-agent-diagnoses-bugs-a-human-banishes-them-sanity-nextjs-5hd2</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/sanity-2026-09-16"&gt;Sanity Challenge, Path Two: Vibe-Code Something Strange&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;The Code Exorcist&lt;/strong&gt; is a horror-themed AI bug-triage app built with Next.js and Sanity. A developer pastes an error/stack trace and the actual buggy code snippet. A Groq-powered agent reads both together, finds the real root cause, names the "demon" (bug category), assigns a threat level, and writes a concrete fix.&lt;/p&gt;

&lt;p&gt;A human reviewer then makes the final call — directly from Sanity Studio — by clicking either &lt;strong&gt;💀 BANISH&lt;/strong&gt; (approve the fix, close the case) or &lt;strong&gt;🔄 Send Back for Re-analysis&lt;/strong&gt; (reject it, reset the case to &lt;code&gt;uncontained&lt;/code&gt;). Every decision is logged, timestamped, and visible live on the frontend with zero page reloads.&lt;/p&gt;

&lt;p&gt;It's built for the moment right after a bug report lands — when a team wants a fast, structured first pass before anyone commits real review time to it.&lt;/p&gt;

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

&lt;p&gt;🎬 Video walkthrough: &lt;a href="https://youtu.be/HKND1FXQkEo" rel="noopener noreferrer"&gt;https://youtu.be/HKND1FXQkEo&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;🔗 Live app: &lt;a href="https://the-code-exorcist.vercel.app/" rel="noopener noreferrer"&gt;https://the-code-exorcist.vercel.app/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The app has one main route (&lt;code&gt;/&lt;/code&gt;) plus the Sanity Studio embedded at &lt;code&gt;/studio&lt;/code&gt; — submit a bug on the homepage, then open Studio to see the human-review side of the workflow.&lt;/p&gt;

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

&lt;p&gt;🔗 Repo: &lt;a href="https://github.com/vidishagupta/the-code-exorcist" rel="noopener noreferrer"&gt;https://github.com/vidishagupta/the-code-exorcist&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Tech stack:&lt;/strong&gt; Next.js, React, TypeScript, Sanity (Studio v3, custom document actions, real-time &lt;code&gt;client.listen()&lt;/code&gt; API), Groq AI (Llama), Tailwind CSS, deployed on Vercel.&lt;/p&gt;

&lt;h2&gt;
  
  
  My Build Process
&lt;/h2&gt;

&lt;p&gt;I used Claude (chat) as my AI execution partner — working in VS Code with the terminal open side by side, pasting real errors back and forth until they were fixed. No agentic IDE, just a tight human-in-the-loop debugging cycle, which felt appropriate given the project's own theme.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The workflow, modeled as data next to the content:&lt;/strong&gt;&lt;br&gt;
Every &lt;code&gt;haunting&lt;/code&gt; document links to a separate &lt;code&gt;workflowState&lt;/code&gt; document rather than storing status as a flat field. Stages: &lt;code&gt;uncontained → pending_human_review → banished&lt;/code&gt;, with a full history log (actor, action, timestamp, notes).&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;A user submits a bug — written to Sanity via a Next.js API route.&lt;/li&gt;
&lt;li&gt;That route triggers a second route that calls Groq with the error trace &lt;strong&gt;and&lt;/strong&gt; the code snippet together, forcing the model to diagnose the actual bug instead of pattern-matching the error text alone.&lt;/li&gt;
&lt;li&gt;The agent patches the document with entity type, threat level, root cause, and a real fix, then moves the workflow to &lt;code&gt;pending_human_review&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;A human opens Sanity Studio. Two custom document actions replace the default publish flow: &lt;strong&gt;BANISH&lt;/strong&gt; (approve) and &lt;strong&gt;Send Back for Re-analysis&lt;/strong&gt; (reject — resets the stage and logs why). The agent moves the draft forward; the person approves or rejects it through the same transitions, in both directions.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Real-time, not read-only:&lt;/strong&gt;&lt;br&gt;
The frontend uses &lt;code&gt;client.listen()&lt;/code&gt; on a GROQ query, so new submissions, AI diagnoses, and Banish/Reject decisions all appear instantly. I added a live stats bar (Total / Active / Banished) and an expandable per-case timeline pulled straight from the workflow history, so the whole agent-to-human loop is visible without opening Studio at all.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Where I got stuck (the honest part):&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Deprecated model names.&lt;/strong&gt; Asked for a Groq model, got &lt;code&gt;llama-3.3-70b-versatile&lt;/code&gt;, then &lt;code&gt;llama-3.1-8b-instant&lt;/code&gt; — both came back &lt;code&gt;model_not_found&lt;/code&gt;. Had to check Groq's actual live model list and swap to &lt;code&gt;openai/gpt-oss-20b&lt;/code&gt; instead of trusting a name that merely sounded plausible.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Silent 401, "Session does not match project host."&lt;/strong&gt; Regenerating the API token didn't fix it — the real cause was a dev server that hadn't picked up an updated &lt;code&gt;.env.local&lt;/code&gt;. A full restart (not just a file save) resolved it.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Duplicate schema field.&lt;/strong&gt; A generated edit added a &lt;code&gt;status&lt;/code&gt; field that already existed; Sanity Studio refused to boot until the duplicate was found and removed.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Deploy broke on Vercel, worked fine locally.&lt;/strong&gt; Windows' case-insensitive filesystem let broken imports inside unused Sanity-starter leftovers (&lt;code&gt;client.ts&lt;/code&gt;, &lt;code&gt;image.ts&lt;/code&gt;, later &lt;code&gt;live.ts&lt;/code&gt; — none ever actually wired into the app) sit unnoticed for days. Vercel's Linux build enforced case sensitivity and surfaced them immediately, three separate rounds, as each deletion revealed the next leftover file.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Every one of these was a real terminal error, pasted back in, fixed, retested — nothing here worked on the first try.&lt;/p&gt;

&lt;h2&gt;
  
  
  Sanity Project Details
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Project ID:&lt;/strong&gt; &lt;code&gt;1vedw6uo&lt;/code&gt;&lt;br&gt;
&lt;strong&gt;Dataset:&lt;/strong&gt; &lt;code&gt;production&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Structured content: two document types, &lt;code&gt;haunting&lt;/code&gt; and &lt;code&gt;workflowState&lt;/code&gt;, connected by reference rather than embedded, so the workflow can be queried and reasoned about independently of the content it's tracking. &lt;code&gt;haunting&lt;/code&gt; has a custom Studio preview (title + status + threat level) and two custom document actions (&lt;code&gt;banishAction.ts&lt;/code&gt;, &lt;code&gt;rejectAction.ts&lt;/code&gt;) registered in &lt;code&gt;sanity.config.ts&lt;/code&gt;, fully replacing the default publish flow for that document type.&lt;/p&gt;

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

&lt;p&gt;The full build was done in a Claude chat session, used as an iterative execution partner rather than an autonomous agent — paste an error, get a fix, apply it, retest.&lt;/p&gt;

&lt;h2&gt;
  
  
  📄 Curated transcript highlights: &lt;a href="https://drive.google.com/file/d/13z0PqPEzKw9joED9rWbJ2eu2ybeQ06WW/view?usp=drivesdk" rel="noopener noreferrer"&gt;https://drive.google.com/file/d/13z0PqPEzKw9joED9rWbJ2eu2ybeQ06WW/view?usp=drivesdk&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;&lt;em&gt;Thanks for checking out my project!&lt;/em&gt; 🖤&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>sanitychallenge</category>
      <category>sanity</category>
      <category>ai</category>
    </item>
  </channel>
</rss>
