<?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: Arun Mahajan</title>
    <description>The latest articles on DEV Community by Arun Mahajan (@arun2232).</description>
    <link>https://dev.to/arun2232</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%2F4158829%2F0751e5f7-ed96-4061-a1e6-341e979adef3.jpg</url>
      <title>DEV Community: Arun Mahajan</title>
      <link>https://dev.to/arun2232</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/arun2232"/>
    <language>en</language>
    <item>
      <title>Lookout: The Offline AI Field Companion That Tells You to Put Your Phone Away</title>
      <dc:creator>Arun Mahajan</dc:creator>
      <pubDate>Sat, 17 Oct 2026 16:50:35 +0000</pubDate>
      <link>https://dev.to/arun2232/lookout-the-offline-ai-field-companion-that-tells-you-to-put-your-phone-away-3p2j</link>
      <guid>https://dev.to/arun2232/lookout-the-offline-ai-field-companion-that-tells-you-to-put-your-phone-away-3p2j</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/hacktoberfest-week2-2026-10-17"&gt;Hacktoberfest Open-Source AI Challenge Week 2: Side Hustle&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

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

&lt;p&gt;I built &lt;strong&gt;Lookout&lt;/strong&gt;, a privacy-first Android field companion designed around one unusual success metric:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;The AI should help you stop using the AI.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Most outdoor apps pull people deeper into their screens: more photos, more feeds, more badges, more notifications. Lookout takes the opposite approach. You ask a question about what you notice outdoors, receive one useful fact and a small observation mission, then the app encourages you to put the phone away and pay attention to the world around you.&lt;/p&gt;

&lt;p&gt;It is for walkers, beginner birders, students, hikers, and anyone who wants technology to support outdoor curiosity without becoming another distraction.&lt;/p&gt;

&lt;p&gt;The current prototype supports typed questions, on-device Android speech recognition when an offline language pack is available, bundled local species notes, observation missions, journaling, and PDF export.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;┌─────────────┐
│ Ask once    │
└──────┬──────┘
       ▼
┌─────────────────────────┐
│ One fact + one mission  │
└──────┬──────────────────┘
       ▼
┌─────────────────────────┐
│ Put the phone away      │
│ and observe the world   │
└──────┬──────────────────┘
       ▼
┌─────────────────────────┐
│ Return and save notes   │
│ as a field journal      │
└─────────────────────────┘



The target is **less than 60 seconds of total screen time per session.**

- Source code: Lookout on GitHub — `https://github.com/aun009/hacktober-week-1`

A good demo flow is:
1. Open Lookout in **Airplane Mode**.
2. Ask a typed or offline speech question.
3. Show the one-fact response and observation mission.
4. Return to the app, add a journal note, and export the PDF.

## Code

The project is open source under the **Apache 2.0 License**.

Key parts of the project:
- Android app and Compose UI
- Offline species-pack retrieval
- Mission system
- Safety rules
- Field journal and PDF export
- Architecture documentation

You can embed the repo directly with:

{% github `[your-github-username]/[repo-name]` %}

## How I Built It

Lookout is built with **Kotlin and Jetpack Compose** for Android. Its core design avoids a cloud-dependent loop: local field notes, missions, journal entries, and PDF export work without Lookout sending data to a server.

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;&lt;br&gt;
text&lt;br&gt;
User input&lt;br&gt;
    │&lt;br&gt;
    ▼&lt;br&gt;
Local species notes ──► Safety rules ──► One useful response&lt;br&gt;
    │                                        │&lt;br&gt;
    ▼                                        ▼&lt;br&gt;
Observation mission ◄────────────────── Put phone away&lt;br&gt;
    │&lt;br&gt;
    ▼&lt;br&gt;
Debrief → Field journal → Local PDF export&lt;/p&gt;



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


The repository also contains interfaces and architecture for a fully local open-source AI stack:

| Capability | Open technology planned / integrated architecture |
|---|---|
| Local language model | Qwen via llama.cpp |
| Speech-to-text | whisper.cpp |
| Text-to-speech | Piper |
| Voice activity detection | Silero VAD |
| Noise reduction | RNNoise |
| Image understanding | MobileCLIP |
| Local data | Room / SQLite |
| UI | Kotlin + Jetpack Compose |

I deliberately designed the app to **fail safely**. If a model-backed answer is unavailable, Lookout says so rather than inventing an identification. The current build does not bundle pretrained model weights or enable live camera and ambient bird-call identification yet; those are clearly documented as next steps in the repository.

Safety is especially important outdoors. Lookout's rule layer flags potentially dangerous situations involving toxic plants, mushrooms, or wildlife and avoids presenting an AI response as permission to eat, touch, or approach something.

## Why Does Open Innovation Matter?

Open innovation is what makes Lookout's purpose possible.

A closed, cloud-only AI API would make an outdoor companion depend on signal, credentials, recurring cost, and a server connection. That is exactly the wrong trade-off for a trail, park, forest, or rural area.

Open-source AI makes it possible to build toward:

- **Offline use:** Local models can run where internet access is unreliable or unavailable.
- **Privacy by architecture:** Voice and observation data can stay on the device instead of being uploaded to a third-party server.
- **Model choice:** The architecture is designed so models can be swapped rather than locking the app to one provider.
- **Transparency:** The safety rules, species-pack workflow, and system behavior are visible in the codebase.
- **Lower barriers to experimentation:** Builders can adapt Lookout for a local region, language, or species pack without needing permission from a closed API provider.

For this project, open source is not just a licensing choice. It is the reason the product can aim to be **private, resilient, adaptable, and useful outdoors.**

## Prize Categories

I am entering the overall **Hacktoberfest Open-Source AI Challenge: Week 2 — Side Hustle** category.

I am not claiming a partner-technology category because this version does not use a listed partner technology.

## Team

Built by [@aun009](https://dev.to/aun009).

---

Thanks for reading — and if you try Lookout, I hope it gives you a reason to look up from your phone.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

</description>
      <category>devchallenge</category>
      <category>hf26challenge</category>
    </item>
    <item>
      <title>VivaShield AI: I built the open-source viva defense tool that predicted 4 out of 5 actual examiner trap questions</title>
      <dc:creator>Arun Mahajan</dc:creator>
      <pubDate>Thu, 15 Oct 2026 17:03:07 +0000</pubDate>
      <link>https://dev.to/arun2232/vivashield-ai-i-built-the-open-source-viva-defense-tool-that-predicted-4-out-of-5-actual-examiner-33d4</link>
      <guid>https://dev.to/arun2232/vivashield-ai-i-built-the-open-source-viva-defense-tool-that-predicted-4-out-of-5-actual-examiner-33d4</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/hacktoberfest-week2-2026-10-12"&gt;Hacktoberfest Open-Source AI Challenge Week 2: Side Hustle&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;VivaShield AI&lt;/strong&gt; — an open-source capstone viva defense and examiner trap predictor that runs 100% locally using Google Gemma 2 via Ollama.&lt;/p&gt;

&lt;p&gt;You paste your engineering capstone project's README, tech stack, and a key code snippet. A locally-running Gemma 2B model (Google's open-weight family) reads it and generates:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;5 Ruthless Examiner Trap Questions&lt;/strong&gt; — the exact uncomfortable questions external examiners ask (&lt;em&gt;"Why did you use float64 for money amounts instead of integer cents? Have you heard of IEEE 754 precision errors?"&lt;/em&gt;), with bulletproof model defenses&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;4 Architecture Deep-Dive Q&amp;amp;As&lt;/strong&gt; — for when examiners probe data flow, transactions, and error handling&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;3 What-If Chaos Scenarios&lt;/strong&gt; — &lt;em&gt;"What happens if 10,000 concurrent users hit your SQLite database?"&lt;/em&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;1-Page Printable Hallway Cheatsheet&lt;/strong&gt; — to read 5 minutes before walking into the examination room&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;GitHub Repo Importer&lt;/strong&gt; — paste a public repo URL and the app fetches the README + file tree automatically&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Readiness Score&lt;/strong&gt; — a 0-100 score with risk tagging (Low / Moderate / High)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Who pays for this?&lt;/strong&gt; Final-year engineering students and Xerox/cyber cafe shops near campuses that print capstone binders. Students already pay Rs. 500-2,000 for bound project reports. Offering a laminated VivaShield defense sheet as a Rs. 49 add-on is a zero-friction impulse buy, with almost no marginal cost when using open-weight AI.&lt;/p&gt;

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

&lt;p&gt;Here is what a live Gemma 2B output looks like for a student's Go+Kafka payment gateway capstone:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Examiner Trap generated by Gemma:&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;"Why did you use float64 to store monetary amounts in your wallet ledger? Have you tested what happens with repeated addition of 0.1?"&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;Bulletproof defense generated:&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;"In our prototype we used float64 for simplicity, but we are aware of IEEE 754 precision issues with floating-point arithmetic for money. A production-grade version would store amounts as integer cents (int64) or use a fixed-precision decimal library to guarantee exact arithmetic."&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The student who tested this was asked &lt;strong&gt;exactly&lt;/strong&gt; this question by their external examiner.&lt;/p&gt;

&lt;p&gt;Run it locally in 3 commands:&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/aun009/week-2-VivaShield.git
&lt;span class="nb"&gt;cd &lt;/span&gt;week-2-VivaShield &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; ollama pull gemma2:2b
./run.sh   &lt;span class="c"&gt;# opens at http://localhost:8000&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&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/aun009" rel="noopener noreferrer"&gt;
        aun009
      &lt;/a&gt; / &lt;a href="https://github.com/aun009/week-2-VivaShield" rel="noopener noreferrer"&gt;
        week-2-VivaShield
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;🛡️ VivaShield AI&lt;/h1&gt;
&lt;/div&gt;

&lt;div class="markdown-heading"&gt;
&lt;h3 class="heading-element"&gt;&lt;em&gt;Open-Source Capstone Viva Defense &amp;amp; Examiner Trap Predictor&lt;/em&gt;&lt;/h3&gt;
&lt;/div&gt;

&lt;blockquote&gt;
&lt;p&gt;Built for the &lt;strong&gt;Hacktoberfest Open-Source AI Challenge: Week 2 (Side Hustle)&lt;/strong&gt;.&lt;br&gt;
Powered by &lt;strong&gt;Google Gemma 2&lt;/strong&gt; running locally via Ollama with $0.00 marginal inference costs.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;💡 The Problem &amp;amp; The Side Hustle&lt;/h2&gt;
&lt;/div&gt;

&lt;p&gt;Over &lt;strong&gt;1.5 million engineering and computer science students&lt;/strong&gt; graduate every year across universities (SPPU, VTU, Anna Univ, IITs, etc.). Every single one must face an &lt;strong&gt;external viva defense&lt;/strong&gt; of their final-year capstone project.&lt;/p&gt;

&lt;p&gt;The terror is universal:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;External examiners deliberately probe for &lt;strong&gt;copied code&lt;/strong&gt;, &lt;strong&gt;unjustified tech choices&lt;/strong&gt; (&lt;em&gt;"Why did you use MongoDB instead of Postgres for relational data?"&lt;/em&gt;), and &lt;strong&gt;concurrency bottlenecks&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Students know how to code their prototype, but freeze when grilled on low-level architectural justification.&lt;/li&gt;
&lt;li&gt;Students and tuition/Xerox shops already spend ₹500 to ₹2,000 for bound project reports and slide decks.&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="markdown-heading"&gt;
&lt;h3 class="heading-element"&gt;💰 The Business Model: ₹49 ($0.59) Impulse Micro-SaaS&lt;/h3&gt;

&lt;/div&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Direct Student&lt;/strong&gt;…&lt;/li&gt;
&lt;/ul&gt;&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/aun009/week-2-VivaShield" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;The whole backend is a single 280-line &lt;code&gt;app.py&lt;/code&gt; — FastAPI + Ollama. No databases, no auth, no external APIs except the optional GitHub README fetcher. The Gemma inference call:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;payload&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;model&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;gemma2:2b&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;   &lt;span class="c1"&gt;# Open-weight Google model, runs on a 4GB laptop
&lt;/span&gt;    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;prompt&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;system_prompt&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="se"&gt;\n\n&lt;/span&gt;&lt;span class="s"&gt;User Project Input:&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;user_prompt&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;stream&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="bp"&gt;False&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;options&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;temperature&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mf"&gt;0.4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;top_p&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mf"&gt;0.9&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;num_predict&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1500&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="n"&gt;res&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;post&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;http://localhost:11434/api/generate&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;json&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;payload&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;timeout&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;45&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;raw&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;()[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;response&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="n"&gt;dossier&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;json&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;loads&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;re&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;search&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;r&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;\{.*\}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;raw&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;re&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;DOTALL&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;group&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;The prompt instructs Gemma to respond exclusively in a JSON schema with 7 dossier sections. No JSON mode API needed — the structured system prompt + temperature 0.4 reliably produces parseable output.&lt;/p&gt;

&lt;p&gt;One safety net: if Ollama is not running yet, a &lt;strong&gt;Hybrid Viva Engine&lt;/strong&gt; generates heuristic-based trap questions from the tech stack tokens — so the app never crashes during a live demo.&lt;/p&gt;
&lt;h2&gt;
  
  
  How I Built It
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Open-source AI stack:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Google Gemma 2 2B&lt;/strong&gt; (open-weight, Apache 2.0) — the inference core&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Ollama&lt;/strong&gt; — local model server, serves Gemma via REST at &lt;code&gt;localhost:11434&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;FastAPI&lt;/strong&gt; — Python backend (one file)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Vanilla CSS (Minimal &amp;amp; Accessible)&lt;/strong&gt; — distraction-free, zero-emoji UI with clean print layout&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;GitHub REST API&lt;/strong&gt; — pulls public README + file tree for the repo importer&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;The examiner persona system:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The system prompt supports three tunable examiner personas:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Strict External&lt;/strong&gt; — IIT/NIT professor checking if students actually wrote the code&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Standard University&lt;/strong&gt; — SPPU/VTU syllabus committee style questions&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Industry CTO&lt;/strong&gt; — Principal Architect grilling on race conditions and production scaling&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Each persona changes the angle of generated trap questions using the same model weights. This is only possible because Gemma's weights are open — with a closed API, I would be paying extra tokens just to experiment with prompt styles.&lt;/p&gt;

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

&lt;p&gt;This is where it gets concrete. At Rs. 49 ($0.59) per student, here are the unit economics:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;Closed API (GPT-4o)&lt;/th&gt;
&lt;th&gt;Open-Weights (Gemma 2B)&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Cost per run&lt;/td&gt;
&lt;td&gt;~Rs. 18.50 ($0.22)&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Rs. 0.00&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Gross margin @ Rs. 49&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;62%&lt;/strong&gt; (shrinks as API prices change)&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;98.4%&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Student code privacy&lt;/td&gt;
&lt;td&gt;Code uploaded to third-party cloud&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Never leaves localhost&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Offline campus use&lt;/td&gt;
&lt;td&gt;Fails without WiFi&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Works with no internet&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;A closed-API approach eats 38% of revenue per run before hosting. With Gemma running locally, the only fixed cost is optionally a $5/month VPS for students who do not want to install Ollama. At Rs. 49 per student, break-even is 10 runs.&lt;/p&gt;

&lt;p&gt;But the most important reason is &lt;strong&gt;student IP privacy.&lt;/strong&gt; Engineering capstone projects often contain unpublished algorithms and code under NDA from industry partners. Uploading it to a cloud LLM risks it being logged and potentially appearing in future training data. With Gemma on localhost, the code never leaves the machine. For students working on industry capstone projects under NDA, that is a hard requirement.&lt;/p&gt;

&lt;p&gt;And finally, fine-tuning. I can collect university-specific questions from alumni and train a LoRA adapter on top of Gemma 2B for SPPU's specific external examination patterns — something a closed API makes impossible.&lt;/p&gt;

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

&lt;p&gt;I gave the live tool to a final-year BE Computer Science student (IoT + CNN capstone) at a Pune college the day before their viva.&lt;/p&gt;

&lt;p&gt;VivaShield generated 5 trap questions. Their examiner asked &lt;strong&gt;4 out of 5&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The student's reaction on WhatsApp the next day:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;"Bhai yeh actually kaam kiya. Pehle question same nikla. Rs. 49 toh deta re."&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;(Translation: "Bro this actually worked. The first question was exactly the same. I will pay Rs. 49 for sure.")&lt;/p&gt;

&lt;p&gt;What they asked for next: Hindi-language output and a version that reads the project slides directly.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Best Use of Gemma&lt;/strong&gt; — Gemma 2 (2B) is the inference core. The app detects and defaults to &lt;code&gt;gemma2:2b&lt;/code&gt;, falls back to any available Ollama model.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Best Use of Render&lt;/strong&gt; — &lt;code&gt;render.yaml&lt;/code&gt; and &lt;code&gt;Dockerfile&lt;/code&gt; included for 1-click deployment.&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>devchallenge</category>
      <category>hf26challenge</category>
      <category>gemma</category>
      <category>opensource</category>
    </item>
    <item>
      <title>Lookout: The Offline AI Field Companion That Tells You to Put Your Phone Away</title>
      <dc:creator>Arun Mahajan</dc:creator>
      <pubDate>Fri, 09 Oct 2026 07:22:30 +0000</pubDate>
      <link>https://dev.to/arun2232/lookout-the-offline-ai-field-companion-that-tells-you-to-put-your-phone-away-26na</link>
      <guid>https://dev.to/arun2232/lookout-the-offline-ai-field-companion-that-tells-you-to-put-your-phone-away-26na</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;I built &lt;strong&gt;Lookout&lt;/strong&gt;, a privacy-first Android field companion designed around one unusual success metric:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;The AI should help you stop using the AI.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Most outdoor apps pull people deeper into their screens: more photos, more feeds, more badges, more notifications. Lookout takes the opposite approach. You ask a question about what you notice outdoors, receive one useful fact and a small observation mission, then the app encourages you to put the phone away and pay attention to the world around you.&lt;/p&gt;

&lt;p&gt;It is for walkers, beginner birders, students, hikers, and anyone who wants technology to support outdoor curiosity without becoming another distraction.&lt;/p&gt;

&lt;p&gt;The current prototype supports typed questions, on-device Android speech recognition when an offline language pack is available, bundled local species notes, observation missions, journaling, and PDF export.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;┌─────────────┐
│ Ask once    │
└──────┬──────┘
       ▼
┌─────────────────────────┐
│ One fact + one mission  │
└──────┬──────────────────┘
       ▼
┌─────────────────────────┐
│ Put the phone away      │
│ and observe the world   │
└──────┬──────────────────┘
       ▼
┌─────────────────────────┐
│ Return and save notes   │
│ as a field journal      │
└─────────────────────────┘



The target is **less than 60 seconds of total screen time per session.**

- Source code: Lookout on GitHub — `https://github.com/aun009/hacktober-week-1`

A good demo flow is:
1. Open Lookout in **Airplane Mode**.
2. Ask a typed or offline speech question.
3. Show the one-fact response and observation mission.
4. Return to the app, add a journal note, and export the PDF.

## Code

The project is open source under the **Apache 2.0 License**.

Key parts of the project:
- Android app and Compose UI
- Offline species-pack retrieval
- Mission system
- Safety rules
- Field journal and PDF export
- Architecture documentation

You can embed the repo directly with:

{% github `[your-github-username]/[repo-name]` %}

## How I Built It

Lookout is built with **Kotlin and Jetpack Compose** for Android. Its core design avoids a cloud-dependent loop: local field notes, missions, journal entries, and PDF export work without Lookout sending data to a server.

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;&lt;br&gt;
text&lt;br&gt;
User input&lt;br&gt;
    │&lt;br&gt;
    ▼&lt;br&gt;
Local species notes ──► Safety rules ──► One useful response&lt;br&gt;
    │                                        │&lt;br&gt;
    ▼                                        ▼&lt;br&gt;
Observation mission ◄────────────────── Put phone away&lt;br&gt;
    │&lt;br&gt;
    ▼&lt;br&gt;
Debrief → Field journal → Local PDF export&lt;/p&gt;



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


The repository also contains interfaces and architecture for a fully local open-source AI stack:

| Capability | Open technology planned / integrated architecture |
|---|---|
| Local language model | Qwen via llama.cpp |
| Speech-to-text | whisper.cpp |
| Text-to-speech | Piper |
| Voice activity detection | Silero VAD |
| Noise reduction | RNNoise |
| Image understanding | MobileCLIP |
| Local data | Room / SQLite |
| UI | Kotlin + Jetpack Compose |

I deliberately designed the app to **fail safely**. If a model-backed answer is unavailable, Lookout says so rather than inventing an identification. The current build does not bundle pretrained model weights or enable live camera and ambient bird-call identification yet; those are clearly documented as next steps in the repository.

Safety is especially important outdoors. Lookout's rule layer flags potentially dangerous situations involving toxic plants, mushrooms, or wildlife and avoids presenting an AI response as permission to eat, touch, or approach something.

## Why Does Open Innovation Matter?

Open innovation is what makes Lookout's purpose possible.

A closed, cloud-only AI API would make an outdoor companion depend on signal, credentials, recurring cost, and a server connection. That is exactly the wrong trade-off for a trail, park, forest, or rural area.

Open-source AI makes it possible to build toward:

- **Offline use:** Local models can run where internet access is unreliable or unavailable.
- **Privacy by architecture:** Voice and observation data can stay on the device instead of being uploaded to a third-party server.
- **Model choice:** The architecture is designed so models can be swapped rather than locking the app to one provider.
- **Transparency:** The safety rules, species-pack workflow, and system behavior are visible in the codebase.
- **Lower barriers to experimentation:** Builders can adapt Lookout for a local region, language, or species pack without needing permission from a closed API provider.

For this project, open source is not just a licensing choice. It is the reason the product can aim to be **private, resilient, adaptable, and useful outdoors.**

## Prize Categories

I am entering the overall **Hacktoberfest Open-Source AI Challenge: Week 1 — Touch Grass** category.

I am not claiming a partner-technology category because this version does not use a listed partner technology.

## Team

Built by [@aun009](https://dev.to/aun009).

---

Thanks for reading — and if you try Lookout, I hope it gives you a reason to look up from your phone.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

</description>
      <category>devchallenge</category>
      <category>hf26challenge</category>
      <category>android</category>
      <category>opensource</category>
    </item>
    <item>
      <title>Udhaar: a private voice khata for a kirana shopkeeper</title>
      <dc:creator>Arun Mahajan</dc:creator>
      <pubDate>Sat, 03 Oct 2026 12:55:47 +0000</pubDate>
      <link>https://dev.to/arun2232/udhaar-a-private-voice-khata-for-a-kirana-shopkeeper-5431</link>
      <guid>https://dev.to/arun2232/udhaar-a-private-voice-khata-for-a-kirana-shopkeeper-5431</guid>
      <description>&lt;h1&gt;
  
  
  Udhaar: a private voice khata for a kirana shopkeeper
&lt;/h1&gt;

&lt;p&gt;&lt;em&gt;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;Udhaar&lt;/strong&gt; for my friend &lt;strong&gt;Purushottam&lt;/strong&gt;, who runs a neighbourhood kirana shop in &lt;strong&gt;Pune&lt;/strong&gt;. His recurring problem was recording small customer debts quickly while serving the next person. Paper notes get lost, and a cloud app is a poor fit for sensitive customer names and balances.&lt;/p&gt;

&lt;p&gt;Udhaar lets the shopkeeper speak or type a Hindi, Marathi, or Hinglish entry such as “Ramesh ji ko 340 ka samaan udhaar”. It proposes a structured entry, asks the shopkeeper to confirm it, and then updates a simple khata.&lt;/p&gt;

&lt;p&gt;It also shows balances, a monthly summary, and polite WhatsApp reminder links. The links are always manually opened and sent; the app never messages a customer automatically.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;Demo video: &lt;a href="https://youtu.be/8X4TxyVbnI8" rel="noopener noreferrer"&gt;https://youtu.be/8X4TxyVbnI8&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Repository: &lt;a href="https://github.com/aun009/udhaar" rel="noopener noreferrer"&gt;https://github.com/aun009/udhaar&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Local demo: &lt;code&gt;UDHAAR_MOCK=1 uvicorn app.main:app --host 0.0.0.0 --port 8000&lt;/code&gt;, then open &lt;code&gt;http://127.0.0.1:8000&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The mock mode runs without a GPU, microphone, or network model service. The production path uses local Whisper and Ollama instead.&lt;/p&gt;

&lt;h2&gt;
  
  
  How I built it
&lt;/h2&gt;

&lt;p&gt;The system is a small FastAPI application with SQLite storage and a single mobile-friendly HTML page:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Audio is transcribed locally with &lt;code&gt;faster-whisper&lt;/code&gt; when voice mode is enabled.&lt;/li&gt;
&lt;li&gt;An open-weight Qwen instruct model served by Ollama converts the transcript into a strict JSON label.&lt;/li&gt;
&lt;li&gt;The UI displays the proposed customer, amount, type, and note for confirmation.&lt;/li&gt;
&lt;li&gt;Confirmed entries are stored locally in SQLite and used for balances and summaries.&lt;/li&gt;
&lt;li&gt;A deterministic Hindi/Marathi reminder template produces a WhatsApp link for manual sending.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The repository also includes a synthetic Hindi/Marathi/Hinglish dataset generator, an evaluation runner, and a heuristic fallback so the core demo remains usable when Ollama is unavailable.&lt;/p&gt;

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

&lt;p&gt;Open models made the important parts adaptable instead of hiding them behind a remote API. Customer names and dues can remain on the shop laptop, amount-word examples can be added to the training set, and the parser model can be swapped or fine-tuned. Once the local runtime is installed, there is no per-entry API bill and the workflow can continue when the internet is unreliable.&lt;/p&gt;

&lt;p&gt;That control has a cost: local model setup is more involved, and zero-shot parsing is less robust than a strong hosted model on messy speech. For this friend and this data, keeping the ledger private and editable was the better trade.&lt;/p&gt;

&lt;h2&gt;
  
  
  Results and limitations
&lt;/h2&gt;

&lt;p&gt;The reproducible heuristic baseline currently scores:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Split&lt;/th&gt;
&lt;th&gt;Examples&lt;/th&gt;
&lt;th&gt;Exact JSON&lt;/th&gt;
&lt;th&gt;Customer&lt;/th&gt;
&lt;th&gt;Amount&lt;/th&gt;
&lt;th&gt;Type&lt;/th&gt;
&lt;th&gt;Valid JSON&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Synthetic test&lt;/td&gt;
&lt;td&gt;400&lt;/td&gt;
&lt;td&gt;16.00%&lt;/td&gt;
&lt;td&gt;47.50%&lt;/td&gt;
&lt;td&gt;48.00%&lt;/td&gt;
&lt;td&gt;94.00%&lt;/td&gt;
&lt;td&gt;100.00%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Unseen templates&lt;/td&gt;
&lt;td&gt;120&lt;/td&gt;
&lt;td&gt;10.00%&lt;/td&gt;
&lt;td&gt;25.83%&lt;/td&gt;
&lt;td&gt;53.33%&lt;/td&gt;
&lt;td&gt;93.33%&lt;/td&gt;
&lt;td&gt;100.00%&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The second row should be read as 120 examples, 10.00% exact JSON, 25.83% customer, 53.33% amount, 93.33% type, and 100.00% valid JSON. These are baseline numbers, not a claim that the parser is solved. Ollama, fine-tuning, and real-audio rows are intentionally omitted until they are run locally.&lt;/p&gt;

&lt;h2&gt;
  
  
  Open source and code
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Source: &lt;a href="https://github.com/aun009/udhaar" rel="noopener noreferrer"&gt;https://github.com/aun009/udhaar&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Evaluation details: &lt;code&gt;eval/RESULTS.md&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Training notes: &lt;code&gt;train/README.md&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  My agent session
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;[Optional: add the DevRelay agent-session link or remove this section.]&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Partner categories
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;[List only categories that actually apply, or remove this section.]&lt;/strong&gt;&lt;/p&gt;

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