<?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>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: The Sloth Philosophy
&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;
  
  
  🎥 1-Minute Video Demo
&lt;/h2&gt;

&lt;p&gt;Check out the full walkthrough featuring our voiceover agent, 1080p live UI interaction, and synchronized captions:&lt;/p&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;
  
  
  🧠 System Architecture &amp;amp; AI Pipeline
&lt;/h2&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;h2&gt;
  
  
  🔬 Category 1: Best Use of TabPFN (Prior Labs)
&lt;/h2&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;h3&gt;
  
  
  What TabPFN Powers in SlothFinance:
&lt;/h3&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;h2&gt;
  
  
  🦥 Category 2: Best Use of Google Gemma 2
&lt;/h2&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;h3&gt;
  
  
  1. The Sloth Financial Audit &amp;amp; Roast
&lt;/h3&gt;

&lt;p&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;h3&gt;
  
  
  2. 1-Click Statutory Legal Dispute Letters
&lt;/h3&gt;

&lt;p&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;h2&gt;
  
  
  ☁️ Category 3: Best Use of Render
&lt;/h2&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;p&gt;With 1 click on Render, the whole infrastructure spins up with zero manual configuration.&lt;/p&gt;




&lt;h2&gt;
  
  
  🛡️ Why Open Innovation Matters
&lt;/h2&gt;

&lt;p&gt;The Week 3 Challenge prompt poses the critical question:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;"Why does open innovation matter for what you built? What did it make possible that a closed API wouldn't?"&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&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;
  
  
  🚀 Live Demo &amp;amp; Repository
&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;GitHub Source Code:&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;YouTube Video Walkthrough:&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;
  
  
  🦥 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>hacktoberfest</category>
      <category>tabpfn</category>
      <category>gemma</category>
      <category>render</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>
