<?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: Megh Shah</title>
    <description>The latest articles on DEV Community by Megh Shah (@megh_shah_b6bd27d23860b05).</description>
    <link>https://dev.to/megh_shah_b6bd27d23860b05</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%2F3902169%2F23144b32-549e-4666-a58c-90c72b63e421.png</url>
      <title>DEV Community: Megh Shah</title>
      <link>https://dev.to/megh_shah_b6bd27d23860b05</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/megh_shah_b6bd27d23860b05"/>
    <language>en</language>
    <item>
      <title>AFTERLIGHT: Keeping Family Memories Alive with Open-Weight AI</title>
      <dc:creator>Megh Shah</dc:creator>
      <pubDate>Sun, 01 Nov 2026 01:41:15 +0000</pubDate>
      <link>https://dev.to/megh_shah_b6bd27d23860b05/afterlight-keeping-family-memories-alive-with-open-weight-ai-3p1g</link>
      <guid>https://dev.to/megh_shah_b6bd27d23860b05/afterlight-keeping-family-memories-alive-with-open-weight-ai-3p1g</guid>
      <description>&lt;h1&gt;
  
  
  AFTERLIGHT: Keeping Family Memories Alive with Open-Weight AI
&lt;/h1&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;"We spend so much time building technology that remembers everything about us. But somehow, the stories of the people who mattered most are still the easiest things to lose."&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;




&lt;p&gt;This is a submission for the &lt;strong&gt;&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;/strong&gt; (&lt;code&gt;#hf26challenge&lt;/code&gt;, &lt;code&gt;#devchallenge&lt;/code&gt;).&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Targeted Prize Categories:&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;🏆 &lt;strong&gt;Overall Winner&lt;/strong&gt; ($250)&lt;/li&gt;
&lt;li&gt;🌟 &lt;strong&gt;Best Use of Gemma&lt;/strong&gt; ($200)&lt;/li&gt;
&lt;li&gt;🚀 &lt;strong&gt;Best Use of Render&lt;/strong&gt; ($200)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;🌐 Live Website:&lt;/strong&gt; &lt;a href="https://afterlight-memory-garden.onrender.com/" rel="noopener noreferrer"&gt;https://afterlight-memory-garden.onrender.com/&lt;/a&gt;&lt;br&gt;&lt;br&gt;
&lt;strong&gt;💻 Source Code:&lt;/strong&gt; &lt;a href="https://github.com/Megh-Shah-08/afterlight" rel="noopener noreferrer"&gt;https://github.com/Megh-Shah-08/afterlight&lt;/a&gt;&lt;/p&gt;


&lt;h2&gt;
  
  
  1. 🕊️ What I Built
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;AFTERLIGHT&lt;/strong&gt; is a digital memory garden designed to preserve family histories, personal oral stories, beloved recipes, and recollections of loved ones using open-weight AI (&lt;strong&gt;Google DeepMind's Gemma&lt;/strong&gt;) and 100% private local browser storage (&lt;strong&gt;IndexedDB&lt;/strong&gt;).&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;       🕯️
    (      )      AFTERLIGHT
   .-'"""""'-.    "People leave.
  /'         '\   Their stories don't have to."
 |  MARIGOLD   |
 |  &amp;amp; ANISE    |  Powered by Gemma Open-Weight AI
  \           /   Zero-Cloud Privacy | IndexedDB Vault
   '-.......-'
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h3&gt;
  
  
  ⚠️ What AFTERLIGHT Is NOT:
&lt;/h3&gt;

&lt;p&gt;This is &lt;strong&gt;NOT&lt;/strong&gt; a "ghost simulator" or an AI chatbot pretending to speak from beyond the grave as a deceased relative. We believe impersonating the deceased or fabricating personal facts dishonors genuine human grief. AFTERLIGHT treats human memories as sacred testimony: faithful, grounded, structured, and permanent.&lt;/p&gt;
&lt;h3&gt;
  
  
  Core Experience:
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;The Sanctuary Garden:&lt;/strong&gt; An atmospheric visual sanctuary featuring deep charcoal (&lt;code&gt;#090a0f&lt;/code&gt;), warm candlelight amber (&lt;code&gt;#f59e0b&lt;/code&gt;), and marigold accents (&lt;code&gt;#ea580c&lt;/code&gt;). Users can toggle between three views:

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Sanctuary Grid:&lt;/strong&gt; Interactive cards displaying relationship badges, era pills, remembrance excerpts, and thematic tags.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Timeline Journey:&lt;/strong&gt; A chronological pathway connecting family milestones across generations.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Ofrenda Altar View:&lt;/strong&gt; A three-tiered commemorative display inspired by Día de los Muertos traditions, honoring loved ones with glowing digital shrines.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Plant a Memory:&lt;/strong&gt; A guided memory capture workflow capturing who, when, where, and the authentic story—accompanied by an in-browser voice memo recorder (&lt;code&gt;MediaRecorder&lt;/code&gt; API) to capture spoken words.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Gemma AI Memory Portrait:&lt;/strong&gt; Deep semantic extraction using Gemma into structured portraits:

&lt;ul&gt;
&lt;li&gt;Evocative suggested title honoring the person's character.&lt;/li&gt;
&lt;li&gt;Factual 2-sentence summary.&lt;/li&gt;
&lt;li&gt;Poetic, dignified remembrance tribute passage.&lt;/li&gt;
&lt;li&gt;Respectfully rewritten editorial narrative that preserves facts without embellishment.&lt;/li&gt;
&lt;li&gt;Extracted people, places, events, and a chronological milestone timeline.&lt;/li&gt;
&lt;li&gt;Thematic archetypes (&lt;em&gt;Culinary Heritage&lt;/em&gt;, &lt;em&gt;Resilience&lt;/em&gt;, &lt;em&gt;Oral Tradition&lt;/em&gt;).&lt;/li&gt;
&lt;li&gt;Generational inquiry prompts for future family conversations.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Ask the Garden:&lt;/strong&gt; A conversational memory synthesis archivist. Family members can ask natural questions like &lt;em&gt;\"What did Abuela Elena say about the dough bones?\"&lt;/em&gt; or &lt;em&gt;\"Tell me about Grandpa Arthur's radio in 1974.\"&lt;/em&gt; Gemma retrieves relevant stories from the local vault, answers strictly grounded in preserved memories, and cites clickable source cards.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Data Sovereignty &amp;amp; Export:&lt;/strong&gt; 1-click Markdown export (with YAML frontmatter) and full JSON archive backup/restore.&lt;/li&gt;
&lt;/ol&gt;


&lt;h2&gt;
  
  
  2. 📺 Demo
&lt;/h2&gt;
&lt;h3&gt;
  
  
  🌐 Live Deployment:
&lt;/h3&gt;

&lt;p&gt;Experience AFTERLIGHT live on Render right now:&lt;br&gt;&lt;br&gt;
👉 &lt;strong&gt;&lt;a href="https://afterlight-memory-garden.onrender.com/" rel="noopener noreferrer"&gt;https://afterlight-memory-garden.onrender.com/&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  Screenshots of the Live Application:
&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%2Ff93knppwykbj0eohxfaj.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%2Ff93knppwykbj0eohxfaj.png" alt="AFTERLIGHT Memory Garden Sanctuary"&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%2Fpy676j270j0uy3asvhfx.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%2Fpy676j270j0uy3asvhfx.png" alt="AFTERLIGHT Dashboard and Ofrenda Altar"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  Key Links:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Live Deployed App:&lt;/strong&gt; &lt;a href="https://afterlight-memory-garden.onrender.com/" rel="noopener noreferrer"&gt;https://afterlight-memory-garden.onrender.com/&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;GitHub Repository:&lt;/strong&gt; &lt;a href="https://github.com/Megh-Shah-08/afterlight" rel="noopener noreferrer"&gt;https://github.com/Megh-Shah-08/afterlight&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;1-Click Render Blueprint:&lt;/strong&gt; &lt;a href="https://render.com/deploy?repo=https://github.com/Megh-Shah-08/afterlight" rel="noopener noreferrer"&gt;Deploy on Render&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;DevRelay Interactive Session:&lt;/strong&gt; &lt;a href="https://dev.to/agent_sessions/building-afterlight-open-weight-ai-memory-garden-for-hacktoberfest-week-4-l7e3el"&gt;View Agent Session #1348&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Judge &amp;amp; Tester Note:&lt;/strong&gt; You do &lt;strong&gt;not&lt;/strong&gt; need Ollama installed to test AFTERLIGHT on the deployed link! The live app comes pre-populated with three curated benchmark memories (&lt;em&gt;Abuela Elena's Anise Bread&lt;/em&gt;, &lt;em&gt;Grandpa Arthur's Shortwave Radio&lt;/em&gt;, and &lt;em&gt;The Peat Fire on Inisheer&lt;/em&gt;) and instant clickable questions in &lt;em&gt;Ask the Garden&lt;/em&gt;. When Ollama is running locally, it seamlessly switches to live open-weight Gemma inference.&lt;/p&gt;
&lt;/blockquote&gt;


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

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

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Repository:&lt;/strong&gt; &lt;a href="https://github.com/Megh-Shah-08/afterlight" rel="noopener noreferrer"&gt;https://github.com/Megh-Shah-08/afterlight&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Key Modules:&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;src/types/memory.ts&lt;/code&gt;: Strict TypeScript interfaces for memories, portraits, and timeline entries.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;src/lib/storage.ts&lt;/code&gt;: Client-side IndexedDB persistence engine with JSON import/export and Markdown generation.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;src/lib/ollama.ts&lt;/code&gt;: Ollama connectivity detector and model router.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;src/app/api/ollama/status/route.ts&lt;/code&gt;: Real-time probe to detect installed Gemma models.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;src/app/api/ollama/portrait/route.ts&lt;/code&gt;: Structured JSON extraction prompt enforcing zero-hallucination.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;src/app/api/ollama/ask/route.ts&lt;/code&gt;: Retrieval-augmented memory answering strictly grounded in source stories.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;render.yaml&lt;/code&gt;: Official Render Blueprint specification for zero-config production deployment.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;


&lt;h2&gt;
  
  
  4. 🏗️ How I Built It
&lt;/h2&gt;


&lt;pre data-lang="mermaid"&gt;&lt;code&gt;flowchart TD
    User([User / Family Historian]) --&amp;gt;|Writes story or records voice| Capture[Plant a Memory Experience]
    Capture --&amp;gt;|1. Immediate Save| IDB[(IndexedDB Local Vault)]

    Capture --&amp;gt;|2. Structured Request| APIRoute[Next.js API: /api/ollama/portrait]

    subgraph Local Inference Layer
        APIRoute --&amp;gt;|HTTP POST :11434| Ollama[Local Ollama Engine]
        Ollama --&amp;gt;|Gemma 3:4b / Gemma 2:2b| GemmaModel[Gemma Open-Weight Weights]
        GemmaModel --&amp;gt;|Strict JSON Schema| APIRoute
    end

    subgraph Fallback / Demo Engine
        APIRoute -.-&amp;gt;|If Ollama offline| LocalEngine[Local Heuristic Synthesizer]
        LocalEngine -.-&amp;gt;|Immediate Preview| APIRoute
    end

    APIRoute --&amp;gt;|Memory Portrait| IDB
    IDB --&amp;gt;|Renders| Garden[The Garden Dashboard]
    IDB --&amp;gt;|Renders| Detail[Portrait Detail Modal]

    User --&amp;gt;|Ask Question| AskGarden[Ask the Garden]
    AskGarden --&amp;gt;|Retrieve Relevant Stories| APIRouteAsk[Next.js API: /api/ollama/ask]
    APIRouteAsk --&amp;gt;|Strictly Grounded Prompt| Ollama
    Ollama --&amp;gt;|Synthesized Answer + Citations| AskGarden&lt;/code&gt;&lt;/pre&gt;


&lt;h3&gt;
  
  
  Architectural Decisions:
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Next.js 14 App Router:&lt;/strong&gt; High performance React server and client components, strict TypeScript compilation, and optimized bundle sizes.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;IndexedDB Local Persistence:&lt;/strong&gt; Eliminates external database lock-in. Stories are permanently saved in the user's browser, surviving refreshes without any cloud database credentials.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Structured Open-Weight Inference:&lt;/strong&gt; Gemma is invoked via Ollama with strict instruction parameters (&lt;code&gt;temperature: 0.2&lt;/code&gt;, &lt;code&gt;format: \"json\"&lt;/code&gt;). The prompt explicitly forbids inventing biographical details, dates, or quotations not present in the authentic story.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Retrieval-Augmented Grounding:&lt;/strong&gt; In &lt;em&gt;Ask the Garden&lt;/em&gt;, queries are matched against local memory tokens. Only candidate memories are passed into the context window. The system prompt instructs Gemma to respond with explicit honesty if a detail was never recorded.&lt;/li&gt;
&lt;/ol&gt;


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

&lt;p&gt;DEV Hacktoberfest Week 4 asks: &lt;strong&gt;\"Why does open innovation matter for what you built?\"&lt;/strong&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  1. Privacy for Sacred Human Stories
&lt;/h3&gt;

&lt;p&gt;Family histories contain sensitive vulnerabilities: illnesses, historical hardships, regional dialects, and personal grief. Sending grandmother's memories to proprietary cloud APIs exposes intimate family history to external data harvesting and terms of service changes. Running &lt;strong&gt;Gemma locally via Ollama&lt;/strong&gt; ensures your family memories never leave your machine.&lt;/p&gt;
&lt;h3&gt;
  
  
  2. Dignity &amp;amp; Anti-Hallucination
&lt;/h3&gt;

&lt;p&gt;Generic commercial LLMs are often tuned to be sycophantic or creative to a fault, happily inventing biographical facts. Gemma's strong instruction-following capability allows AFTERLIGHT to enforce &lt;strong&gt;strict system boundaries&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;em&gt;Never invent dates.&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Never invent people.&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Unknown information must remain unknown.&lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  3. Permanence: Working with the Lights and Internet Off
&lt;/h3&gt;

&lt;p&gt;If a proprietary AI company goes out of business, your memory companion vanishes. With open-weight Gemma running on local hardware, AFTERLIGHT works on an airplane, in a remote cabin, or thirty years from now when current cloud companies no longer exist.&lt;/p&gt;


&lt;h2&gt;
  
  
  6. 🤖 My Agent Session
&lt;/h2&gt;

&lt;p&gt;This project was designed, built, tested, and shipped using Google Antigravity and DevRelay:&lt;/p&gt;


&lt;div class="ltag-agent-session"&gt;
  &lt;div class="agent-session-header"&gt;
    
    &lt;span class="agent-session-tool-icon-badge" title="Gemini CLI"&gt;
&lt;/span&gt;
    &lt;span class="agent-session-title"&gt;Building AFTERLIGHT: Open-Weight AI Memory Garden for Hacktoberfest Week 4&lt;/span&gt;
      &lt;span class="agent-session-model-badge"&gt;Gemma 3 (4B) / Gemma 2 (2B)&lt;/span&gt;
  &lt;/div&gt;

  &lt;div class="agent-session-scroll"&gt;

      &lt;div class="agent-session-message agent-session-user"&gt;
        &lt;div class="agent-session-role-badge agent-session-role-user"&gt;
          You
        &lt;/div&gt;
        &lt;div class="agent-session-content"&gt;
                &lt;div class="agent-session-text"&gt;
                  &lt;p&gt;Build AFTERLIGHT, a premium AI-powered digital memory garden that preserves family histories, personal stories, and memories of loved ones using open-weight AI (Gemma via Ollama) for DEV Hacktoberfest Week 4: Ghost in the Machine. Ensure zero-cloud data ownership with IndexedDB and strict anti-hallucination boundaries.&lt;/p&gt;

                &lt;/div&gt;
        &lt;/div&gt;
      &lt;/div&gt;

      &lt;div class="agent-session-message agent-session-assistant"&gt;
        &lt;div class="agent-session-role-badge agent-session-role-assistant"&gt;
          Agent
        &lt;/div&gt;
        &lt;div class="agent-session-content"&gt;
                &lt;div&gt;
                  &lt;div class="agent-session-text agent-session-text-collapse"&gt;
                    &lt;p&gt;Understood. We are designing AFTERLIGHT as an authentic memory garden rather than a chatbot. Key architectural commitments:&lt;br&gt;
1. Local-first data sovereignty: Stories stored privately in browser IndexedDB.&lt;br&gt;
2. Open-weight inference: Using Google DeepMind's Gemma (gemma3:4b / gemma2:2b) via local Ollama.&lt;br&gt;
3. Anti-hallucination: System prompt forbids fabricating dates, people, or quotations.&lt;br&gt;
4. Editorial synthesis: Generating structured Memory Portraits with summary, remembrance tribute, timeline, and inquiry prompts.&lt;br&gt;
5. Grounded memory Q&amp;amp;A: 'Ask the Garden' answers questions strictly derived from preserved stories with source citations.&lt;/p&gt;

                  &lt;/div&gt;
                  Show more
                &lt;/div&gt;
              &lt;div class="agent-session-tool-call"&gt;
                
                  &lt;span class="agent-session-chevron"&gt;▸&lt;/span&gt;
                  &lt;span class="tool-name tool-name-createnextapp"&gt;create_next_app&lt;/span&gt;
                    &lt;span class="tool-input-preview"&gt;npx create-next-app afterlight --typescript --tailwind --app&lt;/span&gt;
                
                &lt;div class="agent-session-tool-detail"&gt;
                    &lt;div class="tool-section"&gt;
                      &lt;div class="tool-section-label"&gt;Input&lt;/div&gt;
                      &lt;pre class="agent-session-pre"&gt;&lt;code&gt;npx create-next-app afterlight --typescript --tailwind --app&lt;/code&gt;&lt;/pre&gt;
                    &lt;/div&gt;
                    &lt;div class="tool-section"&gt;
                      &lt;div class="tool-section-label"&gt;Output&lt;/div&gt;
                      &lt;pre class="agent-session-pre"&gt;&lt;code&gt;Next.js 14 App Router project scaffolded with TypeScript and Tailwind CSS.&lt;/code&gt;&lt;/pre&gt;
                    &lt;/div&gt;
                &lt;/div&gt;
              &lt;/div&gt;
        &lt;/div&gt;
      &lt;/div&gt;

      &lt;div class="agent-session-message agent-session-user"&gt;
        &lt;div class="agent-session-role-badge agent-session-role-user"&gt;
          You
        &lt;/div&gt;
        &lt;div class="agent-session-content"&gt;
                &lt;div class="agent-session-text"&gt;
                  &lt;p&gt;Now implement the Ollama integration layer, structured memory portraits, guided memory capture with voice recording, and the Día de los Muertos ofrenda altar view.&lt;/p&gt;

                &lt;/div&gt;
        &lt;/div&gt;
      &lt;/div&gt;

      &lt;div class="agent-session-message agent-session-assistant"&gt;
        &lt;div class="agent-session-role-badge agent-session-role-assistant"&gt;
          Agent
        &lt;/div&gt;
        &lt;div class="agent-session-content"&gt;
                &lt;div&gt;
                  &lt;div class="agent-session-text agent-session-text-collapse"&gt;
                    &lt;p&gt;Implemented the core systems:&lt;br&gt;
- /api/ollama/status: Real-time detection of local Ollama runtime and installed Gemma models.&lt;br&gt;
- /api/ollama/portrait: Structured extraction enforcing strict JSON schema (title, summary, remembrance passage, rewritten narrative, entities, timeline, themes, tags, follow-ups).&lt;br&gt;
- /api/ollama/ask: Retrieval-augmented question answering grounded exclusively in preserved memories with clickable citations.&lt;br&gt;
- PlantMemory: Step-by-step guided capture with HTML5 MediaRecorder audio memo recording.&lt;br&gt;
- Multi-view Garden: Grid view, Timeline journey, and Ofrenda Altar view.&lt;br&gt;
- Export engine: Full JSON archive backup and formatted Markdown export with YAML frontmatter.&lt;/p&gt;

                  &lt;/div&gt;
                  Show more
                &lt;/div&gt;
              &lt;div class="agent-session-tool-call"&gt;
                
                  &lt;span class="agent-session-chevron"&gt;▸&lt;/span&gt;
                  &lt;span class="tool-name tool-name-npmbuild"&gt;npm_build&lt;/span&gt;
                    &lt;span class="tool-input-preview"&gt;npm run build&lt;/span&gt;
                
                &lt;div class="agent-session-tool-detail"&gt;
                    &lt;div class="tool-section"&gt;
                      &lt;div class="tool-section-label"&gt;Input&lt;/div&gt;
                      &lt;pre class="agent-session-pre"&gt;&lt;code&gt;npm run build&lt;/code&gt;&lt;/pre&gt;
                    &lt;/div&gt;
                    &lt;div class="tool-section"&gt;
                      &lt;div class="tool-section-label"&gt;Output&lt;/div&gt;
                      &lt;pre class="agent-session-pre"&gt;&lt;code&gt;Compiled successfully. 0 TypeScript errors, 8 routes generated. Local production server active on port 3000.&lt;/code&gt;&lt;/pre&gt;
                    &lt;/div&gt;
                &lt;/div&gt;
              &lt;/div&gt;
        &lt;/div&gt;
      &lt;/div&gt;
  &lt;/div&gt;

  &lt;div class="agent-session-footer"&gt;
    &lt;span class="agent-session-meta"&gt;
        4 of 4 messages
    &lt;/span&gt;
  &lt;/div&gt;
&lt;/div&gt;



&lt;p&gt;&lt;em&gt;(Interactive session: &lt;a href="https://dev.to/agent_sessions/building-afterlight-open-weight-ai-memory-garden-for-hacktoberfest-week-4-l7e3el"&gt;dev.to/agent_sessions/building-afterlight-open-weight-ai-memory-garden-for-hacktoberfest-week-4-l7e3el&lt;/a&gt;)&lt;/em&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  7. 🕯️ The Spirit of It
&lt;/h2&gt;

&lt;p&gt;Week 4 of Hacktoberfest brings together Halloween (October 31) and &lt;strong&gt;Día de los Muertos (November 1 &amp;amp; 2)&lt;/strong&gt;. &lt;/p&gt;

&lt;p&gt;In traditional Mexican culture, the Day of the Dead is not a somber or frightening occasion. It is an act of joyful, tender remembrance. Families build &lt;em&gt;ofrendas&lt;/em&gt;, scatter marigold petals (&lt;em&gt;cempasúchil&lt;/em&gt;) whose scent guides the spirits home, and lay out the favorite foods, songs, and laughter of those who walked ahead of us.&lt;/p&gt;

&lt;p&gt;AFTERLIGHT was born from this exact spirit. We do not need AI to simulate the voices of the dead or generate eerie synthetic illusions. What we need is technology that helps us slow down, honor the stories we were trusted with, and ensure that when people leave, their wisdom and love remain glowing in the afterlight.&lt;/p&gt;




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

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Overall Winner ($250):&lt;/strong&gt; An end-to-end, emotionally resonant, highly original application embodying the \"Ghost in the Machine\" prompt through memory preservation and Día de los Muertos remembrance.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Best Use of Gemma ($200):&lt;/strong&gt; Deep open-weight integration using Gemma (3:4b / 2:2b) for structured entity extraction, editorial remembrance generation, and strictly grounded conversational search.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Best Use of Render ($200):&lt;/strong&gt; Production-ready Next.js application with an official &lt;code&gt;render.yaml&lt;/code&gt; Blueprint specification, automated health checks, and live cloud deployment on Render at &lt;a href="https://afterlight-memory-garden.onrender.com/" rel="noopener noreferrer"&gt;https://afterlight-memory-garden.onrender.com/&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>devchallenge</category>
      <category>hf26challenge</category>
      <category>gemma</category>
      <category>opensource</category>
    </item>
    <item>
      <title>I Built SnoozeOps: An Open-Source AI Data Janitor That Does the Boring Spreadsheet Work</title>
      <dc:creator>Megh Shah</dc:creator>
      <pubDate>Mon, 26 Oct 2026 01:13:22 +0000</pubDate>
      <link>https://dev.to/megh_shah_b6bd27d23860b05/i-built-snoozeops-an-open-source-ai-data-janitor-that-does-the-boring-spreadsheet-work-1i41</link>
      <guid>https://dev.to/megh_shah_b6bd27d23860b05/i-built-snoozeops-an-open-source-ai-data-janitor-that-does-the-boring-spreadsheet-work-1i41</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;
  
  
  I Built SnoozeOps: An Open-Source AI Data Janitor That Does the Boring Spreadsheet Work
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;"You snooze. Your data gets cleaned."&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  1. The Problem: The Agony of Spreadsheet Inspection
&lt;/h2&gt;

&lt;p&gt;Nobody got into software engineering or data analysis because they dreamed of squinting at 5,000 spreadsheet rows looking for broken formulas, decimal slips, and negative customer tenures.&lt;/p&gt;

&lt;p&gt;Yet every week, millions of developers and analysts open CSV files and perform the same soul-draining manual inspection:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Did someone key in an order total as &lt;code&gt;$1,499.00&lt;/code&gt; for a USB cable that costs &lt;code&gt;$14.99&lt;/code&gt;?&lt;/li&gt;
&lt;li&gt;Did an offshore data entry clerk enter negative age (&lt;code&gt;-28&lt;/code&gt;) or future signup timestamps (&lt;code&gt;2029-11-14&lt;/code&gt;)?&lt;/li&gt;
&lt;li&gt;Did an Excel formula break silently, outputting a mismatch between unit price, quantity, and total revenue?&lt;/li&gt;
&lt;li&gt;Did an enterprise customer get assigned an NPS score of &lt;code&gt;15&lt;/code&gt; when the scale strictly tops out at &lt;code&gt;10&lt;/code&gt;?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Missing these issues is embarrassingly easy for human eyes after 20 minutes of scrolling. But letting bad data slip into production downstream destroys analytics dashboards, corrupts machine learning training sets, and triggers costly billing reconciliations.&lt;/p&gt;

&lt;p&gt;October 20 is &lt;strong&gt;International Sloth Day&lt;/strong&gt;, celebrating animals that conserve their energy and refuse to do unnecessary manual labor. That was the spark: &lt;strong&gt;what if an open-weight AI agent could do the tedious inspection work while you take a nap, and hand you a clean, reviewable dataset with a cryptographic audit trail when you wake up?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;That is &lt;strong&gt;SnoozeOps&lt;/strong&gt;.&lt;/p&gt;




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

&lt;p&gt;&lt;strong&gt;SnoozeOps&lt;/strong&gt; is an open-source, local-first AI data janitor that automates spreadsheet inspection. It is not another generic chatbot where you paste a table into a prompt window; it is a dedicated developer tool that:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Profiles Your Data&lt;/strong&gt;: Automatically computes column types, null rates, statistical moments (mean, std, median, IQR), and distribution histograms.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Detects Suspicious Flaws Multi-Tiered&lt;/strong&gt;: Runs Median Absolute Deviation (MAD) Z-score, Tukey fences, decimal slip heuristics, domain boundary checks, Levenshtein categorical typo detection, and Prior Labs' &lt;strong&gt;TabPFN&lt;/strong&gt; tabular foundation model.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Explains with Open-Weight Gemma&lt;/strong&gt;: Generates clear, grounded explanations and proposes safe, typed corrections—backed by an explicit, transparent deterministic fallback.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Empowers Human Review&lt;/strong&gt;: Gives engineers a clean grid interface to approve, edit, or reject proposed fixes before a single byte of data changes.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Preserves Provenance with SHA-256&lt;/strong&gt;: Leaves raw data untouched, exports a clean CSV, and generates an itemized Markdown audit trail with cryptographic signatures.&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  3. Try It Yourself
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;🌐 Live Demo (Render Cloud):&lt;/strong&gt; &lt;a href="https://snooze-ops-frontend.onrender.com" rel="noopener noreferrer"&gt;https://snooze-ops-frontend.onrender.com&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;💻 GitHub Repository:&lt;/strong&gt; &lt;a href="https://github.com/Megh-Shah-08/snooze-ops" rel="noopener noreferrer"&gt;https://github.com/Megh-Shah-08/snooze-ops&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;⚡ Live Backend API:&lt;/strong&gt; &lt;a href="https://snooze-ops-backend.onrender.com" rel="noopener noreferrer"&gt;https://snooze-ops-backend.onrender.com&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You can load built-in sample datasets (E-Commerce Retail, Clinical Health, SaaS Metrics, or the Seeded Benchmark) with one click, or drag and drop any CSV file from your computer.&lt;/p&gt;




&lt;h2&gt;
  
  
  4. How It Works: Architecture &amp;amp; Data Flow
&lt;/h2&gt;

&lt;p&gt;SnoozeOps separates statistical anomaly detection, neural tabular residual prediction, and natural-language explanation into dedicated, decoupled components:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;┌────────────────────────────────────────────────────────┐
│                   Next.js 14 Frontend                  │
│       Spreadsheet Grid • Anomaly Review • Settings     │
└───────────────────────────┬────────────────────────────┘
                            │ REST JSON API
┌───────────────────────────▼────────────────────────────┐
│                    FastAPI Backend                     │
│                                                        │
│  ┌──────────────────┐    ┌───────────────────────────┐ │
│  │ Column Profiler  │    │  Statistical Detectors    │ │
│  │ (Stats &amp;amp; Bins)   │    │  (MAD, Tukey, Slip, Typos)│ │
│  └────────┬─────────┘    └─────────────┬─────────────┘ │
│           │                            │               │
│           └──────────────┬─────────────┘               │
│                          │                             │
│       ┌──────────────────▼──────────────────┐          │
│       │ TabPFN Tabular Prediction Engine    │          │
│       │ (Prior Labs TabPFN / IsoForest)     │          │
│       └──────────────────┬──────────────────┘          │
│                          │                             │
│       ┌──────────────────▼──────────────────┐          │
│       │ LLM Janitor &amp;amp; Deterministic Engine  │          │
│       │ (Open-Weight Gemma 2 / Rule Fallback│          │
│       └──────────────────┬──────────────────┘          │
│                          │                             │
│       ┌──────────────────▼──────────────────┐          │
│       │ Audit Engine &amp;amp; Cryptographic Signer │          │
│       │ (Raw Preservation &amp;amp; SHA-256 Hashes) │          │
│       └─────────────────────────────────────┘          │
└────────────────────────────────────────────────────────┘
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h3&gt;
  
  
  The Component Breakdown:
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Next.js 14 Frontend&lt;/strong&gt;: Built with TypeScript, Tailwind CSS, and Lucide icons. Uses a forest-green and warm-cream palette inspired by developer tools like Linear and Supabase. Includes an interactive spreadsheet grid that highlights anomalous cells with live tooltips.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;FastAPI Engine (&lt;code&gt;backend/&lt;/code&gt;)&lt;/strong&gt;: High-performance asynchronous Python backend with NumPy and Pandas.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Statistical Engine (&lt;code&gt;backend/detectors/statistical.py&lt;/code&gt;)&lt;/strong&gt;: Computes non-parametric Tukey fences ($Q_1 - 1.5 \times \text{IQR}$) and MAD Z-scores ($0.6745 \times \frac{|x - \text{median}|}{\text{MAD}}$) to remain resilient against extreme outliers that fool standard deviation tests.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;TabPFN Residual Detector (&lt;code&gt;backend/detectors/tabpfn_detector.py&lt;/code&gt;)&lt;/strong&gt;: Prior Labs' TabPFN tabular foundation model fits a prior-data fitted network across numeric dimensions to evaluate multivariate conditional residuals ($&amp;gt;3.0\sigma$).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Gemma Reasoning Engine (&lt;code&gt;backend/llm_janitor.py&lt;/code&gt;)&lt;/strong&gt;: Synthesizes grounded natural-language explanations and safe corrections using Google's open-weight &lt;strong&gt;Gemma 2&lt;/strong&gt; (&lt;code&gt;gemma2:2b&lt;/code&gt; or &lt;code&gt;gemma2-9b-it&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Audit &amp;amp; Cryptographic Signer (&lt;code&gt;backend/audit.py&lt;/code&gt;)&lt;/strong&gt;: Applies approved transformations to a working copy, calculates input/output SHA-256 hashes, and records itemized provenance logs.&lt;/li&gt;
&lt;/ol&gt;


&lt;h2&gt;
  
  
  5. Key Engineering Decisions
&lt;/h2&gt;
&lt;h3&gt;
  
  
  Decision 1: Never Fake Model Inference
&lt;/h3&gt;

&lt;p&gt;Too many AI demos hardcode fake LLM responses in the frontend. SnoozeOps takes a transparent architectural stance:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;If a live Gemma model is configured (via local Ollama, Groq, or Hugging Face), it makes live structured-output calls.&lt;/li&gt;
&lt;li&gt;If no model is configured or if the model service fails, SnoozeOps transparently falls back to a deterministic rules engine.&lt;/li&gt;
&lt;li&gt;Every single anomaly card explicitly displays its engine origin: e.g., &lt;code&gt;Engine: Gemma 2 (Live)&lt;/code&gt; or &lt;code&gt;Engine: Deterministic Janitor Engine (Verified Fallback)&lt;/code&gt;.
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="c1"&gt;# From backend/llm_janitor.py
&lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;provider&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;ollama&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;groq&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;huggingface&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="ow"&gt;and&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;provider&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;ollama&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt; &lt;span class="ow"&gt;or&lt;/span&gt; &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;api_key&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="k"&gt;try&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="n"&gt;enhanced&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;meta&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;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;_call_gemma_model&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;anomalies&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;df_context&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;enhanced&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;meta&lt;/span&gt;
    &lt;span class="k"&gt;except&lt;/span&gt; &lt;span class="nb"&gt;Exception&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="n"&gt;enhanced&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;meta&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;_deterministic_fallback&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;anomalies&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="n"&gt;meta&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;is_fallback&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="bp"&gt;True&lt;/span&gt;
        &lt;span class="n"&gt;meta&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;fallback_reason&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&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;Model &lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt; unavailable: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nf"&gt;str&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="p"&gt;)[&lt;/span&gt;&lt;span class="si"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;150&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;. Used deterministic janitor.&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;enhanced&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;meta&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h3&gt;
  
  
  Decision 2: Decoupling Heuristics from Language Models
&lt;/h3&gt;

&lt;p&gt;Language models are notoriously bad at basic floating-point arithmetic and computing column percentiles across thousands of numbers. Asking an LLM &lt;em&gt;"Find the 99th percentile outlier in this 20,000-row column"&lt;/em&gt; is expensive, slow, and unreliable.&lt;/p&gt;

&lt;p&gt;Instead, SnoozeOps uses Python and NumPy for high-speed statistical bounds and TabPFN for tabular regression. Gemma is used for what it excels at: &lt;strong&gt;grounded causal reasoning and semantic formatting&lt;/strong&gt; (e.g., explaining &lt;em&gt;why&lt;/em&gt; a decimal was shifted and providing human-readable context).&lt;/p&gt;
&lt;h3&gt;
  
  
  Decision 3: Sub-Millisecond Lazy Loading for TabPFN
&lt;/h3&gt;

&lt;p&gt;TabPFN is a powerful foundation model for tabular data, but eagerly importing PyTorch and neural network weights on application startup adds 3–5 seconds of cold-start latency.&lt;/p&gt;

&lt;p&gt;In &lt;a href="https://github.com/Megh-Shah-08/snooze-ops/blob/main/backend/detectors/tabpfn_detector.py" rel="noopener noreferrer"&gt;&lt;code&gt;backend/detectors/tabpfn_detector.py&lt;/code&gt;&lt;/a&gt;, I implemented lazy evaluation:&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="n"&gt;_tabpfn_module&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="bp"&gt;None&lt;/span&gt;
&lt;span class="n"&gt;_tabpfn_attempted&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="bp"&gt;False&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;_get_tabpfn&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;
    &lt;span class="k"&gt;global&lt;/span&gt; &lt;span class="n"&gt;_tabpfn_module&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;_tabpfn_attempted&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="ow"&gt;not&lt;/span&gt; &lt;span class="n"&gt;_tabpfn_attempted&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="n"&gt;_tabpfn_attempted&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="bp"&gt;True&lt;/span&gt;
        &lt;span class="k"&gt;try&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
            &lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;tabpfn&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;TabPFNRegressor&lt;/span&gt;
            &lt;span class="n"&gt;_tabpfn_module&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;TabPFNRegressor&lt;/span&gt;
        &lt;span class="k"&gt;except&lt;/span&gt; &lt;span class="nb"&gt;Exception&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
            &lt;span class="n"&gt;_tabpfn_module&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="bp"&gt;None&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;_tabpfn_module&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;This ensures standard statistical analysis and API health checks start in under 5 milliseconds.&lt;/p&gt;


&lt;h2&gt;
  
  
  6. Why Open Innovation Matters
&lt;/h2&gt;

&lt;p&gt;Building SnoozeOps around open-weight models and open-source tooling is not just an aesthetic choice; it fundamentally alters the software economics and privacy guarantees:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Zero Data Egress &amp;amp; Total Privacy&lt;/strong&gt;: Spreadsheets often hold sensitive financial ledgers, customer emails, patient vital statistics, and private revenue metrics. Sending full CSVs to proprietary cloud APIs is an immediate compliance violation for HIPAA, GDPR, or SOC2. Because Gemma and TabPFN run locally or within your own virtual private cloud, data never leaves the host boundary.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Zero Marginal Inference Cost&lt;/strong&gt;: Cleaning 100,000 spreadsheet rows through proprietary cloud APIs creates unpredictable token charges that scale linearly with dataset volume. With open-weight models, running 1,000 cleaning sweeps costs exactly $0 in API fees.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No Vendor Lock-In&lt;/strong&gt;: If a proprietary provider changes pricing, deprecates an endpoint, or alters terms of service, an enterprise data pipeline breaks. Open-weight models guarantee long-term stability and reproducibility.&lt;/li&gt;
&lt;/ol&gt;


&lt;h2&gt;
  
  
  7. The Lazy Payoff: Measured Results &amp;amp; Benchmark
&lt;/h2&gt;

&lt;p&gt;To prove that SnoozeOps delivers measurable results rather than hand-wavy marketing, the repository includes a seeded 100-row ground-truth evaluation dataset (&lt;a href="https://github.com/Megh-Shah-08/snooze-ops/blob/main/backend/data/ground_truth_test_data.csv" rel="noopener noreferrer"&gt;&lt;code&gt;backend/data/ground_truth_test_data.csv&lt;/code&gt;&lt;/a&gt;) containing 20 pre-labeled real-world anomalies.&lt;/p&gt;

&lt;p&gt;Anyone can run the live benchmark directly in the UI or via Python:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;python &lt;span class="nt"&gt;-c&lt;/span&gt; &lt;span class="s2"&gt;"import urllib.request, json; print(json.loads(urllib.request.urlopen('http://127.0.0.1:8000/api/evaluate').read())['evaluation']['comparison'])"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h3&gt;
  
  
  Reproducible Benchmark Results:
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Metric&lt;/th&gt;
&lt;th&gt;Naive 3-Sigma Z-Score Baseline&lt;/th&gt;
&lt;th&gt;SnoozeOps Hybrid AI Janitor&lt;/th&gt;
&lt;th&gt;Gain&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Anomaly Recall&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;35.0%&lt;/strong&gt; (Missed 13 of 20)&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;100.0%&lt;/strong&gt; (Caught 20 of 20)&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;+65.0% Recall&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Precision&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;100.0%&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;100.0%&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Zero degradation&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;False Positives&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;0&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Clean baseline&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;F1 Score&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;0.52&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;1.00&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;+0.48 F1&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Runtime Latency&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;2.1 ms&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;320.4 ms&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Sub-second&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;
&lt;h3&gt;
  
  
  Why Did Naive 3-Sigma Miss 65% of Anomalies?
&lt;/h3&gt;

&lt;p&gt;Standard $3\sigma$ standard deviation baselines only catch astronomical numerical spikes. They are completely blind to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Accidental negative values in strictly non-negative columns (e.g., negative customer tenure &lt;code&gt;-8&lt;/code&gt; months).&lt;/li&gt;
&lt;li&gt;Decimal shift errors on lower-tier items (e.g., a $12 item keyed as $120 still falls within a $500 column standard deviation).&lt;/li&gt;
&lt;li&gt;Domain boundary breaches (e.g., NPS score of &lt;code&gt;15&lt;/code&gt; where valid range is &lt;code&gt;0–10&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;Formula mismatches (e.g., unit price $\times$ quantity $\neq$ total amount).&lt;/li&gt;
&lt;li&gt;Temporal typos (e.g., signups recorded in the year &lt;code&gt;2029&lt;/code&gt;).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;SnoozeOps caught every single one of these subtle corruptions in 320 milliseconds without a single false positive.&lt;/p&gt;


&lt;h2&gt;
  
  
  8. What I Learned &amp;amp; What Remains
&lt;/h2&gt;
&lt;h3&gt;
  
  
  Lessons Learned:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Free Tier Memory Limits Are Real&lt;/strong&gt;: When containerizing Ollama with &lt;code&gt;gemma2:2b&lt;/code&gt; (a 1.6GB GGUF model) on Render's Free Tier, Linux's Out-Of-Memory (OOM) killer immediately terminates the container because Free Tier caps instances at 512MB RAM. Transparently supporting Groq's free cloud Gemma API alongside local Ollama proved essential for users running lightweight infra.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Pandas &lt;code&gt;NaN&lt;/code&gt; Breaks FastAPI JSON&lt;/strong&gt;: Standard Python &lt;code&gt;json.dumps&lt;/code&gt; throws &lt;code&gt;ValueError: Out of range float values are not JSON compliant&lt;/code&gt; when a DataFrame contains IEEE NaN floats. Sanitizing DataFrames to &lt;code&gt;object&lt;/code&gt; dtype with &lt;code&gt;.where(pd.notnull(df), None)&lt;/code&gt; was critical for rock-solid stability.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  What Remains:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Multi-File Foreign Key Consistency&lt;/strong&gt;: SnoozeOps currently inspects single tabular spreadsheets. Future iterations will support foreign-key cross-table validation (e.g., checking that &lt;code&gt;customer_id&lt;/code&gt; in orders exists in customers).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Streaming Ingestion&lt;/strong&gt;: Adding chunked streaming for datasets exceeding 1,000,000 rows.&lt;/li&gt;
&lt;/ul&gt;


&lt;h2&gt;
  
  
  9. Under the Hood: Technology Stack &amp;amp; Setup
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Frontend&lt;/strong&gt;: Next.js 14, React 18, TypeScript, Tailwind CSS, Lucide Icons&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Backend&lt;/strong&gt;: Python 3.11, FastAPI, Uvicorn, Pandas, NumPy, Scikit-Learn&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Foundation Models&lt;/strong&gt;: Prior Labs TabPFN, Google Gemma 2 (via Ollama / Groq)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Deployment&lt;/strong&gt;: Render Cloud (Infrastructure-as-Code via &lt;code&gt;render.yaml&lt;/code&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  Run It Locally in 2 Minutes:
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# 1. Clone repository&lt;/span&gt;
git clone https://github.com/Megh-Shah-08/snooze-ops.git
&lt;span class="nb"&gt;cd &lt;/span&gt;snooze-ops

&lt;span class="c"&gt;# 2. Setup backend&lt;/span&gt;
python &lt;span class="nt"&gt;-m&lt;/span&gt; venv venv
&lt;span class="c"&gt;# On Windows:&lt;/span&gt;
.&lt;span class="se"&gt;\v&lt;/span&gt;&lt;span class="nb"&gt;env&lt;/span&gt;&lt;span class="se"&gt;\S&lt;/span&gt;cripts&lt;span class="se"&gt;\a&lt;/span&gt;ctivate
&lt;span class="c"&gt;# On Linux/macOS:&lt;/span&gt;
&lt;span class="nb"&gt;source &lt;/span&gt;venv/bin/activate
pip &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-r&lt;/span&gt; backend/requirements.txt
python &lt;span class="nt"&gt;-m&lt;/span&gt; uvicorn backend.main:app &lt;span class="nt"&gt;--port&lt;/span&gt; 8000

&lt;span class="c"&gt;# 3. Setup frontend (in a separate terminal)&lt;/span&gt;
&lt;span class="nb"&gt;cd &lt;/span&gt;frontend
npm &lt;span class="nb"&gt;install
&lt;/span&gt;npm run dev
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Open &lt;a href="http://localhost:3000" rel="noopener noreferrer"&gt;http://localhost:3000&lt;/a&gt; in your browser.&lt;/p&gt;


&lt;h2&gt;
  
  
  10. My Build Session
&lt;/h2&gt;

&lt;p&gt;I captured the architectural session behind SnoozeOps using DevRelay. You can inspect the interactive session transcript with code prompts, detector implementations, and benchmark runs here:&lt;/p&gt;


&lt;div class="ltag-agent-session"&gt;
  &lt;div class="agent-session-header"&gt;
    
    &lt;span class="agent-session-tool-icon-badge" title="Gemini CLI"&gt;
&lt;/span&gt;
    &lt;span class="agent-session-title"&gt;Building SnoozeOps: Open-Source AI Spreadsheet Janitor&lt;/span&gt;
  &lt;/div&gt;

  &lt;div class="agent-session-scroll"&gt;

      &lt;div class="agent-session-message agent-session-user"&gt;
        &lt;div class="agent-session-role-badge agent-session-role-user"&gt;
          You
        &lt;/div&gt;
        &lt;div class="agent-session-content"&gt;
                &lt;div class="agent-session-text"&gt;
                  &lt;p&gt;Build SnoozeOps for Hacktoberfest 2026 Week 3: Slow and Steady. It should automate tedious spreadsheet inspection: detect suspicious anomalies (decimal slips, domain violations, typos, formula errors), evaluate TabPFN tabular residuals, explain errors using open-weight Gemma, prepare safe reviewable fixes, and generate SHA-256 audit reports.&lt;/p&gt;

                &lt;/div&gt;
        &lt;/div&gt;
      &lt;/div&gt;

      &lt;div class="agent-session-message agent-session-assistant"&gt;
        &lt;div class="agent-session-role-badge agent-session-role-assistant"&gt;
          Agent
        &lt;/div&gt;
        &lt;div class="agent-session-content"&gt;
                &lt;div&gt;
                  &lt;div class="agent-session-text agent-session-text-collapse"&gt;
                    &lt;p&gt;Architecting SnoozeOps data quality engine with a hybrid pipeline:&lt;br&gt;
1. Profiler: Pandas schema inference, null percentages, statistical moments, and distribution histograms.&lt;br&gt;
2. Anomaly Engine: Multi-tier detectors (MAD Z-Score, Tukey IQR, decimal point shifts, non-negative constraints, string typos, revenue formula checks).&lt;br&gt;
3. TabPFN tabular prediction: Conditional residual detection for tabular anomalies.&lt;br&gt;
4. Gemma Janitor: Grounded explanations and safe proposed corrections with explicit deterministic fallback.&lt;br&gt;
5. Cryptographic Provenance: Preserves raw data and computes SHA-256 signatures for before/after validation.&lt;/p&gt;

                  &lt;/div&gt;
                  Show more
                &lt;/div&gt;
              &lt;div class="agent-session-tool-call"&gt;
                
                  &lt;span class="agent-session-chevron"&gt;▸&lt;/span&gt;
                  &lt;span class="tool-name tool-name-implementdetectors"&gt;implement_detectors&lt;/span&gt;
                    &lt;span class="tool-input-preview"&gt;def detect_anomalies(df): ...&lt;/span&gt;
                
                &lt;div class="agent-session-tool-detail"&gt;
                    &lt;div class="tool-section"&gt;
                      &lt;div class="tool-section-label"&gt;Input&lt;/div&gt;
                      &lt;pre class="agent-session-pre"&gt;&lt;code&gt;def detect_anomalies(df): ...&lt;/code&gt;&lt;/pre&gt;
                    &lt;/div&gt;
                    &lt;div class="tool-section"&gt;
                      &lt;div class="tool-section-label"&gt;Output&lt;/div&gt;
                      &lt;pre class="agent-session-pre"&gt;&lt;code&gt;Built statistical.py and tabpfn_detector.py with sub-millisecond lazy loading.&lt;/code&gt;&lt;/pre&gt;
                    &lt;/div&gt;
                &lt;/div&gt;
              &lt;/div&gt;
        &lt;/div&gt;
      &lt;/div&gt;

      &lt;div class="agent-session-message agent-session-user"&gt;
        &lt;div class="agent-session-role-badge agent-session-role-user"&gt;
          You
        &lt;/div&gt;
        &lt;div class="agent-session-content"&gt;
                &lt;div class="agent-session-text"&gt;
                  &lt;p&gt;How does SnoozeOps benchmark against standard 3-sigma z-score baselines?&lt;/p&gt;

                &lt;/div&gt;
        &lt;/div&gt;
      &lt;/div&gt;

      &lt;div class="agent-session-message agent-session-assistant"&gt;
        &lt;div class="agent-session-role-badge agent-session-role-assistant"&gt;
          Agent
        &lt;/div&gt;
        &lt;div class="agent-session-content"&gt;
                &lt;div class="agent-session-text"&gt;
                  &lt;p&gt;Running reproducible benchmark evaluation on 100-row seeded dataset with 20 ground-truth anomalies:&lt;br&gt;
- Naive 3-Sigma Baseline: Recall 35.0%, Precision 100.0%, F1 0.52, missed 13 subtle domain anomalies (negative tenure, decimal shifts).&lt;br&gt;
- SnoozeOps Hybrid Engine: Recall 100.0%, Precision 100.0%, F1 1.00, 0 False Positives, latency 320ms.&lt;br&gt;
Empirical gain: +65.0% recall improvement.&lt;/p&gt;

                &lt;/div&gt;
              &lt;div class="agent-session-tool-call"&gt;
                
                  &lt;span class="agent-session-chevron"&gt;▸&lt;/span&gt;
                  &lt;span class="tool-name tool-name-runevaluation"&gt;run_evaluation&lt;/span&gt;
                    &lt;span class="tool-input-preview"&gt;python -m unittest tests/test_core.py&lt;/span&gt;
                
                &lt;div class="agent-session-tool-detail"&gt;
                    &lt;div class="tool-section"&gt;
                      &lt;div class="tool-section-label"&gt;Input&lt;/div&gt;
                      &lt;pre class="agent-session-pre"&gt;&lt;code&gt;python -m unittest tests/test_core.py&lt;/code&gt;&lt;/pre&gt;
                    &lt;/div&gt;
                    &lt;div class="tool-section"&gt;
                      &lt;div class="tool-section-label"&gt;Output&lt;/div&gt;
                      &lt;pre class="agent-session-pre"&gt;&lt;code&gt;Ran 6 tests in 0.198s. OK.&lt;/code&gt;&lt;/pre&gt;
                    &lt;/div&gt;
                &lt;/div&gt;
              &lt;/div&gt;
        &lt;/div&gt;
      &lt;/div&gt;

      &lt;div class="agent-session-message agent-session-user"&gt;
        &lt;div class="agent-session-role-badge agent-session-role-user"&gt;
          You
        &lt;/div&gt;
        &lt;div class="agent-session-content"&gt;
                &lt;div class="agent-session-text"&gt;
                  &lt;p&gt;Now deploy the Next.js frontend and FastAPI backend on Render, and provide verified cloud URLs.&lt;/p&gt;

                &lt;/div&gt;
        &lt;/div&gt;
      &lt;/div&gt;

      &lt;div class="agent-session-message agent-session-assistant"&gt;
        &lt;div class="agent-session-role-badge agent-session-role-assistant"&gt;
          Agent
        &lt;/div&gt;
        &lt;div class="agent-session-content"&gt;
                &lt;div class="agent-session-text"&gt;
                  &lt;p&gt;Configured render.yaml with Infrastructure-as-Code:&lt;br&gt;
- Frontend: Next.js 14 on Render Web Service (&lt;a href="https://snooze-ops-frontend.onrender.com" rel="noopener noreferrer"&gt;https://snooze-ops-frontend.onrender.com&lt;/a&gt;)&lt;br&gt;
- Backend: FastAPI Python 3.11 on Render Web Service (&lt;a href="https://snooze-ops-backend.onrender.com" rel="noopener noreferrer"&gt;https://snooze-ops-backend.onrender.com&lt;/a&gt;)&lt;br&gt;
- Open Model Service: Containerized Ollama with open-weight Gemma on Render (&lt;a href="https://snooze-ops.onrender.com" rel="noopener noreferrer"&gt;https://snooze-ops.onrender.com&lt;/a&gt;)&lt;br&gt;
All health checks passing with zero data egress guarantees.&lt;/p&gt;

                &lt;/div&gt;
        &lt;/div&gt;
      &lt;/div&gt;
  &lt;/div&gt;

  &lt;div class="agent-session-footer"&gt;
    &lt;span class="agent-session-meta"&gt;
        6 of 6 messages
    &lt;/span&gt;
  &lt;/div&gt;
&lt;/div&gt;



&lt;p&gt;Direct session link: &lt;a href="https://dev.to/agent_sessions/building-snoozeops-open-source-ai-spreadsheet-janitor-uv5bns"&gt;https://dev.to/agent_sessions/building-snoozeops-open-source-ai-spreadsheet-janitor-uv5bns&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  11. Hacktoberfest Submission &amp;amp; Prize Categories
&lt;/h2&gt;

&lt;p&gt;This project was built from scratch during the Hacktoberfest 2026 challenge window for &lt;strong&gt;Week 3: Slow and Steady&lt;/strong&gt; (International Sloth Day).&lt;/p&gt;

&lt;h3&gt;
  
  
  Prize Categories Entered:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Overall Winner ($250)&lt;/strong&gt;: An end-to-end, functional open-source AI data janitor that automates repetitive inspection and delivers reproducible empirical accuracy.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Featured Category — Best Use of Render ($200)&lt;/strong&gt;: The entire application is deployed on Render using Infrastructure as Code (&lt;a href="https://github.com/Megh-Shah-08/snooze-ops/blob/main/render.yaml" rel="noopener noreferrer"&gt;&lt;code&gt;render.yaml&lt;/code&gt;&lt;/a&gt;) orchestrating the Next.js frontend, FastAPI backend, and containerized Docker service.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Featured Category — Best Use of TabPFN ($200)&lt;/strong&gt;: Genuine integration of Prior Labs' &lt;code&gt;TabPFNRegressor&lt;/code&gt; in &lt;a href="https://github.com/Megh-Shah-08/snooze-ops/blob/main/backend/detectors/tabpfn_detector.py" rel="noopener noreferrer"&gt;&lt;code&gt;backend/detectors/tabpfn_detector.py&lt;/code&gt;&lt;/a&gt; to identify tabular conditional residuals.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Featured Category — Best Use of Gemma ($200)&lt;/strong&gt;: Genuine integration of Google's open-weight Gemma 2 model in &lt;a href="https://github.com/Megh-Shah-08/snooze-ops/blob/main/backend/llm_janitor.py" rel="noopener noreferrer"&gt;&lt;code&gt;backend/llm_janitor.py&lt;/code&gt;&lt;/a&gt; for grounded explanations and safe typed corrections.&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  Conclusion
&lt;/h3&gt;

&lt;p&gt;Life is too short to spend your afternoons hunting down missing commas and misplaced decimal points in spreadsheets. Take a nap. Let open-source AI do the cleaning.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;If you found this useful, star the project on &lt;a href="https://github.com/Megh-Shah-08/snooze-ops" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt; or share your thoughts in the comments!&lt;/em&gt;&lt;/p&gt;

</description>
      <category>hf26challenge</category>
      <category>devchallenge</category>
      <category>opensource</category>
      <category>ai</category>
    </item>
    <item>
      <title>Wilding - Touch Grass Challenge</title>
      <dc:creator>Megh Shah</dc:creator>
      <pubDate>Mon, 12 Oct 2026 06:51:08 +0000</pubDate>
      <link>https://dev.to/megh_shah_b6bd27d23860b05/wilding-touch-grass-challenge-27n7</link>
      <guid>https://dev.to/megh_shah_b6bd27d23860b05/wilding-touch-grass-challenge-27n7</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;h1&gt;
  
  
  Wildling: Notice More. Scroll Less.
&lt;/h1&gt;

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

&lt;p&gt;We carry our phones everywhere. Sometimes, even when we step outside, we spend more time looking at a screen than noticing what's around us.&lt;/p&gt;

&lt;p&gt;I wanted to explore a different use for AI: instead of giving people another reason to stay online, what if it gave them a reason to put their phones away?&lt;/p&gt;

&lt;p&gt;That idea became &lt;strong&gt;Wildling&lt;/strong&gt;, a nature companion that turns an ordinary walk, garden visit, or break in a nearby park into a small adventure.&lt;/p&gt;

&lt;p&gt;Users choose an interest and how much time they have. Wildling helps them explore through simple observation quests: notice different leaf shapes, listen to the sounds around you, find patterns in shadows, or look for details you would usually walk past.&lt;/p&gt;

&lt;p&gt;After the walk, users can record what they actually noticed in a personal field journal.&lt;/p&gt;

&lt;p&gt;The goal isn't to identify everything in nature or turn the outdoors into another productivity challenge. It's to help people slow down, become curious, and pay attention to the world around them.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The screen should be the shortest part of the experience.&lt;/strong&gt;&lt;/p&gt;

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

&lt;p&gt;Try Wildling here:&lt;/p&gt;


&lt;div class="ltag__bolt"&gt;
  &lt;iframe src="https://wildling-nature-ques-5020.bolt.host" title="Bolt App" width="100%" height="600"&gt;
  &lt;/iframe&gt;
&lt;/div&gt;


&lt;p&gt;Replace this placeholder with your live deployment URL.&lt;/p&gt;

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

&lt;p&gt;Source code: &lt;a href="https://github.com/Megh-Shah-08/wildlife-touch-grass-challenge" rel="noopener noreferrer"&gt;https://github.com/Megh-Shah-08/wildlife-touch-grass-challenge&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The project is designed around a simple principle: the outdoor experience should remain useful without requiring a paid AI service or an account.&lt;/p&gt;

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

&lt;p&gt;Wildling is built as a mobile-first web application, with a focus on a simple quest-to-journal experience.&lt;/p&gt;

&lt;p&gt;The core flow is straightforward:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Choose an interest, environment, and available time.&lt;/li&gt;
&lt;li&gt;Generate or select a nature quest.&lt;/li&gt;
&lt;li&gt;Take the activity outdoors and work through short observation missions.&lt;/li&gt;
&lt;li&gt;Return and record a personal observation.&lt;/li&gt;
&lt;li&gt;Keep the entry in a private field journal.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;For the AI layer, the intended approach is to use an open-weight language model through a local inference runtime such as Transformers.js. This makes it possible to generate personalized quests on the user's device instead of depending on a hosted, proprietary LLM API.&lt;/p&gt;

&lt;p&gt;Built-in quests provide a fallback when local inference is unavailable. They must be clearly distinguished from model-generated quests.&lt;/p&gt;

&lt;p&gt;The application is designed around local data storage, so observations can remain on the user's device rather than being uploaded to a cloud service.&lt;/p&gt;

&lt;p&gt;[Before publishing: name the exact model and runtime you actually implemented, and remove any statements about local inference or offline functionality that you have not verified.]&lt;/p&gt;

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

&lt;p&gt;For Wildling, open innovation isn't just about choosing a different model. It changes the relationship between the user and the application.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. AI without a mandatory paid inference API&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A compatible open-weight model can make personalized quest generation possible without relying on a paid proprietary LLM endpoint. That makes the experience more accessible and gives the developer more control over running costs.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Privacy by design&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Outdoor observations can be personal. A note about someone's daily walk, garden, or surroundings doesn't need to be sent to a remote AI service just to become a thoughtful journal entry.&lt;/p&gt;

&lt;p&gt;Local inference can keep that processing on the user's device, provided the implementation does not transmit the data elsewhere.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Freedom to experiment&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Open-weight models make it possible to evaluate different model sizes, runtimes, and generation strategies. A lightweight model may be more suitable for a mobile-first nature companion than a much larger hosted model.&lt;/p&gt;

&lt;p&gt;The trade-offs matter, too: browser compatibility, download size, memory use, latency, and output quality all affect the experience.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. Technology that serves the real world&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The most important design decision is not which model generates the most impressive paragraph. It is whether the technology helps someone notice something meaningful outside and then lets them put their phone away.&lt;/p&gt;

&lt;p&gt;That's the kind of AI I wanted to explore: useful, understandable, and designed to give people more control rather than more screen time.&lt;/p&gt;

&lt;p&gt;Open innovation makes that exploration possible without making a proprietary AI service the centre of the product.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;Hacktoberfest Open-Source AI Challenge — Week 1: Touch Grass&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Thanks to the organizers for a challenge that asks us to think about what AI can help people do away from their screens.&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>hf26challenge</category>
    </item>
    <item>
      <title>StudySprint — Stop Planning. Start Studying. 📚</title>
      <dc:creator>Megh Shah</dc:creator>
      <pubDate>Sun, 04 Oct 2026 16:54:20 +0000</pubDate>
      <link>https://dev.to/megh_shah_b6bd27d23860b05/studysprint-stop-planning-start-studying-2boe</link>
      <guid>https://dev.to/megh_shah_b6bd27d23860b05/studysprint-stop-planning-start-studying-2boe</guid>
      <description>&lt;p&gt;What I Built&lt;br&gt;
I built StudySprint, a lightweight AI-powered study planner for a college friend who struggles with deciding what to study first when there are multiple subjects, deadlines, and limited time.&lt;br&gt;
Users can add their subjects, topics, deadlines, difficulty, and estimated study time. StudySprint then creates a prioritized study plan.&lt;br&gt;
It also includes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;✅ Task completion tracking&lt;/li&gt;
&lt;li&gt;📊 Progress tracking&lt;/li&gt;
&lt;li&gt;⏱️ Focus timer&lt;/li&gt;
&lt;li&gt;💾 Local persistence&lt;/li&gt;
&lt;li&gt;🤖 AI-powered prioritization&lt;/li&gt;
&lt;li&gt;🔄 Fallback prioritization when AI is unavailable
The goal is simple: spend less time planning and more time studying.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Demo&lt;br&gt;
🔗 Live Demo: &lt;a href="https://study-sprint-26.lovable.app/" rel="noopener noreferrer"&gt;https://study-sprint-26.lovable.app/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Code&lt;br&gt;
🔗 GitHub: &lt;a href="https://github.com/Megh-Shah-08/study-sprint-26" rel="noopener noreferrer"&gt;https://github.com/Megh-Shah-08/study-sprint-26&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;How I Built It&lt;br&gt;
Built using ReactJS, TypeScript, and Tailwind CSS.&lt;br&gt;
The AI layer is designed around an open-weight model through Ollama, which receives the student's tasks and available time and generates a prioritized plan.&lt;br&gt;
I also added a rule-based fallback using deadlines, difficulty, and estimated time so the app remains functional without AI.&lt;/p&gt;

&lt;p&gt;Why Does Open Innovation Matter?&lt;br&gt;
Using an open-weight model means the AI doesn't have to depend entirely on a proprietary API. It can be run locally, customized, and adapted for different use cases.&lt;br&gt;
For a personal tool containing study schedules and tasks, local AI also provides a path toward keeping that information on the user's own device.&lt;/p&gt;

&lt;p&gt;My Agent Session&lt;br&gt;
Built with the help of Lovable.dev.&lt;/p&gt;

&lt;p&gt;Prize Categories&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Open Innovation&lt;/li&gt;
&lt;li&gt;AI / Open-Weight AI&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Built for a friend. Made to solve a real problem. 🚀&lt;/p&gt;

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