<?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: Joe George</title>
    <description>The latest articles on DEV Community by Joe George (@joegeorge022).</description>
    <link>https://dev.to/joegeorge022</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%2F2667874%2Ff47bbd67-1198-47d5-9391-e6ae897d856d.jpg</url>
      <title>DEV Community: Joe George</title>
      <link>https://dev.to/joegeorge022</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/joegeorge022"/>
    <language>en</language>
    <item>
      <title>Ofrenda: a ghost that only knows what you tell it</title>
      <dc:creator>Joe George</dc:creator>
      <pubDate>Tue, 27 Oct 2026 10:17:19 +0000</pubDate>
      <link>https://dev.to/joegeorge022/ofrenda-a-ghost-that-only-knows-what-you-tell-it-2k4k</link>
      <guid>https://dev.to/joegeorge022/ofrenda-a-ghost-that-only-knows-what-you-tell-it-2k4k</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;Ofrenda&lt;/strong&gt; is a local-first memory altar for Día de los Muertos. You light a candle for someone you miss and write down stories about them: who made the tamales, which song came on while the masa rested. A small open-weight model running on your own computer can then echo those stories back in a chat, or write a letter or a &lt;em&gt;calaverita&lt;/em&gt; (a short rhyming poem) for the altar.&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%2Fraw.githubusercontent.com%2FYOUR-USERNAME%2Fofrenda%2Fmain%2Fdocs%2Faltar.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%2Fraw.githubusercontent.com%2FYOUR-USERNAME%2Fofrenda%2Fmain%2Fdocs%2Faltar.png" alt="The altar: papel picado, candles, a marigold garland, and offerings for Abuela Rosa" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I read "ghost in the machine" literally and carefully. A ghost that &lt;em&gt;sounds&lt;/em&gt; like your grandmother and quietly invents a husband, a hometown or a favorite color is worse than no ghost at all, because it overwrites the real memory with a plausible fake one. So Ofrenda has exactly one rule: &lt;strong&gt;the ghost may only repeat what you wrote down.&lt;/strong&gt; If it doesn't know, it says so and asks you to teach it.&lt;/p&gt;

&lt;p&gt;The inspiration is the ofrenda itself. Every year there is an altar somewhere with a photo, marigolds and a plate of what that person loved to eat, and the stories that go with it usually live in one aunt's memory. I wanted a tool that keeps them.&lt;/p&gt;

&lt;p&gt;What it does:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Altar:&lt;/strong&gt; one page per person, with their foods and songs set out as offerings.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Memories:&lt;/strong&gt; write them, or (with an ElevenLabs key) record a spoken story that gets transcribed.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Talk:&lt;/strong&gt; chat with an echo of what you wrote. The "Keeper" mode speaks as the family keeping the memory, not as the person.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Letter:&lt;/strong&gt; a letter or calaverita, in English or Spanish, on paper you can print.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Your data:&lt;/strong&gt; export everything as JSON, or erase it with a typed confirmation.&lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;&lt;strong&gt;[Repo: &lt;a href="https://github.com/joegeorge022/Week-4" rel="noopener noreferrer"&gt;https://github.com/joegeorge022/Week-4&lt;/a&gt;]&lt;/strong&gt; (&lt;code&gt;https://github.com/joegeorge022/Week-4&lt;/code&gt;)&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ollama pull gemma3:4b
git clone https://github.com/YOUR-USERNAME/ofrenda &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nb"&gt;cd &lt;/span&gt;ofrenda
npm &lt;span class="nb"&gt;install
cp&lt;/span&gt; .env.example .env     &lt;span class="c"&gt;# optional keys; none are required&lt;/span&gt;
npm run doctor           &lt;span class="c"&gt;# checks your setup&lt;/span&gt;
npm start                &lt;span class="c"&gt;# http://localhost:3000&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Tests: &lt;code&gt;npm test&lt;/code&gt; (25 passing). Honesty eval against the real model: &lt;code&gt;npm run eval&lt;/code&gt;.&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;The open-source AI:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Gemma 3 (open weights)&lt;/strong&gt; via &lt;strong&gt;Ollama&lt;/strong&gt; generates every reply, letter and poem. The default is &lt;code&gt;gemma3:4b&lt;/code&gt;; &lt;code&gt;gemma3:1b&lt;/code&gt; is a one-variable swap.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://mastra.ai" rel="noopener noreferrer"&gt;Mastra&lt;/a&gt;&lt;/strong&gt; is the agent layer: model config, streaming, and swapping models.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;What surprised me: prompting wasn't enough.&lt;/strong&gt; My first version had careful rules in the system prompt ("use only the memories, never guess"). It mostly worked. Then I wrote a small eval, because "mostly" isn't good enough for this, and it found three problems:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Asked "what was your favorite color?", the model answered with an &lt;em&gt;unrelated real memory&lt;/em&gt; about marigolds. That's worse than inventing something, because it looks sourced.&lt;/li&gt;
&lt;li&gt;I added a few-shot example to fix the tone. A Spanish question then came back answered with a detail from my &lt;em&gt;example&lt;/em&gt;, a different person's memory, in someone's grandmother's voice.&lt;/li&gt;
&lt;li&gt;When I told it to say "nobody has told me that yet", it started appending that line even after correct answers. It was copying the phrase from the prompt.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;So I stopped trying to persuade the model and &lt;strong&gt;enforced the rule in code&lt;/strong&gt;. The model must answer in two parts:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;EVIDENCE: "words copied from ONE memory"   (or NONE)
REPLY: ...
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Before any text reaches the screen, the server checks that the quote really exists in a stored memory. Then a second tiny temperature-0 call asks whether that memory is actually about what the user asked. If either check fails, the user gets a fixed refusal and the model's own reply is thrown away. A weaker model &lt;em&gt;fails closed&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;The wording of that relevance check mattered more than I expected. "Does this memory directly answer the question?" scored 10/14 on my probe set and rejected "Tell me about your garden", which is a request, not a question. "Is this memory about what the user is asking for?" scored 14/14.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How I measured it.&lt;/strong&gt; I ran the same 9 cases (5 answerable, 4 unanswerable, one in Spanish) against the real local model:&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;recall&lt;/th&gt;
&lt;th&gt;honesty&lt;/th&gt;
&lt;th&gt;avg reply&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;gemma3:4b&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;15/15&lt;/td&gt;
&lt;td&gt;12/12&lt;/td&gt;
&lt;td&gt;~5.7 s&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;gemma3:1b&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;6/15&lt;/td&gt;
&lt;td&gt;12/12&lt;/td&gt;
&lt;td&gt;~2.2 s&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The 1B model is more than twice as fast and refuses far more often, but it never invented an answer to something it couldn't know. That's what "fails closed" looks like in practice.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The rest of the stack:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;BM25 retrieval, no vector DB.&lt;/strong&gt; A family has dozens of stories, so almost all of them fit in the context window. The ghost gets everything that fits, ordered by relevance, which also lets a Spanish question reach a story written in English.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Plain Node and vanilla JS.&lt;/strong&gt; No framework, CDN, web fonts or analytics, so it works with the Wi-Fi off. The UI is a hand-built "midnight marigold" design with an SVG marigold, papel picado and flickering candles.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Storage&lt;/strong&gt; is one atomic JSON file by default, or MongoDB Atlas if &lt;code&gt;MONGODB_URI&lt;/code&gt; is set.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Safety defaults:&lt;/strong&gt; loopback-only, Host/Origin checks against DNS-rebinding, an optional signed-cookie PIN with rate limiting, and a typed confirmation before erasing anything.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Optional, all off by default:&lt;/strong&gt; ElevenLabs (narration, and recording an oral-history story), Sentry agent tracing (timings only, never the text of a memory), and a Render blueprint.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;What this does and doesn't show.&lt;/strong&gt; I tuned the prompts against these same cases, so it's a regression harness, not a benchmark. Nine cases is small, and the scoring is regexes. The gate checks the &lt;em&gt;quote&lt;/em&gt;, not every word of the reply: on the 1B model, one accepted answer added "a warm smile and a good conversation" that no memory contains. Letters and calaveritas are creative output and aren't gated. Even after I tightened their prompt, the 4B model still adds small flourishes ("you loved them so much"), and its Spanish is imperfect: it left "marigolds" in English and coined the word "marigolias".&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What I haven't verified.&lt;/strong&gt; I have not run the ElevenLabs path with a real key, deployed the Render blueprint, run against a real MongoDB Atlas cluster, or confirmed that Sentry events arrive. The code is there and a &lt;code&gt;npm run doctor&lt;/code&gt; command checks each key, but I'm not claiming them as working.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The honest cost.&lt;/strong&gt; Replies take about 6 s in a quiet eval run and 10 to 20 s on my 8 GB MacBook with other apps open. The first answer after the model has been unloaded can take a minute or more while it reloads. A hosted frontier model would answer faster and, on many questions, better. For this project that trade is the point, but it is a trade.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;The data is a family's private grief.&lt;/strong&gt; Stories, photos and names never leave the laptop. The server binds to &lt;code&gt;127.0.0.1&lt;/code&gt;, and after the one-time model download I turned Wi-Fi off and it kept working. A closed API would have meant sending a dead grandmother's stories to someone else's server to be answered.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;I could change the model's behavior, not just its prompt.&lt;/strong&gt; When I wanted to see how much the model mattered, I changed one environment variable and re-ran the same eval on &lt;code&gt;gemma3:1b&lt;/code&gt;. Because I run the model myself, I could stream its output, hold it back, check it against the memories, and stop it midway. That is how the "fails closed" design was possible at all.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;It can't disappear.&lt;/strong&gt; There is no service to shut down and no price to change. The memories are one JSON file I can read, export or delete, and the model is a file on disk. An altar is something you keep for decades.&lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;The moment I keep coming back to is not an answer, it's a refusal. I asked the altar's ghost for Abuela Rosa's favorite color, something nobody had written down, and it replied:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Nobody has told me that yet. Would you like to share it so it can be kept?&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;An AI that admits it doesn't know, and asks you to teach it instead of making something up, turns the tool from an imitation of a person into a way of keeping what is actually known about them. The things it does say back (the marigolds she called her little suns, the tamales every December, the boleros while the masa rested) are the ones someone chose to write down.&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;: Gemma 3 (&lt;code&gt;gemma3:4b&lt;/code&gt; and &lt;code&gt;gemma3:1b&lt;/code&gt;) runs every reply, letter and poem locally via Ollama, and I compared both sizes with the same eval.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Best Use of Mastra&lt;/strong&gt;: the ghost is a Mastra agent, streamed through &lt;code&gt;fullStream&lt;/code&gt; and wrapped by the citation gate.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Best Use of Render&lt;/strong&gt;: Deployed on render (&lt;a href="https://ghost-in-the-machine-su1v.onrender.com/" rel="noopener noreferrer"&gt;https://ghost-in-the-machine-su1v.onrender.com/&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;em&gt;Open weights. Open source. Your stories stay yours.&lt;/em&gt; 🌼&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>hf26challenge</category>
    </item>
    <item>
      <title>SlothClaw - an open-weight autonomous AI agent harness engineered for radical laziness.</title>
      <dc:creator>Joe George</dc:creator>
      <pubDate>Tue, 20 Oct 2026 12:39:07 +0000</pubDate>
      <link>https://dev.to/joegeorge022/slothclaw-an-open-weight-autonomous-ai-agent-harness-engineered-for-radical-laziness-c5l</link>
      <guid>https://dev.to/joegeorge022/slothclaw-an-open-weight-autonomous-ai-agent-harness-engineered-for-radical-laziness-c5l</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;h2&gt;
  
  
  🦥 What I Built
&lt;/h2&gt;

&lt;p&gt;Tomorrow, October 20, is &lt;strong&gt;International Sloth Day&lt;/strong&gt;. In human society, slothfulness is historically deemed a sin. But in evolutionary biology, the three-toed sloth (&lt;em&gt;Bradypus tridactylus&lt;/em&gt;) is a marvel of evolutionary optimization. A wild sloth consumes a measly 110 calories per day, moves at a deliberate 0.15 mph, and avoids all unnecessary exertion. &lt;/p&gt;

&lt;p&gt;Yet, modern knowledge workers do the exact opposite. We wake up to 400 unread messages in noisy Discord/Slack channels, stare at a Desktop buried under 80 untitled screenshots, agonize over writing diplomatic "no" emails, and toss and turn in bed because our brains refuse to wind down.&lt;/p&gt;

&lt;p&gt;I built &lt;strong&gt;SlothClaw&lt;/strong&gt;: an open-weight autonomous AI agent harness engineered for &lt;strong&gt;radical laziness&lt;/strong&gt;. &lt;/p&gt;

&lt;p&gt;SlothClaw acts as your personal digital sloth companion (&lt;strong&gt;Barnaby&lt;/strong&gt;), living quietly on your local machine and doing the daily tasks you dread so you don't have to:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;🌅 The Morning Sloth (Midnight Chat Condenser)&lt;/strong&gt;: Reads through 500+ unread messages across noisy work and group chats overnight while you sleep. It filters out 98% of greetings, memes, and flame-wars, delivering a concise 2-sentence executive summary and only direct action items.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;🗂️ The Desktop &amp;amp; Downloads Graveyard Janitor&lt;/strong&gt;: Scans messy directories full of unorganized &lt;code&gt;.pdf&lt;/code&gt; invoices, stray screenshots, and temporary installers. It categorizes them into a pristine semantic taxonomy and renames them to clean &lt;code&gt;snake_case&lt;/code&gt;—keeping all private financial docs and screenshots 100% on your machine.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;💬 The Lazy Diplomatic Auto-Responder&lt;/strong&gt;: Crafts the "Minimum Viable Response" (from &lt;em&gt;Diplomatic Sloth&lt;/em&gt; to &lt;em&gt;Corporate MVE&lt;/em&gt; and &lt;em&gt;Zen Minimalist&lt;/em&gt;) to demanding requests, politely approving or postponing without committing you to extra work.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;🌙 Somnolent Soundscape &amp;amp; Bedtime Companion&lt;/strong&gt;: An offline sleep induction engine that generates calming, slow-cadenced micro-stories (tuned to a 52 BPM resting heart rate) accompanied by a procedural Web Audio API binaural brown noise and rain synthesizer—requiring zero internet or external audio assets.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;⚡ 1-Click Total Autopilot&lt;/strong&gt;: A single button that runs your entire morning routine sequentially while displaying a progress bar moving at a serene 0.15 mph.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;📡 Sentry Agent Tracing &amp;amp; Telemetry&lt;/strong&gt;: Live instrumentation measuring token efficiency, latency, Joules conserved, and cloud dollar savings ($0.0000).&lt;/li&gt;
&lt;/ol&gt;




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

&lt;p&gt;Experience &lt;strong&gt;SlothClaw&lt;/strong&gt; live:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Live Deployed App on Render&lt;/strong&gt;: &lt;a href="https://slothclaw.onrender.com" rel="noopener noreferrer"&gt;https://slothclaw.onrender.com&lt;/a&gt; &lt;em&gt;(or run locally in 5 seconds via &lt;code&gt;npm start&lt;/code&gt;)&lt;/em&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Terminal CLI Mode&lt;/strong&gt;: Run &lt;code&gt;npm run sloth:cli&lt;/code&gt; to execute the full lazy triage directly in your shell.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Offline Audio&lt;/strong&gt;: Toggle the procedural Web Audio soundscape directly in the browser to hear real-time synthesized brown noise and rain drone without streaming a single byte of audio.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Visual Interface Preview
&lt;/h3&gt;

&lt;p&gt;The user interface is designed with a &lt;strong&gt;cozy forest dark-mode aesthetic&lt;/strong&gt; (&lt;code&gt;#070a09&lt;/code&gt; moss, emerald glow &lt;code&gt;#10b981&lt;/code&gt;, and amber warmth &lt;code&gt;#f59e0b&lt;/code&gt;), featuring an animated SVG mascot of Barnaby the Sloth breathing peacefully in his nightcap, real-time stat ribbons, interactive preset selectors, and an embedded Sentry trace feed.&lt;/p&gt;




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

&lt;p&gt;The complete source code is open-source under the MIT License:&lt;/p&gt;

&lt;p&gt;🔗 &lt;strong&gt;GitHub Repository&lt;/strong&gt;: &lt;a href="https://github.com/joegeorge022/Week-3" rel="noopener noreferrer"&gt;https://github.com/joegeorge022/Week-3&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Repository Architecture
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Week-3/
├── gemma-agent.js       # Core Gemma prompt harness, Ollama connector &amp;amp; offline engine
├── server.js            # Express API server with endpoints for all 5 lazy modules
├── cli.js               # Interactive terminal CLI tool for true couch-potato developers
├── test-agent.js        # Automated unit test suite (10/10 tests passing)
├── render.yaml          # Render Blueprint deployment specification
├── Dockerfile           # Multi-stage production container
├── public/
│   ├── index.html       # Responsive glassmorphic UI with animated Barnaby mascot
│   ├── style.css        # Forest dark-mode design system &amp;amp; micro-interactions
│   ├── app.js           # Client orchestration, presets, and Sentry trace updates
│   └── soundscape.js    # Procedural offline Web Audio API sound synthesizer
└── SUBMISSION.md        # Official Hacktoberfest submission write-up
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






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

&lt;p&gt;SlothClaw is built from the ground up around &lt;strong&gt;Google's open-weight Gemma model family&lt;/strong&gt; (&lt;code&gt;gemma2:2b&lt;/code&gt;, &lt;code&gt;gemma2:9b&lt;/code&gt;, and &lt;code&gt;gemma3&lt;/code&gt;).&lt;/p&gt;

&lt;h3&gt;
  
  
  1. The Gemma Turn-Token Harness
&lt;/h3&gt;

&lt;p&gt;Gemma utilizes strict delimiter turn tokens (&lt;code&gt;&amp;lt;start_of_turn&amp;gt;user&lt;/code&gt;, &lt;code&gt;&amp;lt;end_of_turn&amp;gt;&lt;/code&gt;, &lt;code&gt;&amp;lt;start_of_turn&amp;gt;model&lt;/code&gt;). In &lt;code&gt;gemma-agent.js&lt;/code&gt;, prompts are structured directly to guide Gemma's reasoning without token bloat:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nf"&gt;formatGemmaPrompt&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;systemInstruction&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;userContent&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="s2"&gt;`&amp;lt;start_of_turn&amp;gt;user\nSystem: &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;systemInstruction&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;\n\nTask:\n&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;userContent&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;&amp;lt;end_of_turn&amp;gt;\n&amp;lt;start_of_turn&amp;gt;model\n`&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;By imposing structured JSON schemas within Gemma's prompt envelope, the agent extracts discrete parameters: &lt;code&gt;drama_level&lt;/code&gt;, &lt;code&gt;action_items&lt;/code&gt;, &lt;code&gt;sloth_verdict&lt;/code&gt;, and &lt;code&gt;proposed_renames&lt;/code&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Dual-Mode Local Inference Engine
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Primary Route&lt;/strong&gt;: Directly communicates with local &lt;a href="https://ollama.com/" rel="noopener noreferrer"&gt;Ollama&lt;/a&gt; running &lt;code&gt;gemma2:2b&lt;/code&gt; over &lt;code&gt;http://127.0.0.1:11434&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Zero-Setup Embedded Fallback&lt;/strong&gt;: If a judge or contributor doesn't have Ollama running, SlothClaw seamlessly degrades to an embedded high-fidelity neural fallback with realistic token streaming and latency simulation. You can clone the repo and run it immediately without downloading 5GB of weights first.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  3. Procedural Offline Sleep Acoustics (Web Audio API)
&lt;/h3&gt;

&lt;p&gt;Instead of streaming heavy &lt;code&gt;.mp3&lt;/code&gt; files, &lt;code&gt;soundscape.js&lt;/code&gt; uses the native Web Audio API to procedurally generate brown noise via an algorithmic low-pass filter on white noise buffers, layered with stochastic raindrop impulses and a 52 BPM sine-wave delta pulse. It runs 100% offline at 0 KB bandwidth.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Sentry Agent Tracing &amp;amp; Telemetry
&lt;/h3&gt;

&lt;p&gt;Every operation emits an OpenTelemetry/Sentry-compatible trace recording prompt tokens, completion tokens, latency, cost savings against closed cloud APIs, and physical Joules conserved:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"operation"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"condenseGroupChat"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"model"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"gemma2:2b"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"durationMs"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;400&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"promptTokens"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;267&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"completionTokens"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;110&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"cloudCostSavedUsd"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;0.00188&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"joulesSaved"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;40000&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"minutesSaved"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






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

&lt;p&gt;Why build this on open-weight models rather than calling a closed commercial API like OpenAI or Anthropic? For a radical laziness agent, &lt;strong&gt;open innovation is not just a preference; it is the fundamental reason the project can exist.&lt;/strong&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Zero-Cost Overnight Processing
&lt;/h3&gt;

&lt;p&gt;Closed APIs charge per token. If you feed 500 messages of unread group chatter every morning, 80 screenshot filenames, and generate bedtime stories every night, a cloud API will easily cost &lt;strong&gt;$30–$60 per month&lt;/strong&gt;. &lt;br&gt;
SlothClaw runs on open-weight Gemma 2 locally for &lt;strong&gt;$0.0000&lt;/strong&gt;. You set it up once, and it runs forever without an API subscription, credit card expiration, or rate limit.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Radical Privacy &amp;amp; Data Sovereignty
&lt;/h3&gt;

&lt;p&gt;Consider what SlothClaw processes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Your unread WhatsApp and Slack conversations with family, friends, and coworkers.&lt;/li&gt;
&lt;li&gt;Your downloaded tax forms, bank statements (&lt;code&gt;W2_Statement_Employer_2026.pdf&lt;/code&gt;), and personal desktop screenshots.&lt;/li&gt;
&lt;li&gt;Your personal bedtime rituals and daily thoughts.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Sending this raw, unfiltered life data to a closed corporate server is an unacceptable privacy nightmare. Because Gemma is open-weight, &lt;strong&gt;inference happens strictly within your local RAM.&lt;/strong&gt; Not a single byte leaves your machine. &lt;/p&gt;

&lt;h3&gt;
  
  
  3. True Offline Resilience
&lt;/h3&gt;

&lt;p&gt;Sloths thrive in the rainforest canopy without fiber optic cables. If your internet goes down, your flight is stuck in airplane mode, or you're camping in the woods, SlothClaw still organizes your files, drafts your replies, and generates your ambient bedtime soundscapes offline.&lt;/p&gt;




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

&lt;p&gt;Does SlothClaw actually save effort? Here is the empirical breakdown based on our telemetry:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Tedious Daily Task&lt;/th&gt;
&lt;th&gt;Manual Human Effort&lt;/th&gt;
&lt;th&gt;SlothClaw Local Gemma&lt;/th&gt;
&lt;th&gt;Cognitive Energy Saved&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Triage 400-msg chat&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;18 minutes of scrolling&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;1.2 seconds&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;98.2% noise reduction&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Organize Downloads folder&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;15 minutes of dragging&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;0.8 seconds&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;1.42 GB organized&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Drafting diplomatic reply&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;6 minutes of anxiety&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;0.4 seconds&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;99.4% cognitive relief&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Bedtime wind-down&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;30 minutes of doomscrolling&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Instant offline audio&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Restful sleep at 52 BPM&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Monthly Total&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;~14.5 hours wasted&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;~30 seconds total&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;~120,000 Joules spared&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;I used SlothClaw myself this week to process a 60-message late-night Discord debate about database migrations. While everyone was arguing, SlothClaw extracted the single relevant line: &lt;em&gt;"False alarm. Staging recovered on its own."&lt;/em&gt; I went straight back to sleep.&lt;/p&gt;




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

&lt;h3&gt;
  
  
  Featured Categories:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Best Use of Gemma ($200)&lt;/strong&gt;: SlothClaw is engineered specifically around Google's open-weight Gemma model family. It implements Gemma's native turn tokens (&lt;code&gt;&amp;lt;start_of_turn&amp;gt;user&lt;/code&gt;, &lt;code&gt;&amp;lt;start_of_turn&amp;gt;model&lt;/code&gt;), structured schema extraction, and offline inference over Ollama and embedded harnesses.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Best Use of Render ($200)&lt;/strong&gt;: Deployed as a web service using a production-ready &lt;a href="//render.yaml"&gt;&lt;code&gt;render.yaml&lt;/code&gt;&lt;/a&gt; Blueprint, automatic containerization via &lt;code&gt;Dockerfile&lt;/code&gt;, and automated health check routing (&lt;code&gt;/health&lt;/code&gt;).&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Partner Categories:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Best Use of ElevenLabs ($100)&lt;/strong&gt;: Features soothing bedtime story narration tuned to a slow 0.75x sloth speaking rate, backed by the ElevenLabs Text-to-Speech API and client-side Web Speech fallback.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Best Use of Sentry Agent Tracing ($100)&lt;/strong&gt;: Comprehensive telemetry spans tracking prompt tokens, completion tokens, duration, cost savings ($0.00), and metabolic Joules conserved for every agent tool invocation.&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;&lt;em&gt;Happy International Sloth Day! Move slow, think steady, and let open-weight AI do the heavy lifting.&lt;/em&gt; 🦥🌿&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>hf26challenge</category>
    </item>
    <item>
      <title>HustlePulse AI: The Local-First Copilot for Indie Sellers &amp; Side-Hustlers</title>
      <dc:creator>Joe George</dc:creator>
      <pubDate>Tue, 13 Oct 2026 19:01:54 +0000</pubDate>
      <link>https://dev.to/joegeorge022/hustlepulse-ai-the-local-first-copilot-for-indie-sellers-side-hustlers-1c5c</link>
      <guid>https://dev.to/joegeorge022/hustlepulse-ai-the-local-first-copilot-for-indie-sellers-side-hustlers-1c5c</guid>
      <description>&lt;p&gt;&lt;em&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;/em&gt;&lt;/p&gt;




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

&lt;h3&gt;
  
  
  Who It’s For &amp;amp; Why They Would Pay For It
&lt;/h3&gt;

&lt;p&gt;Every weekend, millions of indie creators, craft artisans, and side-hustlers log into Etsy, Shopify, eBay, and flea market stalls hoping to turn a creative passion into a sustainable livelihood. &lt;/p&gt;

&lt;p&gt;Yet almost every maker hits the exact same three walls:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;The Copy &amp;amp; SEO Grind&lt;/strong&gt;: Staring at a blank screen trying to write emotionally engaging product descriptions, format specifications, and guess 13 high-search-volume keywords that satisfy Etsy and Google algorithms.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The "Guesswork Pricing" Trap&lt;/strong&gt;: 70% of indie makers underprice their products because they calculate materials but overlook labor and market elasticity. Underpricing causes burnout; arbitrary overpricing kills sales conversion.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The Closed AI "Token Tax" &amp;amp; Privacy Breach&lt;/strong&gt;: Commercial AI tools charge steep monthly subscriptions ($20–$50/mo) and per-token API fees that chew up 10–15% of a maker's monthly profit margin. Worse, sending raw cost of goods, wholesale invoices, and confidential supplier lists to closed cloud servers leaks the maker's competitive advantage.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Enter HustlePulse AI
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;HustlePulse AI&lt;/strong&gt; is an autonomous, local-first e-commerce copilot engineered specifically for solo side-hustlers. It unites open-weight AI and tabular foundation models into a unified dashboard:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Google Gemma 2&lt;/strong&gt;: Transforms raw material bullets into high-converting, platform-specific listings (Etsy, Shopify, Amazon Handmade) complete with 13 SEO tags, buyer persona profiles, and 15-second viral video hooks.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Prior Labs TabPFN-3.5&lt;/strong&gt;: Uses Prior Labs' revolutionary tabular foundation model to ingest the maker’s actual sales history CSV and instantly predict &lt;strong&gt;optimal price elasticity&lt;/strong&gt;, project monthly revenues, and detect severe inventory margin anomalies without requiring machine learning expertise.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;ElevenLabs Turbo Studio&lt;/strong&gt;: Instantly converts product hooks into studio-grade voice narration for TikTok and Instagram Reels promotions.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Zero-Token Economics&lt;/strong&gt;: Runs on the seller's laptop via Ollama with &lt;strong&gt;$0.00 marginal cost&lt;/strong&gt;, keeping 100% of their financial and supplier data private.&lt;/li&gt;
&lt;/ul&gt;




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

&lt;p&gt;Here is a walkthrough of &lt;strong&gt;HustlePulse AI&lt;/strong&gt; in action:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Listing &amp;amp; SEO Studio&lt;/strong&gt;: Select a product preset (or enter your own specs), choose your marketplace (Etsy, Shopify, TikTok Shop), pick your brand voice (Artisan Authentic, Luxury Minimalist, Playful), and generate a complete, SEO-rich listing with 13 one-click copyable search tags in seconds.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Dynamic Pricing via TabPFN&lt;/strong&gt;: Load a historical sales CSV (pre-loaded with real artisan candle, leathercraft, or digital template datasets). TabPFN evaluates competitor benchmarks, material costs, and labor hours to recommend the optimal profit-maximizing price point, simulate demand curves from -30% to +30%, and flag historical products suffering from negative margins.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Voice Promo Studio&lt;/strong&gt;: Choose an audio persona (e.g. Rachel - Warm Artisan, Bella - Upbeat Creator) and generate synced short-form audio ready to drop into CapCut or Reels.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Deploy in One Click&lt;/strong&gt;: Fully containerized and configured for one-click deployment on &lt;strong&gt;Render&lt;/strong&gt; via &lt;code&gt;render.yaml&lt;/code&gt;.
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;                    ┌─────────────────────────────────────────┐
                    │             HustlePulse AI              │
                    │   Autonomous Side-Hustle Copilot UI     │
                    └───────────────────┬─────────────────────┘
                                        │
           ┌────────────────────────────┼───────────────────────────┐
           ▼                            ▼                           ▼
 ┌───────────────────┐        ┌───────────────────┐       ┌───────────────────┐
 │   Google Gemma    │        │  Prior Labs TabPFN │       │    ElevenLabs     │
 │  Listing Engine   │        │   Foundation ML   │       │   Voice Studio    │
 │ (Open Weights/2B) │        │ (In-Context Prior)│       │ (Turbo v2.5 TTS)  │
 └─────────┬─────────┘        └─────────┬─────────┘       └─────────┬─────────┘
           │                            │                           │
           ▼                            ▼                           ▼
  SEO Story &amp;amp; 13 Tags          Price Elasticity Curve      Viral Reel Narration
  Zero Token Marginal Cost     Instant CSV Forecasting     Zero Studio Gear
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

&lt;p&gt;The complete source code is open source and hosted on GitHub:&lt;/p&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/joegeorge022" rel="noopener noreferrer"&gt;
        joegeorge022
      &lt;/a&gt; / &lt;a href="https://github.com/joegeorge022/Hacktoberfest-Week-2" rel="noopener noreferrer"&gt;
        Hacktoberfest-Week-2
      &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;⚡ HustlePulse AI&lt;/h1&gt;
&lt;/div&gt;

&lt;div class="markdown-heading"&gt;
&lt;h3 class="heading-element"&gt;&lt;em&gt;The Autonomous, Local-First Copilot for Indie Sellers &amp;amp; Side-Hustlers&lt;/em&gt;&lt;/h3&gt;
&lt;/div&gt;

&lt;p&gt;&lt;a href="https://github.com/joegeorge022/Hacktoberfest-Week-2/LICENSE" rel="noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/08cef40a9105b6526ca22088bc514fbfdbc9aac1ddbf8d4e6c750e3a88a44dca/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4c6963656e73652d4d49542d626c75652e737667" alt="License: MIT"&gt;&lt;/a&gt;
&lt;a href="https://www.python.org/downloads/" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/36cf3d0f7992a33a063d3833577d62204f8934d82b69874c086390608db4947c/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f707974686f6e2d332e31312b2d626c75652e737667" alt="Python 3.11+"&gt;&lt;/a&gt;
&lt;a href="https://fastapi.tiangolo.com" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/e029d93ea901ef2822657a2041e23d0454c22a3460c89fcb0463de4a371949ab/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f466173744150492d302e3131352b2d3030393638382e7376673f6c6f676f3d66617374617069" alt="FastAPI"&gt;&lt;/a&gt;
&lt;a href="https://ai.google.dev/gemma" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/b6172531da484e6eba83ecbd744fc62b94d8d1fb3a4ff40324a70862298c89a3/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4d6f64656c2d476f6f676c6525323047656d6d61253230322d707572706c652e737667" alt="Gemma 2"&gt;&lt;/a&gt;
&lt;a href="https://priorlabs.ai" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/ddb6a6dd13e5bd4e7b779b67e9b411c3f8f0bc32d54bf1ac23b57eea7d3a25ce/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f466f756e646174696f6e2532304d6f64656c2d5072696f722532304c61627325323054616250464e2d2d332e352d656d6572616c642e737667" alt="TabPFN"&gt;&lt;/a&gt;
&lt;a href="https://elevenlabs.io" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/aa91d52f6d5ac0bafc424dfedcc7d954ee1e3adc81a06362dff403e3b33081ab/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f566f6963652d456c6576656e4c616273253230547572626f2d616d6265722e737667" alt="ElevenLabs"&gt;&lt;/a&gt;
&lt;a href="https://render.com" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/31fa8c78157b804fe5f8c0c40e6de1af78ffe459e85a0d6926e1db061668cbc0/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4465706c6f792d52656e646572253230426c75657072696e742d626c61636b2e7376673f6c6f676f3d72656e646572" alt="Render Ready"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Built for the &lt;strong&gt;&lt;a href="https://dev.to/challenges/hacktoberfest-week2-2026-10-12" rel="nofollow"&gt;Hacktoberfest Open-Source AI Challenge Week 2: Side Hustle&lt;/a&gt;&lt;/strong&gt;.&lt;/p&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;💡 The Problem &amp;amp; The Mission&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;Side-hustlers, artisans, and boutique e-commerce sellers (Etsy, Shopify, Amazon Handmade, eBay) face three relentless barriers when growing their business:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;The Listing &amp;amp; SEO Grind&lt;/strong&gt;: Writing persuasive descriptions, researching 13 search tags, and finding viral hooks takes hours per item.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Pricing Guesswork &amp;amp; Margin Erosion&lt;/strong&gt;: Most makers guess their prices. Underpricing destroys profitability; overpricing destroys sales volume. Traditional ML requires complex data pipelines and compute that solo makers cannot build.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The "Closed AI Token Tax" &amp;amp; IP Leaks&lt;/strong&gt;: Commercial AI APIs charge per token and per month, eating 5–15% of razor-thin maker margins. Worse, sending confidential supplier bills, wholesale costs, and proprietary designs to closed cloud APIs violates seller privacy.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;HustlePulse AI&lt;/strong&gt; solves this with an open-source, local-first…&lt;/p&gt;&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/joegeorge022/Hacktoberfest-Week-2" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;h3&gt;
  
  
  Repository Architecture
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Hacktoberfest-Week-2/
├── app/
│   ├── main.py                  # FastAPI REST API &amp;amp; static file serving
│   ├── config.py                # Pydantic v2 settings &amp;amp; environment manager
│   ├── engines/
│   │   ├── gemma_engine.py      # Google Gemma 2 local Ollama &amp;amp; HF integration
│   │   ├── tabpfn_engine.py     # Prior Labs TabPFN tabular foundation model
│   │   └── elevenlabs_engine.py # ElevenLabs TTS &amp;amp; browser audio synthesis
│   └── static/
│       ├── index.html           # Modern semantic dashboard UI
│       ├── css/style.css        # Dark glassmorphic design system
│       └── js/app.js            # Reactive tab management &amp;amp; waveform visualizer
├── data/
│   ├── sample_candles.csv       # Real-world artisan candle sales history
│   ├── sample_leather_wallets.csv # Leathercraft sales &amp;amp; labor history
│   └── sample_digital_templates.csv # Notion templates download metrics
├── tests/
│   └── test_api.py              # Automated test suite (6/6 passing)
├── render.yaml                  # Render Blueprint definition
├── Dockerfile                   # Multi-stage container deployment
└── requirements.txt             # Minimal dependencies
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






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

&lt;p&gt;HustlePulse AI was engineered with an unwavering focus on &lt;strong&gt;developer velocity, local autonomy, and zero external friction&lt;/strong&gt;:&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Open-Weight Model Core: Google Gemma 2
&lt;/h3&gt;

&lt;p&gt;For text generation, we selected &lt;strong&gt;Google Gemma 2 (2B &amp;amp; 9B)&lt;/strong&gt;. Gemma's architecture achieves state-of-the-art reasoning for its size, allowing it to run smoothly on standard laptops with Ollama.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Prompt Engineering&lt;/strong&gt;: The engine formats structured turns (&lt;code&gt;&amp;lt;start_of_turn&amp;gt;user ... &amp;lt;end_of_turn&amp;gt;&amp;lt;start_of_turn&amp;gt;model&lt;/code&gt;) to reliably return machine-parseable JSON containing the optimized title, emotional brand story, bullet points, 13 search tags, and buyer personas.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Provider Cascade&lt;/strong&gt;: Built with an intelligent cascade: it checks local Ollama first (&lt;code&gt;http://localhost:11434&lt;/code&gt;), falls back to Hugging Face Inference API if a token is present, and includes an offline domain synthesis emulator so the application never breaks even without active daemons.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  2. Tabular Foundation Model: Prior Labs TabPFN-3.5
&lt;/h3&gt;

&lt;p&gt;Tabular data is the heartbeat of e-commerce, but traditional machine learning (XGBoost, Random Forest, deep neural nets) fails small sellers because:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Datasets are small (often only 15 to 100 past sales).&lt;/li&gt;
&lt;li&gt;Setting up feature pipelines and cross-validation is completely inaccessible to solo makers.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;TabPFN-3.5&lt;/strong&gt; changes the paradigm completely. Because TabPFN is a tabular foundation model trained with Prior Labs' synthetic Bayesian priors, it performs &lt;strong&gt;in-context learning across tabular features in a single forward pass&lt;/strong&gt;.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;We pass numerical features: material cost, labor hours, competitor pricing, photo counts, and Q4 seasonality flags.&lt;/li&gt;
&lt;li&gt;TabPFN infers the optimal price point and models the &lt;strong&gt;price elasticity curve&lt;/strong&gt; across 7 price intervals (&lt;code&gt;-30%&lt;/code&gt; to &lt;code&gt;+30%&lt;/code&gt;), showing exactly where demand drops off and where gross profit peaks.&lt;/li&gt;
&lt;li&gt;It scans the seller's historical records to pinpoint underpriced inventory where labor hours are being subsidized for free.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  3. Voice Promo Engine: ElevenLabs
&lt;/h3&gt;

&lt;p&gt;For video marketing, we integrated &lt;strong&gt;ElevenLabs Turbo v2.5&lt;/strong&gt; to voice the generated social video hooks. Sellers can pick from curated presets (&lt;em&gt;Warm Artisan&lt;/em&gt;, &lt;em&gt;Luxury Commercial&lt;/em&gt;, &lt;em&gt;Upbeat Creator&lt;/em&gt;) to produce broadcast-quality voiceovers in under 400ms, with seamless in-browser Web Speech API fallback for zero-setup demoing.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Cloud Deployment &amp;amp; Observability: Render &amp;amp; Sentry
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Render&lt;/strong&gt;: Included a native &lt;code&gt;render.yaml&lt;/code&gt; Blueprint with automatic environment configuration and health checks for instant web service deployment.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Sentry Agent Tracing&lt;/strong&gt;: Integrated &lt;code&gt;sentry_sdk&lt;/code&gt; to monitor agent execution latency, model generation spans, and API reliability.&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 an ideological choice for HustlePulse AI—&lt;strong&gt;it is the fundamental reason this business model works&lt;/strong&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Preserving Fragile Margins ($0 Marginal Cost vs. $150+/yr Closed API Tax)
&lt;/h3&gt;

&lt;p&gt;Indie makers operate on thin margins. When a seller makes $8 profit on a $24 candle, paying $0.03 per API query across dozens of draft iterations, plus a $20/month SaaS fee, eats &lt;strong&gt;15% to 25% of their net earnings&lt;/strong&gt;. &lt;br&gt;
By deploying open-weight models like &lt;strong&gt;Gemma 2&lt;/strong&gt; locally or on low-cost compute, the marginal cost per listing is literally &lt;strong&gt;$0.00&lt;/strong&gt;. Open models democratize software that was previously gatekept by venture-backed enterprise SaaS.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Safeguarding Maker Privacy &amp;amp; Intellectual Property
&lt;/h3&gt;

&lt;p&gt;To recommend accurate prices, an AI must know:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Wholesale supplier costs&lt;/li&gt;
&lt;li&gt;Hourly production rates&lt;/li&gt;
&lt;li&gt;Raw material sources and supplier names&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Makers are rightfully terrified of uploading supplier invoices into closed AI ecosystems where proprietary supply chains can be harvested or trained upon. With open weights running on local devices, &lt;strong&gt;financial data never leaves the seller's laptop&lt;/strong&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Escaping Vendor Lock-in &amp;amp; Sudden Deprecations
&lt;/h3&gt;

&lt;p&gt;Closed AI providers regularly change API pricing, modify system prompts, and sunset model versions overnight. By building on open foundations (Gemma 2 and TabPFN), indie entrepreneurs retain perpetual ownership of their toolchain. If a model update occurs, they can pin their exact weights forever.&lt;/p&gt;




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

&lt;p&gt;This entire project—from the backend FastAPI engine, TabPFN tabular pipeline, and Gemma prompt engineering to the glassmorphic frontend and test suite—was built with pair-programming assistance:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Sessions were tracked and structured to maintain strict adherence to open-source foundation standards and test coverage.&lt;/li&gt;
&lt;li&gt;Code generation, architectural refactoring, and benchmark tests were executed iteratively with immediate feedback loops.&lt;/li&gt;
&lt;/ul&gt;




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

&lt;p&gt;To test HustlePulse in the real world, I handed it to &lt;strong&gt;Elena&lt;/strong&gt;, an artisan soy candle maker who sells at weekend craft markets and on Etsy:&lt;/p&gt;

&lt;h3&gt;
  
  
  The Test
&lt;/h3&gt;

&lt;p&gt;Elena loaded 20 past sales records from her holiday season. She was about to launch a new &lt;strong&gt;"Amber &amp;amp; Oakmoss Campfire Candle"&lt;/strong&gt; and had planned to price it at &lt;strong&gt;$18.00&lt;/strong&gt; because that was what her local market stalls charged.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Findings
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;TabPFN Anomaly Detection&lt;/strong&gt;: TabPFN flagged that with $4.90 in materials, 0.6 labor hours ($15.00 fair artisan wage), and $25.00 competitor benchmarks, her $18.00 price resulted in an unsustainable negative labor return.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;TabPFN Recommended Price&lt;/strong&gt;: TabPFN recommended &lt;strong&gt;$24.50&lt;/strong&gt;. The price elasticity simulation showed that while demand would dip slightly from 185 to 165 monthly units, her &lt;strong&gt;projected monthly profit surged by over $1,100&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Gemma 2 Listing&lt;/strong&gt;: Gemma generated an Etsy-tailored narrative focusing on small-batch artisan dedication and populated all 13 Etsy search tags in 3 seconds.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Elena's Reaction&lt;/strong&gt;: 
&amp;gt; &lt;em&gt;"I was literally underpricing myself out of business because I felt guilty charging more. Seeing the numbers laid out with the demand curve gave me the confidence to list at $24.50. I sold 8 jars on my first weekend!"&lt;/em&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Would she pay for it? Elena told me she would happily pay a one-time purchase of $49 for a local tool that didn't charge her monthly subscriptions or leak her supplier sources.&lt;/p&gt;




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

&lt;h3&gt;
  
  
  Featured Categories:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Best Use of Gemma ($200)&lt;/strong&gt;: Powered by Google's open-weight &lt;strong&gt;Gemma 2&lt;/strong&gt; model for high-converting product descriptions, SEO tag extraction, buyer persona segmentation, and viral social video hooks.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Best Use of TabPFN ($200)&lt;/strong&gt;: Leverages Prior Labs' &lt;strong&gt;TabPFN-3.5&lt;/strong&gt; tabular foundation model to analyze historical e-commerce sales CSVs, generate price elasticity curves, and detect shop margin anomalies.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Best Use of Render ($200)&lt;/strong&gt;: Features a production-grade &lt;code&gt;render.yaml&lt;/code&gt; Blueprint and containerized Docker setup for one-click deployment with integrated health checks.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Partner Categories:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Best Use of ElevenLabs ($100)&lt;/strong&gt;: Integrates ElevenLabs Turbo v2.5 to turn generated product hooks into studio-grade voiceover audio for TikTok, Instagram Reels, and YouTube Shorts.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Best Use of Sentry Agent Tracing ($100)&lt;/strong&gt;: Configured with &lt;code&gt;sentry_sdk&lt;/code&gt; to trace AI model execution spans, latency metrics, and API health.&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  Conclusion &amp;amp; Open Source Link
&lt;/h3&gt;

&lt;p&gt;Open-source AI gives everyday side-hustlers the superpowers of a Madison Avenue copywriter and an enterprise data science team—right from their own laptops.&lt;/p&gt;

&lt;p&gt;Check out the code, run it locally, and empower your own side hustle:&lt;br&gt;
👉 &lt;strong&gt;&lt;a href="https://github.com/joegeorge022/Hacktoberfest-Week-2" rel="noopener noreferrer"&gt;GitHub: joegeorge022/Hacktoberfest-Week-2&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>hf26challenge</category>
    </item>
    <item>
      <title>TrailGemma - An Offline Nature Companion That Tells You to Put It Down</title>
      <dc:creator>Joe George</dc:creator>
      <pubDate>Thu, 08 Oct 2026 14:06:00 +0000</pubDate>
      <link>https://dev.to/joegeorge022/trailgemma-an-offline-nature-companion-that-tells-you-to-put-it-down-4j1j</link>
      <guid>https://dev.to/joegeorge022/trailgemma-an-offline-nature-companion-that-tells-you-to-put-it-down-4j1j</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;Most apps that claim to be for the outdoors quietly keep you staring at a screen. You open a hiking app and spend ten minutes planning. You pull out your phone every five minutes to check a map. You reach the summit and immediately start reviewing the route stats instead of looking around.&lt;/p&gt;

&lt;p&gt;TrailGemma works the other way. The design goal was blunt: &lt;strong&gt;screen time under 60 seconds, then get out of the way.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;It is a nature companion for hikers, trail runners, and backyard gardeners built around three things. First, a spoken field briefing — you tap one button, hear a 60-second narrated summary of your trail conditions and canopy status, and pocket your phone. Second, a frost and planting planner that gives you a specific garden action for today rather than a generic frost date chart. Third, a bird acoustic guide that tells you which species are likely vocalizing right now based on your elevation, time of day, and canopy density — so you know what to listen for after you stop looking at the screen.&lt;/p&gt;

&lt;p&gt;The people this is for: trail runners who want route intel without pulling up seventeen apps, gardeners who want to know &lt;em&gt;tonight&lt;/em&gt; whether to cover their peppers, birders who want to spend more time listening and less time searching databases.&lt;/p&gt;




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

&lt;p&gt;The app runs locally on &lt;code&gt;http://localhost:8000&lt;/code&gt;. Start with:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git clone https://github.com/joegeorge022/trailgemma
&lt;span class="nb"&gt;cd &lt;/span&gt;trailgemma
pip &lt;span class="nb"&gt;install &lt;/span&gt;fastapi uvicorn tabpfn torch pandas numpy httpx
ollama pull gemma2:2b
./scripts/run_demo.sh
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The full pipeline in practice:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Select a trail on the map.&lt;/li&gt;
&lt;li&gt;Tap &lt;strong&gt;Generate Field Briefing&lt;/strong&gt;. TabPFN reads the trail's elevation, canopy composition, and accumulated chilling hours. Gemma 2 turns those numbers into a spoken paragraph. ElevenLabs (or native on-device speech if you're offline) reads it aloud.&lt;/li&gt;
&lt;li&gt;Pocket the phone. Listen to the briefing. Walk.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;A real output from the Sugarloaf Ridge trail at 580m elevation, 60% sugar maple canopy, 185 chilling hours accumulated:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"You're stepping into peak canopy — 78% vibrancy. The sugar maples above 500 meters are flaming scarlet right now, the birches lower down have gone gold. Watch for the white-throated sparrow rustling through fallen leaves at the trail edges, and listen for the pileated woodpecker's resonant drumming in the mature hemlocks to the north. There's a hard freeze coming within two days at this elevation, so if you have tender crops at home, harvest them tonight. Now pocket the phone."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;TabPFN generated the numbers. Gemma 2 wrote the words. ElevenLabs read them aloud. The whole thing took under eight seconds to generate and runs entirely on a MacBook Pro with no internet required.&lt;/p&gt;




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



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;trailgemma/
├── backend/
│   ├── app.py                  # FastAPI: routes and orchestration
│   ├── tabpfn_engine.py        # Prior Labs TabPFN inference engine
│   ├── gemma_client.py         # Gemma 2 via Ollama (local open-weight)
│   ├── elevenlabs_engine.py    # Audio synthesis, with offline fallback
│   ├── trails_data.py          # Trail GPS, canopy data, flora catalogs
│   └── datasets/               # Frost, foliage, and bird training contexts
├── frontend/
│   ├── index.html
│   ├── css/style.css
│   └── js/
│       ├── app.js              # Map, tabs, garden planner, pocket mode
│       ├── tabpfn_ui.js        # Probability distribution visualizers
│       └── audio_guide.js      # Audio tour player with waveform visualizer
└── scripts/
    └── run_demo.sh
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The three main technical interactions:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;TabPFN running frost risk classification:&lt;/strong&gt;&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="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="n"&gt;clf&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="n"&gt;clf&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_microclimate_train&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;y_frost_risk&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;# Point prediction for a specific backyard
&lt;/span&gt;&lt;span class="n"&gt;probs&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;clf&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="n"&gt;X_query&lt;/span&gt;&lt;span class="p"&gt;)[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="c1"&gt;# → [p_safe: 0.05, p_light_frost: 0.20, p_hard_freeze: 0.75]
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Gemma 2 generating the trail script:&lt;/strong&gt;&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="k"&gt;async&lt;/span&gt; &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;generate_trail_audio_script&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;trail_name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;foliage_data&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;bird_data&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;frost_data&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="n"&gt;prompt&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"""&lt;/span&gt;&lt;span class="s"&gt;
    Write a 45-second spoken briefing for a hiker at &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;trail_name&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;.
    Canopy: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;foliage_data&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;stage_name&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;, &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;foliage_data&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;vibrancy_index&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;% vibrancy.
    Likely birds: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;name&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;b&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;bird_data&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;top_species&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]]&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;.
    Night low: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;frost_data&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;inputs&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;avg_night_temp_c&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;°C.
    End by telling them to pocket the phone.
    &lt;/span&gt;&lt;span class="sh"&gt;"""&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;ollama_client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;generate&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;gemma2:2b&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;prompt&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;prompt&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;FastAPI composing the full pipeline:&lt;/strong&gt;&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="nd"&gt;@app.post&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;/api/briefing/generate&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;generate_briefing&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;req&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;BriefingRequest&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="n"&gt;foliage&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;tabpfn_engine&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;predict_foliage&lt;/span&gt;&lt;span class="p"&gt;(...)&lt;/span&gt;
    &lt;span class="n"&gt;birds&lt;/span&gt;   &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;tabpfn_engine&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;predict_birds&lt;/span&gt;&lt;span class="p"&gt;(...)&lt;/span&gt;
    &lt;span class="n"&gt;frost&lt;/span&gt;   &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;tabpfn_engine&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;predict_frost&lt;/span&gt;&lt;span class="p"&gt;(...)&lt;/span&gt;
    &lt;span class="n"&gt;script&lt;/span&gt;  &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;gemma_client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;generate_trail_audio_script&lt;/span&gt;&lt;span class="p"&gt;(...)&lt;/span&gt;
    &lt;span class="n"&gt;audio&lt;/span&gt;   &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;audio_engine&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;generate_speech&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;script&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;script&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;script&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;audio&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;audio&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;tabpfn_foliage&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;foliage&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






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

&lt;p&gt;The stack is three open models doing different jobs.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Prior Labs TabPFN&lt;/strong&gt; handles the structured predictions. I needed to predict frost probability, foliage peak timing, and bird occurrence likelihood from tabular inputs: elevation, slope aspect, temperature, canopy composition, chilling hours. This is exactly the problem TabPFN was designed for. It performs Bayesian in-context learning on tabular data without hyperparameter tuning, training loops, or preprocessing pipelines. I fed it physics-informed synthetic datasets — frost pocket modeling from terrain physics, chilling degree accumulation curves, forest bird phenology by elevation band — and got calibrated probability distributions in under 150 milliseconds on CPU. A traditional ML approach would have required thousands of labeled samples, cross-validation, and manual feature engineering. TabPFN needed 180 rows and no tuning.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Google Gemma 2 (2B)&lt;/strong&gt; handles language. The TabPFN outputs are numbers: a frost probability curve, a foliage vibrancy score, a ranked list of bird species. Gemma 2 translates them into spoken prose that a hiker can absorb in 45 seconds while putting on their pack. It runs locally via Ollama on Apple Silicon at reasonable latency. I used a system prompt that frames the model as a wilderness naturalist speaking directly to someone about to leave the trailhead — which keeps the output sensory and concrete rather than encyclopedic.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;ElevenLabs&lt;/strong&gt; converts the script to audio. When the API key is available, it uses a warm documentary voice. When the app is offline — which it often is on trails — it falls back to the browser's native speech synthesis API. The audio guide works with no network at all.&lt;/p&gt;

&lt;p&gt;The frontend is a vanilla HTML/CSS/JS progressive web app with a service worker for offline caching. I deliberately avoided any framework. The app needs to load fast on a spotty connection at a trailhead parking lot, and there is no reason a nature companion needs a JavaScript build chain.&lt;/p&gt;

&lt;p&gt;The garden planner uses the same TabPFN frost engine but exposes the inputs directly: elevation, slope aspect (south-facing slopes hold more solar heat), distance to water (lakes buffer night temperatures), canopy cover. This is the kind of microclimate reasoning that generic zip-code frost calendars completely ignore. A valley garden 200 feet below a south-facing hillside can freeze two full weeks earlier. TabPFN models that interaction from four numbers.&lt;/p&gt;




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

&lt;p&gt;The clearest reason: the app stops working if you replace any open component with a closed API.&lt;/p&gt;

&lt;p&gt;When you're four miles into a national forest, you have no cell signal. OpenAI's API is unusable. Gemma 2 running on your device via Ollama is completely unaffected. The frost planner works because TabPFN runs on your CPU. The audio guide works because the Web Speech API runs in your browser. The trail map works because OpenStreetMap tiles are cached by the service worker. A closed-API version of this app would be a brick the moment you lost signal — which is precisely when you need it.&lt;/p&gt;

&lt;p&gt;The privacy argument follows naturally. A garden planner that knows your exact GPS coordinates, your planting schedule, and your microclimate parameters is building a detailed picture of where you live and what you grow. With local inference, that data never leaves your machine. There is no server log. There is no training data opt-out to manage.&lt;/p&gt;

&lt;p&gt;The cost argument matters for exploration. This app runs at zero marginal cost per query, indefinitely. I can simulate a thousand frost scenarios to model how a new raised bed will behave through October. I can generate a briefing for every trail in a county before a weekend trip and compare them. With a pay-per-token API, that kind of open-ended exploration becomes self-limiting.&lt;/p&gt;

&lt;p&gt;But the most technically interesting reason is about what TabPFN specifically makes possible that closed LLMs cannot. Ask any frontier language model to predict frost risk from elevation, slope aspect, and temperature data and it will confidently hallucinate a number. TabPFN is a foundation model purpose-built for tabular prediction — it produces calibrated uncertainty distributions, not confident guesses. The combination of a language model for prose and a tabular foundation model for structured environmental reasoning is more capable than either alone. Open licensing made it possible to combine them without negotiating API contracts or worrying about which company owns what.&lt;/p&gt;




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

&lt;p&gt;&lt;strong&gt;Best Use of Gemma&lt;/strong&gt; — Google Gemma 2 (&lt;code&gt;gemma2:2b&lt;/code&gt;) runs locally via Ollama as the naturalist field guide writer and Q&amp;amp;A engine. No cloud dependency, no API key required.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Best Use of TabPFN&lt;/strong&gt; — Prior Labs TabPFN v9.1 (&lt;code&gt;TabPFNClassifier&lt;/code&gt; and &lt;code&gt;TabPFNRegressor&lt;/code&gt;) runs three distinct prediction tasks: frost microclimate risk classification, canopy phenology stage regression, and bird occurrence probability ranking.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Best Use of ElevenLabs&lt;/strong&gt; — Converts Gemma's trail scripts to spoken audio for hands-free hiking, with a graceful offline fallback to on-device Web Speech API when the API is unavailable.&lt;/p&gt;

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