<?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: Prashi Jain</title>
    <description>The latest articles on DEV Community by Prashi Jain (@prashi_jain).</description>
    <link>https://dev.to/prashi_jain</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%2F4177748%2Fcfbfd318-43f3-4447-851f-7d7d2923db25.png</url>
      <title>DEV Community: Prashi Jain</title>
      <link>https://dev.to/prashi_jain</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/prashi_jain"/>
    <language>en</language>
    <item>
      <title>Phantasm-Orbit: 3D NORAD Zombie Satellite Tracker, TabPFN Decay Forecaster &amp; Local Gemma 3:1b Digital Séance 🛰️👻</title>
      <dc:creator>Prashi Jain</dc:creator>
      <pubDate>Fri, 30 Oct 2026 11:36:06 +0000</pubDate>
      <link>https://dev.to/prashi_jain/phantasm-orbit-3d-norad-zombie-satellite-tracker-tabpfn-decay-forecaster-local-gemma-31b-3hj</link>
      <guid>https://dev.to/prashi_jain/phantasm-orbit-3d-norad-zombie-satellite-tracker-tabpfn-decay-forecaster-local-gemma-31b-3hj</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;p&gt;&lt;em&gt;🎯 Category Target: Best Use of TabPFN &amp;amp; Best Use of Gemma&lt;/em&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;"There are 36,500 uncommunicative corpses orbiting above your head at 28,000 km/h. Their chemical batteries ruptured decades ago. Yet tonight, as they cross Earth's shadow, their transponders are screaming on dead frequencies."&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  👻 What I Built: Ghosts in the Orbital Machine
&lt;/h2&gt;

&lt;p&gt;For the &lt;strong&gt;Ghost in the Machine&lt;/strong&gt; challenge, I wanted to build something where the "ghosts" aren't fictional—they are &lt;strong&gt;real aerospace hardware haunting Low Earth Orbit&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;In aerospace engineering, there is a chilling phenomenon known as a &lt;strong&gt;Zombie Satellite&lt;/strong&gt;: a derelict Cold-War spacecraft, nuclear-powered beacon, or collision fragment that has been dead for decades, yet suddenly wakes up and broadcasts a &lt;strong&gt;Phantom Carrier Signal&lt;/strong&gt; when solar radiation or geomagnetic eddy currents cross its fractured wiring.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Phantasm-Orbit&lt;/strong&gt; is a local-first &lt;strong&gt;3D WebGL Orbital Graveyard, TabPFN Anomaly Forecaster, and Digital Séance Command Center&lt;/strong&gt; that lets you track, diagnose, and converse with 5 real-world dead satellites from the official NORAD catalog:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Vanguard 1 (&lt;code&gt;#00005&lt;/code&gt; - Launched 1958):&lt;/strong&gt; Humanity's oldest artifact in space, silent since 1964, drifting until 2240 CE.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Envisat (&lt;code&gt;#27386&lt;/code&gt; - Launched 2002):&lt;/strong&gt; An 8.2-ton dead European flagship in the crowded 768 km belt—one shrapnel hit away from triggering a catastrophic Kessler Syndrome cascade.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Kosmos 2251 Fragment (&lt;code&gt;#34120&lt;/code&gt; - Launched 1993):&lt;/strong&gt; Razor-sharp titanium shrapnel spinning at 14.8 RPM from the first hypervelocity satellite collision in human history (11.7 km/s impact with Iridium 33).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Transit 5B-2 (&lt;code&gt;#00713&lt;/code&gt; - Launched 1963):&lt;/strong&gt; Powered by a Plutonium-238 SNAP-9A nuclear RTG core, still screaming rogue carrier tones on &lt;code&gt;136.650 MHz&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Telstar 1 (&lt;code&gt;#00315&lt;/code&gt; - Launched 1962):&lt;/strong&gt; Blinded and deafened in space by the United States' 1.4-megaton &lt;em&gt;Starfish Prime&lt;/em&gt; high-altitude nuclear EMP detonation.&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  📸 Live Demo &amp;amp; Screenshots
&lt;/h2&gt;

&lt;p&gt;🔗 &lt;strong&gt;Live Interactive Deployment:&lt;/strong&gt; &lt;a href="https://phantasm-orbit.vercel.app/" rel="noopener noreferrer"&gt;https://phantasm-orbit.vercel.app/&lt;/a&gt;&lt;br&gt;
💻 &lt;strong&gt;GitHub Repository:&lt;/strong&gt; &lt;a href="https://github.com/prashijain-ai/Phantasm-Orbit" rel="noopener noreferrer"&gt;https://github.com/prashijain-ai/Phantasm-Orbit&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Full 3D WebGL Orbital Command Center &amp;amp; TabPFN Decay Curve
&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%2Fxizqo3zgp9ev2te2ah05.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%2Fxizqo3zgp9ev2te2ah05.png" alt="Phantasm-Orbit 3D Command Center UI" width="800" height="520"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Real-Time Telemetry Anomaly Alert (&lt;code&gt;&amp;gt;80%&lt;/code&gt; Decay/Collision Risk Pulse)
&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%2F60r9z2afz9pfsccr9yj4.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%2F60r9z2afz9pfsccr9yj4.png" alt="Phantasm-Orbit 3D Command Center UI" width="800" height="520"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Digital Séance Terminal: Speaking to Kosmos 2251 via Local Gemma 3:1b
&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%2F56rc3cif158nfa6bjiyd.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%2F56rc3cif158nfa6bjiyd.png" alt="Phantasm-Orbit 3D Command Center UI" width="800" height="520"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Nuclear RTG Thermal Stress &amp;amp; Retrograde Orbit Tracking (&lt;code&gt;Transit 5B-2&lt;/code&gt;)
&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%2Fhoba1elauq83sqr2j1nl.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%2Fhoba1elauq83sqr2j1nl.png" alt="Phantasm-Orbit 3D Command Center UI" width="800" height="520"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  🧠 How It Works (Architecture &amp;amp; Open-Source AI Stack)
&lt;/h2&gt;

&lt;p&gt;I designed &lt;strong&gt;Phantasm-Orbit&lt;/strong&gt; as a &lt;strong&gt;100% local-first, zero-API-key system&lt;/strong&gt; so judges and developers can test every feature instantly in the browser without paywalls or &lt;code&gt;.env&lt;/code&gt; headaches:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;🌍 60 FPS Three.js WebGL Engine (&lt;code&gt;ThreeOrbitalView.tsx&lt;/code&gt;):&lt;/strong&gt; Renders a procedural wireframe Earth, atmospheric glow, Van Allen electromagnetic dipole flux lines, custom 3D satellite meshes, and 350 color-coded Kessler debris particles (&lt;code&gt;Target Satellite&lt;/code&gt;, &lt;code&gt;Dead Casing&lt;/code&gt;, &lt;code&gt;Rocket Fragment&lt;/code&gt;, &lt;code&gt;Critical Shrapnel&lt;/code&gt;). Includes 3 camera presets (&lt;code&gt;Track Sat&lt;/code&gt;, &lt;code&gt;Global Orbit&lt;/code&gt;, &lt;code&gt;Debris Vector&lt;/code&gt;), manual zoom controls, and a real-time 3D-to-2D targeting reticle.&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;📉 TabPFN Orbital Decay &amp;amp; Collision Forecaster ( TelemetrySidebar.tsx + app.py ):&lt;/strong&gt; Uses &lt;strong&gt;TabPFN&lt;/strong&gt; to evaluate NORAD TLE parameters for multi-decade burn-up projections with 95% confidence bounds. &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;How TabPFN Powers the Prediction Architecture:&lt;/strong&gt; Sparse tabular historical data is fed directly into &lt;em&gt;TabPFN&lt;/em&gt;. As a tabular foundation model, it evaluates non-linear degradation risks natively in milliseconds without a training loop or heavy GPU dependencies, enabling local runtime confidence intervals and automated HUD anomaly pulses when risk exceeds 80/100.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;💀 Neuro-Symbolic Digital Séance Medium (&lt;code&gt;SeanceTerminal.tsx&lt;/code&gt; + &lt;code&gt;server.ts&lt;/code&gt;):&lt;/strong&gt; Locks onto the satellite's historical RF frequency and prompts &lt;strong&gt;Local Ollama (&lt;code&gt;gemma3:1b&lt;/code&gt;)&lt;/strong&gt; with live orbital physics and corrupted hexadecimal memory registers (&lt;code&gt;0x7F00...&lt;/code&gt;) so the dead satellite responds in the first person. Includes a deterministic &lt;strong&gt;Spectral Lore Fallback Engine&lt;/strong&gt; for instant cloud hosting.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;🔊 Pure Web Audio API Horror Synthesizer (&lt;code&gt;audioSynthesizer.ts&lt;/code&gt;):&lt;/strong&gt; Zero external MP3 files. Synthesizes &lt;code&gt;52Hz/53.2Hz&lt;/code&gt; beating sub-bass vacuum drones, bandpass-filtered cosmic noise, Solfeggio séance chimes, and Doppler radar blips directly in the browser.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  🛠️ Key Engineering Challenges We Solved
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Readable Telemetry in a High-Density 3D HUD:&lt;/strong&gt; Balancing a 350-particle 3D Kessler debris cloud alongside Recharts confidence curves and a streaming AI terminal required designing a responsive 2-column split command deck with clear visual hierarchy, a 3-second judge explainer banner, and interactive camera presets (&lt;code&gt;Track Sat&lt;/code&gt;, &lt;code&gt;Global Orbit&lt;/code&gt;, &lt;code&gt;Debris Vector&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Zero-Friction Judge Accessibility:&lt;/strong&gt; Local LLM apps often fail in cloud previews when Ollama isn't running on the viewer's machine. By building a hybrid pipeline that seamlessly transitions between local &lt;code&gt;gemma3:1b&lt;/code&gt; inference and a rich, context-aware NORAD lore &amp;amp; hex-register fallback engine, the app delivers a 100% responsive experience both locally and in the cloud.&lt;/li&gt;
&lt;/ol&gt;




&lt;p&gt;&lt;em&gt;Built with love for aerospace physics, open-source AI, and cosmic horror! Try clicking *&lt;/em&gt;"ENGAGE AUDIO"&lt;strong&gt;, switching between **Envisat&lt;/strong&gt; and &lt;strong&gt;Kosmos 2251&lt;/strong&gt;, and invoking a &lt;strong&gt;Digital Séance&lt;/strong&gt;!* 🚀💀&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>hf26challenge</category>
      <category>hacktoberfest</category>
      <category>ai</category>
    </item>
    <item>
      <title>SponsorPulse 🚀 — As a Model &amp; AI Student, I Built a Local TabPFN + Gemma 3:1b Agent to Beat Lowball Brand Deals</title>
      <dc:creator>Prashi Jain</dc:creator>
      <pubDate>Thu, 15 Oct 2026 17:53:38 +0000</pubDate>
      <link>https://dev.to/prashi_jain/sponsorpulse-the-local-first-brand-deal-quant-negotiation-agent-tabpfn-gemma-31b-46gp</link>
      <guid>https://dev.to/prashi_jain/sponsorpulse-the-local-first-brand-deal-quant-negotiation-agent-tabpfn-gemma-31b-46gp</guid>
      <description>&lt;h3&gt;
  
  
  🎯 What is SponsorPulse?
&lt;/h3&gt;

&lt;p&gt;As a model, UGC creator, and Data Science &amp;amp; AI undergrad, I know firsthand how frustrating it is when beauty and fashion brands slide into your DMs with a $200 "all-in" lowball offer—while quietly sneaking 45 days of paid ad whitelisting and category exclusivity into the fine print.&lt;/p&gt;

&lt;p&gt;Most creators either leave thousands of dollars on the table or lose the deal by guessing a random counter-offer. For &lt;strong&gt;Hacktoberfest Week 2 ("Side Hustle")&lt;/strong&gt;, I built the exact tool I wished I had on my Mac: &lt;strong&gt;SponsorPulse&lt;/strong&gt;—a local-first quantitative deal desk and negotiation agent that prices usage rights mathematically and drafts hallucination-free counter-offers in seconds.&lt;/p&gt;

&lt;p&gt;When a brand reaches out with a lowball offer and a tricky contract (like demanding 30 days of paid ad whitelisting and 15 days of category exclusivity for a fraction of your true worth), creators usually guess their worth or accept it out of fear. &lt;strong&gt;SponsorPulse&lt;/strong&gt; uses &lt;strong&gt;TabPFN-3.5&lt;/strong&gt; to compute exact 10th–90th percentile fair market rate cards and local &lt;strong&gt;Gemma 3:1b&lt;/strong&gt; to draft psychologically grounded, bulletproof counter-offer emails.&lt;/p&gt;

&lt;h3&gt;
  
  
  🧠 The Architecture: Why "Strict Separation" Wins
&lt;/h3&gt;

&lt;p&gt;Small LLMs are notoriously bad at math. If you ask an LLM to price a brand deal, it will hallucinate random numbers. &lt;/p&gt;

&lt;p&gt;To solve this, SponsorPulse implements a &lt;strong&gt;Deterministic Neuro-Symbolic Pipeline&lt;/strong&gt;:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;TabPFN / Quantile Engine:&lt;/strong&gt; Ingests historical deal logs (views, engagement, usage rights, whitelisting, exclusivity) to output precise probabilistic valuation bands (P10 walk-away floor, P50 median target, P90 enterprise stretch).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Prior Labs Counterfactual Loop:&lt;/strong&gt; Runs 5 parallel "What-If" queries to show the creator exactly how much cash is unlocked by tweaking contract terms.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Local Gemma 3:1b Agent:&lt;/strong&gt; Runs locally via Ollama on Apple Silicon (blazing fast at 120+ tokens/sec).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Numerical Firewall:&lt;/strong&gt; An AST/Regex verification layer inspects Gemma's output in real time to physically intercept any hallucinated numbers and enforce TabPFN's exact verified figures.&lt;/li&gt;
&lt;/ol&gt;




&lt;h3&gt;
  
  
  📸 App Interface Preview
&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%2Fmkorzppovp1218iie702.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%2Fmkorzppovp1218iie702.png" alt=" " width="800" height="452"&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%2Fwd46o2t5om1nyghvmfv6.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%2Fwd46o2t5om1nyghvmfv6.png" alt=" " width="799" height="456"&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%2Ftm80buufwbnf6n1tst4f.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%2Ftm80buufwbnf6n1tst4f.png" alt=" " width="800" height="352"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h3&gt;
  
  
  🛡️ Feature Highlights
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Inbound Brand Audit:&lt;/strong&gt; Paste any brand email; SponsorPulse instantly scans for predatory clauses and calculates the underpayment gap.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Interactive Deal Levers:&lt;/strong&gt; Adjust views, engagement rates, and ad usage sliders in real time with instant probabilistic curve updates.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Sentry Agent Tracing:&lt;/strong&gt; Full OpenTelemetry span waterfall tracking execution latency across TabPFN inference, counterfactual mutations, and Gemma synthesis.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;1-Click Judge Sandbox:&lt;/strong&gt; Deployed with an in-browser fallback engine so judges can test sliders and probability curves instantly even without Ollama installed.&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  🚀 Try It Live &amp;amp; View Source Code
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;GitHub Repository:&lt;/strong&gt; &lt;a href="https://github.com/prashijain-ai/SponsorPulse-/" rel="noopener noreferrer"&gt;https://github.com/prashijain-ai/SponsorPulse-/&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Live Render Cloud App:&lt;/strong&gt; &lt;a href="https://sponsorpulse-qlu1.onrender.com/" rel="noopener noreferrer"&gt;https://sponsorpulse-qlu1.onrender.com/&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Live GitHub Pages (Judge Sandbox):&lt;/strong&gt; &lt;a href="https://prashijain-ai.github.io/SponsorPulse-/" rel="noopener noreferrer"&gt;https://prashijain-ai.github.io/SponsorPulse-/&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;em&gt;Built with passion for Hacktoberfest 2026. Let's secure that win!&lt;/em&gt; 🏆&lt;/p&gt;

</description>
      <category>hf26challenge</category>
      <category>hacktoberfest</category>
      <category>ai</category>
      <category>devchallenge</category>
    </item>
    <item>
      <title>Touch grass, but when? Mauka predicts the good hours of a smoggy day</title>
      <dc:creator>Prashi Jain</dc:creator>
      <pubDate>Sun, 11 Oct 2026 22:03:29 +0000</pubDate>
      <link>https://dev.to/prashi_jain/mauka-when-is-it-actually-okay-to-go-outside-tabpfn-gemma-running-on-my-laptop-3al7</link>
      <guid>https://dev.to/prashi_jain/mauka-when-is-it-actually-okay-to-go-outside-tabpfn-gemma-running-on-my-laptop-3al7</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;p&gt;If you live in a hot, smoggy Indian city, "just go outside for a bit" is not simple advice. By afternoon it is too hot. In winter the air is bad all day. In the monsoon it rains. The good hours exist, but they are short, and they move around from day to day.&lt;/p&gt;

&lt;p&gt;So I built &lt;strong&gt;Mauka&lt;/strong&gt; (मौका, Hindi for "chance" or "moment"): a small app that tells you which hours of tomorrow are most likely to be good for being outside.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;In short&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;It predicts, for every hour from 05:00 to 21:00, the chance that it will be a good hour tomorrow.&lt;/li&gt;
&lt;li&gt;It uses TabPFN on open weather and air-quality data, and a small Gemma model that runs on my own laptop writes the nudge in English, Hinglish or Hindi.&lt;/li&gt;
&lt;li&gt;Nothing personal leaves my machine, and there is no API key and no bill.&lt;/li&gt;
&lt;li&gt;I tested it in four cities. The learned models clearly beat simple baselines, and TabPFN was best, but only slightly.&lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;Mauka shows tomorrow as a strip of hours. Taller, bluer bars mean a better chance. Under the strip it lists the best windows, and below that is a short nudge, for example "Your best window tomorrow is 05:00 to 09:00."&lt;/p&gt;

&lt;p&gt;A "good hour" means all three of these are true: US AQI of 100 or less, a "feels like" temperature between 8 and 35 °C, and no real rain. That is my own simple definition, not medical advice, and it is one line to change in the config file.&lt;/p&gt;

&lt;p&gt;The screen is the shortest part of the experience on purpose. You open it, read one line, and go.&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%2Fk332cywbijs2ymy8eecl.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%2Fk332cywbijs2ymy8eecl.png" alt=" " width="800" height="520"&gt;&lt;/a&gt;&lt;/p&gt;

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

&lt;p&gt;Demo video: &lt;a href="https://drive.google.com/file/d/1pIdhJ3tF2_xFCqjgYMPtJ98yt44-xSIo/view?usp=sharing" rel="noopener noreferrer"&gt;https://drive.google.com/file/d/1pIdhJ3tF2_xFCqjgYMPtJ98yt44-xSIo/view?usp=sharing&lt;/a&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/prashijain-ai" rel="noopener noreferrer"&gt;
        prashijain-ai
      &lt;/a&gt; / &lt;a href="https://github.com/prashijain-ai/mauka-outdoor-windows" rel="noopener noreferrer"&gt;
        mauka-outdoor-windows
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      Find your moment outside: a local-first AI guide to the clean-air hours of a hot, hazy city (TabPFN + Gemma)
    &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;Mauka (मौका) 🍃&lt;/h1&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Find your moment outside. A local-first AI guide to the clean-air hours of a hot, hazy city, built on open data and open models that run on your own laptop.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;a rel="noopener noreferrer" href="https://github.com/prashijain-ai/mauka-outdoor-windows/screenshot.png"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fraw.githubusercontent.com%2Fprashijain-ai%2Fmauka-outdoor-windows%2FHEAD%2Fscreenshot.png" alt="Mauka screenshot"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Started:&lt;/strong&gt; October 10, 2026, for the Hacktoberfest 2026 DEV Challenge (Week 1: Touch Grass).&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;What it does&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;In many Indian cities, the good hours for being outside are short and change every day. Mauka predicts, for each waking hour of tomorrow (05:00 to 21:00), the chance that it will be a good hour, then shows the best windows and a short nudge.&lt;/p&gt;
&lt;p&gt;A "good hour" means all of these are true:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;US AQI of 100 or less&lt;/li&gt;
&lt;li&gt;"Feels like" temperature between 8 and 35 °C&lt;/li&gt;
&lt;li&gt;No real rain (0.5 mm or less)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;These limits are my own simple definition, not medical advice. You can change them in &lt;code&gt;mauka/config.py&lt;/code&gt;.&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;How it works&lt;/h2&gt;
&lt;/div&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Data:&lt;/strong&gt; hourly weather (ERA5) and…&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/prashijain-ai/mauka-outdoor-windows" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


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

&lt;p&gt;&lt;strong&gt;The data.&lt;/strong&gt; Hourly weather (ERA5) and air quality (Copernicus CAMS) history from the free &lt;a href="https://open-meteo.com" rel="noopener noreferrer"&gt;Open-Meteo&lt;/a&gt; API, saved locally as CSV.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The task.&lt;/strong&gt; Each row is one hour of one day. From the conditions at that hour plus recent history (yesterday's and 3-day average air quality, the day's peak temperature), the model predicts whether the same hour tomorrow will be good.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The models.&lt;/strong&gt; &lt;a href="https://github.com/PriorLabs/TabPFN" rel="noopener noreferrer"&gt;TabPFN&lt;/a&gt; is the main model. It is a pretrained model for tabular data, which suits this problem because the dataset is small enough for it. To check whether it actually helps, I compared it with four simple baselines: persistence ("tomorrow equals today"), climatology (the historical rate for that month and hour), logistic regression and gradient-boosted trees.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The test.&lt;/strong&gt; I split by time, not at random: the last 25% of days (2025-09-18 to 2026-10-02) are the test set, with a one-day gap so no training answer overlaps a test input. I ran four cities. Each cell is AUC / Brier score (higher AUC is better, lower Brier is better):&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;City&lt;/th&gt;
&lt;th&gt;Good hours&lt;/th&gt;
&lt;th&gt;Persistence&lt;/th&gt;
&lt;th&gt;Gradient boosting&lt;/th&gt;
&lt;th&gt;TabPFN&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Bengaluru&lt;/td&gt;
&lt;td&gt;69%&lt;/td&gt;
&lt;td&gt;0.749 / 0.208&lt;/td&gt;
&lt;td&gt;0.870 / 0.130&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;0.894 / 0.115&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Chennai&lt;/td&gt;
&lt;td&gt;40%&lt;/td&gt;
&lt;td&gt;0.776 / 0.207&lt;/td&gt;
&lt;td&gt;0.896 / 0.129&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;0.908 / 0.122&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Mumbai&lt;/td&gt;
&lt;td&gt;34%&lt;/td&gt;
&lt;td&gt;0.792 / 0.181&lt;/td&gt;
&lt;td&gt;0.901 / 0.122&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;0.914 / 0.111&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Udaipur&lt;/td&gt;
&lt;td&gt;71%&lt;/td&gt;
&lt;td&gt;0.800 / 0.160&lt;/td&gt;
&lt;td&gt;0.902 / 0.106&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;0.915 / 0.102&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The full table (accuracy, F1 and all five models) is in &lt;code&gt;results/summary.md&lt;/code&gt; in the repo.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What I take from it.&lt;/strong&gt; TabPFN had the best Brier score and AUC in all four cities, and every learned model clearly beat persistence and climatology. But TabPFN's lead over gradient boosting is small: Brier lower by 0.004 to 0.015, AUC higher by 0.012 to 0.024. This is one split and one run per city, with no confidence intervals, so I treat the gaps as suggestive, not proven. A few details so the comparison is fair:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;TabPFN trained on a random 4,000-row sample, while the baselines used all training rows (for example 19,346 in Bengaluru).&lt;/li&gt;
&lt;li&gt;The test set is a 3,000-row sample from the last quarter of the data.&lt;/li&gt;
&lt;li&gt;TabPFN took about 45 seconds per run, against under a second for gradient boosting.&lt;/li&gt;
&lt;li&gt;Accuracy and F1 are less useful than Brier and AUC here, because the share of good hours changes so much between cities. In Udaipur, repeating today's answer already scores 0.834 accuracy.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;The nudge, and what went wrong first.&lt;/strong&gt; A small Gemma (&lt;code&gt;gemma3:1b&lt;/code&gt;) running locally through Ollama writes the message. My first version let it see weather numbers, and it started making things up: "the sun is shining", "boost your mood", and it said "today" about tomorrow's forecast. None of that was in my data.&lt;/p&gt;

&lt;p&gt;The fix had two parts. I gave the model only the window times and the chance, and I added a check: the text must contain the exact best-window times and avoid a list of invented claims. If it fails, the app retries once and then falls back to a plain template. The app always shows which one wrote the text. Hindi from a 1B model is readable but generic.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Limits.&lt;/strong&gt; The data is gridded (ERA5 and CAMS), not street-level sensors. Predictions use archived "today" values, while live use mixes observations and forecasts for the rest of today. The thresholds are a simple idea of "good", and results will differ by city and season. I built Mauka with the help of an AI assistant (Claude), then ran, tested and reviewed it myself, and the repo has 9 tests.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Privacy by default.&lt;/strong&gt; The models run on my laptop. The only network calls are public weather and air-quality requests. A tool like this could one day use personal habits or health information, and that should not have to go to a server I don't control.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No key and no bill.&lt;/strong&gt; After the one-time download, TabPFN and Gemma run on a normal laptop with no API key and no per-call cost.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Inspectable.&lt;/strong&gt; The data, the thresholds and the evaluation are all visible, so anyone can check the claims or change what "good" means for their own needs, such as a stricter air-quality limit for someone with asthma.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Swappable.&lt;/strong&gt; Changing the Gemma model is one setting, and adding a city is one line.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It was not all better than a closed model. A 1B-parameter model writes plain text and needed guardrails, and my first version invented facts. TabPFN's weights are open but come with Prior Labs' license terms, which I accepted, so check them before any commercial use. Fetching fresh weather still needs the internet, even though the models run on-device.&lt;/p&gt;

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

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Strong baselines matter.&lt;/strong&gt; Persistence alone gets surprisingly far, so a model has to beat it clearly to be worth using.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Small models need guardrails.&lt;/strong&gt; Checking the output against the data was more useful than a cleverer prompt.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;An honest small win is fine.&lt;/strong&gt; TabPFN was best everywhere I tested, and I would rather report a small, consistent edge than oversell it.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Next:&lt;/strong&gt; more cities, user-set thresholds, and a version that learns from your own outdoor log.&lt;/p&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; TabPFN forecasts, from historical weather and air-quality data, which hours of tomorrow will be good.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Best Use of Gemma:&lt;/strong&gt; Gemma runs locally and writes the nudges in English, Hinglish and Hindi.&lt;/li&gt;
&lt;/ul&gt;

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