<?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: Harsh Vardhan Pandey</title>
    <description>The latest articles on DEV Community by Harsh Vardhan Pandey (@harsh_vardhanpandey_08fc).</description>
    <link>https://dev.to/harsh_vardhanpandey_08fc</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%2F3971583%2F2027f94c-b2fb-4264-a9b3-3810ad78c042.jpeg</url>
      <title>DEV Community: Harsh Vardhan Pandey</title>
      <link>https://dev.to/harsh_vardhanpandey_08fc</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/harsh_vardhanpandey_08fc"/>
    <language>en</language>
    <item>
      <title>DabbaETA: a 'will this tiffin be late?' predictor that never sends a customer's address to the cloud</title>
      <dc:creator>Harsh Vardhan Pandey</dc:creator>
      <pubDate>Sat, 17 Oct 2026 07:25:54 +0000</pubDate>
      <link>https://dev.to/harsh_vardhanpandey_08fc/dabbaeta-a-will-this-tiffin-be-late-predictor-that-never-sends-a-customers-address-to-the-cloud-50n4</link>
      <guid>https://dev.to/harsh_vardhanpandey_08fc/dabbaeta-a-will-this-tiffin-be-late-predictor-that-never-sends-a-customers-address-to-the-cloud-50n4</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges"&gt;HF26 Challenge: Side Hustle&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  It's 1 PM and the phone won't stop ringing
&lt;/h2&gt;

&lt;p&gt;If you run a small tiffin service in India, you know this day. It started raining at 12. One rider is new. Eight orders went out together. By 1 PM, customers are calling: &lt;em&gt;"Bhaiya, khana kab aayega?"&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;The owner has months of delivery history in a notebook or a spreadsheet. Nobody has ever used it to see this coming. Swiggy has an ML team for that. A 40-order kitchen doesn't, and that owner isn't going to upload customer names, phone numbers and home addresses to a random SaaS to fix it.&lt;/p&gt;

&lt;p&gt;So I built the version that runs on the laptop they already have.&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;DabbaETA&lt;/strong&gt; is a local-first dispatch assistant for small delivery businesses: tiffin services, bakeries, local couriers.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Upload&lt;/strong&gt; past deliveries as a CSV (schema is validated and stored in a local SQLite file).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;TabPFN&lt;/strong&gt; predicts the ETA and the late-delivery risk for every pending order, shown as HIGH / MODERATE / LOW badges.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Gemma&lt;/strong&gt; runs on Ollama on the same machine. Ask it &lt;em&gt;"Aaj kaunsi orders late hongi?"&lt;/em&gt; and it answers. It also drafts polite delay messages in &lt;strong&gt;Hinglish, Hindi or English&lt;/strong&gt;, ready to copy into WhatsApp.&lt;/li&gt;
&lt;li&gt;One click on &lt;strong&gt;Run dispatch&lt;/strong&gt; starts a &lt;strong&gt;Temporal&lt;/strong&gt; workflow: load orders → predict all → flag risky → explain bottlenecks → draft messages.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Sentry&lt;/strong&gt; spans wrap every Gemma and TabPFN call and record latency and token counts.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Code:&lt;/strong&gt; &lt;a href="https://github.com/Harsh63870/DabbaWala" rel="noopener noreferrer"&gt;https://github.com/Harsh63870/DabbaWala&lt;/a&gt;&lt;/p&gt;

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

&lt;p&gt;For this product, open is what makes the business possible at all.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Customer data stays put.&lt;/strong&gt; Names, phones and addresses never reach an LLM API. Gemma runs locally. The only thing that leaves the machine is a table of numbers (distance, traffic, weather, prep time) sent to TabPFN. The predictor sits behind a &lt;code&gt;BasePredictor&lt;/code&gt; interface that already supports both the &lt;code&gt;tabpfn-client&lt;/code&gt; API and the local &lt;code&gt;tabpfn&lt;/code&gt; package, so going fully offline is a config change, not a rewrite.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No per-message bill.&lt;/strong&gt; Every ETA question and every drafted message on a metered API costs money. On a tiffin owner's margin, that adds up quickly. Locally, the marginal cost is zero.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Swap the model in one line.&lt;/strong&gt; &lt;code&gt;OLLAMA_MODEL&lt;/code&gt; is an env var. When a better small Hindi-capable model ships, the owner upgrades without touching code.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No lock-in.&lt;/strong&gt; There is no vendor whose pricing change can break a customer's daily workflow.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The benchmark (and what it does &lt;em&gt;not&lt;/em&gt; show)
&lt;/h2&gt;

&lt;p&gt;I didn't have a real tiffin dataset, so I generated &lt;strong&gt;5,000 synthetic orders&lt;/strong&gt; matching the schema of the Kaggle &lt;em&gt;Food Delivery Times&lt;/em&gt; dataset: distance, traffic, weather, vehicle type, prep time, courier experience, evening rush and monsoon effects. Treat these numbers as a check that the pipeline works, not a claim about any real kitchen.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Full data (4,000 train / 1,000 test):&lt;/strong&gt;&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Model&lt;/th&gt;
&lt;th&gt;MAE (min)&lt;/th&gt;
&lt;th&gt;RMSE&lt;/th&gt;
&lt;th&gt;R²&lt;/th&gt;
&lt;th&gt;Fit time&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;TabPFN&lt;/td&gt;
&lt;td&gt;3.60&lt;/td&gt;
&lt;td&gt;6.05&lt;/td&gt;
&lt;td&gt;0.937&lt;/td&gt;
&lt;td&gt;0.39s&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;XGBoost&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;3.31&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;5.22&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;0.953&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;0.11s&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Linear regression&lt;/td&gt;
&lt;td&gt;6.27&lt;/td&gt;
&lt;td&gt;10.15&lt;/td&gt;
&lt;td&gt;0.822&lt;/td&gt;
&lt;td&gt;0.003s&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;With thousands of rows, XGBoost wins.&lt;/strong&gt; I'm reporting that as is. Both tree-based approaches are far ahead of linear regression, which is expected, since delivery time depends on interactions like distance × traffic × weather.&lt;/p&gt;

&lt;p&gt;A small owner doesn't have thousands of rows, though. They have a few weeks of history. That's why the benchmark script also runs a small-data experiment on 50, 100 and 200 training rows, and why the predictor is swappable: if XGBoost is better for your data size, switch to it in one line. The full results and chart are in the repo under &lt;code&gt;docs/benchmark.json&lt;/code&gt; and &lt;code&gt;docs/benchmark.png&lt;/code&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%2Fhml3ryljhh38eutmcidn.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%2Fhml3ryljhh38eutmcidn.png" alt="Benchmark chart" width="799" height="314"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  How it works
&lt;/h2&gt;



&lt;pre data-lang="mermaid"&gt;&lt;code&gt;flowchart TD
    A[Owner uploads CSV] --&amp;gt; B[(SQLite, local)]
    B --&amp;gt; C[TabPFN: ETA + late risk]

    subgraph T[Temporal DispatchWorkflow, exponential-backoff retries]
        D[load_orders] --&amp;gt; E[predict_all]
        E --&amp;gt; F[flag_risky]
        F --&amp;gt; G[explain: Gemma]
        G --&amp;gt; H[draft_messages: Gemma]
    end

    C --&amp;gt; D
    H --&amp;gt; I[WhatsApp drafts in Hinglish / Hindi / English]

    J[Chat: Aaj kaunsi orders late hongi?] --&amp;gt; K{Gemma agent, JSON tool routing}
    K --&amp;gt; L[predict_eta]
    K --&amp;gt; M[list_risky_orders]
    K --&amp;gt; N[draft_message]
    L --&amp;gt; C
    M --&amp;gt; C

    O[FastAPI + dashboard] -.-&amp;gt; T
    O -.-&amp;gt; K
    S[Sentry spans: tabpfn.predict, llm.gemma] -.-&amp;gt; C
    S -.-&amp;gt; G
    S -.-&amp;gt; H&lt;/code&gt;&lt;/pre&gt;



&lt;p&gt;&lt;strong&gt;A Gemma agent that doesn't depend on native tool-calling.&lt;/strong&gt; Small local models are unreliable at it, so Gemma is prompted to emit &lt;code&gt;{"tool": ..., "args": ...}&lt;/code&gt; and I parse it with regex extraction plus a retry loop. Three tools: &lt;code&gt;predict_eta&lt;/code&gt;, &lt;code&gt;list_risky_orders&lt;/code&gt;, &lt;code&gt;draft_message&lt;/code&gt;. Heuristic routing catches Hinglish queries like &lt;em&gt;"Aaj kaunsi orders late hongi?"&lt;/em&gt; even when the model's JSON is malformed.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Temporal for the morning run.&lt;/strong&gt; A dispatch run chains a prediction step with several LLM calls, and any of them can fail halfway. Each step is an activity with exponential-backoff retries, so one flaky call doesn't mean redoing the whole run. If Temporal isn't reachable, the app falls back to an in-process run so the demo still works on any laptop.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Sentry for visibility.&lt;/strong&gt; Custom spans around every Gemma and TabPFN call record &lt;code&gt;latency_ms&lt;/code&gt;, &lt;code&gt;tokens_in&lt;/code&gt; and &lt;code&gt;tokens_out&lt;/code&gt;, which makes it clear where time goes when a dispatch run feels slow.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Tests.&lt;/strong&gt; 8 pytest tests cover order-schema validation, the predictor interface, agent JSON extraction, Hindi-query routing, message drafting, the workflow happy path and the API endpoints.&lt;/p&gt;

&lt;h2&gt;
  
  
  Who would pay, and how much
&lt;/h2&gt;

&lt;p&gt;My hypothesis, not yet validated: a tiffin or bakery owner will pay a small monthly fee, or a one-time setup fee, for "tell me which orders will be late before the customers call, and write the messages for me." The pitch is saved phone calls and fewer angry customers, not "AI". Because inference is local, my cost per customer is close to zero, so even a very small price leaves margin. A closed-API version would have to charge more just to cover token costs.&lt;/p&gt;

&lt;h2&gt;
  
  
  First user
&lt;/h2&gt;

&lt;p&gt;I haven't landed a real paying user yet, and I'd rather say that than invent one. Everything above runs on synthetic data, so the first thing I'll do next is run it on a real owner's CSV and see where it breaks.&lt;/p&gt;

&lt;h2&gt;
  
  
  Limits
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;The demo dataset is synthetic, so real-world accuracy will differ.&lt;/li&gt;
&lt;li&gt;On large data XGBoost beats TabPFN here, as the table shows.&lt;/li&gt;
&lt;li&gt;TabPFN's free API key is &lt;strong&gt;non-commercial&lt;/strong&gt;. Selling this requires a commercial licence from Prior Labs, or running the local &lt;code&gt;tabpfn&lt;/code&gt; package under its own terms.&lt;/li&gt;
&lt;li&gt;Gemma is fine for short drafts but not perfect at Hindi grammar, so owners should skim a message before sending it.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Prize categories
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Best Use of TabPFN:&lt;/strong&gt; TabPFN is the prediction core (ETA and late-risk), benchmarked against XGBoost and linear regression, inside a wider agent that turns predictions into actions.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Best Use of Gemma:&lt;/strong&gt; Gemma runs locally via Ollama and powers the chat agent, JSON tool routing and Hinglish / Hindi / English message drafting.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Best Use of Temporal:&lt;/strong&gt; the morning dispatch is a five-activity &lt;code&gt;DispatchWorkflow&lt;/code&gt; with exponential-backoff retries.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Best Use of Sentry Agent Tracing:&lt;/strong&gt; custom &lt;code&gt;llm.gemma&lt;/code&gt; and &lt;code&gt;tabpfn.predict&lt;/code&gt; spans record latency and token counts.&lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;Run it on a real owner's data, add rider-level features, build a one-tap WhatsApp send flow, and retrain automatically as new deliveries get logged.&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>hf26challenge</category>
      <category>python</category>
      <category>ai</category>
    </item>
    <item>
      <title># 🌿 WildQuest AI: Less Scrolling, More Discovering</title>
      <dc:creator>Harsh Vardhan Pandey</dc:creator>
      <pubDate>Sat, 10 Oct 2026 17:21:37 +0000</pubDate>
      <link>https://dev.to/harsh_vardhanpandey_08fc/-wildquest-ai-less-scrolling-more-discovering-5060</link>
      <guid>https://dev.to/harsh_vardhanpandey_08fc/-wildquest-ai-less-scrolling-more-discovering-5060</guid>
      <description>&lt;p&gt;🌿 WildQuest AI — Touch Grass, Powered by AI&lt;/p&gt;

&lt;p&gt;Try the live demo: &lt;a href="https://wildquest-ai.onrender.com/" rel="noopener noreferrer"&gt;https://wildquest-ai.onrender.com/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;🔗 GitHub: &lt;a href="https://github.com/Harsh63870/WildQuest-AI" rel="noopener noreferrer"&gt;https://github.com/Harsh63870/WildQuest-AI&lt;/a&gt;&lt;br&gt;
⚙️ Backend API: &lt;a href="https://wildquest-ai-api.onrender.com" rel="noopener noreferrer"&gt;https://wildquest-ai-api.onrender.com&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;My submission for the Hacktoberfest Open-Source AI Challenge — Week 1: Touch Grass.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Most AI applications are designed to keep us on our screens: generating content, answering questions, and automating digital tasks.&lt;/p&gt;

&lt;p&gt;I wanted to explore a different use of AI.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What if AI could help people spend less time interacting with technology and more time experiencing the real world?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;That question led me to build &lt;strong&gt;WildQuest AI&lt;/strong&gt;, a privacy-first nature exploration companion that turns outdoor activities into personalized quests and helps users document what they discover.&lt;/p&gt;

&lt;p&gt;The idea isn't to make nature more complicated with technology. It's to use technology to make getting outside a little easier.&lt;/p&gt;

&lt;h2&gt;
  
  
  🌱 What Is WildQuest AI?
&lt;/h2&gt;

&lt;p&gt;WildQuest AI is a full-stack application that combines locally running AI with a nature journal and outdoor activity tracking.&lt;/p&gt;

&lt;p&gt;Users can generate personalized nature quests, complete them outdoors, record observations, and revisit their experiences later.&lt;/p&gt;

&lt;p&gt;Instead of requiring a hosted AI service, the application can use a local model through Ollama. When the model is unavailable, a deterministic quest catalog provides a fallback.&lt;/p&gt;

&lt;h3&gt;
  
  
  Key features
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Personalized nature quests:&lt;/strong&gt; Generate outdoor activities based on user preferences and available time.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Nature journal:&lt;/strong&gt; Save observations, experiences, and reflections.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Session tracking:&lt;/strong&gt; Keep track of outdoor exploration sessions and completed quests.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Journal history:&lt;/strong&gt; Search, revisit, and export saved entries.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Achievements:&lt;/strong&gt; Recognize exploration milestones without relying on manipulative engagement streaks.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Local-first architecture:&lt;/strong&gt; Store journal data in SQLite and support local AI inference.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Graceful fallback:&lt;/strong&gt; Continue generating quests through a deterministic catalog when local AI is unavailable.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  🔗 Source Code
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;GitHub:&lt;/strong&gt; &lt;a href="https://github.com/Harsh63870/WildQuest-AI" rel="noopener noreferrer"&gt;https://github.com/Harsh63870/WildQuest-AI&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  🧠 Architecture: How It Works
&lt;/h2&gt;

&lt;p&gt;I built WildQuest AI using a React frontend, a FastAPI backend, a local AI inference layer, and SQLite for persistence.&lt;/p&gt;

&lt;p&gt;The frontend handles the user experience, while the backend manages quest generation and journal operations. The AI integration is optional at runtime because the application can fall back to predefined quest data.&lt;/p&gt;

&lt;h3&gt;
  
  
  System architecture
&lt;/h3&gt;



&lt;pre data-lang="mermaid"&gt;&lt;code&gt;flowchart TD
    A["User"] --&amp;gt; B["React 19 + TypeScript"]
    B --&amp;gt; C["FastAPI Backend"]

    C --&amp;gt; D{"Local AI Available?"}

    D --&amp;gt;|Yes| E["Ollama"]
    E --&amp;gt; F["Qwen 2.5 3B"]
    F --&amp;gt; G["Generated Nature Quest"]

    D --&amp;gt;|No| H["Deterministic Quest Catalog"]
    H --&amp;gt; G

    G --&amp;gt; I["Quest Displayed in UI"]
    I --&amp;gt; J["Outdoor Exploration"]
    J --&amp;gt; K["User Records Observations"]
    K --&amp;gt; C

    C --&amp;gt; L[("SQLite Database")]
    L --&amp;gt; M["Journal History, Search and Export"]
    M --&amp;gt; B&lt;/code&gt;&lt;/pre&gt;



&lt;p&gt;The key design decision is that &lt;strong&gt;the AI model is not a hard dependency for the entire experience&lt;/strong&gt;. If local inference is unavailable, the application can still provide quests through its fallback mechanism.&lt;/p&gt;

&lt;p&gt;This makes the application more resilient and avoids making access to an AI model a prerequisite for going outdoors.&lt;/p&gt;

&lt;h2&gt;
  
  
  🛠️ Technology Stack
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Layer&lt;/th&gt;
&lt;th&gt;Technologies&lt;/th&gt;
&lt;th&gt;Purpose&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Frontend&lt;/td&gt;
&lt;td&gt;React 19, TypeScript, Vite&lt;/td&gt;
&lt;td&gt;User interface and application interactions&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Styling&lt;/td&gt;
&lt;td&gt;Tailwind CSS, Lucide&lt;/td&gt;
&lt;td&gt;Layout, styling, and icons&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Backend&lt;/td&gt;
&lt;td&gt;Python, FastAPI, Pydantic&lt;/td&gt;
&lt;td&gt;API endpoints, validation, and application logic&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;AI inference&lt;/td&gt;
&lt;td&gt;Ollama, Qwen 2.5 3B&lt;/td&gt;
&lt;td&gt;Local quest generation&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Persistence&lt;/td&gt;
&lt;td&gt;SQLite&lt;/td&gt;
&lt;td&gt;Local storage for journal data&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;HTTP client&lt;/td&gt;
&lt;td&gt;HTTPX&lt;/td&gt;
&lt;td&gt;Backend HTTP requests&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Testing&lt;/td&gt;
&lt;td&gt;Python test suite, frontend build and type-check&lt;/td&gt;
&lt;td&gt;Validate backend behavior and frontend compilation&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  🔄 Quest Generation and Data Flow
&lt;/h2&gt;

&lt;p&gt;A typical interaction follows this sequence:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;The user requests a nature quest.&lt;/li&gt;
&lt;li&gt;The frontend sends the relevant preferences to the FastAPI backend.&lt;/li&gt;
&lt;li&gt;The backend attempts to use the configured local AI model.&lt;/li&gt;
&lt;li&gt;If inference succeeds, the generated quest is returned.&lt;/li&gt;
&lt;li&gt;If the model is unavailable, the backend uses the deterministic fallback catalog.&lt;/li&gt;
&lt;li&gt;The user explores outdoors and records an observation.&lt;/li&gt;
&lt;li&gt;The backend saves the journal entry to SQLite.&lt;/li&gt;
&lt;li&gt;The user can revisit, search, or export saved entries.
&lt;/li&gt;
&lt;/ol&gt;

&lt;pre data-lang="mermaid"&gt;&lt;code&gt;sequenceDiagram
    actor User
    participant UI as React Frontend
    participant API as FastAPI Backend
    participant AI as Ollama
    participant DB as SQLite

    User-&amp;gt;&amp;gt;UI: Request a nature quest
    UI-&amp;gt;&amp;gt;API: Submit quest preferences
    API-&amp;gt;&amp;gt;AI: Request local inference

    alt Model available
        AI--&amp;gt;&amp;gt;API: Generated quest
    else Model unavailable
        API-&amp;gt;&amp;gt;API: Select fallback quest
    end

    API--&amp;gt;&amp;gt;UI: Return quest
    UI--&amp;gt;&amp;gt;User: Display quest

    User-&amp;gt;&amp;gt;UI: Save an observation
    UI-&amp;gt;&amp;gt;API: Submit journal entry
    API-&amp;gt;&amp;gt;DB: Persist entry
    DB--&amp;gt;&amp;gt;API: Confirm saved data
    API--&amp;gt;&amp;gt;UI: Return result&lt;/code&gt;&lt;/pre&gt;



&lt;h2&gt;
  
  
  🔐 Why Local-First AI?
&lt;/h2&gt;

&lt;p&gt;Privacy was an architectural consideration, not just a feature to mention in the README.&lt;/p&gt;

&lt;p&gt;Using a locally running model means quest generation does not inherently require sending prompts to a hosted AI provider. SQLite also provides local persistence for journal data.&lt;/p&gt;

&lt;p&gt;The design aims to provide:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Local inference:&lt;/strong&gt; Use Ollama rather than requiring a cloud AI API.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Local persistence:&lt;/strong&gt; Store journal entries in SQLite.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No mandatory GPS tracking:&lt;/strong&gt; Outdoor exploration does not require continuous location tracking.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No mandatory account:&lt;/strong&gt; The core experience does not depend on user registration.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;A fallback path:&lt;/strong&gt; The application can still provide quests when local inference is unavailable.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These choices reduce external dependencies and give users more control over their data. They do not, by themselves, guarantee that every possible deployment or network request is completely offline, so the actual behavior depends on how the application is configured and run.&lt;/p&gt;

&lt;h2&gt;
  
  
  🧪 Testing and Validation
&lt;/h2&gt;

&lt;p&gt;During local development, the backend test suite completed with &lt;strong&gt;14 passing tests&lt;/strong&gt;. The frontend build and type-check also completed successfully in my local validation.&lt;/p&gt;

&lt;p&gt;These checks gave me confidence in the application before preparing it for submission. They are a useful baseline, though they do not replace broader integration, security, or real-world usability testing.&lt;/p&gt;

&lt;h2&gt;
  
  
  💡 Engineering Decisions and Trade-offs
&lt;/h2&gt;

&lt;p&gt;A few decisions shaped this project.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Local inference instead of a mandatory hosted model&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Running a model locally reduces dependence on external AI services, but it also introduces setup requirements and hardware constraints. A smaller model such as Qwen 2.5 3B is a practical starting point for experimentation on consumer hardware.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Deterministic fallback instead of total failure&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;AI services can be unavailable, slow, or misconfigured. A fallback quest catalog allows the core quest-generation experience to continue without successful model inference.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. SQLite instead of a separate database service&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The application is designed for an individual user's exploration and journal. SQLite keeps persistence simple and avoids requiring users to operate an additional database server.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. AI as an assistant, not an authority&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;WildQuest AI focuses on suggesting activities and recording personal observations. It does not claim that generated content is a scientifically verified species identification system.&lt;/p&gt;

&lt;p&gt;These trade-offs keep the initial implementation relatively lightweight while leaving room for future improvements.&lt;/p&gt;

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

&lt;p&gt;There is room to take the project further:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Expand quest categories and difficulty levels.&lt;/li&gt;
&lt;li&gt;Improve personalization using previous quests and user preferences.&lt;/li&gt;
&lt;li&gt;Add optional, carefully sourced nature observation guides.&lt;/li&gt;
&lt;li&gt;Improve accessibility and mobile usability.&lt;/li&gt;
&lt;li&gt;Expand automated tests and integration coverage.&lt;/li&gt;
&lt;li&gt;Improve setup documentation and troubleshooting.&lt;/li&gt;
&lt;li&gt;Evaluate optional integrations without making cloud services mandatory.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Any future species-identification feature would need reliable references, uncertainty handling, and validation rather than presenting AI-generated guesses as established facts.&lt;/p&gt;

&lt;h2&gt;
  
  
  🌍 Final Thoughts
&lt;/h2&gt;

&lt;p&gt;WildQuest AI began with a simple idea: AI doesn't always need to help us do more things on a screen.&lt;/p&gt;

&lt;p&gt;Sometimes, it can help us find a reason to put the screen away.&lt;/p&gt;

&lt;p&gt;Building this project gave me an opportunity to explore local AI inference, backend API design, persistent storage, graceful fallbacks, and privacy-conscious product decisions in one application.&lt;/p&gt;

&lt;p&gt;The technology supports the experience. The real objective is what happens after the user closes the app.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Less scrolling. More discovering. 🌿&lt;/strong&gt;&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Tags:&lt;/strong&gt; &lt;code&gt;#devchallenge&lt;/code&gt; &lt;code&gt;#hf26challenge&lt;/code&gt; &lt;code&gt;#opensource&lt;/code&gt; &lt;code&gt;#ai&lt;/code&gt; &lt;code&gt;#python&lt;/code&gt; &lt;code&gt;#react&lt;/code&gt;&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>hf26challenge</category>
    </item>
    <item>
      <title>"DevLog: An AI Git Workflow That Keeps Your Code Local"</title>
      <dc:creator>Harsh Vardhan Pandey</dc:creator>
      <pubDate>Sun, 04 Oct 2026 08:29:40 +0000</pubDate>
      <link>https://dev.to/harsh_vardhanpandey_08fc/devlog-an-ai-git-workflow-that-keeps-your-code-local-2f30</link>
      <guid>https://dev.to/harsh_vardhanpandey_08fc/devlog-an-ai-git-workflow-that-keeps-your-code-local-2f30</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;I built &lt;strong&gt;DevLog&lt;/strong&gt;, a local-first AI Git workflow for my developer friend who wanted AI assistance for everyday Git work without sending private source code and Git diffs to a cloud AI provider.&lt;/p&gt;

&lt;p&gt;Developers commit frequently, but writing clear commit messages and pull-request descriptions can become repetitive and interrupt the development flow.&lt;/p&gt;

&lt;p&gt;The obvious solution is to send the Git diff to an AI API.&lt;/p&gt;

&lt;p&gt;But that raises a question:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Do I really need to send my source code to a cloud service just to generate a commit message?&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;DevLog takes a different approach.&lt;/p&gt;

&lt;p&gt;It runs AI locally using &lt;strong&gt;Ollama and an open-weight model&lt;/strong&gt;, reads the staged Git diff on the developer's machine, generates a commit message or PR description locally, lets the developer review the result, and then optionally publishes the changes to GitHub.&lt;/p&gt;

&lt;p&gt;The AI generation itself does not require a cloud AI API.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Core Idea
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Git Repository
      │
      ▼
Staged Git Diff
      │
      ▼
DevLog
      │
      ▼
Local Ollama
      │
      ▼
Open-Weight LLM
      │
      ├──► Commit Message
      │
      └──► PR Description
      │
      ▼
Developer Reviews
      │
      ▼
Commit / Push / Create PR
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

&lt;p&gt;&lt;strong&gt;AI assistance without giving up control of the code being analyzed.&lt;/strong&gt;&lt;/p&gt;

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

&lt;p&gt;🌐 &lt;strong&gt;Live Demo:&lt;/strong&gt; &lt;a href="https://devlog-fawn-omega.vercel.app/" rel="noopener noreferrer"&gt;https://devlog-fawn-omega.vercel.app/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The live deployment lets you explore the DevLog interface and understand the workflow.&lt;/p&gt;

&lt;p&gt;The complete local AI workflow is designed to run on the developer's own machine with Ollama.&lt;/p&gt;

&lt;h3&gt;
  
  
  What DevLog Can Do
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;View repository status&lt;/li&gt;
&lt;li&gt;Inspect staged Git diffs&lt;/li&gt;
&lt;li&gt;Generate AI-powered commit messages&lt;/li&gt;
&lt;li&gt;Generate AI-powered PR descriptions&lt;/li&gt;
&lt;li&gt;Review and edit generated content&lt;/li&gt;
&lt;li&gt;Commit staged changes&lt;/li&gt;
&lt;li&gt;Push branches&lt;/li&gt;
&lt;li&gt;Create GitHub pull requests&lt;/li&gt;
&lt;li&gt;View repository activity and statistics&lt;/li&gt;
&lt;li&gt;Run AI inference locally&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Local AI Demo
&lt;/h3&gt;

&lt;p&gt;For the actual AI inference, DevLog connects to Ollama running locally:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Developer Machine

Git Repository
      │
      ▼
   DevLog
      │
      ▼
   Ollama
      │
      ▼
 Local LLM
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Once the model is downloaded, AI generation can work without an internet connection.&lt;/p&gt;

&lt;p&gt;GitHub operations still require internet access when the developer explicitly chooses to push code or create a pull request.&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;GitHub Repository:&lt;/strong&gt; &lt;a href="https://github.com/Harsh63870/Devlog" rel="noopener noreferrer"&gt;https://github.com/Harsh63870/Devlog&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The repository contains:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;React frontend&lt;/li&gt;
&lt;li&gt;FastAPI backend&lt;/li&gt;
&lt;li&gt;Ollama integration&lt;/li&gt;
&lt;li&gt;Git operations&lt;/li&gt;
&lt;li&gt;GitHub integration&lt;/li&gt;
&lt;li&gt;Docker Compose setup&lt;/li&gt;
&lt;li&gt;Local configuration&lt;/li&gt;
&lt;li&gt;API endpoints&lt;/li&gt;
&lt;li&gt;Deployment documentation&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The project is released under the &lt;strong&gt;MIT License&lt;/strong&gt;.&lt;/p&gt;

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

&lt;p&gt;DevLog is split into a frontend, backend, local AI layer, Git integration, and optional GitHub integration.&lt;/p&gt;

&lt;h3&gt;
  
  
  Technology Stack
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Frontend&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;React 19&lt;/li&gt;
&lt;li&gt;TypeScript&lt;/li&gt;
&lt;li&gt;Vite&lt;/li&gt;
&lt;li&gt;Tailwind CSS&lt;/li&gt;
&lt;li&gt;TanStack Query&lt;/li&gt;
&lt;li&gt;Zustand&lt;/li&gt;
&lt;li&gt;Three.js / React Three Fiber&lt;/li&gt;
&lt;li&gt;Framer Motion&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Backend&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Python 3.12+&lt;/li&gt;
&lt;li&gt;FastAPI&lt;/li&gt;
&lt;li&gt;Pydantic&lt;/li&gt;
&lt;li&gt;Uvicorn&lt;/li&gt;
&lt;li&gt;Ollama SDK&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;AI&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Ollama&lt;/li&gt;
&lt;li&gt;Open-weight local LLM&lt;/li&gt;
&lt;li&gt;Mistral as the current model&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Infrastructure&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Docker&lt;/li&gt;
&lt;li&gt;Docker Compose&lt;/li&gt;
&lt;li&gt;Nginx&lt;/li&gt;
&lt;li&gt;Kubernetes-ready deployment configuration&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Developer Tools&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Git&lt;/li&gt;
&lt;li&gt;GitHub REST API&lt;/li&gt;
&lt;li&gt;Conventional Commits&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  The AI Workflow
&lt;/h3&gt;

&lt;p&gt;The workflow starts with a normal Git operation:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git add src/features/new-feature.ts
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;DevLog then reads the staged diff locally.&lt;/p&gt;

&lt;p&gt;The backend passes the diff to the locally running Ollama model.&lt;/p&gt;

&lt;p&gt;The model generates a commit message or PR description.&lt;/p&gt;

&lt;p&gt;The developer reviews the output before anything is committed or published.&lt;/p&gt;

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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Git Diff
   │
   ▼
FastAPI
   │
   ▼
Ollama
   │
   ▼
Mistral
   │
   ▼
feat: add user authentication module
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The generated output is only a suggestion. The developer remains in control and can edit it before committing.&lt;/p&gt;

&lt;h3&gt;
  
  
  Commit Generation
&lt;/h3&gt;

&lt;p&gt;The developer can open the &lt;strong&gt;Commit&lt;/strong&gt; workflow and ask DevLog to generate a conventional commit message based on the staged changes.&lt;/p&gt;

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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;feat: add user authentication module
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  PR Generation
&lt;/h3&gt;

&lt;p&gt;The same staged changes can be used to generate a pull-request title and description.&lt;/p&gt;

&lt;p&gt;The developer can review the generated content and then choose whether to publish the branch and create the PR on GitHub.&lt;/p&gt;

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

&lt;p&gt;This is the central design decision behind DevLog.&lt;/p&gt;

&lt;p&gt;I could have built the same product around a closed AI API.&lt;/p&gt;

&lt;p&gt;That would have been straightforward.&lt;/p&gt;

&lt;p&gt;But doing so would mean sending source code and Git diffs to an external AI inference service.&lt;/p&gt;

&lt;p&gt;For developers working with private repositories, proprietary software, client code, or unreleased features, that can be an important privacy consideration.&lt;/p&gt;

&lt;p&gt;DevLog instead uses an &lt;strong&gt;open-weight model running locally through Ollama&lt;/strong&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  🔒 Privacy
&lt;/h3&gt;

&lt;p&gt;The staged Git diff used for AI generation stays on the developer's machine.&lt;/p&gt;

&lt;p&gt;The application does not need to send the source code to OpenAI, Anthropic, or another cloud LLM provider to generate the commit message or PR description.&lt;/p&gt;

&lt;p&gt;This reduces the amount of sensitive development data that needs to leave the developer's environment.&lt;/p&gt;

&lt;h3&gt;
  
  
  🌐 Offline AI
&lt;/h3&gt;

&lt;p&gt;Once Ollama and the selected model are installed, AI generation can work without an internet connection.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Internet OFF

Git Diff
   ↓
DevLog
   ↓
Ollama
   ↓
Local Model
   ↓
Generated Commit
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;GitHub operations are different: pushing code and creating pull requests naturally require network access.&lt;/p&gt;

&lt;h3&gt;
  
  
  💰 No Per-Request AI API Cost
&lt;/h3&gt;

&lt;p&gt;DevLog does not depend on a paid cloud LLM API for its AI generation.&lt;/p&gt;

&lt;p&gt;The model runs on the user's own hardware.&lt;/p&gt;

&lt;p&gt;That means there is no recurring per-request inference charge from an external AI provider.&lt;/p&gt;

&lt;p&gt;The trade-off is that the user provides the CPU/GPU, memory, storage, and electricity required for local inference.&lt;/p&gt;

&lt;h3&gt;
  
  
  🔧 Model Freedom
&lt;/h3&gt;

&lt;p&gt;The AI layer is not fundamentally tied to one proprietary provider.&lt;/p&gt;

&lt;p&gt;Ollama allows users to run different supported local models.&lt;/p&gt;

&lt;p&gt;This makes the AI layer replaceable:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;             DevLog
                │
                ▼
             Ollama
                │
       ┌────────┼────────┐
       ▼        ▼        ▼
    Mistral    Llama    Other
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The application can evolve as local models improve without requiring the entire product to be redesigned around a single cloud provider.&lt;/p&gt;

&lt;h3&gt;
  
  
  🧩 More Control
&lt;/h3&gt;

&lt;p&gt;Open-weight models give developers more control over where inference happens and which model powers their workflow.&lt;/p&gt;

&lt;p&gt;For DevLog, this matters because the AI is working directly with developer data.&lt;/p&gt;

&lt;p&gt;The model isn't simply a remote service hidden behind an API.&lt;/p&gt;

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

&lt;h2&gt;
  
  
  Building for a Friend
&lt;/h2&gt;

&lt;p&gt;I wanted DevLog to solve a real developer workflow problem rather than become another generic AI chatbot.&lt;/p&gt;

&lt;p&gt;I built it for &lt;strong&gt;Ritik Ahirwar&lt;/strong&gt;, who wanted AI assistance for Git workflows but had concerns about sending private code and diffs to external AI services.&lt;/p&gt;

&lt;p&gt;The problem is small, but it occurs repeatedly:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Write Code
   ↓
Make Changes
   ↓
Stage Changes
   ↓
Need Commit Message
   ↓
Need PR Description
   ↓
More Repetitive Work
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;DevLog turns that into:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Write Code
   ↓
Stage Changes
   ↓
DevLog
   ↓
Local AI Understands Diff
   ↓
Commit / PR Generated
   ↓
Review
   ↓
Publish
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The goal isn't to replace the developer.&lt;/p&gt;

&lt;p&gt;It's to remove repetitive Git-writing work while keeping the developer in control of the final result.&lt;/p&gt;

&lt;h3&gt;
  
  
  What I Wanted My Friend to Get
&lt;/h3&gt;

&lt;p&gt;The project was designed around three simple requirements:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;AI assistance&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Keep source code local&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Avoid unnecessary cloud AI costs&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;That combination is what led to the local-first architecture.&lt;/p&gt;

&lt;h3&gt;
  
  
  Friend Feedback
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;His feedback helped me understand which parts of the workflow were genuinely useful and which parts could be improved.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;For example, you could describe:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;What they tried&lt;/li&gt;
&lt;li&gt;What part they found useful&lt;/li&gt;
&lt;li&gt;What confused them&lt;/li&gt;
&lt;li&gt;What they wanted changed&lt;/li&gt;
&lt;li&gt;Whether they would actually use it in their workflow&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I prefer documenting the real reaction rather than inventing a polished success story.&lt;/p&gt;

&lt;h2&gt;
  
  
  Security &amp;amp; Privacy
&lt;/h2&gt;

&lt;p&gt;DevLog follows a local-first architecture for AI processing.&lt;/p&gt;

&lt;h3&gt;
  
  
  What Stays Local
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Git diffs used for AI generation&lt;/li&gt;
&lt;li&gt;Local repository information&lt;/li&gt;
&lt;li&gt;AI inference&lt;/li&gt;
&lt;li&gt;Ollama model&lt;/li&gt;
&lt;li&gt;Local DevLog configuration&lt;/li&gt;
&lt;li&gt;GitHub token storage&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  What Touches GitHub
&lt;/h3&gt;

&lt;p&gt;GitHub is only involved when the developer explicitly performs publishing operations such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Push a branch&lt;/li&gt;
&lt;li&gt;Create a pull request&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The AI generation step does not require sending the Git diff to a cloud LLM.&lt;/p&gt;

&lt;h3&gt;
  
  
  GitHub Token
&lt;/h3&gt;

&lt;p&gt;DevLog supports fine-grained GitHub personal access tokens.&lt;/p&gt;

&lt;p&gt;The token is stored locally and should be restricted to the repositories and permissions actually required.&lt;/p&gt;

&lt;p&gt;Developers should also avoid committing &lt;code&gt;.env&lt;/code&gt; files or local configuration containing credentials.&lt;/p&gt;

&lt;h3&gt;
  
  
  Important Security Boundary
&lt;/h3&gt;

&lt;p&gt;Running AI locally does not automatically make an application secure.&lt;/p&gt;

&lt;p&gt;DevLog therefore treats the local machine as the primary trust boundary and avoids sending the source code used for AI generation to a third-party LLM API.&lt;/p&gt;

&lt;p&gt;If Ollama itself is exposed over a network, that network configuration should also be secured appropriately.&lt;/p&gt;

&lt;h2&gt;
  
  
  Architecture
&lt;/h2&gt;

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

&lt;pre data-lang="mermaid"&gt;&lt;code&gt;flowchart TD
    A[Developer] --&amp;gt; B[DevLog React UI]

    B --&amp;gt; C[FastAPI Backend]

    C --&amp;gt; D[Local Git Repository]
    D --&amp;gt; E[Staged Git Diff]

    E --&amp;gt; C

    C --&amp;gt; F[Ollama]
    F --&amp;gt; G[Local Open-Weight LLM]

    G --&amp;gt; H[Generated Commit Message]
    G --&amp;gt; I[Generated PR Description]

    H --&amp;gt; B
    I --&amp;gt; B

    B --&amp;gt; J{Developer Review}

    J --&amp;gt;|Commit| K[Local Git Commit]

    J --&amp;gt;|Push / Create PR| L[GitHub API]

    K --&amp;gt; M[Local Repository]
    L --&amp;gt; N[GitHub Repository]

    G -. AI inference stays local .-&amp;gt; O[No Cloud LLM]&lt;/code&gt;&lt;/pre&gt;



&lt;h3&gt;
  
  
  Architecture Principles
&lt;/h3&gt;

&lt;h4&gt;
  
  
  Local-first AI
&lt;/h4&gt;

&lt;p&gt;The AI inference path is:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Git Diff
   ↓
FastAPI
   ↓
Ollama
   ↓
Local Model
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;There is no requirement for a cloud LLM API in this path.&lt;/p&gt;

&lt;h4&gt;
  
  
  Optional Cloud Interaction
&lt;/h4&gt;

&lt;p&gt;The external network boundary is primarily for GitHub publishing:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Local DevLog
     │
     ├── Local AI → No cloud LLM
     │
     └── GitHub API → Only when publishing
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  No Vendor Lock-in
&lt;/h4&gt;

&lt;p&gt;The application communicates with the local Ollama runtime rather than depending on a proprietary AI API as its core inference layer.&lt;/p&gt;

&lt;h4&gt;
  
  
  Self-hostable
&lt;/h4&gt;

&lt;p&gt;DevLog can be run directly on a development machine or through Docker Compose.&lt;/p&gt;

&lt;p&gt;The repository also contains Kubernetes deployment guidance for users who want to experiment with containerized deployments.&lt;/p&gt;

&lt;h2&gt;
  
  
  Offline Workflow
&lt;/h2&gt;

&lt;p&gt;One of the things I specifically wanted to demonstrate was that AI-powered developer tooling doesn't necessarily have to mean cloud-dependent developer tooling.&lt;/p&gt;

&lt;p&gt;After installing Ollama and downloading the model:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Internet
   OFF
    │
    ▼
┌───────────────────────┐
│      DevLog           │
│                       │
│  Git → FastAPI        │
│          ↓            │
│       Ollama          │
│          ↓            │
│      Local LLM        │
└───────────────────────┘
    │
    ▼
Commit / PR content
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The AI generation portion can continue to work locally.&lt;/p&gt;

&lt;p&gt;The developer can review and commit locally.&lt;/p&gt;

&lt;p&gt;Only actions involving GitHub require network connectivity.&lt;/p&gt;

&lt;h2&gt;
  
  
  Developer Experience
&lt;/h2&gt;

&lt;p&gt;I wanted the workflow to feel like a developer tool rather than a separate AI chatbot.&lt;/p&gt;

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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;1. Modify code
       ↓
2. git add
       ↓
3. Open DevLog
       ↓
4. Inspect diff
       ↓
5. Generate commit
       ↓
6. Review / edit
       ↓
7. Commit
       ↓
8. Generate PR
       ↓
9. Push &amp;amp; create PR
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This keeps the AI close to the existing Git workflow.&lt;/p&gt;

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

&lt;p&gt;The most interesting part of building DevLog was realizing that &lt;strong&gt;local AI changes more than just where the model runs&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;With a cloud AI API, the architecture naturally becomes:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Application
     ↓
Cloud API
     ↓
AI Provider
     ↓
Response
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;With local AI, the architecture becomes:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Application
     ↓
User's Machine
     ↓
Local Model
     ↓
Response
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That changes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Privacy boundaries&lt;/li&gt;
&lt;li&gt;Deployment&lt;/li&gt;
&lt;li&gt;Cost structure&lt;/li&gt;
&lt;li&gt;Offline capabilities&lt;/li&gt;
&lt;li&gt;Model selection&lt;/li&gt;
&lt;li&gt;Data ownership&lt;/li&gt;
&lt;li&gt;Infrastructure requirements&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It also made me think more carefully about the difference between:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;"AI-powered"&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

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

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;"AI that is actually part of the user's environment."&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

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

&lt;p&gt;There are several areas I want to explore:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Better model switching from the UI&lt;/li&gt;
&lt;li&gt;Support for more Ollama models&lt;/li&gt;
&lt;li&gt;Prompt customization&lt;/li&gt;
&lt;li&gt;Commit history analysis&lt;/li&gt;
&lt;li&gt;Markdown development-log export&lt;/li&gt;
&lt;li&gt;Multiple repository support&lt;/li&gt;
&lt;li&gt;Better automated test coverage&lt;/li&gt;
&lt;li&gt;More efficient inference for lower-end machines&lt;/li&gt;
&lt;li&gt;More granular privacy controls&lt;/li&gt;
&lt;li&gt;Better handling of very large Git diffs&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The long-term idea is to turn DevLog into a &lt;strong&gt;local AI layer for everyday Git workflows&lt;/strong&gt;.&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;Optional&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;If you use DevRelay for this project, you can embed the session here so the judges can see the development process.&lt;/p&gt;

&lt;p&gt;I used DevRelay to document the development process behind DevLog, including the implementation, debugging, and iteration of the local AI workflow.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Open Source / Open Innovation&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Hacktoberfest Weekend Challenge: Build for a Friend&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Final Thoughts
&lt;/h2&gt;

&lt;p&gt;DevLog started from a small developer workflow problem.&lt;/p&gt;

&lt;p&gt;Writing commit messages and PR descriptions is repetitive.&lt;/p&gt;

&lt;p&gt;The obvious answer was to connect the application to a cloud AI API.&lt;/p&gt;

&lt;p&gt;Instead, I asked a different question:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Why send the code anywhere at all?&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Using an open-weight model locally through Ollama made it possible to keep the AI workflow close to the developer's machine.&lt;/p&gt;

&lt;p&gt;That gives DevLog a different set of priorities:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Your code.&lt;br&gt;
Your machine.&lt;br&gt;
Your model.&lt;br&gt;
Your decision about what gets published.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;For this project, that's why open innovation mattered.&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>weekendchallenge</category>
      <category>hf26challenge</category>
      <category>opensource</category>
    </item>
    <item>
      <title>i m here....</title>
      <dc:creator>Harsh Vardhan Pandey</dc:creator>
      <pubDate>Sun, 04 Oct 2026 07:46:33 +0000</pubDate>
      <link>https://dev.to/harsh_vardhanpandey_08fc/i-m-here-3ck5</link>
      <guid>https://dev.to/harsh_vardhanpandey_08fc/i-m-here-3ck5</guid>
      <description></description>
    </item>
  </channel>
</rss>
