<?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: Manwitha Gopal Sunkari</title>
    <description>The latest articles on DEV Community by Manwitha Gopal Sunkari (@manwitha_gopa_sunkar).</description>
    <link>https://dev.to/manwitha_gopa_sunkar</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%2F3910130%2F25bfff69-a94b-47d1-ab8b-58671a58e67b.png</url>
      <title>DEV Community: Manwitha Gopal Sunkari</title>
      <link>https://dev.to/manwitha_gopa_sunkar</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/manwitha_gopa_sunkar"/>
    <language>en</language>
    <item>
      <title>FieldCast: a weather window finder that prints a pocket field zine</title>
      <dc:creator>Manwitha Gopal Sunkari</dc:creator>
      <pubDate>Sun, 11 Oct 2026 16:05:58 +0000</pubDate>
      <link>https://dev.to/manwitha_gopa_sunkar/fieldcast-a-weather-window-finder-that-prints-a-pocket-field-zine-42l9</link>
      <guid>https://dev.to/manwitha_gopa_sunkar/fieldcast-a-weather-window-finder-that-prints-a-pocket-field-zine-42l9</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/hacktoberfest-week1-2026-10-05"&gt;Hacktoberfest Open-Source AI Challenge Week 1: Touch Grass&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

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

&lt;p&gt;I sit at a screen most of the day. When I try to take a walk break, three things stop me:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;I don't know if the weather is good right now.&lt;/li&gt;
&lt;li&gt;A walk with no goal feels pointless.&lt;/li&gt;
&lt;li&gt;Nature apps want my phone in my hand the whole time.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;FieldCast is my answer.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You pick a place. It reads the weather and sorts conditions into four walk types: bird chorus, pollinators, post-rain emergence, and high-UV shade.&lt;/li&gt;
&lt;li&gt;Then it formats a one-page pocket zine that you print and fold. It has a sensory prompt, a short reflection, and three things to look for.&lt;/li&gt;
&lt;li&gt;The screen is the short part: check, print, go. The goal is to leave the phone at your desk.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It is for people who work at screens and want a reason to step outside.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Live Web App:&lt;/strong&gt; &lt;a href="https://sunkarimanwithagopal.github.io/fieldcast-touch-grass/" rel="noopener noreferrer"&gt;FieldCast&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Repository &amp;amp; Code:&lt;/strong&gt; 
&lt;a href="https://github.com/SunkariManwithaGopal/fieldcast-touch-grass" rel="noopener noreferrer"&gt;Repo&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;What the live page really does.&lt;/strong&gt; GitHub Pages cannot run Python, so the live page runs &lt;strong&gt;no AI model&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;It uses a client-side JavaScript copy of my threshold rules for the current hour only. There is no 24-hour timeline and no "best time" computed in the live demo.&lt;/li&gt;
&lt;li&gt;The zine text and the three species bounties are written regional presets.&lt;/li&gt;
&lt;li&gt;The nearby-species panel calls the live iNaturalist Open API from your browser.&lt;/li&gt;
&lt;li&gt;The spectrogram is a decorative canvas animation with an optional microphone frequency visualizer. It does not identify species.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Client-side extras (all confirmed working):&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Calendar (.ics) export:&lt;/strong&gt; downloads an iCalendar file to block 30 minutes of walk time on your calendar.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Streak counter:&lt;/strong&gt; tracks consecutive days outside via &lt;code&gt;localStorage&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Field logbook:&lt;/strong&gt; saves your offline walk reflections in &lt;code&gt;localStorage&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;QR links:&lt;/strong&gt; encodes iNaturalist species search URLs so you can look them up later (requires internet when scanned).&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;What runs only locally.&lt;/strong&gt; The Python backend runs TabPFN v2 and Gemma 2B. That is the open-source AI in this project, and the local CLI / server demonstrates both.&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;TabPFN v2 sorts weather into walk types.&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;It reads a CSV I wrote by hand: 32 rows, 8 per walk type (&lt;code&gt;data/trail_observations.csv&lt;/code&gt;). I defined the state labels with my own thresholds. They are synthetic references, not a published dataset or verified wildlife sightings.&lt;/li&gt;
&lt;li&gt;It estimates which weather favors each walk type. It does not predict wildlife occurrence.&lt;/li&gt;
&lt;li&gt;Air quality (AQI) is a manual form field with a placeholder. Open-Meteo's standard weather endpoint does not return it without a separate call.&lt;/li&gt;
&lt;li&gt;The API response includes an &lt;code&gt;engine_used&lt;/code&gt; field (&lt;code&gt;tabpfn_v2&lt;/code&gt; vs &lt;code&gt;fallback_random_forest&lt;/code&gt;), proving the real model answered and not a fallback.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Gemma 2B (&lt;code&gt;gemma2:2b&lt;/code&gt; via Ollama) writes three things: the zine title, a sensory line, and a reflection prompt.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Two things went wrong during development, and I'm sharing them because they shaped the final design:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;My first test zine generated a reflection asking about "the async race condition in the Avian Chorus." The cause was my own HTML form: its default placeholder text was &lt;em&gt;"Debugging an async race condition &amp;amp; need an eyes-up reset."&lt;/em&gt; Gemma picked that up and generated debugging analogies. I rewrote the prompt and default text specifically for natural history. Three sequential runs after that were completely on-topic (e.g., &lt;em&gt;"Deccan Canopy Oasis"&lt;/em&gt;). They are simple, but grounded in nature.&lt;/li&gt;
&lt;li&gt;Gemma also hallucinated species when asked to invent bounties. One bounty was &lt;em&gt;"Nest Material,"&lt;/em&gt; and a frog call was labeled &lt;em&gt;"Regional Call."&lt;/em&gt; A 2B parameter model shouldn't be trusted for field taxonomy. As a result, the three species to find are curated presets, not generated by Gemma.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Other parts.&lt;/strong&gt; FastAPI, Open-Meteo for weather, iNaturalist for nearby sightings, Leaflet for the interactive map, and pure CSS &lt;code&gt;@media print&lt;/code&gt; rules for the 1-page foldable zine layout.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Dead end.&lt;/strong&gt; I planned to stream bird calls from xeno-canto. When I tested their v2 API, the endpoint returned &lt;em&gt;"no longer available."&lt;/em&gt; I removed the button instead of faking it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;AI agent.&lt;/strong&gt; I built this with an AI coding agent (Google Antigravity). Its early reports claimed conclusions it had not verified, like an agreement rate with no source file. I stopped it and required raw terminal outputs and saved artifact files in &lt;code&gt;outputs/&lt;/code&gt; for every claim in this post.&lt;/p&gt;

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

&lt;p&gt;I benchmarked the JavaScript threshold rules (extracted from &lt;code&gt;index.html&lt;/code&gt; and executed in Node) against TabPFN v2 on the same real 24-hour Hyderabad Open-Meteo forecast (&lt;code&gt;outputs/comparison_local_hour.csv&lt;/code&gt;).&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The top predicted state differed in &lt;strong&gt;5 of 24 hours&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;While 19 hours agreed, &lt;strong&gt;11 of those were night hours (19:00 to 05:00)&lt;/strong&gt;. My training rows only cover daytime conditions (06:00 to 18:00). Both methods default to calling those night hours "bird chorus." Within the 13 in-distribution hours, &lt;strong&gt;5 differed (38.5% disagreement)&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Example at 13:00 IST:&lt;/strong&gt; Weather was 33.4°C, 30% humidity, 10.9 km/h wind, and UV index 7.7. The rule said &lt;em&gt;Pollinators&lt;/em&gt; because its rigid threshold requires UV ≥ 8.0 or Temp ≥ 34.0. TabPFN smoothed the boundary and predicted &lt;em&gt;High-UV Shade Walk&lt;/em&gt; (58.0% probability) over &lt;em&gt;Pollinators&lt;/em&gt; (30.1%).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Pressure anomaly:&lt;/strong&gt; Hyderabad's surface pressure (~956 hPa) is far below my training CSV range (1002 to 1016 hPa). I tested both surface pressure and mean sea-level pressure (&lt;code&gt;pressure_msl&lt;/code&gt;, ~1013 hPa). The top state changed in &lt;strong&gt;0 of 24 hours&lt;/strong&gt;, but TabPFN's confidence changed dramatically. On unseen night hours, its confidence jumped from 45–49% (surface pressure) to 77–86% (sea-level pressure).&lt;/li&gt;
&lt;li&gt;On one in-range test input, TabPFN output 100% / 0% / 0% / 0%. With only 32 training rows, high confidence does not equal empirical accuracy.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Inference latency on CPU:&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;TabPFN v2: &lt;strong&gt;68.2 s cold start&lt;/strong&gt; (model load + torch weights initialization), &lt;strong&gt;4.83 s warm&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Gemma 2B: &lt;strong&gt;34.1 s cold start&lt;/strong&gt;, &lt;strong&gt;9.97 s warm&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;The backend's &lt;code&gt;best_window_today&lt;/code&gt; tests 6 synthetic hour offsets against current conditions. It is &lt;strong&gt;not a weather forecast&lt;/strong&gt;, and the UI explicitly labels it as such.&lt;/li&gt;
&lt;li&gt;I have not validated either method against real bird surveys, so I make no claim about which is biologically more accurate.&lt;/li&gt;
&lt;/ul&gt;

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

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;I could look inside.&lt;/strong&gt; Because TabPFN ran locally, I could inspect feature values, compare it side-by-side against my JavaScript rules, and discover the pressure distribution mismatch. A proprietary cloud endpoint would have hidden this behavior behind an API call.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Zero per-call cost.&lt;/strong&gt; Both Gemma and TabPFN ran entirely on my CPU. Generating field guides and sorting weather requires no API keys, credit cards, or rate limits.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Swappable.&lt;/strong&gt; The LLM backend is an Ollama parameter in the UI. Anyone can test the prompt against Llama 3.2 or Mistral without rewriting the application.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Where open had trade-offs.&lt;/strong&gt; Gemma 2B is prone to hallucinations on factual taxonomy. The 68-second cold start on a CPU is also steep when you just want to step outside immediately.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Current limit.&lt;/strong&gt; The app still relies on third-party APIs for weather (Open-Meteo), species (iNaturalist), map tiles, and QR code rendering. It is not a completely offline tool.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  How It Went Outside
&lt;/h2&gt;

&lt;p&gt;I printed the &lt;em&gt;Deccan Urban Canopy&lt;/em&gt; zine at 17:15 IST on October 11 and took a 25-minute loop around the neighborhood park without my phone.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Conditions:&lt;/strong&gt; 31°C, light wind, long late-afternoon shadows.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;What worked:&lt;/strong&gt; The folded 1-page format fits in a shirt pocket without creasing into a mess. Spotting the bounties was surprisingly practical: I found copper pods hanging from roadside Peltophorum trees, crushed a fallen Neem leaflet to smell the sharp herbal scent, and spotted a White-throated Kingfisher perched silently on a low overhead wire near the park boundary.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;What didn't work:&lt;/strong&gt; The sensory prompt advised listening for high-frequency bird harmonics. Two blocks away from the avenue, traffic noise from auto-rickshaws and scooters completely masked subtle canopy sounds. The zine works best when you actually step off the road and into interior garden trails.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The takeaway:&lt;/strong&gt; Leaving the phone on the desk broke the subconscious habit of checking notifications at red lights or trail benches. Having a paper prompt with three specific things to notice turned a vague break into an intentional reset.&lt;/li&gt;
&lt;/ul&gt;

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

&lt;ul&gt;
&lt;li&gt;Flag night hours as "not an active window" instead of extrapolating the model outside its training hours.&lt;/li&gt;
&lt;li&gt;Calibrate the training set against real eBird and iNaturalist observation timestamps.&lt;/li&gt;
&lt;li&gt;Add an hourly breakdown in the static demo comparing rules and TabPFN side by side.&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:&lt;/strong&gt; Classifies hourly micro-climate features using Prior Labs TabPFN v2 locally on CPU, with a documented 24-hour benchmark against deterministic rules.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Best Use of Gemma:&lt;/strong&gt; Uses local &lt;code&gt;gemma2:2b&lt;/code&gt; via Ollama to compose nature zines with strict JSON formatting and reproducible test logs.&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>devchallenge</category>
      <category>hf26challenge</category>
    </item>
    <item>
      <title>DryRunBuddy: A Zero-Spoiler Socratic DSA Coach Powered by Local AI</title>
      <dc:creator>Manwitha Gopal Sunkari</dc:creator>
      <pubDate>Mon, 05 Oct 2026 08:48:31 +0000</pubDate>
      <link>https://dev.to/manwitha_gopa_sunkar/dryrunbuddy-a-zero-spoiler-socratic-dsa-coach-powered-by-local-ai-20ji</link>
      <guid>https://dev.to/manwitha_gopa_sunkar/dryrunbuddy-a-zero-spoiler-socratic-dsa-coach-powered-by-local-ai-20ji</guid>
      <description>&lt;p&gt;&lt;em&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;/em&gt;(&lt;/p&gt;

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

&lt;p&gt;Preparing for technical interviews usually involves staring at a LeetCode problem, getting stuck, and asking an AI for a hint. The problem? AI models almost always over-explain and spit out the entire optimal code block, completely robbing the developer of the learning process and the "aha!" moment. I built DryRunBuddy to flip this script.&lt;/p&gt;

&lt;p&gt;I built this specifically for a close friend who is currently grinding for software engineering interviews. DryRunBuddy acts as a firm, supportive Socratic interviewer that lives directly in your browser. Instead of giving away the answer, it takes their written intuition or code and acts in three stages:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Socratic Coach:&lt;/strong&gt; Analyzes their logic, estimates complexity, provides a concrete edge-case where their logic breaks, and asks a mock follow-up question.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Code Debugger:&lt;/strong&gt; Analyzes their naive attempt line-by-line and provides a patched snippet of just the bugs.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Optimal Mentor:&lt;/strong&gt; Once they solve it, provides the optimal solution and a step-by-step dry-run execution trace.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;It comes pre-loaded with a curated studio of &lt;strong&gt;10 classic DSA patterns&lt;/strong&gt; containing intentional bugs, plus a &lt;strong&gt;Custom Problem&lt;/strong&gt; option. It even generates a markdown cheat-sheet and exports the entire session for their Obsidian vault!&lt;/p&gt;

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

&lt;p&gt;🧠 &lt;strong&gt;Try it live:&lt;/strong&gt; &lt;a href="https://sunkarimanwithagopal.github.io/dryrun-buddy/" rel="noopener noreferrer"&gt;DryRunBuddy&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;(Note: To get the actual zero-latency AI coaching, you must run Ollama locally with `OLLAMA_ORIGINS="&lt;/em&gt;"`. If you just want to see the UI and curated curriculum, toggle the "Instant Offline Engine" checkbox!)*&lt;/p&gt;

&lt;h3&gt;
  
  
  📸 Screenshots
&lt;/h3&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%2Fux9dzzovfkif8ivf2k6l.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%2Fux9dzzovfkif8ivf2k6l.png" alt=" " width="800" height="788"&gt;&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;The DSA Studio:&lt;/strong&gt; The main interface featuring the curated problem list and the Quick Revision Notes.&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%2Fahvve7uh9dtszpaihoat.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%2Fahvve7uh9dtszpaihoat.png" alt=" " width="800" height="469"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Socratic Coaching:&lt;/strong&gt; The agent breaks down the intuition without revealing the solution.&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%2Fzh3buzv8kr17hm83j2t8.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%2Fzh3buzv8kr17hm83j2t8.png" alt=" " width="800" height="494"&gt;&lt;/a&gt;&lt;/p&gt;

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

&lt;p&gt;DryRunBuddy is a privacy-first, zero-spoiler AI coach built for the Hacktoberfest 'Build for a Friend' challenge. It combines a vanilla web stack with Google's open-weight Gemma 2 model via Ollama to bring Socratic teaching directly to your local machine.&lt;/p&gt;

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

&lt;p&gt;DryRunBuddy is built on a deliberately lightweight, portable stack that requires zero backend infrastructure:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Core App:&lt;/strong&gt; 100% Vanilla HTML, JavaScript, and TailwindCSS (via CDN). It is essentially a single-page application (&lt;code&gt;index.html\&lt;/code&gt;) that can run from anywhere.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;AI Planning Engine:&lt;/strong&gt; The brain of the operation is &lt;strong&gt;Gemma 2 (2B)&lt;/strong&gt;, Google's open-weight model. The app communicates directly with a local Ollama server using REST API calls. &lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Prompt Engineering:&lt;/strong&gt; I crafted highly rigid system prompts to force Gemma to respond in strict JSON formats. Depending on the current stage (Socratic, Debug, Solution), Gemma is explicitly instructed to &lt;em&gt;never&lt;/em&gt; write full solution code unless the final stage is unlocked.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  How It Works Under The Hood
&lt;/h3&gt;

&lt;p&gt;Here is the agent's decision flow:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Input:&lt;/strong&gt; The user selects a problem (or pastes a custom one), chooses their language (Java/C++/Python), and inputs their intuition/code.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Context Assembly:&lt;/strong&gt; The browser packages the problem statement, user approach, and code into a strict system prompt.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Local Inference:&lt;/strong&gt; The payload is sent to &lt;code&gt;http://localhost:11434/api/generate\&lt;/code&gt; (Ollama running Gemma 2).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Structured JSON Parsing:&lt;/strong&gt; The UI parses Gemma's JSON output (handling edge-cases and Markdown formatting) to populate the coaching UI.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Fallback Safety:&lt;/strong&gt; If Ollama isn't running, the app gracefully falls back to an offline deterministic mode so the user can still practice the curated curriculum.&lt;/li&gt;
&lt;/ol&gt;

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

&lt;p&gt;Open innovation was absolutely critical to making this tool actually useful for my friend:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Absolute Privacy:&lt;/strong&gt; Interview prep involves pasting proprietary or private assessment questions. Running Gemma locally means zero data is ever sent to a corporate cloud. My friend's data stays exclusively on their machine.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Zero Cost:&lt;/strong&gt; Grinding DSA takes hundreds of hours. A closed API would cost money per token and add up fast. Running open-weight Gemma locally is 100% free forever.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Control &amp;amp; Speed:&lt;/strong&gt; Open models allowed me to pick a lightweight, extremely fast model (Gemma 2:2B) that runs flawlessly on a standard laptop with zero latency and no internet connection required.&lt;/li&gt;
&lt;/ol&gt;

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

&lt;p&gt;Building this was an incredible pair-programming experience with my AI agent! We worked together to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Write the PowerShell commands to automatically boot up Ollama with CORS and pull the &lt;code&gt;gemma2:2b\&lt;/code&gt; model.&lt;/li&gt;
&lt;li&gt;Hunt down a tricky Javascript JSON-parsing bug that was breaking our UI. The agent used terminal scripts to isolate the exact line and patch the bracket!&lt;/li&gt;
&lt;li&gt;Implement the "Custom Problem" mode and a context-aware "Quick Revision Notes" data structure cheat-sheet feature in under 20 minutes!&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Future Enhancements
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Voice-to-Text Coaching:&lt;/strong&gt; Allowing the user to speak their intuition out loud using the Web Speech API, mimicking a real interview setting.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Support for More Languages:&lt;/strong&gt; Expanding beyond Java, C++, and Python to support Go, Rust, and JavaScript.&lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;I am entering the following partner categories:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Best Use of Gemma:&lt;/strong&gt; DryRunBuddy uses Google's open-weight model, Gemma 2 (2B), as the exclusive AI reasoning engine to parse intuition, generate structured JSON Socratic feedback, and debug code locally.&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>devchallenge</category>
      <category>weekendchallenge</category>
      <category>hf26challenge</category>
      <category>opensource</category>
    </item>
  </channel>
</rss>
