<?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: Devasish Mishra</title>
    <description>The latest articles on DEV Community by Devasish Mishra (@techgendm).</description>
    <link>https://dev.to/techgendm</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%2F3920198%2F162f77d9-4d48-4e85-b22c-bde1a36bedd1.png</url>
      <title>DEV Community: Devasish Mishra</title>
      <link>https://dev.to/techgendm</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/techgendm"/>
    <language>en</language>
    <item>
      <title>LeakLens: A Swiss-Editorial Financial Autopilot Powered by TabPFN-3.5 That Audits Messy Bank CSVs</title>
      <dc:creator>Devasish Mishra</dc:creator>
      <pubDate>Mon, 26 Oct 2026 06:47:22 +0000</pubDate>
      <link>https://dev.to/techgendm/leaklens-a-swiss-editorial-financial-autopilot-powered-by-tabpfn-35-that-audits-messy-bank-csvs-330j</link>
      <guid>https://dev.to/techgendm/leaklens-a-swiss-editorial-financial-autopilot-powered-by-tabpfn-35-that-audits-messy-bank-csvs-330j</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;h3&gt;
  
  
  Links &amp;amp; Quick Links
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Live Interactive Workbench:&lt;/strong&gt; &lt;a href="https://leaklens-web.onrender.com" rel="noopener noreferrer"&gt;https://leaklens-web.onrender.com&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;GitHub Repository:&lt;/strong&gt; &lt;a href="https://github.com/TechGenDM/LeakLens" rel="noopener noreferrer"&gt;https://github.com/TechGenDM/LeakLens&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;FastAPI Analytical Backend:&lt;/strong&gt; &lt;a href="https://leaklens-api-akh1.onrender.com" rel="noopener noreferrer"&gt;https://leaklens-api-akh1.onrender.com&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;em&gt;(Judge Quickstart: Click *&lt;/em&gt;&lt;code&gt;01 INDIE DEV SAAS&lt;/code&gt;&lt;strong&gt;, **&lt;code&gt;02 STUDENT TRIAL CREEP&lt;/code&gt;&lt;/strong&gt;, or &lt;strong&gt;&lt;code&gt;03 FREELANCER CASHFLOW&lt;/code&gt;&lt;/strong&gt; at the top of the workbench to run real in-context TabPFN inference with zero CSV upload required!)*&lt;/p&gt;




&lt;h2&gt;
  
  
  1. The Problem: The $133/Month "Laziness Tax"
&lt;/h2&gt;

&lt;p&gt;Every month, millions of us download raw bank, credit card, or UPI statement CSVs with the intention of doing a proper audit. And almost every month, those files sit unopened in &lt;code&gt;~/Downloads&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Manually wrangling messy bank descriptors (&lt;code&gt;POS DEB STRIPE*RENDER-SRV&lt;/code&gt;, &lt;code&gt;TEMP AUTH COURSERA*PLUS&lt;/code&gt;), calculating irregular billing cadences, spotting silent price creep, and projecting runway in a spreadsheet takes hours of tedious mental labor. &lt;/p&gt;

&lt;p&gt;According to &lt;strong&gt;C+R Research’s Consumer Subscription Study&lt;/strong&gt;, the average consumer estimates they spend &lt;strong&gt;$86/month&lt;/strong&gt; on recurring subscriptions, while their actual itemized spend is &lt;strong&gt;$219/month&lt;/strong&gt;—a &lt;strong&gt;$133/month ($1,596/year) blind spot&lt;/strong&gt;, with &lt;strong&gt;42% of consumers&lt;/strong&gt; admitting they still pay for subscriptions they completely forgot existed.&lt;/p&gt;

&lt;p&gt;Existing solutions fail the "Slow and Steady" test:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Paid Trackers (The Subscription Irony):&lt;/strong&gt; Services like Rocket Money charge up to $144/year (becoming another subscription!) while requiring you to hand over live bank login credentials to third-party aggregators.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Manual Spreadsheets:&lt;/strong&gt; Writing regex, pivot tables, and balance formulas feels like unpaid homework, so we procrastinate.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Closed Cloud Chatbots:&lt;/strong&gt; Uploading raw financial statements to commercial LLMs compromises privacy, and text-based generative models are notorious for arithmetic hallucinations on structured ledger tables.&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  2. What I Built: LeakLens (&lt;code&gt;// 03&lt;/code&gt;)
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;LeakLens&lt;/strong&gt; is an open-weight financial autopilot built around &lt;strong&gt;Prior Labs' TabPFN-3.5&lt;/strong&gt; and an open-weight legal drafter. &lt;/p&gt;

&lt;p&gt;It takes the core spirit of Hacktoberfest Week 3 ("Slow and Steady"): &lt;strong&gt;rewarding user laziness by automating a dreaded, cognitive-draining chore so the user does nothing while the system works.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Instead of another generic dark-mode chatbot with neon gradients, LeakLens is designed as a &lt;strong&gt;Swiss Editorial Financial Instrument&lt;/strong&gt;—grounded in warm alabaster paper (&lt;code&gt;#F6F4EE&lt;/code&gt;), exposed 1px architectural gridlines, high-contrast &lt;code&gt;Instrument Serif&lt;/code&gt; editorial headlines, and monospace &lt;code&gt;JetBrains Mono&lt;/code&gt; tabular figures.&lt;/p&gt;

&lt;p&gt;You drop a raw statement CSV (or click a persona preset), and LeakLens immediately executes a &lt;strong&gt;3-Layer Hybrid Pipeline&lt;/strong&gt;:&lt;/p&gt;

&lt;p&gt;[ Raw Statement CSV / Persona Preset ]&lt;br&gt;
│&lt;br&gt;
▼&lt;br&gt;
┌───────────────────────────────────────────────────────────┐&lt;br&gt;
│ LAYER 1: Deterministic Symbolic Engine (Pandas)           │&lt;br&gt;
│ • Noise &amp;amp; payment processor stripping                     │&lt;br&gt;
│ • Living expense quarantine (Rent, Groceries, Dining)     │&lt;br&gt;
│ • Exact cadence regularity, price drift %, duplicate cycle│&lt;br&gt;
└─────────────────────────┬─────────────────────────────────┘&lt;br&gt;
│&lt;br&gt;
▼&lt;br&gt;
┌───────────────────────────────────────────────────────────┐&lt;br&gt;
│ LAYER 2: TabPFN-3.5 Predictive Core (Prior Labs)          │&lt;br&gt;
│ • TabPFNClassifier: 7-feature in-context leak probability │&lt;br&gt;
│ • TabPFNRegressor: 90-day cash runway quantile forecasting│&lt;br&gt;
│   (p10, p50 median, p90 uncertainty fan)                  │&lt;br&gt;
└─────────────────────────┬─────────────────────────────────┘&lt;br&gt;
│&lt;br&gt;
▼&lt;br&gt;
┌───────────────────────────────────────────────────────────┐&lt;br&gt;
│ LAYER 3: Autonomous Action Studio (Groq / Open-Weights)   │&lt;br&gt;
│ • FTC 16 CFR Part 425 &amp;amp; ROSCA Cancellation Notices        │&lt;br&gt;
│ • Price-Match Negotiation &amp;amp; Downgrade Scripts             │&lt;br&gt;
│ • RFC-5545 .ics Calendar Renewal Shields                  │&lt;br&gt;
└───────────────────────────────────────────────────────────┘&lt;/p&gt;




&lt;h2&gt;
  
  
  3. Signature UI/UX &amp;amp; Design Thinking
&lt;/h2&gt;

&lt;p&gt;To ensure LeakLens felt like a calm, precision financial instrument rather than AI slop, I built four custom micro-interactions:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;550ms Laser CSV Deconstruction (&lt;code&gt;CsvDeconstructTransition&lt;/code&gt;):&lt;/strong&gt; When switching personas or uploading a statement, the interface sweeps raw monospace transaction lines with a vermilion laser scanline before physically morphing into grouped merchant cards.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tactile Hardware Kill-Switches &amp;amp; Spring Odometer:&lt;/strong&gt; Toggling any detected leak on the ledger immediately strikes through the monthly cost, applies an archival emerald tint (&lt;code&gt;#E6F4EF&lt;/code&gt;), and rolls the &lt;strong&gt;Reclaimed Annual Cash&lt;/strong&gt; counter using Framer Motion spring physics (&lt;code&gt;stiffness: 380, damping: 32&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Live 90-Day TabPFN Runway Simulator:&lt;/strong&gt; An interactive SVG canvas displays the baseline cash balance trajectory (dashed vermilion) alongside the solid emerald &lt;strong&gt;Reclaimed Path&lt;/strong&gt;. As you toggle kill-switches, the green line and the shaded &lt;strong&gt;+$X,XXX Recovery Wedge&lt;/strong&gt; dynamically expand in real time.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;"Verify Before You Cancel" Trust Box:&lt;/strong&gt; Rather than pretending AI is infallible, LeakLens explicitly highlights what the CSV mathematically proves versus subjective context you should verify (e.g., &lt;em&gt;"CSV proves charge jumped +52.6%, but cannot verify if your team intentionally upgraded compute tiers"&lt;/em&gt;).&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  4. Why Open Innovation Matters for What I Built
&lt;/h2&gt;

&lt;p&gt;Financial statements represent the single most sensitive digital artifact a human produces—exposing where you live, eat, travel, and spend money.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Privacy Without Compromise:&lt;/strong&gt; Auditing your personal finances should never require uploading your bank history to a closed cloud vendor. LeakLens is architected with complete offline capability: the entire FastAPI + TabPFN-3.5 + open-weight pipeline can run locally on an Apple Silicon or Linux machine (&lt;code&gt;Local Private Runtime&lt;/code&gt;) with zero external network calls.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Foundation Models Engineered for Tables:&lt;/strong&gt; General-purpose text LLMs struggle with multi-quantile regression and calibrated tabular probabilities. Prior Labs' &lt;strong&gt;TabPFN-3.5&lt;/strong&gt; represents true open-weight innovation: a tabular foundation model trained on synthetic Bayesian priors that performs instant in-context classification and non-parametric quantile forecasting without days of hyperparameter tuning.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The $0 Personal FinOps Era:&lt;/strong&gt; By building on open weights and open-source infrastructure, LeakLens proves that personal financial autonomy can be delivered at zero marginal cost forever—without charging the user a subscription to manage their subscriptions.&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  5. Partner Category Submissions
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Best Use of TabPFN ($200)
&lt;/h3&gt;

&lt;p&gt;LeakLens uses &lt;strong&gt;TabPFN-3.5&lt;/strong&gt; as the analytical brain of the application in two ways:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;TabPFNClassifier&lt;/code&gt; (Leak Risk Scoring):&lt;/strong&gt; Evaluates a 7-dimensional feature vector (&lt;code&gt;amount_zscore&lt;/code&gt;, &lt;code&gt;cadence_regularity&lt;/code&gt;, &lt;code&gt;price_drift_pct&lt;/code&gt;, &lt;code&gt;is_micro_charge&lt;/code&gt;, &lt;code&gt;charge_count_90d&lt;/code&gt;, &lt;code&gt;days_since_first_seen&lt;/code&gt;, &lt;code&gt;is_trial_conversion_pattern&lt;/code&gt;) against in-context prior distributions to assign calibrated leak probabilities (e.g., 99.9% on sudden API spikes vs 0.0% on essential living expenses).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;TabPFNRegressor&lt;/code&gt; (Multi-Quantile Runway Forecasting):&lt;/strong&gt; Generates 13 weekly forecast points over 90 days with native &lt;code&gt;p10&lt;/code&gt;, &lt;code&gt;p50&lt;/code&gt;, and &lt;code&gt;p90&lt;/code&gt; uncertainty bounds directly driving our interactive SVG simulator.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Best Use of Render ($200)
&lt;/h3&gt;

&lt;p&gt;LeakLens is deployed on &lt;strong&gt;Render&lt;/strong&gt; as a decoupled full-stack architecture:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Backend Service (&lt;code&gt;leaklens-api&lt;/code&gt;):&lt;/strong&gt; Python 3.11 FastAPI web service hosting the deterministic Pandas rules engine and TabPFN client runtime.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Frontend Service (&lt;code&gt;leaklens-web&lt;/code&gt;):&lt;/strong&gt; Next.js 15 (App Router, Tailwind CSS, Framer Motion) communicating with the backend via environment variables.&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;&lt;em&gt;Built with care for Hacktoberfest 2026. Code is open-source under the MIT License.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>hf26challenge</category>
      <category>ai</category>
      <category>opensource</category>
    </item>
    <item>
      <title>I Built a Local-First Contract Q&amp;A App That Cites the Exact PDF Page</title>
      <dc:creator>Devasish Mishra</dc:creator>
      <pubDate>Mon, 19 Oct 2026 06:48:27 +0000</pubDate>
      <link>https://dev.to/techgendm/i-built-a-local-first-contract-qa-app-that-cites-the-exact-pdf-page-2mop</link>
      <guid>https://dev.to/techgendm/i-built-a-local-first-contract-qa-app-that-cites-the-exact-pdf-page-2mop</guid>
      <description>&lt;p&gt;Contracts are full of important details: liability caps, confidentiality periods, governing law, deadlines and exceptions. Finding one clause in a long PDF can be tedious. Sending the document to a cloud AI service is also not always acceptable when it contains sensitive information.&lt;/p&gt;

&lt;p&gt;For Hacktoberfest 2026 Week 2, I built &lt;strong&gt;Air-Gapped RAG&lt;/strong&gt;, a local-first contract PDF question-answering prototype that lets a user ask questions about a document and inspect the evidence behind the answer.&lt;/p&gt;

&lt;p&gt;The idea is simple: &lt;strong&gt;an answer should be verifiable, and when the document does not contain the answer, the system should say so rather than guess.&lt;/strong&gt;&lt;/p&gt;

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

&lt;p&gt;Air-Gapped RAG lets a user upload a contract PDF, extract its text, index its contents locally, and ask questions through a browser interface.&lt;/p&gt;

&lt;p&gt;The application combines:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Next.js, React and Tailwind CSS&lt;/strong&gt; for the frontend.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;FastAPI and PyMuPDF&lt;/strong&gt; for the backend and digital PDF extraction.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tesseract OCR&lt;/strong&gt; for scanned or image-only PDFs.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;LanceDB&lt;/strong&gt; for embedded local vector storage.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;nomic-embed-text&lt;/strong&gt; for text embeddings.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Gemma 4 12B through Ollama&lt;/strong&gt; for local answer generation.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The model receives retrieved document evidence rather than being asked to answer from general knowledge alone. The application validates citation references against the retrieved sources and preserves the original physical PDF page numbers.&lt;/p&gt;

&lt;h2&gt;
  
  
  Watch the demo
&lt;/h2&gt;

&lt;p&gt;Here is Air-Gapped RAG in action. This demo shows the local contract upload workflow, evidence-backed answers with physical-page citations, and how the application handles questions when the document does not contain the answer.&lt;/p&gt;

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

&lt;p&gt;The demonstration uses a synthetic contract, so no real or confidential documents are exposed.&lt;/p&gt;

&lt;p&gt;The demonstration uses a synthetic three-page Master Services Agreement.&lt;/p&gt;

&lt;p&gt;First, I upload the contract and index its contents. Then I ask:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;What is the limitation of liability cap under Section 4?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The document specifies a $250,000 USD cap or the fees paid during the preceding twelve months, whichever is lower. The application returns an answer backed by a citation to physical page 2.&lt;/p&gt;

&lt;p&gt;Next, I ask about a statutory penalty under Australian commercial law—something the synthetic contract does not establish.&lt;/p&gt;

&lt;p&gt;The expected result is &lt;code&gt;Not found in records&lt;/code&gt;, without fabricated citations.&lt;/p&gt;

&lt;p&gt;That second example matters just as much as the first. A document assistant should be able to acknowledge when it lacks evidence.&lt;/p&gt;

&lt;h2&gt;
  
  
  The hardest part was not simply connecting an LLM
&lt;/h2&gt;

&lt;p&gt;A basic RAG demonstration can retrieve a relevant paragraph and generate a plausible response. Making the result useful for contract review requires more care.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Preserving physical-page citations
&lt;/h3&gt;

&lt;p&gt;A citation is only useful if a reader can locate the cited material in the original document. The extraction and chunking pipeline therefore preserves one-indexed physical page numbers, and the server validates generated source references.&lt;/p&gt;

&lt;p&gt;During development, I also investigated a legal retrieval failure where an important qualification continued onto the following page. I improved the retrieval and context assembly logic so relevant cross-page clauses could be considered without indiscriminately adding more chunks to every query.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Handling scanned PDFs and tables
&lt;/h3&gt;

&lt;p&gt;Extracting digital text is not enough for image-only documents. I added a local Tesseract OCR fallback and worked on reconstructing table-like text so values remain associated with their corresponding labels.&lt;/p&gt;

&lt;p&gt;The difference matters when a question depends on a particular table row or rating, not just finding the correct page.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Refusing unsupported answers
&lt;/h3&gt;

&lt;p&gt;The system is instructed to answer from the retrieved evidence and abstain when that evidence is insufficient. The backend also checks source identifiers instead of blindly trusting citation identifiers generated by the model.&lt;/p&gt;

&lt;p&gt;This reduces the risk of presenting unsupported answers as if they were proven by the document. It does not eliminate every possible retrieval or language-model error, so important answers still need human review.&lt;/p&gt;

&lt;h2&gt;
  
  
  What offline testing taught me
&lt;/h2&gt;

&lt;p&gt;I tested the application on an Apple Silicon Mac with 24 GB of unified memory and documented the verification procedure and results in the repository.&lt;/p&gt;

&lt;p&gt;The recorded physical-host tests covered PDF upload, indexing, grounded answers, physical-page citations, safe abstention, a browser workflow with the frontend bound to loopback, and scanned-PDF OCR while external connectivity was disabled. The socket audit reported no unexpected external connections under the recorded test conditions.&lt;/p&gt;

&lt;p&gt;The procedure and its limitations are documented here:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/TechGenDM/Air-Gapped-RAG/blob/main/docs/offline-verification.md" rel="noopener noreferrer"&gt;Offline verification report&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This is evidence of offline functionality on the tested configuration—not a universal security certification. Different operating systems, hardware and future dependency versions need their own verification. Dependencies and model weights must also be installed before the machine is disconnected.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why open innovation matters
&lt;/h2&gt;

&lt;p&gt;A local-first design would be much less useful if every document had to be sent to a hosted model for inference.&lt;/p&gt;

&lt;p&gt;Using open-source tools and a locally runnable open-weight model lets the application process documents without depending on a cloud LLM API for its core question-answering workflow. Developers can inspect the code, change components, run the application on their own hardware and investigate its behavior.&lt;/p&gt;

&lt;p&gt;That freedom also brings responsibility: model terms still apply, resource requirements matter, and local execution alone does not prove that every process is free from network activity.&lt;/p&gt;

&lt;h2&gt;
  
  
  Who could use this?
&lt;/h2&gt;

&lt;p&gt;Potential users include contract freelancers, consultants and small businesses that regularly need to locate clauses or verify terms in lengthy agreements.&lt;/p&gt;

&lt;p&gt;A small legal practice might also find page-cited answers useful during initial document review. However, this is still a prototype. I have not yet validated customer demand or willingness to pay, and I would not present it as a replacement for legal judgment or professional review.&lt;/p&gt;

&lt;p&gt;The next product decision should come from watching real users try the workflow and understanding where accuracy, installation or usability prevents them from trusting it.&lt;/p&gt;

&lt;h2&gt;
  
  
  What's next?
&lt;/h2&gt;

&lt;p&gt;I want to keep the project focused: make the installation reproducible, preserve evidence-backed answers and safe abstention, and learn from people who would actually use it before expanding the architecture.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Repository:&lt;/strong&gt; &lt;a href="https://github.com/TechGenDM/Air-Gapped-RAG" rel="noopener noreferrer"&gt;https://github.com/TechGenDM/Air-Gapped-RAG&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Built for the Hacktoberfest 2026 Week 2 &lt;strong&gt;Side Hustle&lt;/strong&gt; challenge.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Prize category:&lt;/strong&gt; Best Use of Gemma&lt;/p&gt;

&lt;h1&gt;
  
  
  devchallenge #hf26challenge #ai #opensource
&lt;/h1&gt;

</description>
      <category>devchallenge</category>
      <category>hf26challenge</category>
    </item>
    <item>
      <title>I Asked AI a Question. Then It Told Me to Put My Phone Away.</title>
      <dc:creator>Devasish Mishra</dc:creator>
      <pubDate>Thu, 08 Oct 2026 07:20:44 +0000</pubDate>
      <link>https://dev.to/techgendm/i-asked-ai-a-question-then-it-told-me-to-put-my-phone-away-5d7h</link>
      <guid>https://dev.to/techgendm/i-asked-ai-a-question-then-it-told-me-to-put-my-phone-away-5d7h</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 AI tools are designed to keep you talking to them. I wanted to build one that sends you away.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;OpenField&lt;/strong&gt; turns a question about your surroundings into a short field study. You type something you are curious about, like &lt;em&gt;"Which side of my street stays shady the longest?"&lt;/em&gt;, then add a place and a time budget (15, 30, 45 or 60 minutes). Local Gemma turns that into a small plan: 4–6 steps, the evidence to collect at each step, rough timing, and safety notes.&lt;/p&gt;

&lt;p&gt;Then the app gets out of your way. You can open a minimal &lt;strong&gt;Field Mode&lt;/strong&gt; with a timer and big step cards, or print a &lt;strong&gt;Field Card&lt;/strong&gt; and leave your phone at home.&lt;/p&gt;

&lt;p&gt;When you come back, you enter what you saw: notes, counts, measurements and photos. Gemma reads that evidence and writes a &lt;strong&gt;Field Report&lt;/strong&gt; with three clearly separated parts:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Observed&lt;/strong&gt;: what you actually recorded&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Inferred&lt;/strong&gt;: what reasonably follows from it&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Uncertain&lt;/strong&gt;: what your evidence cannot support yet&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;AI plans. You observe. The world supplies the data. AI helps you make sense of it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Who is it for?&lt;/strong&gt; Anyone curious about a place they can walk to: students, gardeners, birders, walkers, or a teacher who wants a 30-minute outdoor activity that is more than a worksheet.&lt;/p&gt;

&lt;p&gt;OpenField is not a navigation app, a scavenger hunt, or a chatbot with a map. The screen is the shortest part of the experience on purpose.&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%2F7y92wf2w9udn21k4erep.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%2F7y92wf2w9udn21k4erep.png" alt="Hoempage" width="800" height="520"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  I Took It Outside
&lt;/h2&gt;

&lt;p&gt;I did not want to write about getting off the screen while sitting at a screen all week, so I ran a simulated study to test the complete OpenField loop.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;My question:&lt;/strong&gt; Which side of my street stays shaded the longest during this time of day?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Where and when:&lt;/strong&gt; A quiet residential street, late afternoon&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Time budget:&lt;/strong&gt; 30 minutes&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Model and machine:&lt;/strong&gt; Gemma 4 E4B (&lt;code&gt;gemma4:e4b&lt;/code&gt;) running locally through Ollama on a MacBook Air M4 with 24 GB RAM&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;What the protocol asked me to do:&lt;/strong&gt; I compared the two sides of the street at several points during the 30-minute window. I recorded whether each observation point was in direct sun, partial shade or full shade, noted the approximate time, and took photos of representative locations.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What it was like without the phone:&lt;/strong&gt; The interesting part was having to pay attention to the same locations repeatedly instead of checking the screen after every observation. Small changes in the shade line became much easier to notice when comparing the street from the same points.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What came back:&lt;/strong&gt; I recorded 5 observation notes, 4 simple shade observations and 3 photos covering different points along the street.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What Gemma concluded:&lt;/strong&gt;  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Observed:&lt;/strong&gt; The recorded observations showed that the left side of the street was shaded at more observation points during the study period.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Inferred:&lt;/strong&gt; Based on those observations, the left side appeared to remain shaded for longer during the tested period.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Uncertain:&lt;/strong&gt; The study was too short to establish that the left side stays shaded longer throughout the entire day or across different days and weather conditions. Gemma correctly did not claim a general rule from the limited observations.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;What went wrong:&lt;/strong&gt; The 30-minute window was enough to compare the two sides, but not enough to establish a strong long-term pattern. A better version would repeat the same observations at different times of day and on multiple days.&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%2Fse4lgxg8yfwmymndvb81.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%2Fse4lgxg8yfwmymndvb81.png" alt="2nd image" width="800" height="1126"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Simulated field run used to test the complete evidence-to-report workflow.&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%2Fzvkyj2lba8ehxzvnhgo5.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%2Fzvkyj2lba8ehxzvnhgo5.png" alt="3.1 image" width="800" height="1128"&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%2Fa8cp20asj6x9bwf7u6cq.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%2Fa8cp20asj6x9bwf7u6cq.png" alt="3.2 image" width="800" height="1126"&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%2Fcphg4je3naxkz4wgfquz.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%2Fcphg4je3naxkz4wgfquz.png" alt="3.3 image" width="800" height="103"&gt;&lt;/a&gt;&lt;/p&gt;

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

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

&lt;p&gt;The demo walks through the full loop:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Create Study → Field Protocol → Field Mode → Return &amp;amp; Evidence → Gemma debrief → Field Report&lt;/strong&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/TechGenDM" rel="noopener noreferrer"&gt;
        TechGenDM
      &lt;/a&gt; / &lt;a href="https://github.com/TechGenDM/OpenField" rel="noopener noreferrer"&gt;
        OpenField
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      OpenField is not an outdoor recommender or scavenger-hunt app. It is a local-AI “field study” engine that turns curiosity into a short real-world investigation.
    &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;OpenField 🌿&lt;/h1&gt;
&lt;/div&gt;
&lt;blockquote&gt;
&lt;p&gt;Ask a question about the real world. OpenField turns it into an honest field study.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;"AI plans. You observe. The world supplies the data. AI helps you make sense of it."&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;OpenField is a local-AI field study engine powered by Gemma via Ollama. It turns curiosity into a short, structured investigation, helps you step away from the screen while observing, and uses the evidence you bring back to generate a report that separates what was observed from what was inferred and what remains uncertain.&lt;/p&gt;
&lt;p&gt;Built for Hacktoberfest 2026.&lt;/p&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;What is OpenField?&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;Most AI tools keep the user on the screen.&lt;/p&gt;
&lt;p&gt;OpenField does the opposite.&lt;/p&gt;
&lt;p&gt;You give it a question about your surroundings. Local Gemma turns that question into a 15–60 minute field protocol. You take the protocol outside (or use it indoors), observe the real world, record notes/counts/photos, then return and let local Gemma analyze the evidence.&lt;/p&gt;
&lt;p&gt;The…&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/TechGenDM/OpenField" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;OpenField is open source under the MIT License. The repo has the full app, a specification, architecture notes, a contribution guide, tests and setup instructions. The first commit was on October 6, 2026, and the project was built inside the Week 1 challenge window.&lt;/p&gt;

&lt;p&gt;To run it yourself:&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/TechGenDM/OpenField.git
&lt;span class="nb"&gt;cd &lt;/span&gt;OpenField
ollama pull gemma4:e4b
npm &lt;span class="nb"&gt;install
&lt;/span&gt;npm run dev
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

&lt;p&gt;OpenField is built around &lt;strong&gt;Gemma running locally through Ollama&lt;/strong&gt;. There is no cloud AI API anywhere in the core app. The stack is small on purpose: Next.js, TypeScript, Tailwind CSS, Zod, Ollama and Gemma.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Question → Protocol (Gemma) → Field Mode or Field Card → Evidence → Debrief (Gemma) → Observed / Inferred / Uncertain&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;1. Question to protocol.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The user gives a question, a place, a time budget and an investigation type. Gemma returns a structured Field Protocol: the research question, 4–6 steps, evidence requirements, time estimates, safety guidance and an optional audio briefing script.&lt;/p&gt;

&lt;p&gt;I validate that output with Zod and deterministic checks. For example, the steps must fit the time budget, and the safety rules must be followed. A small local model gets checked, not trusted.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Leaving the screen.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Field Mode runs its timer and step navigation in the browser, so nothing needs to talk to Ollama while you are outside.&lt;/p&gt;

&lt;p&gt;The even simpler option is the printed Field Card: paper, a pen, and no battery.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Bringing evidence back.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;On the Return &amp;amp; Evidence screen you record observations per step and attach photos. Before any photo is used, the browser resizes it to a maximum of 1024px and strips the EXIF and GPS metadata.&lt;/p&gt;

&lt;p&gt;The processed image is only sent to the local app.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. The debrief.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Gemma gets the protocol and your evidence, and writes the Field Report. Every finding must point back to something you recorded.&lt;/p&gt;

&lt;p&gt;If the evidence is thin, the report is designed to say so instead of filling the gap with confident guesses.&lt;/p&gt;

&lt;p&gt;That &lt;strong&gt;Observed / Inferred / Uncertain&lt;/strong&gt; split is the part of the design I care about most.&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%2Fiojzd3iva4h9ybyye87o.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%2Fiojzd3iva4h9ybyye87o.png" alt="Archietecture" width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

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

&lt;p&gt;A field study is about your street, your garden, your photos and your notes. That evidence belongs to the person who collected it.&lt;/p&gt;

&lt;p&gt;Running Gemma locally through Ollama made three things possible that a closed API would not:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Your evidence stays on your machine.&lt;/strong&gt; Field photos and notes are never sent to a remote AI service just to get a report.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;It costs nothing to run.&lt;/strong&gt; There is no API key and no per-request bill. Once the model is downloaded, the AI part does not need the internet.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The model is swappable.&lt;/strong&gt; The app talks to a structured local interface, not a proprietary endpoint, so another open model can be tried without redesigning the product.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;There is a trade-off, and I want to be honest about it. A local model is smaller than the biggest cloud models, so I could not just trust whatever it said.&lt;/p&gt;

&lt;p&gt;That is why the protocol is validated and why every claim in the report must point to evidence.&lt;/p&gt;

&lt;p&gt;Open and local did not just make the project cheaper. They shaped how I designed it.&lt;/p&gt;

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

&lt;p&gt;I used AI coding assistants, including Antigravity IDE, for repository inspection, implementation, debugging, testing and release preparation.&lt;/p&gt;

&lt;p&gt;I directed the product design, the architecture and the review of every change.&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;Best Use of Gemma.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Gemma is the core reasoning engine behind both major parts of OpenField:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Generating the Field Protocol from a real-world question.&lt;/li&gt;
&lt;li&gt;Performing the multimodal evidence debrief after the field study.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;I am intentionally entering only the &lt;strong&gt;Gemma&lt;/strong&gt; partner category because it is the technology that is genuinely central to the project rather than adding integrations just to collect categories.&lt;/p&gt;

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

&lt;p&gt;The best AI experience might sometimes be the one that makes you use AI less.&lt;/p&gt;

&lt;p&gt;It is easy to build another place where you ask a question and get an answer. It is harder to build something that says, "here is what to go and look at," and then stops talking.&lt;/p&gt;

&lt;p&gt;The model only reasons about evidence the real world actually supplied.&lt;/p&gt;

&lt;p&gt;That moved AI, in my head, from an answer machine to an investigation assistant.&lt;/p&gt;

&lt;h2&gt;
  
  
  What's Next
&lt;/h2&gt;

&lt;p&gt;The MVP is intentionally small. I do not want OpenField to become a giant AI platform.&lt;/p&gt;

&lt;p&gt;Next I want to improve accessibility, test coverage, printable field materials and report export. I have also opened focused contributor issues in the repository for these areas.&lt;/p&gt;

&lt;p&gt;The core loop should stay simple:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Question → Observe → Evidence → Understand.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The best moment in OpenField is the one where you stop using it.&lt;/p&gt;

&lt;p&gt;Thanks for reading!&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>hf26challenge</category>
    </item>
    <item>
      <title>My friend spent more time choosing a local AI model than building. So I built Hack Day Starter.</title>
      <dc:creator>Devasish Mishra</dc:creator>
      <pubDate>Mon, 05 Oct 2026 05:21:14 +0000</pubDate>
      <link>https://dev.to/techgendm/my-friend-spent-more-time-choosing-a-local-ai-model-than-building-so-i-built-hack-day-starter-41ip</link>
      <guid>https://dev.to/techgendm/my-friend-spent-more-time-choosing-a-local-ai-model-than-building-so-i-built-hack-day-starter-41ip</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;A friend of mine wanted to try building with local AI for a hackathon project.&lt;/p&gt;

&lt;p&gt;He had a 24 GB Apple Silicon laptop and wanted to build locally, but before he could start building, he had to figure out which model would actually make sense for his machine.&lt;/p&gt;

&lt;p&gt;The problem wasn't coming up with an AI idea. It was getting from:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"I want to use a local AI model."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;to:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"I have a working project."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Before actually building, there were several questions to answer:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Which model can this laptop realistically run?&lt;/li&gt;
&lt;li&gt;How much RAM does it need?&lt;/li&gt;
&lt;li&gt;Is there enough disk space to download it?&lt;/li&gt;
&lt;li&gt;Does it support tool calling?&lt;/li&gt;
&lt;li&gt;What exact Ollama model tag should be used?&lt;/li&gt;
&lt;li&gt;How do I connect that model to a real application?&lt;/li&gt;
&lt;li&gt;What happens when Ollama is not running?&lt;/li&gt;
&lt;li&gt;What happens when the model hasn't been downloaded yet?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That setup work can take away a lot of valuable hackathon time.&lt;/p&gt;

&lt;p&gt;So I built &lt;strong&gt;Hack Day Starter&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;It is a hardware-aware local AI model recommender and starter generator.&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%2Fgpsfv9qbonvtg40axs1z.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%2Fgpsfv9qbonvtg40axs1z.png" alt="Hack Day Starter hardware profiler showing a 24 GB Apple Silicon Mac configuration for local AI model recommendations." width="800" height="496"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You describe the machine you're building on. Hack Day Starter filters and ranks verified local models for that hardware, explains why a model fits, lets you choose between a &lt;strong&gt;Local Chat&lt;/strong&gt; or &lt;strong&gt;Tool-Calling Agent&lt;/strong&gt;, and generates a ready-to-run TypeScript starter for Ollama.&lt;/p&gt;

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

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Remove the setup decision that happens before the real building begins.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The flow looks like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Hardware profile
      ↓
Compatibility filtering
      ↓
Verified model recommendation
      ↓
Local Chat / Tool-Calling Agent
      ↓
Generated TypeScript starter
      ↓
Ollama + local model
      ↓
Start building
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This was built during the Hacktoberfest 2026 "Build for a Friend" challenge.&lt;/p&gt;

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

&lt;h3&gt;
  
  
  Live App
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://hack-day-starter.vercel.app" rel="noopener noreferrer"&gt;&lt;strong&gt;Hack Day Starter → https://hack-day-starter.vercel.app&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Video Demo
&lt;/h3&gt;

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

&lt;p&gt;The demo starts with a hardware profile and ends with a real local tool-calling application running through Ollama.&lt;/p&gt;

&lt;p&gt;The web app is the recommender and generator.&lt;/p&gt;

&lt;p&gt;The generated project is the thing the developer actually takes away and runs locally.&lt;/p&gt;

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

&lt;p&gt;&lt;a href="https://github.com/TechGenDM/Hack-Day-Starter" rel="noopener noreferrer"&gt;&lt;strong&gt;GitHub → https://github.com/TechGenDM/Hack-Day-Starter&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;

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

&lt;p&gt;The stack is &lt;strong&gt;Next.js, TypeScript, Tailwind CSS, and Ollama&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;But the interesting part isn't the framework stack.&lt;/p&gt;

&lt;p&gt;It is the set of decisions I made around model selection and local execution.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. I didn't want another static "RAM → model" table
&lt;/h3&gt;

&lt;p&gt;A simple mapping would have been easy:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;8 GB  → small model
16 GB → medium model
24 GB → larger model
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;But that breaks down quickly.&lt;/p&gt;

&lt;p&gt;Two models with similar parameter counts can have very different memory requirements, context windows, capabilities, and practical hardware fit.&lt;/p&gt;

&lt;p&gt;So Hack Day Starter builds a hardware profile using information such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;RAM&lt;/li&gt;
&lt;li&gt;free disk space&lt;/li&gt;
&lt;li&gt;operating system&lt;/li&gt;
&lt;li&gt;Apple Silicon / GPU information&lt;/li&gt;
&lt;li&gt;NVIDIA VRAM where applicable&lt;/li&gt;
&lt;li&gt;intended use case&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The recommendation engine first removes models that should not be recommended at all, then ranks the remaining models using factors such as memory headroom, disk headroom, hardware acceleration, task relevance, model capacity, and verified capabilities.&lt;/p&gt;

&lt;p&gt;The recommendation itself is deterministic.&lt;/p&gt;

&lt;p&gt;I didn't ask another LLM to decide which model should be used.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Model information needs to be treated as data, not truth
&lt;/h3&gt;

&lt;p&gt;Local AI changes quickly.&lt;/p&gt;

&lt;p&gt;A tutorial written a few months ago can easily point to a model that has been replaced, changed, or isn't appropriate for the hardware anymore.&lt;/p&gt;

&lt;p&gt;So I created a curated &lt;strong&gt;Verified Model Registry&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The registry currently tracks 23 model entries and records information such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;exact Ollama tags&lt;/li&gt;
&lt;li&gt;model size&lt;/li&gt;
&lt;li&gt;context window&lt;/li&gt;
&lt;li&gt;lifecycle status&lt;/li&gt;
&lt;li&gt;capabilities&lt;/li&gt;
&lt;li&gt;verification status&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The recommendation layer only considers models that pass the project's local and verification rules.&lt;/p&gt;

&lt;p&gt;The generator checks the registry again before creating a starter, so an arbitrary model tag can't simply be supplied by the client to bypass those checks.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Chat and Agents are different starting points
&lt;/h3&gt;

&lt;p&gt;I didn't want the generated project to become another giant framework.&lt;/p&gt;

&lt;p&gt;There are two intentionally small starter types.&lt;/p&gt;

&lt;h4&gt;
  
  
  Local Chat
&lt;/h4&gt;

&lt;p&gt;A minimal TypeScript application that communicates directly with the local Ollama API.&lt;/p&gt;

&lt;h4&gt;
  
  
  Tool-Calling Agent
&lt;/h4&gt;

&lt;p&gt;A small agent loop where the model can request a tool, the local runtime executes it, and the result is sent back to the model.&lt;/p&gt;

&lt;p&gt;For the demo, I verified a complete local tool-calling run with &lt;strong&gt;Gemma 4 12B&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="err"&gt;User:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="err"&gt;What&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;is&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;342&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;multiplied&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;by&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;19&lt;/span&gt;&lt;span class="err"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;and&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;then&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;divide&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;by&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="err"&gt;?&lt;/span&gt;&lt;span class="w"&gt;

&lt;/span&gt;&lt;span class="err"&gt;Model&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;→&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;Tool&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;Call:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="err"&gt;calculate(&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nl"&gt;"expression"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"(342 * 19) / 4"&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="err"&gt;)&lt;/span&gt;&lt;span class="w"&gt;

&lt;/span&gt;&lt;span class="err"&gt;Tool&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;Result:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="mf"&gt;1624.5&lt;/span&gt;&lt;span class="w"&gt;

&lt;/span&gt;&lt;span class="err"&gt;Model:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="mi"&gt;342&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;multiplied&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;by&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;19&lt;/span&gt;&lt;span class="err"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;divided&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;by&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="err"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;equals&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;1624.5&lt;/span&gt;&lt;span class="err"&gt;.&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&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%2Ff63149pfdg5o15g7q4bm.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%2Ff63149pfdg5o15g7q4bm.png" alt="A generated Gemma 4 12B tool-calling agent running locally through Ollama, showing calculator tool calls and their results in the terminal." width="800" height="535"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;That was important to me.&lt;/p&gt;

&lt;p&gt;I didn't want to stop at "the model supports tool calling."&lt;/p&gt;

&lt;p&gt;I wanted to see the complete loop actually work:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;model → tool request → local execution → tool result → model response&lt;/strong&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  4. The generator doesn't use an LLM to generate the code
&lt;/h3&gt;

&lt;p&gt;This was another deliberate decision.&lt;/p&gt;

&lt;p&gt;Hack Day Starter generates the starter project from deterministic templates.&lt;/p&gt;

&lt;p&gt;That means the application controls:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;the project structure&lt;/li&gt;
&lt;li&gt;the selected model&lt;/li&gt;
&lt;li&gt;the exact Ollama tag&lt;/li&gt;
&lt;li&gt;the setup commands&lt;/li&gt;
&lt;li&gt;the starter type&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The same input should produce the same project.&lt;/p&gt;

&lt;p&gt;For a developer tool whose whole purpose is to remove setup uncertainty, predictable generation matters more than making the generator itself "AI-powered."&lt;/p&gt;

&lt;h3&gt;
  
  
  5. I learned that local AI has another failure mode: setup
&lt;/h3&gt;

&lt;p&gt;Getting a model selection right is only half the job.&lt;/p&gt;

&lt;p&gt;A generated application can still fail immediately because:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Ollama isn't running
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;or:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;The model hasn't been downloaded
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;So the generated starters include a readiness check.&lt;/p&gt;

&lt;p&gt;Instead of showing a raw connection error, the starter explains what is missing:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Ollama not running
        ↓
Start Ollama

Model not installed
        ↓
ollama pull &amp;lt;exact-model-tag&amp;gt;

Ready
        ↓
npm run dev
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That sounds like a small UX detail.&lt;/p&gt;

&lt;p&gt;For someone new to local AI, it can be the difference between "I understand what happened" and "the project is broken."&lt;/p&gt;

&lt;h3&gt;
  
  
  6. I added safety boundaries around generation and tools
&lt;/h3&gt;

&lt;p&gt;The project also has a few hard checks:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;arbitrary model tags are rejected&lt;/li&gt;
&lt;li&gt;retired or unverified models cannot be used&lt;/li&gt;
&lt;li&gt;Agent starters require verified tool-calling support&lt;/li&gt;
&lt;li&gt;the exact selected Ollama tag is preserved&lt;/li&gt;
&lt;li&gt;the calculator uses a strict parser instead of &lt;code&gt;eval()&lt;/code&gt; or &lt;code&gt;new Function()&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The repository currently has &lt;strong&gt;36/36 automated tests passing&lt;/strong&gt; across recommendation logic, registry validation, starter generation, readiness checks, security checks, and setup-flow contracts.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Building This Taught Me
&lt;/h2&gt;

&lt;p&gt;The hardest part wasn't making a model answer a prompt.&lt;/p&gt;

&lt;p&gt;The harder problem was deciding what should happen &lt;strong&gt;before&lt;/strong&gt; the prompt ever reaches the model.&lt;/p&gt;

&lt;p&gt;I started with the obvious mental model:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Give me hardware → give me a model."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The project became much more useful when I treated it as:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;"Give me hardware → tell me what I can safely use → explain why → give me a runnable starting point."&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That changed the project from a model lookup tool into a bootstrapper.&lt;/p&gt;

&lt;p&gt;I also learned that "local AI" is not just about inference.&lt;/p&gt;

&lt;p&gt;The developer still has to install the runtime, download the weights, understand the hardware limits, and connect everything to an application.&lt;/p&gt;

&lt;p&gt;The real product is reducing that friction.&lt;/p&gt;

&lt;h2&gt;
  
  
  Handing It Over
&lt;/h2&gt;

&lt;p&gt;Before finishing the project, I ran the workflow with a friend.&lt;/p&gt;

&lt;p&gt;The part that mattered most was that he didn't need me to explain what model to choose or what command to run next. The recommendation, exact model tag, and setup steps were visible in the product itself.&lt;/p&gt;

&lt;p&gt;The important test wasn't whether I could use the application.&lt;/p&gt;

&lt;p&gt;I already built it.&lt;/p&gt;

&lt;p&gt;The real test was whether someone else could go through:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;hardware → recommendation → starter → setup&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;without needing me to explain every screen.&lt;/p&gt;

&lt;p&gt;That was the standard I used for the final UX.&lt;/p&gt;

&lt;p&gt;There is still plenty I could improve, but the core hand-off works: the recommendation explains itself, the selected model is explicit, and the generated project tells the developer exactly what to do next.&lt;/p&gt;

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

&lt;p&gt;A closed AI API could have helped me build an AI application.&lt;/p&gt;

&lt;p&gt;But it would not have solved the particular problem I was trying to solve.&lt;/p&gt;

&lt;p&gt;The core of Hack Day Starter is &lt;strong&gt;local model selection and local execution&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The developer can:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;choose a model based on their own hardware&lt;/li&gt;
&lt;li&gt;inspect the model information used by the recommendation&lt;/li&gt;
&lt;li&gt;download the weights locally&lt;/li&gt;
&lt;li&gt;run inference through Ollama&lt;/li&gt;
&lt;li&gt;swap to another compatible model&lt;/li&gt;
&lt;li&gt;inspect and modify the generated TypeScript code&lt;/li&gt;
&lt;li&gt;build without making a hosted inference API a requirement&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That control matters because the model is not just an API endpoint anymore.&lt;/p&gt;

&lt;p&gt;It becomes part of the developer's own environment.&lt;/p&gt;

&lt;p&gt;It also changes the privacy boundary.&lt;/p&gt;

&lt;p&gt;For the generated application, inference can happen through the developer's local Ollama instance rather than sending prompts to a third-party inference service.&lt;/p&gt;

&lt;p&gt;There are real tradeoffs.&lt;/p&gt;

&lt;p&gt;Local models still need enough hardware. Downloading weights takes disk space and time. Smaller models won't always match the quality of large hosted frontier models.&lt;/p&gt;

&lt;p&gt;I don't think those tradeoffs make local AI universally better.&lt;/p&gt;

&lt;p&gt;They make it &lt;strong&gt;different&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;For this project, the open approach gives the developer more control over:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;the model, the runtime, the hardware, the code, and where the data goes.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;That's exactly what I wanted my friend to have.&lt;/p&gt;

&lt;p&gt;I wanted to create a shorter path from &lt;strong&gt;"Can my laptop run this?"&lt;/strong&gt; to &lt;strong&gt;"I'm building."&lt;/strong&gt;&lt;/p&gt;

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

&lt;h3&gt;
  
  
  Best Use of Gemma
&lt;/h3&gt;

&lt;p&gt;I'm entering &lt;strong&gt;Best Use of Gemma&lt;/strong&gt; because Gemma 4 12B is used as a real local model in the project, and I verified a complete tool-calling workflow with it through Ollama.&lt;/p&gt;




&lt;p&gt;Built for a friend during Hacktoberfest 2026.&lt;/p&gt;

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