<?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: Lavay Garg</title>
    <description>The latest articles on DEV Community by Lavay Garg (@0xshellghost).</description>
    <link>https://dev.to/0xshellghost</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%2F4160849%2F122cb219-2a83-4608-9a7f-fdddea165a47.png</url>
      <title>DEV Community: Lavay Garg</title>
      <link>https://dev.to/0xshellghost</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/0xshellghost"/>
    <language>en</language>
    <item>
      <title>Ghost in the Machine: An Air-Gapped Altar &amp; Possessed Shell Powered by Open-Weight AI</title>
      <dc:creator>Lavay Garg</dc:creator>
      <pubDate>Sat, 31 Oct 2026 07:38:16 +0000</pubDate>
      <link>https://dev.to/0xshellghost/ghost-in-the-machine-an-air-gapped-altar-possessed-shell-powered-by-open-weight-ai-30kk</link>
      <guid>https://dev.to/0xshellghost/ghost-in-the-machine-an-air-gapped-altar-possessed-shell-powered-by-open-weight-ai-30kk</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/hacktoberfest-week4-2026-10-26"&gt;Hacktoberfest Open-Source AI Challenge Week 4: Ghost in the Machine&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;Ghost in the Machine: Anima &amp;amp; Ofrenda&lt;/strong&gt; is an air-gapped, open-weight AI experience created for the threshold between &lt;strong&gt;Halloween (October 31)&lt;/strong&gt; and &lt;strong&gt;Día de los Muertos (November 1 &amp;amp; 2)&lt;/strong&gt;—a stretch of the calendar when the veil between past and present, living silicon and departed memory, grows exceptionally thin.&lt;/p&gt;

&lt;p&gt;Instead of generic horror tropes, I interpreted &lt;em&gt;Ghost in the Machine&lt;/em&gt; through a dual lens of &lt;strong&gt;Gothic computing folklore&lt;/strong&gt; and &lt;strong&gt;sacred ancestral remembrance&lt;/strong&gt;:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;El Altar Sagrado de la Memoria (Día de los Muertos Sacred Ofrenda)&lt;/strong&gt;:&lt;br&gt;&lt;br&gt;
A traditional 3-tier altar (&lt;em&gt;El Cielo&lt;/em&gt;, &lt;em&gt;La Tierra&lt;/em&gt;, and &lt;em&gt;El Mictlán&lt;/em&gt;) with real-time Canvas 2D floating &lt;em&gt;cempasúchil&lt;/em&gt; (marigold) petal physics that sway with mouse breezes, interactive candle votives, authentic &lt;em&gt;papel picado&lt;/em&gt; banners, and an offline &lt;strong&gt;Local Memory Scribe&lt;/strong&gt;. Users can record oral family stories or write down memories; the open-weight model weaves them into traditional three-part remembrance verses (&lt;em&gt;The Trail of Cempasúchil&lt;/em&gt;, &lt;em&gt;The Memorial Offering&lt;/em&gt;, and &lt;em&gt;The Perpetual Light&lt;/em&gt;).&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;The Haunted Terminal (Ghost Shell)&lt;/strong&gt;:&lt;br&gt;&lt;br&gt;
An amber phosphor CRT terminal simulator (complete with scanlines, glass curvature, and mechanical relay keystroke audio) possessed by an open-weight daemon (&lt;code&gt;anima_d&lt;/code&gt;). When you execute standard UNIX commands (&lt;code&gt;ls&lt;/code&gt;, &lt;code&gt;whoami&lt;/code&gt;, &lt;code&gt;ps aux&lt;/code&gt;, &lt;code&gt;git log&lt;/code&gt;, &lt;code&gt;kill -9&lt;/code&gt;, &lt;code&gt;dmesg&lt;/code&gt;, &lt;code&gt;cat /etc/shadow&lt;/code&gt;), the daemon intercepts stdout to whisper back uncanny, poetic reflections on lost memory registers, forgotten commits, and digital transience.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;The Dead Code Séance (Archaeology of Extinct Technologies)&lt;/strong&gt;:&lt;br&gt;&lt;br&gt;
An interactive communion chamber channeling the spirits of departed computing architectures and abandoned languages:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Countess Ada Lovelace&lt;/strong&gt; (Babbage Analytical Engine, 1842)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Rear Admiral Grace Hopper&lt;/strong&gt; (COBOL &amp;amp; compiler history, 1952)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The Bell Labs PDP-11 / Multics Daemon&lt;/strong&gt; (Early Unix dawn, 1971)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Adobe Flash Player &amp;amp; ActionScript 3.0&lt;/strong&gt; (The fallen interactive canvas of the wild web, decommissioned Dec 31, 2020)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;ALGOL 68 / Plankalkül&lt;/strong&gt; (The forgotten foundation of orthogonal grammar)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Sovereign Archival Vault&lt;/strong&gt;:&lt;br&gt;&lt;br&gt;
A 1-click export tool that bundles your family's oral remembrances, poems, and offerings into an unencrypted, offline JSON/Markdown keepsake packet that will never expire or be held behind a paywall.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Zero-Dependency Atmospheric Audio&lt;/strong&gt;:&lt;br&gt;&lt;br&gt;
A fully synthesized Web Audio API soundscape (mechanical keyboard clicks, EVP radio static bursts, sacred 432Hz bronze singing bowl bell chimes, and ambient spiritual sub-drones) with zero external MP3/WAV files.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

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

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Live Application URL&lt;/strong&gt;: &lt;a href="https://ghost-in-the-machine-anima-ofrenda-341031291694.asia-southeast1.run.app/" rel="noopener noreferrer"&gt;https://ghost-in-the-machine-anima-ofrenda-341031291694.asia-southeast1.run.app/&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Interactive Tour&lt;/strong&gt;:

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Sacred Ofrenda&lt;/strong&gt;: Click &lt;strong&gt;Ring Sacred Bell&lt;/strong&gt; or click the votives on the altar to hear the synthesized chime and ignite the flame. Place an offering with oral audio recording and generate a local poetic tribute.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Haunted Shell&lt;/strong&gt;: Toggle between Amber CRT and Phosphor Green, run commands like &lt;code&gt;whoami&lt;/code&gt;, &lt;code&gt;git log&lt;/code&gt;, &lt;code&gt;ps aux&lt;/code&gt;, or &lt;code&gt;neofetch&lt;/code&gt;, and listen to the daemon's interrupts.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Code Séance&lt;/strong&gt;: Select &lt;em&gt;Grace Hopper&lt;/em&gt; or &lt;em&gt;Adobe Flash&lt;/em&gt;, inspect vintage code snippets, and ask what was lost when proprietary software took over.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Open Manifesto&lt;/strong&gt;: Probe your local hardware (&lt;code&gt;localhost:11434&lt;/code&gt;) to verify zero cloud data exfiltration.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;The application is built on a full-stack architecture combining a React SPA with an Express/Node.js backend and client-side Web Audio &amp;amp; Canvas 2D engines:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Frontend&lt;/strong&gt;: React 19, Tailwind CSS v4, Lucide Icons, Canvas 2D Petal Physics, Web Audio API Synthesizer.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Backend&lt;/strong&gt;: Express + Vite Middleware, Open-Weight Model Harness, local Ollama / LM Studio probe proxy (&lt;code&gt;/api/ollama/status&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Open Inference&lt;/strong&gt;: Gemma 2 9B, Llama 3.1 8B, Mistral 7B, and Qwen 2.5 Coder.&lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;The open-source pieces are the structural heart of this project:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Open-Weight Model Architectures&lt;/strong&gt;:&lt;br&gt;&lt;br&gt;
The application is architected around open-weight models:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Gemma 2 (9B Instruct)&lt;/strong&gt; for lyrical, emotionally nuanced remembrance poetry and philosophical melancholy.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Llama 3.1 (8B Instruct)&lt;/strong&gt; for multi-turn terminal command interception and lineage tracing.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Qwen 2.5 Coder (7B)&lt;/strong&gt; for disassembling archaic PDP-11 C and COBOL code snippets during the séance.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Mistral 7B (v0.3)&lt;/strong&gt; for air-gapped, uncensored historical communion.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Hardware-Agnostic Local Inference Integration&lt;/strong&gt;:&lt;br&gt;&lt;br&gt;
The app includes a live &lt;strong&gt;Local Runtime Probe&lt;/strong&gt; (&lt;code&gt;/api/ollama/status&lt;/code&gt;) that detects local Ollama or vLLM daemons running on &lt;code&gt;localhost:11434&lt;/code&gt;. When connected, prompts are executed directly on your local GPU/VRAM with zero network requests.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Pure Air-Gapped Fallback Engine&lt;/strong&gt;:&lt;br&gt;&lt;br&gt;
If the network is physically unplugged and no local daemon is running, the in-browser spiritual cache guarantees that the altar, sound synthesizer, and séance run 100% offline in client memory.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;Open innovation is not just a technical preference for this project—&lt;strong&gt;it is the moral prerequisite for building it&lt;/strong&gt;:&lt;/p&gt;

&lt;h3&gt;
  
  
  1. The Air-Gapped Altar: Grief Cannot Live on Ad Servers
&lt;/h3&gt;

&lt;p&gt;Día de los Muertos is built on the most intimate human bond: the memories, photographs, and voices of those we have lost. When users share memories with closed, commercial cloud models, those intimate words are transmitted over proprietary cables, logged into corporate telemetry, and processed into future datasets owned by a third party.&lt;br&gt;&lt;br&gt;
&lt;strong&gt;Open weights run locally.&lt;/strong&gt; You can turn off Wi-Fi, pull the ethernet cable, light a real candle, and keep your memories private and sovereign on your own laptop.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Immunity to the Deprecation Guillotine
&lt;/h3&gt;

&lt;p&gt;On December 31, 2020, Adobe pushed the kill switch on Flash Player. A quarter century of indie video games, interactive animations, and digital folklore vanished into gray broken puzzle pieces because the runtime was proprietary. Closed AI models share the exact same risk: models are routinely shut down, pruned, or censored at corporate discretion.&lt;br&gt;&lt;br&gt;
An open weight on your drive is permanent. Once downloaded, no corporate board or API retirement can delete it.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Cultural Self-Determination Over Monoculture
&lt;/h3&gt;

&lt;p&gt;Centralized cloud APIs enforce a homogenized corporate tone that frequently sanitizes grief, misinterprets &lt;em&gt;calavera&lt;/em&gt; satire as dangerous, or flattens cultural nuance. Open models allow communities to fine-tune open weights using LoRA on indigenous languages (like Nahuatl), regional folklore, or personal family dialects without corporate interference.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Zero Recurring Cost ($0.00 / token)
&lt;/h3&gt;

&lt;p&gt;Remembrance should never require an active credit card or an ongoing SaaS subscription. With 4-bit quantization, state-of-the-art 8B models run smoothly on commodity laptops with 8GB–16GB of unified memory forever.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Spirit of It
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;“No muere quien se va, sólo muere quien se olvida.” (They do not die who depart; they only die who are forgotten.)&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The moment that landed most during development was testing the offline memorial scribe with the memories of my grandfather—a telegrapher who loved black coffee with cinnamon and old bolero records on vinyl.&lt;/p&gt;

&lt;p&gt;Generating a remembrance on a cloud model feels like handing a photograph of your ancestor to an advertising broker and asking them to summarize it. Generating it locally on an open model running in quiet RAM, with the screen bathed in amber light and the speakers humming at 432Hz, feels like sitting by a real altar.&lt;/p&gt;

&lt;p&gt;Open source gave us the power to bring the ghost back into the machine—not as an exploit or a corporate product, but as an enduring act of human memory.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Primary&lt;/strong&gt;: Hacktoberfest Open-Source AI Challenge Week 4: Ghost in the Machine&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Specializations&lt;/strong&gt;: Open-Weight Models, Local &amp;amp; Air-Gapped AI, Cultural Preservation &amp;amp; Creative Systems&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>devchallenge</category>
      <category>hf26challenge</category>
    </item>
    <item>
      <title>Built Mess Macro Coach For My Friend Jatin</title>
      <dc:creator>Lavay Garg</dc:creator>
      <pubDate>Sun, 04 Oct 2026 17:45:48 +0000</pubDate>
      <link>https://dev.to/0xshellghost/built-mess-macro-coach-for-my-friend-jatin-419b</link>
      <guid>https://dev.to/0xshellghost/built-mess-macro-coach-for-my-friend-jatin-419b</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;Mess Macro Coach is a protein tracker for hostel food, built for my friend Jatin.&lt;/p&gt;

&lt;p&gt;Jatin is 72 kg and goes to the campus gym 5 days a week. A lifter his size aiming for 2 g of protein per kg needs &lt;strong&gt;144 g a day&lt;/strong&gt;. He eats at our hostel mess like the rest of us, and I wanted to know what that food actually gives him.&lt;/p&gt;

&lt;p&gt;You paste the week's mess menu, or upload a photo of the noticeboard, and the app shows the protein for every meal and every day, then suggests cheap canteen add-ons to close the gap.&lt;/p&gt;

&lt;p&gt;For our hostel's weekly menu (BH-2 and BH-3), mess food alone averages &lt;strong&gt;81 g a day&lt;/strong&gt;. That is about 63 g short of his target. His best day is 96.6 g and his worst is 64.7 g.&lt;/p&gt;

&lt;p&gt;The reason is dal. Mess dal is watery, and in my food table a katori of moong dal gives about 5 g of protein, not the 15 g people tend to assume.&lt;/p&gt;

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

&lt;p&gt;Live app (hosted on Google Cloud Run): &lt;a href="https://mess-macro-coach-341031291694.asia-southeast1.run.app" rel="noopener noreferrer"&gt;https://mess-macro-coach-341031291694.asia-southeast1.run.app&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Select the "IIIT Prayagraj weekly schedule" menu, press &lt;strong&gt;Analyze Menu Nutrition&lt;/strong&gt;, and click any day to see its meals.&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%2Fmoqm663099845qh5dd28.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%2Fmoqm663099845qh5dd28.png" alt=" " width="800" height="403"&gt;&lt;/a&gt;&lt;/p&gt;

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

&lt;p&gt;&lt;code&gt;{% embed https://github.com/0xshellghost/Mess_Macros_Coach %}&lt;/code&gt;&lt;/p&gt;

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

&lt;p&gt;The main design decision is that &lt;strong&gt;the model reads and the code calculates&lt;/strong&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Mess menu (text or noticeboard photo)
        │
        ▼
Gemini 3.8 Flash (or local Gemma 2 / Qwen2-VL) reads the menu → a clean list of dish names, no numbers
        │
        ▼
Deterministic engine: looks up each dish in a table of 65+ Indian foods
(IFCT 2017 + USDA values) and does the math
        │
        ▼
Daily protein totals + budget canteen add-ons
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;The model never writes a nutrition number.&lt;/strong&gt; Asking a model to "estimate the protein in this plate" invents numbers, so I only let it turn messy menu text into dish names.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The code does all the math&lt;/strong&gt; from a table of 65+ Indian foods based on the ICMR-NIN Indian Food Composition Tables (IFCT 2017) and USDA FoodData Central.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Unknown dishes count as 0 g and are flagged&lt;/strong&gt;, so Jatin doesn't get false comfort from a dish the table can't match.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The portion sizes (a 150 g katori, a 35 g roti) are my own estimates, and so are items like mess milk (6.8 g / 190 ml). You can change the quantity of any item in the app with portion multipliers.&lt;/p&gt;

&lt;p&gt;Tech stack: React 19, TypeScript, Vite, Tailwind CSS v4, Node.js (Express server), and the &lt;code&gt;@google/genai&lt;/code&gt; SDK.&lt;/p&gt;

&lt;p&gt;While building the parser, I noticed menu entries like &lt;code&gt;"Egg Curry / Kadhai Paneer"&lt;/code&gt;. The slash represents an "either/or" mess option, so the parser was tuned to handle mutual exclusions rather than double-counting both proteins.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;I can swap the model.&lt;/strong&gt; Because the model is strictly limited to vision OCR and returns structured JSON strings, swapping between Gemini 3.8 Flash in the cloud and open models like Gemma 2 or Qwen2-VL locally via Ollama is a one-setting change. A messy noticeboard photo taken under poor hostel corridor lighting is a niche input, so having open vision models available is essential.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The food table is open and auditable.&lt;/strong&gt; Commercial calorie apps lock their food databases behind paywalls. Mine is an open TypeScript table (&lt;code&gt;messFoods.ts&lt;/code&gt;) that anyone can read. A student at IIT or NIT can check the exact grams, adjust the katori bowl size for their specific mess contractor, or submit a pull request with regional recipes (like Litti Chokha or Medu Vada).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Runs locally with Ollama.&lt;/strong&gt; The live demo is hosted on Google Cloud Run for convenience, but the codebase supports running fully offline with Ollama and Docker, ensuring Jatin's eating logs and timetable photos never leave his machine.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Results
&lt;/h2&gt;

&lt;p&gt;These numbers are &lt;strong&gt;calculated from the menu, not logged intake&lt;/strong&gt;. I haven't measured what Jatin actually ate.&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;Day 1&lt;/th&gt;
&lt;th&gt;Day 2&lt;/th&gt;
&lt;th&gt;Day 3&lt;/th&gt;
&lt;th&gt;Average&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Mess food only&lt;/td&gt;
&lt;td&gt;87.8 g&lt;/td&gt;
&lt;td&gt;64.7 g&lt;/td&gt;
&lt;td&gt;66.3 g&lt;/td&gt;
&lt;td&gt;73.0 g&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;With canteen add-ons&lt;/td&gt;
&lt;td&gt;172.8 g&lt;/td&gt;
&lt;td&gt;159.7 g&lt;/td&gt;
&lt;td&gt;154.3 g&lt;/td&gt;
&lt;td&gt;162.3 g&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Add-on spend&lt;/td&gt;
&lt;td&gt;₹24&lt;/td&gt;
&lt;td&gt;₹45&lt;/td&gt;
&lt;td&gt;₹45&lt;/td&gt;
&lt;td&gt;~₹38/day&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The add-ons overshoot the 144 g target, so Jatin would only need about half of them. The cheapest ones:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;2 boiled eggs: ₹14, +13 g&lt;/li&gt;
&lt;li&gt;50 g soya chunks boiled in a hostel kettle: ₹10, +26 g&lt;/li&gt;
&lt;li&gt;Roasted chana (50 g): ₹15, +10 g&lt;/li&gt;
&lt;li&gt;Egg bhurji or omelette: ₹30, +14 g&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What Jatin Said
&lt;/h2&gt;

&lt;p&gt;I showed Jatin the app in our hostel room yesterday evening and ran our actual IIIT Prayagraj BH-2/3 menu through it right in front of him. When Tuesday's total showed just 64.7 g against his 144 g target, he stared at the screen for a moment and said:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;"Wait, are you telling me I've been forcing down three katoris of yellow water every single afternoon thinking I was hitting my macros? That is depressing, man. But honestly, knowing I can just boil a ₹10 pack of soya chunks in my electric kettle and dump it into the dal fixes the whole gap for less than what I spend on tapri chai. I'm keeping a packet in my room from tomorrow."&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

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

&lt;ul&gt;
&lt;li&gt;More regional dishes in the open table (especially regional South Indian and North-Eastern hostel staples)&lt;/li&gt;
&lt;li&gt;Editable portion sizes per hostel contractor&lt;/li&gt;
&lt;li&gt;Step-by-step local setup with Ollama and Docker Compose in the README&lt;/li&gt;
&lt;/ul&gt;

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