{"slug": "drawerlocal-your-receipts-sorted-your-data-never-uploaded", "title": "DrawerLocal: Your receipts, sorted. Your data, never uploaded.", "summary": "A developer built DrawerLocal, an open-source, offline-first receipt and invoice scanner that runs Google's open-weight Gemma 3 4B Vision model locally through Ollama so no receipt image is uploaded to a cloud service. The tool adds interactive bounding boxes that map extracted values back to document coordinates, auto-categorizes expenses into IRS Schedule C tax lines, and exports CSV files formatted for TurboTax and CPA review. The codebase, released under the MIT License, pairs a Next.js 16 frontend with a FastAPI, SQLModel and SQLite backend running a background extraction pipeline.", "body_md": "*This is a submission for the [Hacktoberfest Open-Source AI Challenge Week 2: Side Hustle](https://dev.to/challenges/hacktoberfest-week2-2026-10-12)*\n\n## \n  \n  \n  What I Built\n\nEvery tax season, millions of freelancers, consultants, and boutique agency owners face the same dreaded chore: spending hours digging through crumpled physical receipts, PDFs, and invoices to itemize Schedule C deductions. \n\nMost cloud-based receipt scanners present severe roadblocks:\n\n1. \n**Confidentiality & NDA Violations** : Client dinners, NDA-bound project travel, private vendor addresses, and credit card slips cannot legally or ethically be uploaded to third-party multi-tenant cloud AI models.\n2. \n**Subscription Fatigue** : Freelancers pay $20–$50/month for simple document OCR tools with arbitrary upload limits.\n3. \n**Hallucination Risk** : Standard cloud LLMs frequently hallucinate digits without auditable bounding boxes or confidence metrics.\n\n**DrawerLocal** solves this with an offline-first, open-weight AI receipt & invoice intelligence suite designed as a standalone side hustle that privacy-conscious professionals gladly pay for.\n\n- \n**100% On-Device AI Vision** : Powered by Google’s open-weight**Gemma 3 (4B Vision)** model running locally through Ollama. No receipt image ever leaves the user's computer.\n- \n**Auditable Visual Inspection** : Interactive bounding boxes map optical extractions directly back to document coordinates.\n- \n**IRS Schedule C Auto-Categorization** : Automatically categorizes expenses into IRS tax lines (Line 24b - Meals 50%, Line 9 - Travel, Line 18 - Office Supplies, Line 27a - Software & SaaS).\n- \n**Instant Tax Export** : Generates clean CSV spreadsheets formatted for TurboTax and CPA review.\n\n### \n  \n  \n  Who Pays For It?\n\n- \n**Freelancers & Solopreneurs** : Drowning in 50–200 receipts/month who want a one-time purchase or private self-hosted utility instead of an ongoing $400/year QuickBooks subscription.\n- \n**Independent Contractors (Law, Healthcare, Tech)** : Professionals bound by strict non-disclosure agreements who cannot use cloud AI for client receipts.\n- \n**Digital Nomads** : Traveling professionals needing fast offline receipt extraction on planes and trains without reliable internet.\n\n## \n  \n  \n  Demo\n\n- 🌐 **Live Web App (Vercel)** :[https://drawer-local.vercel.app/](https://drawer-local.vercel.app/)\n- ⚡ **Local Engine** : Includes instant 1-click test scenarios (Delta Air Lines, OpenAI Credits, WeWork Day Office) to test the extraction pipeline.\n\n## \n  \n  \n  Code\n\n# DrawerLocal 🗄️⚡\n\n**\"Your receipts, sorted. Your data, never uploaded.\"**\n\n## 💡 The Problem: The Tax-Time Freelancer Nightmare\n\nEvery tax season, millions of freelancers, independent contractors, and boutique agency owners face the same dreaded ritual: digging through shoe boxes, email folders, and camera rolls to compile business receipts and invoice records for Schedule C deductions.\n\nExisting cloud solutions (Expensify, QuickBooks, cloud LLMs) present major friction points:\n\n1. \n**Confidentiality Risks** : Receipts contain client names, NDA-protected travel destinations, private addresses, and banking details. Freelancers cannot risk uploading sensitive client data into closed third-party cloud AI models.\n2. \n**Subscription Fatigue** : Freelancers pay $20–$50/month for simple document OCR tools with arbitrary document limits.\n3. \n**Hallucination Anxiety** : Pure cloud LLMs often hallucinate digits on crumpled receipts, risking tax audit penalties without an explicit confidence-scoring or verification step.\n\n## 🎯 The Solution: DrawerLocal\n\n**DrawerLocal** is an offline-first, open-weight AI receipt & invoice intelligence suite designed as a standalone side-hustle…\n\n \n \nThe entire codebase is open-source under the MIT License:\n\n- \n**Frontend** : Next.js 16 (App Router), Tailwind CSS v4, PostCSS, responsive glassmorphism design system.\n- \n**Backend** : FastAPI, SQLModel, SQLite, background task extraction pipeline with local Gemma 3 provider abstraction.\n\n## \n  \n  \n  How I Built It\n\n### \n  \n  \n  1. Open-Weight AI Core: Gemma 3 (4B Vision)\n\nAt the heart of DrawerLocal is Google's **Gemma 3 (4B Vision)** open-weight model executed locally via **Ollama**. \n\nWe engineered a strict structured JSON extraction prompt that outputs normalized vendor names, ISO-8601 transaction dates, line items, currency codes, and exact sales tax/VAT breakdowns.\n\n### \n  \n  \n  2. Zero-Cost Deterministic Demo Fallback\n\nTo ensure judges, reviewers, and users can immediately test the entire application without needing an 8GB GPU or local Ollama installation, DrawerLocal features an automatic deterministic mock engine when `DEMO_MODE=true` is set.\n\n### \n  \n  \n  3. Fullstack Architecture\n\n- \n**FastAPI + SQLModel** : Persists itemized records, confidence scores, and custom vendor classification rules to an on-disk SQLite database.\n- \n**Next.js 16 App Router** : Built with custom dark-mode glassmorphism, dynamic SVG geometry constraints, and instant client-side CSV blob generation.\n\n## \n  \n  \n  Why Does Open Innovation Matter?\n\n1. \n**Guaranteed Privacy via Zero Cloud Egress** :\nClosed LLM APIs (OpenAI, Anthropic) process sensitive user financial documents on remote servers. Open-weight models like**Gemma 3** enable the entire AI inference lifecycle to run on-device.\n2. \n**Predictable Unit Economics** :\nA side hustle charging $49 for a lifetime desktop license or $5/month would quickly burn out on closed API token bills. Open-weight models cost $0.00 per token once downloaded.\n3. \n**Auditability & Zero Vendor Lock-in** :\nThe open weights can be run on CPU or GPU via Ollama, vLLM, or llama.cpp, guaranteeing long-term software independence.\n\n## \n  \n  \n  My First User\n\nI shared DrawerLocal with Sarah, a freelance brand designer managing 12 active client retainers. \n\n*\"I used to spend the first weekend of every month matching coffee receipts, Uber rides, and software subscriptions to client invoices. Because I work under strict NDAs, I couldn't upload receipts with client names to random AI tools. DrawerLocal sorted 38 receipts in 3 minutes completely on my MacBook without uploading anything. I would easily pay $49 for this as a Mac app.\"*\n\nSarah itemized **$418.60** in deductible business expenses in her first test session.\n\n## \n  \n  \n  Prize Categories\n\n- \n**Best Use of Gemma** : Built natively around Google’s open-weight**Gemma 3 (4B Vision)** model for on-device OCR, line-item parsing, and tax deduction scoring.\n- \n**Best Use of Render** : Production-ready`render.yaml` configuration and Dockerfile for containerized deployment of the FastAPI engine and persistent SQLite storage.\n- \n**Best Use of a .tech Domain** : Targeted for launch at`drawerlocal.tech` as an independent software business for freelancers.\n\n*Built with ❤️ for the Hacktoberfest Open-Source AI Challenge.*", "url": "https://wpnews.pro/news/drawerlocal-your-receipts-sorted-your-data-never-uploaded", "canonical_source": "https://dev.to/vannu07/drawerlocal-your-receipts-sorted-your-data-never-uploaded-55ml", "published_at": "2026-10-18 11:07:34+00:00", "updated_at": "2026-10-18 11:15:37.476424+00:00", "lang": "en", "topics": ["artificial-intelligence", "computer-vision", "ai-tools", "ai-products", "generative-ai"], "entities": ["DrawerLocal", "Google", "Gemma 3", "Ollama", "FastAPI", "Next.js", "TurboTax", "Vercel"], "also_reported_by": [], "alternates": {"html": "https://wpnews.pro/news/drawerlocal-your-receipts-sorted-your-data-never-uploaded", "markdown": "https://wpnews.pro/news/drawerlocal-your-receipts-sorted-your-data-never-uploaded.md", "text": "https://wpnews.pro/news/drawerlocal-your-receipts-sorted-your-data-never-uploaded.txt", "jsonld": "https://wpnews.pro/news/drawerlocal-your-receipts-sorted-your-data-never-uploaded.jsonld"}}