<?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: softGpt 9299</title>
    <description>The latest articles on DEV Community by softGpt 9299 (@softgpt_9299_fd5278301830).</description>
    <link>https://dev.to/softgpt_9299_fd5278301830</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%2F4156474%2F6da565cc-4563-4ed6-bd7c-c627dc0f1562.png</url>
      <title>DEV Community: softGpt 9299</title>
      <link>https://dev.to/softgpt_9299_fd5278301830</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/softgpt_9299_fd5278301830"/>
    <language>en</language>
    <item>
      <title>SlothDesk: Stop Scrolling Client Chats. Start With a Clear Work Plan.</title>
      <dc:creator>softGpt 9299</dc:creator>
      <pubDate>Fri, 23 Oct 2026 09:51:46 +0000</pubDate>
      <link>https://dev.to/softgpt_9299_fd5278301830/slothdesk-stop-scrolling-client-chats-start-with-a-clear-work-plan-3i8i</link>
      <guid>https://dev.to/softgpt_9299_fd5278301830/slothdesk-stop-scrolling-client-chats-start-with-a-clear-work-plan-3i8i</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;p&gt;A client asks you to change a heading. Ten messages later, they cancel that request and ask you to fix the contact form instead. The next morning, you read the entire thread again to figure out what actually needs doing.&lt;/p&gt;

&lt;p&gt;I built SlothDesk to prepare that work plan for review.&lt;/p&gt;

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

&lt;p&gt;SlothDesk turns client conversations into proposed tasks, decisions, clarification questions and a reply draft. Paste a conversation or upload a text export, inspect the supporting messages, and accept the changes you want on your project board.&lt;/p&gt;

&lt;p&gt;The most useful part is handling changed instructions: the final work plan should reflect what the client currently wants. Cancelled requests, revised deadlines and follow-up messages deserve more than another summary.&lt;/p&gt;

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

&lt;p&gt;&lt;a href="https://hackweek4.vercel.app/" rel="noopener noreferrer"&gt;Try SlothDesk&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Create a project, load a bundled English or Hinglish conversation, and analyse it. Inspect the proposed changes and source messages before accepting selected items. Then import a follow-up to review how the plan changes.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Hosted demo limitation:&lt;/strong&gt; the deployed app currently reports that Ollama is unavailable and uses its rule-based fallback. This demonstrates the workflow, not an actual open-weight model run. The repository provides the local Ollama integration.&lt;/p&gt;

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


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://assets.dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/Gautam5514" rel="noopener noreferrer"&gt;
        Gautam5514
      &lt;/a&gt; / &lt;a href="https://github.com/Gautam5514/hack_week4" rel="noopener noreferrer"&gt;
        hack_week4
      &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;🦥 SlothDesk — Skip the chat scroll. Get the work.&lt;/h1&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;SlothDesk turns messy client conversations into an actionable work plan using
AI running locally on your computer.&lt;/strong&gt; Paste a chat (or upload a &lt;code&gt;.txt&lt;/code&gt; export)
let it analyse, &lt;strong&gt;review the proposed changes&lt;/strong&gt;, and accept the ones you want.&lt;/p&gt;
&lt;p&gt;Built for freelancers, agency owners, and project managers who otherwise re-read
long client threads to reconstruct tasks, deadlines, and changed instructions by
hand.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Works in &lt;strong&gt;mixed Hindi/English (Hinglish)&lt;/strong&gt; and English.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;The one workflow it does well&lt;/h2&gt;
&lt;/div&gt;
&lt;div class="snippet-clipboard-content notranslate position-relative overflow-auto"&gt;&lt;pre class="notranslate"&gt;&lt;code&gt;Import chat  →  Review proposed changes  →  Accept  →  Project board
   (paste/upload)   (New/Updated/Cancelled/      (commit     (edit, status,
                     Needs-review + evidence)     selected)    follow-up, export)
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;The model’s output is &lt;strong&gt;never written straight to your board.&lt;/strong&gt; Every analysis
produces a &lt;strong&gt;proposal&lt;/strong&gt; you review and accept — so you stay in control and
nothing is invented into your task list.&lt;/p&gt;
&lt;p&gt;Its signature trick is &lt;strong&gt;reconciliation&lt;/strong&gt;: when a client says…&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/Gautam5514/hack_week4" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


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

&lt;p&gt;The project uses Next.js, TypeScript and Tailwind. The local inference path calls Ollama with a configurable model, defaulting to Gemma 3 4B. JSON Schema and Zod validate the extraction structure; application logic handles message IDs, date resolution, reconciliation and persistence.&lt;/p&gt;

&lt;p&gt;Model output becomes a proposal. It does not automatically become an accepted task. That review step is central to the product.&lt;/p&gt;

&lt;p&gt;The local configuration uses SQLite. According to the README, the serverless deployment falls back to ephemeral in-memory storage, so the hosted demo should not be treated as durable project storage.&lt;/p&gt;

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

&lt;p&gt;With the local setup, users can run an open-weight model on hardware they control, inspect the extraction prompt, and replace the model. They do not need to build this workflow around a single proprietary inference provider.&lt;/p&gt;

&lt;p&gt;Gemma weights have their own terms; the application code is MIT licensed. Local inference avoids per-request hosted inference fees, while still requiring hardware and electricity.&lt;/p&gt;

&lt;p&gt;Privacy claims apply to the local configuration. The hosted website is a server-backed demo: do not upload confidential conversations on the assumption that processing stays in your browser.&lt;/p&gt;

&lt;h2&gt;
  
  
  Evaluation and Limitations
&lt;/h2&gt;

&lt;p&gt;The README reports 14 passing cases for the deterministic fallback on its small bundled dataset. These are author-reported fallback results, not a model-quality benchmark or evidence of performance on arbitrary client conversations.&lt;/p&gt;

&lt;p&gt;Actual local-model performance and time savings still need measured validation. I am not claiming a percentage of time saved.&lt;/p&gt;

&lt;p&gt;The current scope is text input, proposed work plans, source evidence and human review. Live WhatsApp/Slack integrations, automatic sending and voice transcription are outside this version.&lt;/p&gt;

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

&lt;p&gt;The intended payoff is straightforward: stop reconstructing a task list from the same conversation repeatedly. Let the software prepare a reviewable plan, then use your attention on the decisions that still need a person.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;AI disclosure: This article and cover were generated with AI tools from my project materials and instructions. Model benchmarks and time savings have not been independently verified.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>hf26challenge</category>
    </item>
    <item>
      <title>LedgerZero AI: Turn Receipts into a Reviewable Ledger with Local Gemma</title>
      <dc:creator>softGpt 9299</dc:creator>
      <pubDate>Sat, 17 Oct 2026 17:55:42 +0000</pubDate>
      <link>https://dev.to/softgpt_9299_fd5278301830/ledgerzero-ai-turn-receipts-into-a-reviewable-ledger-with-local-gemma-3327</link>
      <guid>https://dev.to/softgpt_9299_fd5278301830/ledgerzero-ai-turn-receipts-into-a-reviewable-ledger-with-local-gemma-3327</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;p&gt;&lt;strong&gt;LedgerZero AI turns a folder of receipts into a ledger a freelancer can actually review.&lt;/strong&gt; Its open-weight extraction engine runs through Ollama on the user's own machine, with a dashboard for checking records, spotting duplicates, and exporting the result.&lt;/p&gt;

&lt;p&gt;A receipt is a tiny document with a surprisingly long afterlife. Someone has to identify the merchant, find the real total, choose a category, check whether it has already been entered, and hand the result to a bookkeeper. Repeat that across software subscriptions, equipment purchases, coworking bills, and client meetings, and a small administrative job becomes a recurring distraction.&lt;/p&gt;

&lt;p&gt;LedgerZero brings those steps into one workflow:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Extract the vendor, date, invoice reference, currency, amounts, and line items.&lt;/li&gt;
&lt;li&gt;Suggest expense categories with Schedule C references.&lt;/li&gt;
&lt;li&gt;Flag duplicate invoice numbers and matching vendor/date/amount combinations.&lt;/li&gt;
&lt;li&gt;Surface missing information and unusual transactions for review.&lt;/li&gt;
&lt;li&gt;Search, filter, and edit the ledger before exporting CSV or a printable audit pack.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The intended customer is a freelancer or independent contractor who wants help organizing business expenses while keeping control of the documents.&lt;/p&gt;

&lt;h3&gt;
  
  
  Why someone would pay
&lt;/h3&gt;

&lt;p&gt;The product hypothesis is simple: charge for a convenient, supported desktop experience around an open core.&lt;/p&gt;

&lt;p&gt;The repository proposes a &lt;strong&gt;free MIT community edition&lt;/strong&gt;, a &lt;strong&gt;$49 one-time Pro desktop license&lt;/strong&gt;, and a &lt;strong&gt;$149 agency edition&lt;/strong&gt;. Those are proposed packages, not evidence of sales or shipped paid editions. Multi-client workflows and support would need further development and validation.&lt;/p&gt;

&lt;p&gt;Local inference makes a one-time purchase more plausible because each additional receipt does not incur a metered cloud-model API charge. Hardware, electricity, maintenance, and support still have costs.&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;&lt;a href="https://hack-week3.vercel.app/" rel="noopener noreferrer"&gt;Open the LedgerZero AI demo&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;For a quick walkthrough:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Open the dashboard and choose &lt;strong&gt;Load Sample Invoices&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Inspect the extracted records and suggested categories.&lt;/li&gt;
&lt;li&gt;Open the &lt;strong&gt;IRS Schedule C Form&lt;/strong&gt; view.&lt;/li&gt;
&lt;li&gt;Try the CSV export or &lt;strong&gt;Audit Pack&lt;/strong&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;The hosted demo and local installation have different privacy boundaries.&lt;/strong&gt; The Vercel demo uses server API endpoints and currently reports the heuristic fallback engine. It is a preview of the workflow; it does not run Gemma inside your browser. Use synthetic sample documents there. To keep document processing on your own computer, run both the app server and Ollama locally.&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;&lt;a href="https://github.com/Gautam5514/hack_week3" rel="noopener noreferrer"&gt;Source code on GitHub&lt;/a&gt;&lt;/strong&gt; — released under the MIT license.&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/Gautam5514" rel="noopener noreferrer"&gt;
        Gautam5514
      &lt;/a&gt; / &lt;a href="https://github.com/Gautam5514/hack_week3" rel="noopener noreferrer"&gt;
        hack_week3
      &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;⚡ LedgerZero AI&lt;/h1&gt;
&lt;/div&gt;
&lt;p&gt;&lt;a href="https://github.com/Gautam5514/hack_week3/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://github.com/Gautam5514/hack_week3/ARCHITECTURE.md" rel="noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/f5d0d78e0d0a138914fc411841b77f56241d97e3fa06a6d6579b9290aa679d2f/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4f70656e2d2d536f7572636525323041492d47656d6d61253230322532302537432532304c6c616d61253230332e322532302537432532305177656e253230322e352d677265656e" alt="Open Source AI"&gt;&lt;/a&gt;
&lt;a href="https://github.com/Gautam5514/hack_week3/ARCHITECTURE.md" rel="noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/0839a74cdd4396d3f20d16aec44e39536aaa997485da42f5c30d5ec8331ae55a/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f507269766163792d3130302532352532304169722d2d4761707065642532302537432532305a65726f25323054656c656d657472792d656d6572616c64" alt="Privacy"&gt;&lt;/a&gt;
&lt;a href="https://github.com/Gautam5514/hack_week3/README.md" rel="noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/8361937fd0d0f69f10000e865cbfa27a15943f78220c4da271fdfc21fcf8aa28/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f506c6174666f726d2d6d61634f532532302537432532304c696e757825323025374325323057696e646f77732d707572706c65" alt="Platform"&gt;&lt;/a&gt;
&lt;a href="https://github.com/Gautam5514/hack_week3/tests/" rel="noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/40b7aefe782213fdf5b22d04589a8a581eba94d73a705071053145399a152845/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f54657374732d50617373696e6725323028313030253235292d627269676874677265656e" alt="Tests"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;100% Local, Air-Gapped AI Invoice, Receipt &amp;amp; Tax Sorter for Freelancers&lt;/strong&gt;&lt;br&gt;
&lt;em&gt;Built with open-weight models at its core (Google Gemma 2, Meta Llama 3.2, Qwen 2.5). Client invoices, contracts, and financial receipts never leave your laptop.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;📖 Table of Contents&lt;/h2&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/Gautam5514/hack_week3#-why-ledgerzero-ai" rel="noopener noreferrer"&gt;✨ Why LedgerZero AI?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/Gautam5514/hack_week3#-the-problem-it-solves" rel="noopener noreferrer"&gt;🎯 The Problem It Solves&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/Gautam5514/hack_week3#-why-open-innovation-matters-here" rel="noopener noreferrer"&gt;💡 Why Open Innovation Matters Here&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/Gautam5514/hack_week3#%EF%B8%8F-tech-stack--architecture" rel="noopener noreferrer"&gt;🛠️ Tech Stack &amp;amp; Architecture&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/Gautam5514/hack_week3#-quickstart-in-30-seconds" rel="noopener noreferrer"&gt;🚀 Quickstart in 30 Seconds&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/Gautam5514/hack_week3#-command-line-interface-cli" rel="noopener noreferrer"&gt;💻 Command Line Interface (CLI)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/Gautam5514/hack_week3#-web-ui-dashboard" rel="noopener noreferrer"&gt;🌐 Web UI Dashboard&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/Gautam5514/hack_week3#-tax-categorization--schedule-c-support" rel="noopener noreferrer"&gt;📊 Tax Categorization &amp;amp; Schedule C Support&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/Gautam5514/hack_week3#-side-hustle-business-model--pricing" rel="noopener noreferrer"&gt;💼 Side Hustle Business Model &amp;amp; Pricing&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/Gautam5514/hack_week3#-running-tests" rel="noopener noreferrer"&gt;🧪 Running Tests&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/Gautam5514/hack_week3#-contributing--license" rel="noopener noreferrer"&gt;🤝 Contributing &amp;amp; License&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;✨ Why LedgerZero AI?&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;Freelancers, independent software contractors, and boutique agencies handle sensitive financial documents daily: client invoices, subcontractor agreements, cloud hosting bills, and hardware receipts.&lt;/p&gt;
&lt;p&gt;Existing tools fail freelancers:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Cloud Accounting SaaS (QuickBooks, Expensify):&lt;/strong&gt; Charge $20–$35/month recurring subscriptions and leak client billing telemetry to third-party cloud servers.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cloud AI APIs (ChatGPT,&lt;/strong&gt;…&lt;/li&gt;
&lt;/ul&gt;&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/Gautam5514/hack_week3" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;To try the local open-weight path:&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/Gautam5514/hack_week3.git
&lt;span class="nb"&gt;cd &lt;/span&gt;hack_week3
npm &lt;span class="nb"&gt;install&lt;/span&gt;

&lt;span class="c"&gt;# With Ollama installed:&lt;/span&gt;
ollama pull gemma2:2b
ollama serve
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If Ollama is already running, skip the last command. In another terminal:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm start
&lt;span class="c"&gt;# Open http://localhost:3030&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Choose Gemma in the dashboard. The repository also includes Node.js and Python command-line tools.&lt;/p&gt;

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

&lt;p&gt;The stack is deliberately small: &lt;strong&gt;Node.js, Express, vanilla JavaScript and CSS, a JSON document store, and Ollama for local inference.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The processing flow is:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Document text
    → structured extraction with Ollama / Gemma
    → field normalization
    → rule-based expense categorization
    → duplicate and anomaly checks
    → editable ledger
    → CSV / summary / printable audit pack
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Gemma does the extraction
&lt;/h3&gt;

&lt;p&gt;The default local model is &lt;strong&gt;Gemma 2 (&lt;code&gt;gemma2:2b&lt;/code&gt;)&lt;/strong&gt;. The extractor checks the local Ollama service, builds a prompt containing the document text and expected fields, then calls &lt;code&gt;/api/generate&lt;/code&gt; with JSON output enabled.&lt;/p&gt;

&lt;p&gt;The expected structure includes vendor, date, currency, subtotal, tax, total, payment method, client name, and line items. After generation, the code normalizes numeric values, dates, currency codes, and item arrays before passing the document onward.&lt;/p&gt;

&lt;p&gt;The connector also supports other installed models, including Llama and Qwen. That is a configurable integration, not a claim that every model has been benchmarked equally.&lt;/p&gt;

&lt;h3&gt;
  
  
  Rules handle the repeatable work
&lt;/h3&gt;

&lt;p&gt;Category mapping and duplicate checks live outside the model. Keeping those operations explicit makes the result easier to inspect: a user can see the assigned category and review warnings instead of relying on a paragraph of generated financial advice.&lt;/p&gt;

&lt;p&gt;If Ollama is unavailable, times out, or returns unusable output, a deterministic parser supplies a fallback. That lets users explore the workflow before downloading a model, while preserving a separate open-weight extraction path for local use.&lt;/p&gt;

&lt;h3&gt;
  
  
  What still needs work
&lt;/h3&gt;

&lt;p&gt;This is a working prototype with an editable review step, not unattended bookkeeping.&lt;/p&gt;

&lt;p&gt;A verification run against the submitted source passed the categorizer tests but found failures in the extraction, multi-currency, and number-formatting suites. Those cases need improvement; I am not claiming production-level accuracy or a fully passing test suite. Image extraction also depends on choosing a suitable vision-capable model, and the bundled PDF parser has limitations.&lt;/p&gt;

&lt;p&gt;The tax views are simplified organizational estimates. Suggested categories, deduction percentages, and the dashboard's assumed 25% tax rate need review against the user's actual circumstances; an audit score is an application heuristic, not a certification.&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;For this product, where inference runs is part of the value.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;With downloadable open weights and a local runtime, a freelancer can process documents on a machine they control after the software and model are installed. Document extraction does not require sending the contents to a third-party model API.&lt;/p&gt;

&lt;p&gt;That architecture also gives the project room to evolve:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Model choice:&lt;/strong&gt; use a smaller model for limited hardware or test another model against difficult document formats.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Inspectability:&lt;/strong&gt; the prompts, normalization code, category rules, and duplicate logic are available in the repository.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Portable deployment:&lt;/strong&gt; users can run their own copy instead of depending on one hosted application.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Different economics:&lt;/strong&gt; local processing avoids per-request model API billing, making a supported one-time license worth exploring.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The open pieces are central to the intended product: they make user-controlled inference possible. The heuristic fallback is useful for onboarding, but it does not replace the model's role in extracting varied document text.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Overall challenge prize&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Best Use of Gemma&lt;/strong&gt; — Gemma 2 is the default model in the local Ollama extraction connector. The hosted demo uses the fallback; judges can follow the local setup above to exercise the Gemma path.&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;&lt;em&gt;Built by Gautam Pandit. The next milestone is improving extraction reliability and testing the workflow with freelancers before treating the proposed pricing as validated demand.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;AI assistance was used to prepare this submission and its cover artwork.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>hf26challenge</category>
      <category>opensource</category>
      <category>ai</category>
    </item>
    <item>
      <title>WildQuest AI (Touch Grass): On-Device AI Scavenger Hunts That Get You Outside</title>
      <dc:creator>softGpt 9299</dc:creator>
      <pubDate>Sat, 10 Oct 2026 06:40:47 +0000</pubDate>
      <link>https://dev.to/softgpt_9299_fd5278301830/wildquest-ai-touch-grass-on-device-ai-scavenger-hunts-that-get-you-outside-5hn8</link>
      <guid>https://dev.to/softgpt_9299_fd5278301830/wildquest-ai-touch-grass-on-device-ai-scavenger-hunts-that-get-you-outside-5hn8</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;WildQuest AI turns a short walk into a nature-discovery game. Pick a session of 3, 5, or 7 missions (roughly 5-20 minutes), and each mission asks you to find something real outside — a leaf, a flower, bark, the sky. You open your camera, photograph what you found, and an on-device AI model checks whether it's a match. There are no feeds, no streaks, and no accounts — just a short list of reasons to look up from your screen. When the session ends, the app tells you to put the phone away.&lt;/p&gt;

&lt;p&gt;It's for anyone who wants a tiny, concrete excuse to step outside: someone on a work break, a parent keeping a kid occupied on a walk, or a remote worker who needs ten real minutes of air between meetings.&lt;/p&gt;

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

&lt;p&gt;Live app: &lt;a href="https://touch-grass-sepia-theta.vercel.app/" rel="noopener noreferrer"&gt;https://touch-grass-sepia-theta.vercel.app/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It's installable as a PWA — add it to your home screen, and after the first visit (which downloads the ~90MB model) it keeps working offline.&lt;/p&gt;

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

&lt;p&gt;GitHub: &lt;a href="https://github.com/Gautam5514/Touch-Grass" rel="noopener noreferrer"&gt;https://github.com/Gautam5514/Touch-Grass&lt;/a&gt;&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/Gautam5514" rel="noopener noreferrer"&gt;
        Gautam5514
      &lt;/a&gt; / &lt;a href="https://github.com/Gautam5514/Touch-Grass" rel="noopener noreferrer"&gt;
        Touch-Grass
      &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&gt;
&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;🌿 WildQuest AI&lt;/h1&gt;
&lt;/div&gt;
&lt;div class="markdown-heading"&gt;
&lt;h3 class="heading-element"&gt;Explore more. Scroll less. Your next adventure is outside.&lt;/h3&gt;
&lt;/div&gt;
&lt;p&gt;WildQuest AI turns a short walk into a nature-discovery game. Get a handful of small
missions — find a green leaf, a flower, a tree trunk, the sky — photograph what you
find, and an &lt;strong&gt;open-weight vision model running entirely on your own device&lt;/strong&gt; checks
each photo. When you finish, the app tells you to put the phone away.&lt;/p&gt;
&lt;p&gt;Built for the &lt;a href="https://dev.to/challenges/hacktoberfest-week1-2026-10-05" rel="nofollow"&gt;DEV Hacktoberfest Open-Source AI Challenge · Week 1: Touch Grass&lt;/a&gt;.&lt;/p&gt;
&lt;br&gt;
&lt;p&gt;&lt;a rel="noopener noreferrer nofollow" href="https://camo.githubusercontent.com/b283804a59db8759c5fd73dbdbfc9d4727842d46c29cf3870913538f602939d3/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4e6578742e6a732d31362d626c61636b3f6c6f676f3d6e6578742e6a73"&gt;&lt;img src="https://camo.githubusercontent.com/b283804a59db8759c5fd73dbdbfc9d4727842d46c29cf3870913538f602939d3/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4e6578742e6a732d31362d626c61636b3f6c6f676f3d6e6578742e6a73" alt="Next.js"&gt;&lt;/a&gt;
&lt;a rel="noopener noreferrer nofollow" href="https://camo.githubusercontent.com/ea1978524ba137884cc9cbdd516a6aa4550465d790589b65000165fbbfdccff2/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f52656163742d31392d3134396563613f6c6f676f3d7265616374"&gt;&lt;img src="https://camo.githubusercontent.com/ea1978524ba137884cc9cbdd516a6aa4550465d790589b65000165fbbfdccff2/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f52656163742d31392d3134396563613f6c6f676f3d7265616374" alt="React"&gt;&lt;/a&gt;
&lt;a rel="noopener noreferrer nofollow" href="https://camo.githubusercontent.com/09653c431b0d1dc4f40c4624900bdace38d4e98ca0d11bdfb64050ca8f3649c9/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f547970655363726970742d352d3331373863363f6c6f676f3d74797065736372697074"&gt;&lt;img src="https://camo.githubusercontent.com/09653c431b0d1dc4f40c4624900bdace38d4e98ca0d11bdfb64050ca8f3649c9/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f547970655363726970742d352d3331373863363f6c6f676f3d74797065736372697074" alt="TypeScript"&gt;&lt;/a&gt;
&lt;a rel="noopener noreferrer nofollow" href="https://camo.githubusercontent.com/94f426fcc79b2189030a2654451467767035d98e0a49f86a97d85899cde1c37f/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f5461696c77696e642d342d3338626466383f6c6f676f3d7461696c77696e64637373"&gt;&lt;img src="https://camo.githubusercontent.com/94f426fcc79b2189030a2654451467767035d98e0a49f86a97d85899cde1c37f/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f5461696c77696e642d342d3338626466383f6c6f676f3d7461696c77696e64637373" alt="Tailwind"&gt;&lt;/a&gt;
&lt;a rel="noopener noreferrer nofollow" href="https://camo.githubusercontent.com/df8c4692f75021e213c8d81dd059e8b77195e4623de3992bba93c87fd4f05899/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f5057412d696e7374616c6c61626c652d356130666338"&gt;&lt;img src="https://camo.githubusercontent.com/df8c4692f75021e213c8d81dd059e8b77195e4623de3992bba93c87fd4f05899/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f5057412d696e7374616c6c61626c652d356130666338" alt="PWA"&gt;&lt;/a&gt;
&lt;a rel="noopener noreferrer nofollow" href="https://camo.githubusercontent.com/d5ac31626aed6c219b307b7ac4036da0b53322b405cf15f4d73145b930b4d3e1/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f41492d3130302532352532306f6e2d2d6465766963652d313661333461"&gt;&lt;img src="https://camo.githubusercontent.com/d5ac31626aed6c219b307b7ac4036da0b53322b405cf15f4d73145b930b4d3e1/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f41492d3130302532352532306f6e2d2d6465766963652d313661333461" alt="On-device AI"&gt;&lt;/a&gt;
&lt;a rel="noopener noreferrer nofollow" href="https://camo.githubusercontent.com/236d9c4590b700d896cd253f91f75338b44d68af650e51050ef7fd79ef6e6cd8/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f70686f746f732d6e6576657225323075706c6f616465642d313661333461"&gt;&lt;img src="https://camo.githubusercontent.com/236d9c4590b700d896cd253f91f75338b44d68af650e51050ef7fd79ef6e6cd8/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f70686f746f732d6e6576657225323075706c6f616465642d313661333461" alt="No upload"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;📸 Screens&lt;/h2&gt;
&lt;/div&gt;
&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;




&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a rel="noopener noreferrer" href="https://github.com/Gautam5514/Touch-Grass/docs/screenshots/01-home.jpg"&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%2FGautam5514%2FTouch-Grass%2FHEAD%2Fdocs%2Fscreenshots%2F01-home.jpg" alt="Home"&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;a rel="noopener noreferrer" href="https://github.com/Gautam5514/Touch-Grass/docs/screenshots/02-explore.jpg"&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%2FGautam5514%2FTouch-Grass%2FHEAD%2Fdocs%2Fscreenshots%2F02-explore.jpg" alt="Explore"&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;a rel="noopener noreferrer" href="https://github.com/Gautam5514/Touch-Grass/docs/screenshots/03-missions.jpg"&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%2FGautam5514%2FTouch-Grass%2FHEAD%2Fdocs%2Fscreenshots%2F03-missions.jpg" alt="Missions"&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;a rel="noopener noreferrer" href="https://github.com/Gautam5514/Touch-Grass/docs/screenshots/05-result.jpg"&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%2FGautam5514%2FTouch-Grass%2FHEAD%2Fdocs%2Fscreenshots%2F05-result.jpg" alt="Result"&gt;&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Home&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Explore&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Missions&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Result&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a rel="noopener noreferrer" href="https://github.com/Gautam5514/Touch-Grass/docs/screenshots/07-complete.jpg"&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%2FGautam5514%2FTouch-Grass%2FHEAD%2Fdocs%2Fscreenshots%2F07-complete.jpg" alt="Complete"&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;a rel="noopener noreferrer" href="https://github.com/Gautam5514/Touch-Grass/docs/screenshots/08-journal.jpg"&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%2FGautam5514%2FTouch-Grass%2FHEAD%2Fdocs%2Fscreenshots%2F08-journal.jpg" alt="Journal"&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;a rel="noopener noreferrer" href="https://github.com/Gautam5514/Touch-Grass/docs/screenshots/09-settings.jpg"&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%2FGautam5514%2FTouch-Grass%2FHEAD%2Fdocs%2Fscreenshots%2F09-settings.jpg" alt="Settings"&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;a rel="noopener noreferrer" href="https://github.com/Gautam5514/Touch-Grass/docs/screenshots/10-desktop-home.jpg"&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%2FGautam5514%2FTouch-Grass%2FHEAD%2Fdocs%2Fscreenshots%2F10-desktop-home.jpg" alt="Desktop"&gt;&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Complete&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Journal&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Settings&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Desktop&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;
&lt;blockquote&gt;
&lt;p&gt;Screenshots use real photos with a &lt;strong&gt;stubbed score&lt;/strong&gt; from the mock-AI test build, so they're
deterministic. Real model behavior is covered by &lt;code&gt;tests/e2e/real.spec.ts&lt;/code&gt; and &lt;code&gt;docs/EVALUATION.md&lt;/code&gt;.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;📑 Contents&lt;/h2&gt;

&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/Gautam5514/Touch-Grass#-what-it-does--the-problem-it-solves" rel="noopener noreferrer"&gt;What it does &amp;amp; the problem it solves&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/Gautam5514/Touch-Grass#-why-it-fits-touch-grass" rel="noopener noreferrer"&gt;Why it fits "Touch Grass"&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/Gautam5514/Touch-Grass#-the-open-weight-model" rel="noopener noreferrer"&gt;The open-weight model&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/Gautam5514/Touch-Grass#-architecture" rel="noopener noreferrer"&gt;Architecture&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/Gautam5514/Touch-Grass#-quick-start" rel="noopener noreferrer"&gt;Quick start&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/Gautam5514/Touch-Grass#-deploy" rel="noopener noreferrer"&gt;Deploy&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/Gautam5514/Touch-Grass#-how-browser-ai-inference-works" rel="noopener noreferrer"&gt;How browser AI inference works&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/Gautam5514/Touch-Grass#-privacy-design" rel="noopener noreferrer"&gt;Privacy design&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;…&lt;/li&gt;
&lt;/ul&gt;&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/Gautam5514/Touch-Grass" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


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

&lt;p&gt;The verification core runs entirely on-device, with open-source AI doing all the work — no paid vision API, no inference server, and no uploaded photos.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Model: Xenova/clip-vit-base-patch32, a quantized ONNX port of OpenAI's open CLIP ViT-B/32 (~90MB), run through Transformers.js and ONNX Runtime Web (WASM) inside a Web Worker so the UI never blocks.&lt;/li&gt;
&lt;li&gt;Matching: each captured photo is scored against text prompts for the target, its aliases, visual look-alikes, and the other missions' targets. A decision rule (the target must rank first, score at least 0.45, and lead the next-best match by at least 0.15) returns matched, uncertain, mismatch, or error.&lt;/li&gt;
&lt;li&gt;Stack: Next.js 16, React 19, TypeScript, Tailwind CSS 4, Dexie (IndexedDB) for local history, a service worker for the PWA/offline cache, and Vitest + Playwright for unit and end-to-end tests, including real-model end-to-end runs.&lt;/li&gt;
&lt;li&gt;Because the model ships with the app and runs locally, the only outbound network call in the whole experience is the one-time model download from Hugging Face. Everything else, including every photo you take, never leaves your device.&lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;An open-weight model is what makes the core promise of this app possible: photos that never leave your phone. A closed, API-based vision model would mean sending every "is this a leaf?" photo to a server — which breaks the privacy story, adds per-request cost and latency, and makes offline use impossible. Because CLIP's weights are open and small enough to quantize down to a browser-friendly ONNX build, I could ship the entire verification pipeline inside the static app bundle, test it deterministically offline, and let anyone self-host or fork the project without touching a provider's API key or billing dashboard. Open weights turned "an AI feature" into "a free, static, forkable PWA."&lt;/p&gt;

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

&lt;p&gt;Entering for the overall challenge prize.&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>hf26challenge</category>
    </item>
    <item>
      <title>DayBuddy — a daily companion I built for my friend Yashu</title>
      <dc:creator>softGpt 9299</dc:creator>
      <pubDate>Sun, 04 Oct 2026 10:48:51 +0000</pubDate>
      <link>https://dev.to/softgpt_9299_fd5278301830/daybuddy-a-daily-companion-i-built-for-my-friend-yashu-4eop</link>
      <guid>https://dev.to/softgpt_9299_fd5278301830/daybuddy-a-daily-companion-i-built-for-my-friend-yashu-4eop</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/hacktoberfest-weekend-2026-10-01"&gt;Hacktoberfest Weekend Challenge: Build for a Friend&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

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

&lt;p&gt;DayBuddy is a daily companion I built for my friend Yashu. Her routine kept slipping — sleeping past her alarm, skipping meals without noticing, losing track of what she meant to get done, and nobody actually checking in on how her day went.&lt;/p&gt;

&lt;p&gt;DayBuddy wakes her up by name and reads out a short plan built around her real wake time, food and exercise preferences, and whatever is on her list that day — out loud, in plain English or Hinglish, whichever she's comfortable in. She can talk to it instead of typing: add a task, do her evening check-in, or ask "why was I tired this week?" by voice. Each night's check-in quietly shapes tomorrow's plan — a missed workout becomes a lighter start, a skipped meal gets a gentle nudge, never a guilt trip.&lt;/p&gt;

&lt;p&gt;It's built so a bad network day never breaks her morning: no AI reachable, no database reachable, no voice service reachable — the app still answers with sensible defaults, every time.&lt;/p&gt;

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

&lt;p&gt;Live app: &lt;a href="https://daybuddy-yashu.onrender.com" rel="noopener noreferrer"&gt;https://daybuddy-yashu.onrender.com&lt;/a&gt;&lt;br&gt;
API: &lt;a href="https://daybuddy-yashu-api.onrender.com" rel="noopener noreferrer"&gt;https://daybuddy-yashu-api.onrender.com&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;(Both run on Render's free tier, so the very first request after a quiet period can take 30–50s to wake up — give it a moment.)&lt;/p&gt;

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

&lt;p&gt;&lt;a href="https://github.com/Gautam5514/DayBuddy_hack" rel="noopener noreferrer"&gt;https://github.com/Gautam5514/DayBuddy_hack&lt;/a&gt;&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Frontend&lt;/strong&gt; — Next.js 16 (App Router), React 19, Tailwind CSS v4, shipped as a static export.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Backend&lt;/strong&gt; — Node.js, Express 5, with Zod validating every request and every model response.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Open-source AI&lt;/strong&gt; — Gemma 4 (Google's open-weight model), called through the free tier of the Gemini API. It writes the daily plan (greeting, schedule, meal and exercise suggestions, one specific tip) and answers questions about Yashu's own saved check-ins — only from what she's actually written down, never a guess. If Gemma is slow, unreachable, or returns something unusable, a deterministic rule-based planner answers instead, so the app never visibly breaks.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Voice — ElevenLabs&lt;/strong&gt; — Scribe turns her spoken tasks, check-in notes and questions into text (it understands Hinglish with no extra setup), and the text-to-speech voice reads the daily plan, answers, and a brand-new daily wake-up alarm out loud. The alarm rings once a day at her saved wake time while the app is open, speaking her greeting and that day's pending tasks — with a browser-voice and a plain tone as fallbacks if the voice service is ever unreachable, so she's never met with silence.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Database — MongoDB Atlas&lt;/strong&gt;, with an in-memory store as an automatic fallback and a background retry loop, so a flaky connection never takes the whole app down.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Observability — Sentry Agent Tracing&lt;/strong&gt;, tracing every planning and "ask" call using the gen_ai.* semantic conventions — one span per agent run, one child span per model call, with latency and token usage. Nothing else: no prompts or answers are ever recorded, because they're someone's private check-ins.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Deployment — Render&lt;/strong&gt;, a free Node web service for the API and a free static site for the frontend, defined as one render.yaml Blueprint.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;GitHub Copilot&lt;/strong&gt;, configured with a &lt;code&gt;.github/copilot-instructions.md&lt;/code&gt; file so Copilot's coding agent always has the real project context — the stack, the "never break on a failed service" rule, and the "no implementation jargon in the UI" rule — plus GitHub Actions (&lt;code&gt;.github/workflows/ci.yml&lt;/code&gt;) that lints and tests the backend and lints and builds the frontend on every push.&lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;Because Gemma is open-weight and free to call through the Gemini API's free tier, I could build this exactly the way a friend building for a friend actually would: no budget, no enterprise contract, no vendor lock-in, nothing stopping Yashu from running her own copy later if she ever wants to.&lt;/p&gt;

&lt;p&gt;Being able to see the full shape of a prompt and its response, instead of a black box, is what let me build a rule-based fallback planner that mirrors the AI one closely enough that Yashu — or a judge — usually can't tell which one answered. That same visibility is what made the Sentry Agent Tracing genuinely useful here: it traces real call structure and real token counts, not a guess at what a closed API might be doing behind the scenes. Openness is the reason the whole app can promise "it never breaks" instead of just hoping it won't.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;Best Use of Gemma&lt;/li&gt;
&lt;li&gt;Best Use of ElevenLabs&lt;/li&gt;
&lt;li&gt;Best Use of MongoDB Atlas&lt;/li&gt;
&lt;li&gt;Best Use of Sentry Agent Tracing&lt;/li&gt;
&lt;li&gt;Best Use of Render&lt;/li&gt;
&lt;li&gt;Best Use of GitHub Copilot&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;em&gt;Thanks for reading — and happy Hacktoberfest!&lt;/em&gt;&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>weekendchallenge</category>
      <category>hf26challenge</category>
    </item>
    <item>
      <title>SplitEase - I Built an AI-Powered Bill Splitter So My Roommates Would Stop Owing Me Money</title>
      <dc:creator>softGpt 9299</dc:creator>
      <pubDate>Sun, 04 Oct 2026 07:44:53 +0000</pubDate>
      <link>https://dev.to/softgpt_9299_fd5278301830/splitease-i-built-an-ai-powered-bill-splitter-so-my-roommates-would-stop-owing-me-money-1ne9</link>
      <guid>https://dev.to/softgpt_9299_fd5278301830/splitease-i-built-an-ai-powered-bill-splitter-so-my-roommates-would-stop-owing-me-money-1ne9</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/mlh-hackathon"&gt;MLH x DEV Writing Challenge&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;SplitEase&lt;/strong&gt; (live at &lt;a href="https://split.elitecrew.online" rel="noopener noreferrer"&gt;split.elitecrew.online&lt;/a&gt;) is a zero-paywall expense-splitting platform for roommates, friend groups, and trips — built to kill the awkward "I'll pay you back later" conversation for good.&lt;/p&gt;

&lt;p&gt;The idea came from a very real, very annoying problem: tracking hostel bills, flat rent, and trip expenses across a WhatsApp group and a mental spreadsheet that nobody actually updates. SplitEase replaces that chaos with one place where every group tracks who paid, who owes, and how to settle up with the fewest possible transfers.&lt;/p&gt;

&lt;p&gt;Core features:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Groups for everything&lt;/strong&gt; — unlimited groups and members, with roommate, trip, and one-off "Quick Split" modes&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Flexible splitting&lt;/strong&gt; — equal, percentage, shares, or exact-amount splits&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;QR, link &amp;amp; email invites&lt;/strong&gt; — get a group started in seconds, no signup friction&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Real-time group chat&lt;/strong&gt; — payments and settlements are recorded directly inside the conversation, so there's no "wait, did you actually pay?"&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Minimum-transfer settlement suggestions&lt;/strong&gt; — the app does the math to simplify 18 messy bills into just 2 transfers&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Receipt photos + a built-in AI assistant&lt;/strong&gt; — attach a receipt and let the assistant help itemize it&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Live balance dashboard &amp;amp; spending charts&lt;/strong&gt; — see exactly where the group's money went, by category, by month&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Secure OTP login&lt;/strong&gt;, with TLS in transit and encryption at rest (security practices inspired by OWASP)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It's completely free — no per-member fees, no trial period, no feature gates — and it runs both as a web app and as a mobile app on Google Play.&lt;/p&gt;

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

&lt;p&gt;  &lt;iframe src="https://www.youtube.com/embed/wbtGgQk8aw8" width="710" height="399"&gt;
  &lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;🔗 Live app: &lt;a href="https://split.elitecrew.online" rel="noopener noreferrer"&gt;https://split.elitecrew.online&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;📱 Also on Google Play (React Native app for Android &amp;amp; iOS)&lt;/p&gt;

&lt;h2&gt;
  
  
  Partner Technologies
&lt;/h2&gt;

&lt;p&gt;SplitEase is a full-stack build end to end:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Frontend:&lt;/strong&gt; Next.js, React, TypeScript, Tailwind CSS, Framer Motion, Recharts, Axios&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Backend:&lt;/strong&gt; Node.js + Express, MongoDB (via Mongoose), JWT authentication, Socket.io for real-time chat and live balance updates&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Infrastructure:&lt;/strong&gt; Firebase, Cloudinary for receipt/image storage, Nodemailer for email delivery&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;AI &amp;amp; OCR:&lt;/strong&gt; OpenAI and Google Gemini power the in-app assistant, with Tesseract.js handling optical character recognition on receipt photos — together they turn a photographed receipt into itemized, split-ready expense data&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Mobile:&lt;/strong&gt; React Native (Android &amp;amp; iOS), Firebase&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Quality:&lt;/strong&gt; Jest test suites, CodeQL static analysis, and CI running fast-check property-based security tests on every push&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Hackathon Experience
&lt;/h2&gt;

&lt;p&gt;Building SplitEase at an MLH hackathon was less about chasing a trendy idea and more about finally fixing a problem I'd been living with for years — the awkward "who owes who" math that follows every trip, every shared flat, every group dinner. Hackathon weekends have a very specific energy: a hard deadline, a working demo as the only acceptable outcome, and no time to overthink the stack. That pressure is exactly what turned "I should build an expense splitter someday" into a real, deployed product with real-time chat, AI-assisted receipts, and a live settlement engine in one weekend.&lt;/p&gt;

&lt;p&gt;The biggest takeaway was how much a tight hackathon timebox forces good scoping — deciding what's a "coming soon" feature (multi-currency, CSV export, UPI payouts) versus what has to work flawlessly on demo day (splitting, settling, chatting). That discipline is still shaping how I'm building out SplitEase today.&lt;/p&gt;

</description>
      <category>mlhacks</category>
      <category>devchallenge</category>
      <category>hackathon</category>
    </item>
  </channel>
</rss>
