<?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: BHAVYA GOTHI</title>
    <description>The latest articles on DEV Community by BHAVYA GOTHI (@bhavya_gothi_d9713c43c20b).</description>
    <link>https://dev.to/bhavya_gothi_d9713c43c20b</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%2F4157059%2Fc5d5b0dc-6097-4189-bfc9-e74b7a25d909.png</url>
      <title>DEV Community: BHAVYA GOTHI</title>
      <link>https://dev.to/bhavya_gothi_d9713c43c20b</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/bhavya_gothi_d9713c43c20b"/>
    <language>en</language>
    <item>
      <title>Circular Sloth: The School WhatsApp Notices Your Brain Never Has to Read Twice Short, clear, and says exactly who it’s for.</title>
      <dc:creator>BHAVYA GOTHI</dc:creator>
      <pubDate>Thu, 22 Oct 2026 04:19:15 +0000</pubDate>
      <link>https://dev.to/bhavya_gothi_d9713c43c20b/circular-sloth-the-school-whatsapp-notices-your-brain-never-has-to-read-twice-short-clear-and-1ge3</link>
      <guid>https://dev.to/bhavya_gothi_d9713c43c20b/circular-sloth-the-school-whatsapp-notices-your-brain-never-has-to-read-twice-short-clear-and-1ge3</guid>
      <description>&lt;p&gt;&lt;strong&gt;__&lt;/strong&gt;&lt;/p&gt;

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

&lt;p&gt;School circulars arrive in WhatsApp in English, Hindi, and Marathi, often mixed in with everything else. A deadline can get buried, and the consequence can be as small—and as stressful—as sending a child in the wrong shoes.&lt;br&gt;
Circular Sloth turns a circular into a reviewable list for parents of school-going kids. It can:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Accept text shared from WhatsApp, pasted messages, photos, and PDFs.&lt;/li&gt;
&lt;li&gt;Read the circular and suggest only the actions, dates, amounts, and things to bring or wear that matter.&lt;/li&gt;
&lt;li&gt;Let a parent review and edit those suggestions before saving them.&lt;/li&gt;
&lt;li&gt;Show a Tomorrow checklist and a printable/shareable Weekly Slip.&lt;/li&gt;
&lt;li&gt;Export calendar reminders and draft a reply to a teacher in WhatsApp.
The honest lazy claim is: “One tap in WhatsApp, then zero effort.” That is the aspiration after sharing, not a claim of full automation: OCR and model suggestions can be wrong, and a parent must review them.&lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;&lt;strong&gt;Live Now:-&lt;/strong&gt; &lt;/p&gt;
&lt;div class="crayons-card c-embed text-styles text-styles--secondary"&gt;
    &lt;div class="c-embed__content"&gt;
      &lt;div class="c-embed__body flex items-center justify-between"&gt;
        &lt;a href="https://circular-sloth.onrender.com/" rel="noopener noreferrer" class="c-link fw-bold flex items-center"&gt;
          &lt;span class="mr-2"&gt;circular-sloth.onrender.com&lt;/span&gt;
          

        &lt;/a&gt;
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;
&lt;br&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%2Fsm2wnbfu53m8q39za2w7.png" alt="“Try a sample circular”" width="800" height="500"&gt;&lt;br&gt;
Tap “Try a sample circular” on Tomorrow to send sample text to the real model; there is no canned response. The free-tier model can briefly be busy; the API retries temporary provider errors.&lt;br&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%2Ffz7f15orncgb1fvgih4q.png" alt="Write or copy paste whatsapp msg" width="800" height="500"&gt;&lt;br&gt;
Write or copy paste whatsapp message&lt;br&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%2Fnj4s2ajpz0eca6vspsa1.png" alt="Scan" width="800" height="500"&gt;&lt;br&gt;
Upload a circular&lt;br&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%2Fq3s0ir8ljs0wx7uw0rjz.png" alt="Tomorrow list" width="800" height="452"&gt;&lt;br&gt;
List of tomorrow's reminders&lt;br&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%2F8r3t7ggctwa2bki43w5a.png" alt="Review" width="800" height="500"&gt;&lt;br&gt;
Review the extracted suggestions and check the important details before saving.&lt;br&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%2Futvq3l6uwsl92jlih55b.png" alt="Next 7 days suggestion" width="800" height="500"&gt;&lt;br&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%2Fcrg62pw1cxdjxlacbanc.png" alt="Share" width="800" height="500"&gt;&lt;br&gt;
The week’s dates and tasks, ready to print or share.

&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/Bhavya4523" rel="noopener noreferrer"&gt;
        Bhavya4523
      &lt;/a&gt; / &lt;a href="https://github.com/Bhavya4523/circular-sloth" rel="noopener noreferrer"&gt;
        circular-sloth
      &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;Circular Sloth&lt;/h1&gt;
&lt;/div&gt;
&lt;p&gt;Circular Sloth turns school circulars into a short, reviewable list of what a parent needs to do. Add a pasted message, photo, PDF, or shared item; extract text; review and edit suggestions; then save the items to the browser's local workspace. It also includes a weekly fridge slip, calendar export, summary, and reply drafting.&lt;/p&gt;

&lt;p&gt;The project uses open-weight language models through OpenRouter or a compatible hosted endpoint, and can use Ollama locally. A model can make mistakes: parents must check every extracted item before saving or acting on it.&lt;/p&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Privacy and ownership&lt;/h2&gt;
&lt;/div&gt;

&lt;ul&gt;
&lt;li&gt;Family records are stored in IndexedDB in the browser profile. The server has no accounts, database, cookies, or family-record storage.&lt;/li&gt;
&lt;li&gt;Photos and PDFs are processed in the browser; the app sends extracted text to the API when model assistance is requested. In hosted mode that text is sent to the configured model provider. The provider's retention…&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/Bhavya4523/circular-sloth" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;br&gt;
The repo contains the React app, FastAPI service, tests, evaluation notes, and Render configuration. DEV profile: [Bhavya4523].
&lt;h2&gt;
  
  
  How I Built It
&lt;/h2&gt;

&lt;p&gt;The hosted app uses Gemma 4, an open-weight model served through OpenRouter’s OpenAI-compatible API. Environment variables switch the provider and model. Ollama with Gemma 3 (gemma3:4b) is the local option. The localhost smoke passed, but internet remained on, so this was not a fully isolated offline test.&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%2F5kbl16ondg1hgsnoscmz.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%2F5kbl16ondg1hgsnoscmz.png" alt=" " width="800" height="499"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Architecture: Browser (local records + OCR/PDF extraction) → stateless FastAPI → configured hosted provider or local Ollama → reviewed suggestions in the browser.&lt;br&gt;
The backend keeps no family records. Hosted mode sends extracted text—not photos—from the browser through the API to the provider. Parents review suggestions before saving. The API retries temporary 429/5xx provider errors and reports when the reader is busy. Its smoke test adds a fresh random rupee amount and future date to a request and only passes if the response contains that injected pair exactly once. The README records a passing Render smoke with Rs 285 and 2027-05-01.&lt;br&gt;
Render’s Docker build initially failed because the Dockerfile copied a missing web/build.mjs. I fixed the frontend build stage and the corrected deployment succeeded. A local Docker build remains unverified because Docker Desktop returned an internal Linux-engine API error.&lt;/p&gt;
&lt;h2&gt;
  
  
  Why Does Open Innovation Matter?
&lt;/h2&gt;

&lt;p&gt;School and class details are sensitive. Circular Sloth keeps family records in the browser and avoids sending a child’s name in model requests. The model provider can be changed through configuration, and the same API code supports local Ollama, so the app is not tied to one hosted model service.&lt;/p&gt;
&lt;h3&gt;
  
  
  Honest trade-off
&lt;/h3&gt;

&lt;p&gt;The live demo sends circular text, never photos, to OpenRouter and the company hosting the model. Their retention and privacy policies apply. For a stronger privacy boundary, use the local Ollama path; the README’s smoke passed against localhost, but internet access was still on during that check.&lt;/p&gt;
&lt;h3&gt;
  
  
  Where open beat closed
&lt;/h3&gt;

&lt;p&gt;In this project, an open-weight Gemma model could be served through OpenRouter for the live app and swapped for Ollama locally using configuration. That gave me one model interface for hosted and local experiments without changing the app’s core request flow. In the README evaluation, the free provider returned 29 errors across 30 synthetic notices, so its low score is not a useful model-quality estimate.&lt;/p&gt;
&lt;h2&gt;
  
  
  The Lazy Payoff
&lt;/h2&gt;

&lt;p&gt;Manual estimate, not a measurement: reading a circular, finding its deadline, and copying dates might take a few minutes, depending on its length. With Circular Sloth, a parent shares or adds it, checks the suggested details, and saves the ones that are right. Review still takes time; the goal is less hunting through chats and retyping dates.&lt;/p&gt;
&lt;h2&gt;
  
  
  Prize Categories
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Gemma: Gemma 4 is the open-weight model configured for hosted requests through OpenRouter; Gemma 3 (gemma3:4b) was used for the local Ollama smoke test.&lt;/li&gt;
&lt;li&gt;Render: The live Circular Sloth app is hosted at Render, with its deployment configuration in the repository.
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;_&lt;br&gt;
Small steps, fewer missed circulars, and a little more breathing room for busy parents._&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;_                 &lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>hf26challenge</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Pakka Khata — A Smarter Digital Khata for Small Indian Shops</title>
      <dc:creator>BHAVYA GOTHI</dc:creator>
      <pubDate>Fri, 16 Oct 2026 11:48:00 +0000</pubDate>
      <link>https://dev.to/bhavya_gothi_d9713c43c20b/pakka-khata-a-smarter-digital-khata-for-small-indian-shops-17ag</link>
      <guid>https://dev.to/bhavya_gothi_d9713c43c20b/pakka-khata-a-smarter-digital-khata-for-small-indian-shops-17ag</guid>
      <description>&lt;h2&gt;
  
  
  What I Built
&lt;/h2&gt;

&lt;p&gt;Pakka Khata is a digital ledger designed for small Indian shopkeepers who still rely on handwritten khata books to track customer credit, payments, and outstanding balances.&lt;/p&gt;

&lt;p&gt;These notebooks are familiar, but searching old transactions, calculating dues, preserving records, and reminding customers to pay can be tedious. Pakka Khata brings this everyday workflow into a simple digital application, using open-source AI to help digitize handwritten records.&lt;/p&gt;

&lt;h3&gt;
  
  
  What it can do
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;AI-assisted ledger scanning: Turn a photograph of a handwritten ledger page into structured transaction rows.&lt;/li&gt;
&lt;li&gt;Human-reviewed extraction: Review and correct extracted details before saving them.&lt;/li&gt;
&lt;li&gt;Customer-wise bookkeeping: Manage customers, transaction histories, payments, and outstanding balances.&lt;/li&gt;
&lt;li&gt;Multilingual reminders: Prepare payment reminders in English, Hindi, Marathi, and Hinglish, ready to copy or share through WhatsApp.&lt;/li&gt;
&lt;li&gt;Local-first data storage: Keep customer and ledger records in the browser rather than a central application database.&lt;/li&gt;
&lt;li&gt;Data portability: Support encrypted backups, restoration, and CSV export.&lt;/li&gt;
&lt;li&gt;The idea is simple: help shopkeepers spend less time maintaining their books without forcing them to abandon a familiar way of working.
&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%2F56idm1753of8hlarjxqz.png" alt="Sign in page" width="800" height="500"&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%2Fegk19asfbxfbhr2snjky.png" alt="Security demonstration" width="800" height="500"&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%2F4bvtqxkxwzyiaes9fyxq.png" alt="Dashboard" width="799" height="423"&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%2F91a6aiiblfzkx7y0faq3.png" alt="Scanning page" width="800" height="412"&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%2Ffyjbd7eogj5fvekn9u01.png" alt="Customers" width="799" height="415"&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%2Fdymolwx613cyyk7dsoa2.png" alt="Ledger" width="799" height="417"&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%2F1yl2eq3nnc37j3t1qbzi.png" alt="Reminder" width="800" height="417"&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%2F9ybrhx5ae1pm2eejf0ff.png" alt="Whatsapp access" width="800" height="500"&gt;
&lt;/li&gt;
&lt;/ul&gt;

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


&lt;div class="crayons-card c-embed text-styles text-styles--secondary"&gt;
    &lt;div class="c-embed__content"&gt;
      &lt;div class="c-embed__body flex items-center justify-between"&gt;
        &lt;a href="https://pakka-khata.onrender.com" rel="noopener noreferrer" class="c-link fw-bold flex items-center"&gt;
          &lt;span class="mr-2"&gt;pakka-khata.onrender.com&lt;/span&gt;
          

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


&lt;p&gt;The deployed application lets users explore the interface and ledger workflows.&lt;/p&gt;

&lt;p&gt;Important transparency note: The hosted version currently runs with demo-mode scanning, which returns clearly labelled sample extraction results rather than performing real model inference on the uploaded photograph. Actual model-based scanning has been tested locally with Ollama and Gemma 3 4B. The live demo and local AI configuration are documented in the repository.&lt;/p&gt;

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

&lt;p&gt;GitHub:&lt;/p&gt;
&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://assets.dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/Bhavya4523" rel="noopener noreferrer"&gt;
        Bhavya4523
      &lt;/a&gt; / &lt;a href="https://github.com/Bhavya4523/pakka-khata-" rel="noopener noreferrer"&gt;
        pakka-khata-
      &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;Pakka Khata — Local-first digital khata for small Indian shops&lt;/h1&gt;
&lt;/div&gt;
&lt;p&gt;Pakka Khata is a private digital khata book for small Indian shops. It is designed to read a photo of a handwritten ledger page into a reviewable set of rows, then draft a polite payment reminder in the customer's language.&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Current status&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;Phase 1 provides the stateless FastAPI service, image validation and in-memory multipart processing, Ollama/OpenAI-compatible provider adapter for open-weight models, extraction validation and retry/repair, reminder drafting, demo mode, security headers, Docker/Render deployment foundation, and API tests. Phase 2 adds the multilingual React/Vite ledger shell, Dexie/IndexedDB browser storage, shop setup, summary dashboard, sample ledger, App Lock, encrypted backup/restore, CSV export, deletion, and PWA offline app shell. Phase 3 connects photo scanning and review to the API, then adds editable ledger rows, customer management, manual entries and payments, and WhatsApp-ready reminder drafts. Phase 4 adds labelled-image evaluation tooling, accessibility/security release checklists…&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/Bhavya4523/pakka-khata-" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;The repository contains the frontend, FastAPI backend, tests, Docker configuration, deployment setup, and installation guides for the different development phases.&lt;/p&gt;

&lt;p&gt;The project is designed so that the backend does not maintain a central database of customers or ledger transactions. The browser owns the ledger data, while the backend processes scan and reminder requests.&lt;/p&gt;

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

&lt;h3&gt;
  
  
  TECHSTACK
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Frontend: React, Vite, TypeScript&lt;/li&gt;
&lt;li&gt;Browser Storage: IndexedDB and Dexie&lt;/li&gt;
&lt;li&gt;Backend: Python, FastAPI, Pydantic&lt;/li&gt;
&lt;li&gt;AI: Gemma 3 4B through Ollama for local model inference&lt;/li&gt;
&lt;li&gt;Deployment: Docker, Docker Compose, Render&lt;/li&gt;
&lt;li&gt;Testing: Vitest, pytest
###How the AI works&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Pakka Khata uses Gemma 3 4B, an open-weight multimodal model, through Ollama for local inference.&lt;/p&gt;

&lt;p&gt;The model helps interpret a handwritten ledger image and extract structured information. The application then presents the result for human review instead of automatically trusting every extracted amount or customer name.&lt;/p&gt;

&lt;p&gt;The frontend stores ledger records in browser-local IndexedDB. This separates the shopkeeper's ledger storage from the backend's image-processing workflow.&lt;/p&gt;

&lt;p&gt;The application was tested across frontend and backend suites, with 12 frontend tests and 31 backend tests passing. Core workflows were also checked manually, including ledger review, saving records, customer management, persistence after refresh, and payment reminders.&lt;/p&gt;

&lt;h3&gt;
  
  
  Architecture and Implementation
&lt;/h3&gt;

&lt;p&gt;The frontend stores shop settings, customers, and ledger entries locally using Dexie and IndexedDB. When a user scans a ledger page, the image is processed and sent to the backend for extraction. The resulting rows are presented for correction and confirmation before being saved to the local ledger.&lt;br&gt;
The local inference setup uses Ollama with Gemma 3 4B. Docker Compose brings the application and model service together for local development.&lt;br&gt;
The project also includes validation, error handling, request limits, security-conscious logging, and a clearly labelled demo mode for deployment without a dedicated model server.&lt;/p&gt;

&lt;h3&gt;
  
  
  Testing
&lt;/h3&gt;

&lt;p&gt;The project was tested incrementally across frontend and backend components. The frontend test suite passed 12 tests across four test files, and the backend test suite passed 31 tests. The production frontend build also completed successfully.&lt;br&gt;
Manual end-to-end checks covered scanning and reviewing records, saving entries, managing customer ledgers, persistence after refresh, recording payments, and preparing reminders.&lt;/p&gt;

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

&lt;p&gt;For Pakka Khata, open innovation is not just a technology choice. It shapes how the product can work for small businesses.&lt;/p&gt;

&lt;p&gt;Privacy and control: Running Gemma locally through Ollama allows ledger images to be processed without sending them to a third-party hosted AI provider. This is valuable when records contain customer names, credit amounts, and payment histories.&lt;/p&gt;

&lt;p&gt;Cost control: Local inference avoids per-request charges from a hosted AI API, although it still requires suitable hardware and electricity. That creates a potential path towards sustainable operating costs for a small-business product.&lt;/p&gt;

&lt;p&gt;Freedom to experiment: Using an open-weight model gives developers greater flexibility to inspect the workflow, modify prompts, and experiment with alternative models instead of being tied to one provider's API and pricing.&lt;/p&gt;

&lt;p&gt;A practical use case: Rather than building another generic AI chatbot, Pakka Khata applies open-source AI to a specific task that small retailers may genuinely need help with.&lt;/p&gt;

&lt;p&gt;The local-first approach is a promising foundation, although it does not yet mean the hosted deployment provides the same live AI functionality.&lt;/p&gt;

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

&lt;p&gt;The project was developed through an iterative workflow involving implementation, debugging, testing, local AI integration, Docker validation, and deployment.&lt;/p&gt;

&lt;p&gt;Repository and implementation: &lt;a href="https://github.com/Bhavya4523/pakka-khata-" rel="noopener noreferrer"&gt;https://github.com/Bhavya4523/pakka-khata-&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If the submission form specifically requires a shareable agent-session transcript, add that session's URL here. The repository link is provided separately as the source-code reference.&lt;/p&gt;

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

&lt;p&gt;My first user was the owner of a small kirana shop in my neighbourhood, where I regularly buy groceries.&lt;/p&gt;

&lt;p&gt;I approached him with Pakka Khata and let him use the locally running version on my laptop for a day. I wanted to see whether the application would be useful in an actual shopkeeping context, not just whether it worked during development.&lt;/p&gt;

&lt;p&gt;He was impressed by the idea and found the application helpful for digitising handwritten ledger records and managing customer transactions. It was encouraging to see someone outside my development process understand the problem it was trying to solve.&lt;/p&gt;

&lt;p&gt;To be transparent, I provided the local version because the deployed version currently uses sample extraction results. The local version uses Ollama and Gemma 3 4B for actual model inference.&lt;/p&gt;

&lt;p&gt;This was an initial, one-day trial with one shopkeeper, not a large-scale user study. He did not pay for the application, so I have not yet validated willingness to pay.&lt;/p&gt;

&lt;p&gt;The experience reinforced my belief that a focused, familiar tool could be useful to small retailers. My next step would be to gather more feedback, improve the deployed AI experience, and understand which features shopkeepers would value enough to pay for.&lt;/p&gt;

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

&lt;p&gt;Project theme: SIDE HUSTLE&lt;br&gt;
Pakka Khata explores the potential for a small, practical software product built around an everyday business problem.&lt;/p&gt;

&lt;p&gt;The target users are kirana shopkeepers who want to maintain customer credit records without spending extra time manually digitising their notebooks. A future sustainable version could offer a straightforward bookkeeping workflow, privacy-conscious AI scanning, and convenient payment reminders.&lt;/p&gt;

&lt;p&gt;The first shopkeeper trial gave me an initial signal of usefulness, but it is only a starting point. Pricing, repeat usage, willingness to pay, and broader demand still need to be validated.&lt;/p&gt;

&lt;p&gt;I built Pakka Khata to explore how open-source AI can help turn a familiar manual task into a more manageable digital workflow.&lt;/p&gt;

&lt;h2&gt;
  
  
  Pakka Khata — helping small shops keep their trusted khata, with a smarter way to manage it.
&lt;/h2&gt;

</description>
      <category>devchallenge</category>
      <category>hf26challenge</category>
    </item>
    <item>
      <title>SIDEQUEST: Your Destination Isn't the Point</title>
      <dc:creator>BHAVYA GOTHI</dc:creator>
      <pubDate>Thu, 08 Oct 2026 14:55:41 +0000</pubDate>
      <link>https://dev.to/bhavya_gothi_d9713c43c20b/sidequest-your-destination-isnt-the-point-5ebn</link>
      <guid>https://dev.to/bhavya_gothi_d9713c43c20b/sidequest-your-destination-isnt-the-point-5ebn</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/hacktoberfest-week1-2026-10-05"&gt;Hacktoberfest Open-Source AI Challenge Week 1: Touch Grass&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

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

&lt;p&gt;Most apps are designed to make journeys more efficient.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;SIDEQUEST is designed to make the journey itself worth noticing.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;You already have somewhere to go.&lt;/p&gt;

&lt;p&gt;Your college.&lt;br&gt;
Your train station.&lt;br&gt;
Your home.&lt;br&gt;
A friend's place.&lt;/p&gt;

&lt;p&gt;SIDEQUEST takes that ordinary journey and turns it into a tiny real-world adventure.&lt;/p&gt;

&lt;p&gt;You tell it:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;where you're going&lt;/li&gt;
&lt;li&gt;how much time you have&lt;/li&gt;
&lt;li&gt;how you're feeling&lt;/li&gt;
&lt;li&gt;what interests you&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Then the AI gives you one small mission that fits the journey.&lt;/p&gt;

&lt;p&gt;Not a travel itinerary.&lt;/p&gt;

&lt;p&gt;Not a list of places.&lt;/p&gt;

&lt;p&gt;Not another feed to scroll.&lt;/p&gt;

&lt;p&gt;A &lt;strong&gt;sidequest&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;For example:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Find one detail on your route that you've probably walked past before.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Or:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Take the quieter street and notice three different textures on the buildings around you.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Or:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Find a local food smell you wouldn't normally follow and discover where it comes from.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The important part comes after the AI finishes.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;You put the phone down.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The intended loop is:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;PLAN → GET QUEST → LEAVE PHONE → EXPERIENCE WORLD → RETURN → REFLECT&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;That is the product philosophy behind SIDEQUEST:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;The best outcome is not more screen time.&lt;br&gt;&lt;br&gt;
The best outcome is that you stop using the app.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;SIDEQUEST is built for people who already have somewhere to be, but don't want to sleepwalk through the journey.&lt;/p&gt;
&lt;h3&gt;
  
  
  What makes it different?
&lt;/h3&gt;

&lt;p&gt;The AI isn't the destination.&lt;/p&gt;

&lt;p&gt;It's the excuse to go outside.&lt;/p&gt;

&lt;p&gt;SIDEQUEST combines:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;personalized quest generation&lt;/li&gt;
&lt;li&gt;multiple AI-generated candidates&lt;/li&gt;
&lt;li&gt;deterministic quest ranking&lt;/li&gt;
&lt;li&gt;safety filtering&lt;/li&gt;
&lt;li&gt;anti-repetition checks&lt;/li&gt;
&lt;li&gt;feedback-based personalization&lt;/li&gt;
&lt;li&gt;a field journal&lt;/li&gt;
&lt;li&gt;exploration statistics&lt;/li&gt;
&lt;li&gt;Chaos Mode for unplanned adventures&lt;/li&gt;
&lt;li&gt;local AI support through Ollama&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And the entire UI is built around one idea:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;make the screen useful for a few seconds, then get out of the way.&lt;/strong&gt;&lt;/p&gt;


&lt;h2&gt;
  
  
  🎥 Demo
&lt;/h2&gt;
&lt;h3&gt;
  
  
  Try SIDEQUEST
&lt;/h3&gt;


&lt;div class="crayons-card c-embed text-styles text-styles--secondary"&gt;
    &lt;div class="c-embed__content"&gt;
      &lt;div class="c-embed__body flex items-center justify-between"&gt;
        &lt;a href="https://sidequest-jstk.onrender.com/" rel="noopener noreferrer" class="c-link fw-bold flex items-center"&gt;
          &lt;span class="mr-2"&gt;sidequest-jstk.onrender.com&lt;/span&gt;
          

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


&lt;p&gt;The public demo lets you:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Enter your destination&lt;/li&gt;
&lt;li&gt;Choose your available time&lt;/li&gt;
&lt;li&gt;Pick your mood&lt;/li&gt;
&lt;li&gt;Choose your interests&lt;/li&gt;
&lt;li&gt;Generate a SIDEQUEST&lt;/li&gt;
&lt;li&gt;Put your phone down&lt;/li&gt;
&lt;li&gt;Complete the real-world mission&lt;/li&gt;
&lt;li&gt;Return and reflect&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The local version goes one step further: Gemma can run through Ollama directly on the laptop, so the core generation path can work without internet access.&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%2F1dd8hz7tfb54so6x68uo.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%2F1dd8hz7tfb54so6x68uo.png" alt="SIDEQUEST mobile home screen in light mode showing the app branding, “Your destination isn't the point” headline, exploration statistics, and the open-weight AI status." width="738" height="1600"&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%2Fnpw6myjp8285hv0xlq9r.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%2Fnpw6myjp8285hv0xlq9r.png" alt="SIDEQUEST mobile home screen in dark mode showing the same “Your destination isn't the point” message, exploration statistics, and open-weight AI interface." width="738" height="1600"&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%2Fr9l7f3rnsyxt3r475wxj.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%2Fr9l7f3rnsyxt3r475wxj.png" alt="SIDEQUEST mobile home screen showing the journey setup form with destination input, available time options, mood selection, and open-weight AI running on device." width="738" height="1600"&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%2Foyp1oe6foatzit118k36.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%2Foyp1oe6foatzit118k36.png" alt="SIDEQUEST mobile journey setup screen showing selected time and mood options, available interests including food, architecture, nature, people, and photography, plus Create Sidequest and Chaos Mode buttons." width="738" height="1600"&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%2Fomctdyzsmqy7zwtowwe2.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%2Fomctdyzsmqy7zwtowwe2.png" alt="SIDEQUEST Field Journal on mobile showing one completed quest, total quests, minutes explored, and weekly exploration activity." width="738" height="1600"&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%2Flvrhvpp0anlmux2vh1pr.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%2Flvrhvpp0anlmux2vh1pr.png" alt="SIDEQUEST Field Journal showing the last seven days of outdoor activity and a completed field note titled “The Unfamiliar Turn,” including its exploration category, duration, and rating." width="738" height="1600"&gt;&lt;/a&gt;&lt;/p&gt;




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


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://assets.dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/Bhavya4523" rel="noopener noreferrer"&gt;
        Bhavya4523
      &lt;/a&gt; / &lt;a href="https://github.com/Bhavya4523/SIDEQUEST" rel="noopener noreferrer"&gt;
        SIDEQUEST
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      
    &lt;/h3&gt;
  &lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;The repository contains the frontend, FastAPI backend, AI generation pipeline, safety filtering, ranking logic, personalization system, SQLite database layer, and local Ollama integration.&lt;/p&gt;




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

&lt;h3&gt;
  
  
  Step 1: Start with the real problem, not the AI
&lt;/h3&gt;

&lt;p&gt;I didn't start by asking:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"What can I do with an LLM?"&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I started with:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;"What if an app was successful when you stopped looking at it?"&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Most digital products optimize for engagement.&lt;/p&gt;

&lt;p&gt;SIDEQUEST deliberately optimizes for &lt;strong&gt;departure&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;That constraint shaped the architecture, the UI, and even the way the AI generates quests.&lt;/p&gt;




&lt;h3&gt;
  
  
  Step 2: Make the AI generate experiences, not recommendations
&lt;/h3&gt;

&lt;p&gt;A normal recommendation system might return:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Visit this cafe."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That's not what SIDEQUEST is trying to do.&lt;/p&gt;

&lt;p&gt;The AI receives structured journey context:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;destination + available time + mood + interests&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;and turns it into a &lt;strong&gt;small actionable experience&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The output follows a structured quest format containing things like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;title&lt;/li&gt;
&lt;li&gt;duration&lt;/li&gt;
&lt;li&gt;difficulty&lt;/li&gt;
&lt;li&gt;category&lt;/li&gt;
&lt;li&gt;objective&lt;/li&gt;
&lt;li&gt;steps&lt;/li&gt;
&lt;li&gt;novelty score&lt;/li&gt;
&lt;li&gt;safety notes&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This gives the rest of the system something predictable to validate and rank instead of blindly displaying raw model output.&lt;/p&gt;




&lt;h3&gt;
  
  
  Step 3: Generate candidates, then choose
&lt;/h3&gt;

&lt;p&gt;One of the important design decisions was not accepting the first AI answer.&lt;/p&gt;

&lt;p&gt;SIDEQUEST generates multiple candidate quests.&lt;/p&gt;

&lt;p&gt;Those candidates then move through a pipeline:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
Journey Context
      ↓
Context Builder
      ↓
Open-Weight AI
      ↓
Candidate Quests
      ↓
Validation
      ↓
Safety Filter
      ↓
Anti-Repetition Check
      ↓
Quest Ranking
      ↓
Final SIDEQUEST
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The ranking layer considers factors such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;time fit&lt;/li&gt;
&lt;li&gt;personalization&lt;/li&gt;
&lt;li&gt;novelty&lt;/li&gt;
&lt;li&gt;feasibility&lt;/li&gt;
&lt;li&gt;historical preference&lt;/li&gt;
&lt;li&gt;recent repetition
So the LLM proposes possibilities.
The application decides which one makes the most sense.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Step 4: Don't let the model decide what's safe
&lt;/h3&gt;

&lt;p&gt;An AI-generated activity can sound harmless while still being a bad idea in the real world.&lt;br&gt;
SIDEQUEST therefore has a separate safety filtering layer.&lt;br&gt;
Generated quests are screened for things such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;unsafe roads&lt;/li&gt;
&lt;li&gt;dangerous activities&lt;/li&gt;
&lt;li&gt;trespassing or private property&lt;/li&gt;
&lt;li&gt;unsafe wildlife interaction&lt;/li&gt;
&lt;li&gt;phone-dependent activities&lt;/li&gt;
&lt;li&gt;other inappropriate instructions
The important architectural choice is that safety isn't left entirely to the model.
The model generates.
The application validates.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  Step 5: Make repetition harder
&lt;/h3&gt;

&lt;p&gt;A generative model can produce ten different sentences that all describe the same experience.&lt;br&gt;
That becomes annoying very quickly.&lt;br&gt;
So SIDEQUEST keeps track of previous quests and checks new candidates for semantic similarity.&lt;br&gt;
If a new quest is too close to recent experiences, it can be rejected and regenerated.&lt;br&gt;
Recent category usage also affects ranking so the system has an incentive to vary the type of experience.&lt;br&gt;
The goal is:&lt;br&gt;
Not another quest.&lt;br&gt;
A different experience.&lt;/p&gt;
&lt;h3&gt;
  
  
  Step 6: Let the system learn from the person
&lt;/h3&gt;

&lt;p&gt;Personalization shouldn't mean asking users to fill out a giant profile.&lt;br&gt;
SIDEQUEST learns from what happens after the quest.&lt;br&gt;
When you return, you can say:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;completed&lt;/li&gt;
&lt;li&gt;partly completed&lt;/li&gt;
&lt;li&gt;skipped
You can also give a rating and write a reflection.
That feedback updates a lightweight personalization profile.
Over time, the system can learn things such as:&lt;/li&gt;
&lt;li&gt;which categories the user tends to enjoy&lt;/li&gt;
&lt;li&gt;preferred difficulty&lt;/li&gt;
&lt;li&gt;preferred duration&lt;/li&gt;
&lt;li&gt;how much novelty they respond to&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So the loop becomes:&lt;/p&gt;

&lt;p&gt;GENERATE&lt;br&gt;
   ↓&lt;br&gt;
EXPERIENCE&lt;br&gt;
   ↓&lt;br&gt;
REFLECT&lt;br&gt;
   ↓&lt;br&gt;
LEARN&lt;br&gt;
   ↓&lt;br&gt;
GENERATE BETTER&lt;/p&gt;
&lt;h3&gt;
  
  
  Step 7: Chaos Mode
&lt;/h3&gt;

&lt;p&gt;Sometimes planning is exactly what gets in the way.&lt;br&gt;
So SIDEQUEST has Chaos Mode.&lt;br&gt;
Instead of carefully specifying the journey context, the user can simply give the available time and let the system create an unexpected adventure.&lt;br&gt;
It's the same core idea with less planning:&lt;br&gt;
You don't need a reason to explore.&lt;br&gt;
You just need a little time.&lt;/p&gt;
&lt;h3&gt;
  
  
  Step 8: Local-first AI
&lt;/h3&gt;

&lt;p&gt;The local version of SIDEQUEST runs:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;React
   ↓
FastAPI
   ↓
Ollama
   ↓
Gemma 3 4B
   ↓
SQLite
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Gemma 3 4B runs locally through Ollama.&lt;br&gt;
That means the local application can generate quests on the same machine without depending on a remote AI API.&lt;br&gt;
This was especially important for SIDEQUEST because the application deals with context about someone's movements, interests, and reflections.&lt;br&gt;
In local mode, that information can stay on the machine.&lt;/p&gt;
&lt;h3&gt;
  
  
  Step 9: A public demo without pretending it's offline
&lt;/h3&gt;

&lt;p&gt;I still wanted anyone to be able to try SIDEQUEST without installing Python, Ollama, or a local model.&lt;br&gt;
So the public demo is deployed as:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;React / Vite frontend
        ↓
      Render
        ↓
FastAPI backend
        ↓
Hosted AI inference
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The hosted version is intentionally labeled as hosted.&lt;br&gt;
The offline/on-device claim belongs to the local Ollama version, not the Render deployment.&lt;br&gt;
That's an important distinction I wanted to keep honest.&lt;/p&gt;

&lt;h2&gt;
  
  
  🔎 A Technical Lesson: Fallbacks Shouldn't Hide Bugs
&lt;/h2&gt;

&lt;p&gt;One of the useful lessons from building SIDEQUEST was that a fallback can make a broken system look healthy.&lt;br&gt;
When generation fails, SIDEQUEST can safely fall back rather than showing a raw error to the user.&lt;br&gt;
That's good product behavior.&lt;br&gt;
But during development, a silent fallback could make it look like the AI was working when it wasn't.&lt;br&gt;
So I kept the user experience graceful while making sure backend failures remain visible during development and debugging.&lt;br&gt;
The principle is simple:&lt;br&gt;
Fail safely for the user.&lt;br&gt;
Fail loudly for the developer.&lt;/p&gt;

&lt;h2&gt;
  
  
  🔎 Another Lesson: Generated Text Is Still Input
&lt;/h2&gt;

&lt;p&gt;SIDEQUEST feeds information from previous quests and user reflections back into later personalization and generation.&lt;br&gt;
That means stored text should not automatically be treated as trusted instructions.&lt;br&gt;
The generation pipeline separates structured application context from generated/user text and applies safety and validation before content becomes part of a new quest.&lt;br&gt;
This matters because an AI system is not just vulnerable at the first prompt.&lt;br&gt;
Its own previous outputs become future inputs.&lt;/p&gt;

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

&lt;p&gt;A closed API would have made SIDEQUEST a different product.&lt;br&gt;
The open-weight/local approach gives me something important:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;The data can stay local
In local mode, journey context, feedback and reflections can remain on the user's machine.
That matters for a product dealing with personal routines and experiences.&lt;/li&gt;
&lt;li&gt;The AI can work without internet access
With Gemma running through Ollama, the local version can continue generating quests even when the network is unavailable.
That means the model can go where the user goes.
A park.
A train.
A neighborhood walk.
Somewhere with no signal.&lt;/li&gt;
&lt;li&gt;I can change the AI stack
The AI isn't permanently tied to a single proprietary endpoint.
The model can be replaced.
The prompts can be inspected.
The generation pipeline can be modified.
The ranking layer can be changed independently of the model.&lt;/li&gt;
&lt;li&gt;The important behavior stays in code I can inspect
The safety filter, validation, candidate ranking and personalization logic aren't hidden behind a black box.
That makes experimentation much easier.
And for SIDEQUEST, that matters because the interesting part isn't just the model.
It's the system around the model.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  ⚠️ Honest Limitations
&lt;/h2&gt;

&lt;p&gt;SIDEQUEST is still a prototype, and there are things I would improve with more time.&lt;br&gt;
The local model can still be generic&lt;br&gt;
A smaller local model can occasionally produce predictable or less creative quests.&lt;br&gt;
Semantic repetition isn't perfect&lt;br&gt;
Similarity checks reduce obvious repetition, but they cannot guarantee that two experiences will feel completely different.&lt;br&gt;
Safety filtering is not a guarantee&lt;br&gt;
The current safety layer uses explicit filtering and validation rules. It reduces risky outputs but cannot mathematically guarantee that every real-world activity is safe.&lt;br&gt;
Anonymous personalization isn't authentication&lt;br&gt;
The current public version uses anonymous browser-level identity rather than account-based login.&lt;br&gt;
Different browsers can maintain separate histories, but logging into a different Google/Chrome account within the same browser does not create a different SIDEQUEST account.&lt;br&gt;
The hosted demo is not offline&lt;br&gt;
The public Render deployment requires network access.&lt;br&gt;
The offline claim applies to the local Ollama setup.&lt;br&gt;
This is not a user study&lt;br&gt;
The project has been tested through development and personal usage, but I have not run a formal user study or controlled experiment.&lt;br&gt;
I would rather state that clearly than manufacture a number that sounds impressive.&lt;br&gt;
🛠️ Tech Stack&lt;br&gt;
Layer   Technology&lt;br&gt;
Frontend    React + Vite&lt;br&gt;
Backend FastAPI&lt;br&gt;
Database    SQLite + SQLAlchemy&lt;br&gt;
Local AI    Ollama&lt;br&gt;
Open-weight model   Gemma 3 4B&lt;br&gt;
Validation  Pydantic&lt;br&gt;
AI pipeline Candidate generation + filtering + ranking&lt;br&gt;
Deployment  Render&lt;br&gt;
Version Control Git + GitHub&lt;/p&gt;

&lt;h2&gt;
  
  
  🌍 The Bigger Idea
&lt;/h2&gt;

&lt;p&gt;SIDEQUEST started from a very simple observation:&lt;br&gt;
We don't necessarily need another app to tell us where to go.&lt;br&gt;
We need better reasons to pay attention to where we already are.&lt;br&gt;
The AI doesn't need to replace the world.&lt;br&gt;
It just needs to make us notice it.&lt;br&gt;
A good SIDEQUEST might take thirty seconds to read.&lt;br&gt;
Then the screen disappears.&lt;br&gt;
You walk.&lt;br&gt;
You notice something.&lt;br&gt;
You come back.&lt;br&gt;
And the app has done its job.&lt;br&gt;
My Agent Session&lt;/p&gt;

&lt;p&gt;[Add your DevRelay agent session here]&lt;/p&gt;

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

&lt;p&gt;Best Use of Gemma&lt;br&gt;
SIDEQUEST uses Google's open-weight Gemma 3 4B as the core generative model for creating personalized real-world sidequests.&lt;br&gt;
The local implementation runs Gemma through Ollama, allowing the AI generation layer to run directly on the user's machine.&lt;br&gt;
Best Use of Render&lt;br&gt;
SIDEQUEST uses Render to deploy the public frontend and FastAPI backend so the project can be accessed as a live web application.&lt;br&gt;
🔗 Links&lt;br&gt;
Live Demo:&lt;br&gt;
&lt;a href="https://sidequest-jstk.onrender.com/" rel="noopener noreferrer"&gt;https://sidequest-jstk.onrender.com/&lt;/a&gt;&lt;br&gt;
GitHub:&lt;br&gt;
&lt;a href="https://github.com/Bhavya4523/SIDEQUEST" rel="noopener noreferrer"&gt;https://github.com/Bhavya4523/SIDEQUEST&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Final Thought
&lt;/h2&gt;

&lt;p&gt;Most AI products are trying to make you stay longer.&lt;br&gt;
SIDEQUEST is trying to make you leave sooner.&lt;br&gt;
The destination isn't the point.&lt;br&gt;
The way there is. &lt;br&gt;
                          #TouchGrass🌱&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>hf26challenge</category>
    </item>
    <item>
      <title>Remembering Why I Invested — I Built Investment Memory for My Dad</title>
      <dc:creator>BHAVYA GOTHI</dc:creator>
      <pubDate>Sat, 03 Oct 2026 07:00:41 +0000</pubDate>
      <link>https://dev.to/bhavya_gothi_d9713c43c20b/remembering-why-i-invested-i-built-investment-memory-for-my-dad-2i89</link>
      <guid>https://dev.to/bhavya_gothi_d9713c43c20b/remembering-why-i-invested-i-built-investment-memory-for-my-dad-2i89</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;p&gt;&lt;em&gt;This is a submission for the Hacktoberfest Weekend Challenge: Build for a Friend.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;The Problem&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;My dad invests regularly, but there is a simple problem that becomes more noticeable over time:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;You can remember that you bought something without remembering exactly why you bought it.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The original reason might have been a piece of news, a personal observation, a long-term plan, or a price at which he wanted to review his thinking.&lt;/p&gt;

&lt;p&gt;Months later, that context can be difficult to reconstruct.&lt;/p&gt;

&lt;p&gt;So instead of building another app that tells someone what to buy or sell, I built something much simpler:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Investment Memory — a personal journal for remembering the reasoning behind an investment decision.&lt;/strong&gt;&lt;/p&gt;

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

&lt;p&gt;Investment Memory is a personal investment decision journal that I built for my dad.&lt;/p&gt;

&lt;p&gt;He can record an investment using either text or voice.&lt;/p&gt;

&lt;p&gt;For a voice note, the application first transcribes the recording. The resulting text is shown to the user so it can be edited before anything is saved.&lt;/p&gt;

&lt;p&gt;The AI then extracts structured information from the note:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Stock name&lt;/li&gt;
&lt;li&gt;Quantity&lt;/li&gt;
&lt;li&gt;Purchase price&lt;/li&gt;
&lt;li&gt;Why he invested&lt;/li&gt;
&lt;li&gt;His stated intent&lt;/li&gt;
&lt;li&gt;Time horizon&lt;/li&gt;
&lt;li&gt;Review price&lt;/li&gt;
&lt;li&gt;Review date&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The extracted information is always editable before saving.&lt;/p&gt;

&lt;p&gt;After an investment is recorded, the application provides:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Search across saved investment memories&lt;/li&gt;
&lt;li&gt;Review reminders based on dates entered by the user&lt;/li&gt;
&lt;li&gt;A "Mark reviewed" workflow&lt;/li&gt;
&lt;li&gt;Review history&lt;/li&gt;
&lt;li&gt;Editing of saved records&lt;/li&gt;
&lt;li&gt;Light and dark mode&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The most important design choice is that the application records &lt;strong&gt;the user's own decision and reasoning&lt;/strong&gt; rather than generating investment recommendations.&lt;/p&gt;

&lt;p&gt;Nothing is saved from the AI output until the user reviews and confirms it.&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;Live Demo:&lt;/strong&gt; &lt;a href="https://investment-memory-frontend.onrender.com" rel="noopener noreferrer"&gt;https://investment-memory-frontend.onrender.com&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The public demo uses fictional/demo investment records rather than private family financial information.&lt;/p&gt;

&lt;p&gt;The complete workflow is available:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Text
  ↓
Gemma extraction
  ↓
Human review and correction
  ↓
Save
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;AND&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Voice
  ↓
Whisper transcription
  ↓
Editable transcript
  ↓
Gemma extraction
  ↓
Human review and correction
  ↓
Save
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The deployed application also includes search, review reminders, review history, saved-record editing, and light/dark mode.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Code&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;GitHub: &lt;a href="https://github.com/Bhavya4523/Investment-Memory" rel="noopener noreferrer"&gt;https://github.com/Bhavya4523/Investment-Memory&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The repository contains the React frontend, FastAPI backend, SQLAlchemy models, AI integration, and deployment configuration.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How I Built It&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I built Investment Memory with a React/Vite frontend, a FastAPI backend, SQLAlchemy, and a relational database.&lt;/p&gt;

&lt;p&gt;The AI is at the center of the workflow.&lt;/p&gt;

&lt;p&gt;Local-first version&lt;/p&gt;

&lt;p&gt;For local use, the architecture is:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Voice / Text
     ↓
Whisper
     ↓
Gemma 3 4B
     ↓
Human review
     ↓
FastAPI
     ↓
SQLite
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;For voice input, the browser records audio and the backend uses faster-whisper to create the transcript.&lt;/p&gt;

&lt;p&gt;For text extraction, I use Gemma 3 4B through Ollama.&lt;/p&gt;

&lt;p&gt;The extraction prompt is deliberately constrained. The model is instructed to:&lt;/p&gt;

&lt;p&gt;extract only information explicitly stated by the user&lt;br&gt;
leave missing fields blank&lt;br&gt;
avoid inventing information&lt;br&gt;
avoid giving financial advice&lt;br&gt;
treat a review price as a review point rather than a buy or sell instruction&lt;/p&gt;

&lt;p&gt;The model output is then validated with Pydantic before it reaches the user interface.&lt;/p&gt;

&lt;p&gt;Public deployment&lt;/p&gt;

&lt;p&gt;For the public demo, I separated the infrastructure from the local setup:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;React frontend
      ↓
FastAPI backend
      ↓
Hugging Face inference
   ┌───────────────┐
   │ Gemma         │
   │ Whisper       │
   └───────────────┘
      ↓
Neon PostgreSQL
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The frontend and backend are deployed on Render, while Neon PostgreSQL stores the public demo records.&lt;/p&gt;

&lt;p&gt;The same codebase supports both local and hosted AI through environment variables.&lt;/p&gt;

&lt;p&gt;This gives the application two modes:&lt;/p&gt;

&lt;p&gt;Local mode&lt;br&gt;
→ Ollama&lt;br&gt;
→ local Whisper&lt;br&gt;
→ SQLite&lt;/p&gt;

&lt;p&gt;and:&lt;/p&gt;

&lt;p&gt;Hosted mode&lt;br&gt;
→ Hugging Face&lt;br&gt;
→ hosted Whisper&lt;br&gt;
→ Neon PostgreSQL&lt;br&gt;
Human-in-the-loop design&lt;/p&gt;

&lt;p&gt;I did not want the model to silently turn a natural-language note into a permanent record.&lt;/p&gt;

&lt;p&gt;The workflow is:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Capture
   ↓
AI extraction
   ↓
Human checks the fields
   ↓
Human corrects anything necessary
   ↓
Confirm &amp;amp; save
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The user remains the source of truth.&lt;/p&gt;

&lt;p&gt;Review memory&lt;/p&gt;

&lt;p&gt;I also wanted an investment record to remain useful after the day it was created.&lt;/p&gt;

&lt;p&gt;A user can set a review date.&lt;/p&gt;

&lt;p&gt;When that date arrives, the application displays a due or overdue reminder.&lt;/p&gt;

&lt;p&gt;After reviewing the investment, the user can:&lt;/p&gt;

&lt;p&gt;record what they noticed&lt;br&gt;
set another review date&lt;br&gt;
save the review&lt;br&gt;
view previous reviews later&lt;/p&gt;

&lt;p&gt;Previous reviews are preserved in history instead of being overwritten.&lt;/p&gt;

&lt;p&gt;Editing saved records&lt;/p&gt;

&lt;p&gt;The user can also edit an existing investment record later.&lt;/p&gt;

&lt;p&gt;This is useful when something was entered incorrectly because correcting the original record should not require creating another duplicate investment.&lt;/p&gt;

&lt;p&gt;A deployment problem I encountered&lt;/p&gt;

&lt;p&gt;The first Render deployment exceeded the available memory limit.&lt;/p&gt;

&lt;p&gt;The reason was that the backend was importing the local faster-whisper dependency even though the hosted deployment did not need local Whisper.&lt;/p&gt;

&lt;p&gt;I fixed this by loading faster-whisper only when the application is running in local mode.&lt;/p&gt;

&lt;p&gt;That allowed the hosted backend to start without loading the unnecessary local speech-recognition stack.&lt;/p&gt;

&lt;p&gt;This was a useful lesson for me: deployment is not just about getting the code to run. The application should only load the components that its current environment actually needs.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why Does Open Innovation Matter?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;For this project, open innovation mattered because I wanted the AI layer to be something I could control and adapt.&lt;/p&gt;

&lt;p&gt;The local version uses Gemma 3 4B and Whisper with local inference.&lt;/p&gt;

&lt;p&gt;Gemma 3 4B&lt;br&gt;
     +&lt;br&gt;
Whisper&lt;br&gt;
     ↓&lt;br&gt;
Local processing&lt;/p&gt;

&lt;p&gt;That makes the local version possible without building the entire application around a proprietary closed AI API.&lt;/p&gt;

&lt;p&gt;It also gave me flexibility during development.&lt;/p&gt;

&lt;p&gt;I could decide:&lt;/p&gt;

&lt;p&gt;what information should be extracted&lt;br&gt;
which fields mattered to the user&lt;br&gt;
how missing information should be handled&lt;br&gt;
how the output should be validated&lt;br&gt;
what the application should do with the model's output&lt;/p&gt;

&lt;p&gt;The AI model is not the final authority. It is one component in a larger system.&lt;/p&gt;

&lt;p&gt;Another important benefit was portability.&lt;/p&gt;

&lt;p&gt;I originally built the application around local inference, but a hackathon project also needs a way to demonstrate the result publicly.&lt;/p&gt;

&lt;p&gt;Because the AI layer uses open models and a replaceable inference setup, I could move the public demo to hosted inference without redesigning the entire application.&lt;/p&gt;

&lt;p&gt;That resulted in two useful configurations:&lt;/p&gt;

&lt;p&gt;Local: a local-first personal version.&lt;/p&gt;

&lt;p&gt;Hosted: a shareable demonstration version.&lt;/p&gt;

&lt;p&gt;Open innovation therefore affected the architecture itself.&lt;/p&gt;

&lt;p&gt;It allowed me to experiment with the AI locally, keep the model layer replaceable, and then move the application to a public deployment when I needed a shareable demo.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Built for My Dad&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The most important part of this project is that it was built around a real person rather than a hypothetical user.&lt;/p&gt;

&lt;p&gt;My dad was the reason I chose this problem.&lt;/p&gt;

&lt;p&gt;I did not start by asking:&lt;/p&gt;

&lt;p&gt;"What AI application can I build?"&lt;/p&gt;

&lt;p&gt;I started with:&lt;/p&gt;

&lt;p&gt;"What small problem does someone I know actually have?"&lt;/p&gt;

&lt;p&gt;That led to a much narrower product.&lt;/p&gt;

&lt;p&gt;Investment Memory is not trying to become a trading platform, a portfolio-management system, or an investment advisor.&lt;/p&gt;

&lt;p&gt;It is a memory tool.&lt;/p&gt;

&lt;p&gt;The goal is simple:&lt;/p&gt;

&lt;p&gt;remember what you decided, remember why you decided it, and remember when you wanted to revisit that thinking.&lt;/p&gt;

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

&lt;p&gt;The biggest lesson was that a useful AI application does not need to give the user more decisions.&lt;/p&gt;

&lt;p&gt;Sometimes it is more useful to help the user remember their own decisions.&lt;/p&gt;

&lt;p&gt;I also learned that making AI useful is as much about application design as it is about the model.&lt;/p&gt;

&lt;p&gt;The model can extract information, but the surrounding system determines whether that extraction is trustworthy and useful.&lt;/p&gt;

&lt;p&gt;That is why I added:&lt;/p&gt;

&lt;p&gt;Editable extraction&lt;br&gt;
        +&lt;br&gt;
Human confirmation&lt;br&gt;
        +&lt;br&gt;
Persistent memory&lt;br&gt;
        +&lt;br&gt;
Review history&lt;/p&gt;

&lt;p&gt;rather than simply showing an AI-generated answer.&lt;/p&gt;

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

&lt;p&gt;I am entering the following partner categories because the project genuinely uses these technologies:&lt;/p&gt;

&lt;p&gt;Best Use of Gemma&lt;br&gt;
Best Use of Render&lt;/p&gt;

&lt;p&gt;Gemma is used as the core language model for structuring investment notes, while Render hosts the deployed frontend and backend.&lt;br&gt;
**&lt;br&gt;
Final Thoughts**&lt;/p&gt;

&lt;p&gt;I started with one small problem:&lt;/p&gt;

&lt;p&gt;My dad remembers the investment, but over time the reasoning behind it can be forgotten.&lt;/p&gt;

&lt;p&gt;The result became a small system for preserving that context.&lt;/p&gt;

&lt;p&gt;There is no "What should I buy?" button.&lt;/p&gt;

&lt;p&gt;There is no prediction engine.&lt;/p&gt;

&lt;p&gt;There is no AI pretending to know what someone should do with their money.&lt;/p&gt;

&lt;p&gt;Instead, there is a voice note, a memory, a structured record, and a future reminder to look back at the decision.&lt;/p&gt;

&lt;p&gt;That was the application I wanted to build for one person I actually know.&lt;/p&gt;

&lt;h1&gt;
  
  
  hf26challenge
&lt;/h1&gt;

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