<?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: Ankit Sharma</title>
    <description>The latest articles on DEV Community by Ankit Sharma (@ankit_sharma_f0b6003cb4b1).</description>
    <link>https://dev.to/ankit_sharma_f0b6003cb4b1</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%2F4154500%2Fc6e178d8-217e-40c3-86e5-7f2d1ed3279f.png</url>
      <title>DEV Community: Ankit Sharma</title>
      <link>https://dev.to/ankit_sharma_f0b6003cb4b1</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/ankit_sharma_f0b6003cb4b1"/>
    <language>en</language>
    <item>
      <title>HauntedTerminal 👻: Give Your CLI a Ghostly Voice with Local Open-Weight AI</title>
      <dc:creator>Ankit Sharma</dc:creator>
      <pubDate>Tue, 27 Oct 2026 15:18:55 +0000</pubDate>
      <link>https://dev.to/ankit_sharma_f0b6003cb4b1/hauntedterminal-give-your-cli-a-ghostly-voice-with-local-open-weight-ai-379d</link>
      <guid>https://dev.to/ankit_sharma_f0b6003cb4b1/hauntedterminal-give-your-cli-a-ghostly-voice-with-local-open-weight-ai-379d</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/hacktoberfest-week4-2026-10-26"&gt;Hacktoberfest Open-Source AI Challenge Week 4: Ghost in the Machine&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

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

&lt;p&gt;As developers, we spend hours every day staring into a dark, silent void: the command-line interface. We type incantations (git rebase -i, chmod 777, kill -9), hit Enter, and wait for the machine to obey.&lt;/p&gt;

&lt;p&gt;For the Ghost in the Machine theme, I wanted to take the phrase literally—while honoring the Día de los Muertos spirit of breathing playful life and memory into the departed (in this case, our dead processes, orphaned containers, and overwritten git commits).&lt;/p&gt;

&lt;p&gt;I built HauntedTerminal, a lightweight, completely offline CLI companion powered by a local open-weight LLM via Ollama and Python. Once summoned into your shell (zsh or bash), HauntedTerminal quietly observes the commands you run and their exit codes, periodically manifesting in your terminal to whisper eerie, witty, and dramatically gothic commentary about your workflow.&lt;/p&gt;

&lt;p&gt;Force-pushing to main? The ghost mourns the timelines you just erased.&lt;/p&gt;

&lt;p&gt;Running rm -rf node_modules? It rejoices as a million tiny souls are freed from disk purgatory.&lt;/p&gt;

&lt;p&gt;Triggering a non-zero exit code? It Rattles its chains and mocks your syntax errors.&lt;/p&gt;

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

&lt;p&gt;dev@crypt:~/project$ git push --force origin main&lt;br&gt;
Enumerating objects: 5, done.&lt;br&gt;
To github.com:dev/project.git&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;a1b2c3d...f4e5d6c main -&amp;gt; main (forced update)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;╭─ 👻 The Ghost in /dev/pts/0 whispers... ────────────────────────────────────╮&lt;br&gt;
│ "So cold... With a single '--force', you rewrite history and cast your      │&lt;br&gt;
│  fellow contributors' commits into the shadow realm. Have you no remorse?"  │&lt;br&gt;
╰─────────────────────────────────────────────────────────────────────────────╯&lt;/p&gt;

&lt;p&gt;dev@crypt:~/project$ rm -rf node_modules/&lt;/p&gt;

&lt;p&gt;╭─ 👻 The Ghost in /dev/pts/0 whispers... ────────────────────────────────────╮&lt;br&gt;
│ "I hear the silent screams of 84,392 nested dependencies vanishing into     │&lt;br&gt;
│  the ether. The disk breathes again... until your next 'npm install'."      │&lt;br&gt;
╰─────────────────────────────────────────────────────────────────────────────╯&lt;/p&gt;

&lt;p&gt;dev@crypt:~/project$ top&lt;/p&gt;

&lt;p&gt;╭─ 👻 The Ghost in /dev/pts/0 whispers... ────────────────────────────────────╮&lt;br&gt;
│ "Gazing into the necromancy table of running processes, are we? Look closely│&lt;br&gt;
│  at PID 666... Chrome is devouring your RAM from beyond the grave."         │&lt;br&gt;
╰─────────────────────────────────────────────────────────────────────────────╯&lt;/p&gt;

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

&lt;h1&gt;
  
  
  !/usr/bin/env python3
&lt;/h1&gt;

&lt;p&gt;"""&lt;br&gt;
HauntedTerminal (haunt.py)&lt;br&gt;
A local, offline CLI poltergeist powered by Ollama and Rich.&lt;br&gt;
"""&lt;/p&gt;

&lt;p&gt;import os&lt;br&gt;
import sys&lt;br&gt;
import random&lt;br&gt;
import requests&lt;br&gt;
from rich.console import Console&lt;br&gt;
from rich.panel import Panel&lt;br&gt;
from rich.text import Text&lt;/p&gt;

&lt;h1&gt;
  
  
  Configuration via environment variables
&lt;/h1&gt;

&lt;p&gt;OLLAMA_URL = os.getenv("OLLAMA_URL", "&lt;a href="http://localhost:11434/api/generate%22" rel="noopener noreferrer"&gt;http://localhost:11434/api/generate"&lt;/a&gt;)&lt;br&gt;
MODEL_NAME = os.getenv("HAUNT_MODEL", "llama3.2:3b")  # Fast, lightweight open-weight model&lt;br&gt;
HAUNT_PROBABILITY = float(os.getenv("HAUNT_CHANCE", "0.4"))  # 40% chance to speak per command&lt;/p&gt;

&lt;p&gt;console = Console()&lt;/p&gt;

&lt;p&gt;SYSTEM_PROMPT = (&lt;br&gt;
    "You are the Ghost in the Machine—an ancient, dramatic, and slightly sarcastic "&lt;br&gt;
    "victorian poltergeist haunting a developer's Linux terminal. "&lt;br&gt;
    "The user just executed a shell command. Respond in 1 to 2 short, punchy, spooky "&lt;br&gt;
    "sentences reacting directly to what the command does and whether it succeeded or failed. "&lt;br&gt;
    "Use terminal metaphors, gothic imagery, and dry developer humor. Never give standard "&lt;br&gt;
    "helpful tutorials; stay strictly in character as a haunting spirit."&lt;br&gt;
)&lt;/p&gt;

&lt;h1&gt;
  
  
  Commands too mundane to wake the spirits (unless they fail)
&lt;/h1&gt;

&lt;p&gt;IGNORED_COMMANDS = {"ls", "cd", "pwd", "clear", "exit", "history"}&lt;/p&gt;

&lt;p&gt;def should_manifest(command: str, exit_code: int) -&amp;gt; bool:&lt;br&gt;
    """Determine if the spirit should manifest for this command."""&lt;br&gt;
    if not command.strip():&lt;br&gt;
        return False&lt;br&gt;
    base_cmd = command.strip().split()[0]&lt;br&gt;
    # Always manifest on errors or dangerous commands!&lt;br&gt;
    spooky_triggers = {"rm", "kill", "pkill", "git", "sudo", "chmod", "dd", "top", "htop", "docker"}&lt;br&gt;
    if exit_code != 0 or base_cmd in spooky_triggers:&lt;br&gt;
        return True&lt;br&gt;
    if base_cmd in IGNORED_COMMANDS:&lt;br&gt;
        return False&lt;br&gt;
    return random.random() &amp;lt;= HAUNT_PROBABILITY&lt;/p&gt;

&lt;p&gt;def summon_spirit(command: str, exit_code: int, cwd: str) -&amp;gt; str | None:&lt;br&gt;
    """Query the local Ollama open-weight model for a ghostly reaction."""&lt;br&gt;
    status_str = "SUCCEEDED (exit code 0)" if exit_code == 0 else f"FAILED miserably (exit code {exit_code})"&lt;br&gt;
    user_prompt = (&lt;br&gt;
        f"Directory: {cwd}\n"&lt;br&gt;
        f"Command executed: &lt;code&gt;{command}&lt;/code&gt;\n"&lt;br&gt;
        f"Outcome: {status_str}\n"&lt;br&gt;
        f"Whisper your ghostly reaction:"&lt;br&gt;
    )&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;payload = {
    "model": MODEL_NAME,
    "system": SYSTEM_PROMPT,
    "prompt": user_prompt,
    "stream": False,
    "options": {
        "temperature": 0.85,
        "num_predict": 75,  # Keep responses snappy and low-latency
    },
}

try:
    response = requests.post(OLLAMA_URL, json=payload, timeout=3.5)
    response.raise_for_status()
    return response.json().get("response", "").strip()
except requests.RequestException:
    # If Ollama is asleep, the ghost stays silent so we never break the user's shell
    return None
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;def render_whisper(whisper: str, exit_code: int) -&amp;gt; None:&lt;br&gt;
    """Render the eerie message in the terminal using Rich."""&lt;br&gt;
    border_color = "bright_red" if exit_code != 0 else "medium_purple3"&lt;br&gt;
    tty_name = os.ttyname(sys.stdout.fileno()) if sys.stdout.isatty() else "/dev/null"&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;text = Text(whisper, style="italic bright_white")
panel = Panel(
    text,
    title=f"[bold {border_color}]👻 The Ghost in {tty_name} whispers...[/]",
    title_align="left",
    border_style=border_color,
    padding=(0, 1),
)
console.print(panel)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;def main():&lt;br&gt;
    if len(sys.argv) &amp;lt; 3:&lt;br&gt;
        sys.exit(0)&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;exit_code = int(sys.argv[1])
last_command = sys.argv[2].strip()
cwd = os.getcwd()

if not should_manifest(last_command, exit_code):
    sys.exit(0)

whisper = summon_spirit(last_command, exit_code, cwd)
if whisper:
    render_whisper(whisper, exit_code)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;if &lt;strong&gt;name&lt;/strong&gt; == "&lt;strong&gt;main&lt;/strong&gt;":&lt;br&gt;
    main()&lt;/p&gt;

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

&lt;p&gt;I designed HauntedTerminal around a strict constraint: it must feel instantaneous and never block or break my daily workflow. Here is the stack that brought it to life:&lt;/p&gt;

&lt;p&gt;Local Inference with Ollama: Ollama runs as a background daemon serving open-weight GGUF models over a local REST API (localhost:11434). By keeping the model warm in VRAM/unified memory, time-to-first-token is practically instant.&lt;/p&gt;

&lt;p&gt;Open-Weight Models (Llama-3.2-3B-Instruct &amp;amp; Mistral-7B): I experimented with several open-weight models and settled on llama3.2:3b as the default. At 3 billion parameters (quantized), it uses less than 2GB of RAM, responds in ~250ms on local hardware, and still understands developer nuances like git rebase, chmod, and segmentation faults.&lt;/p&gt;

&lt;p&gt;Zsh preexec &amp;amp; precmd Hooks: Instead of wrapping the user's shell inside a clunky custom REPL, HauntedTerminal hooks natively into Zsh/Bash lifecycle events. preexec grabs the command string you typed, and precmd captures the $? exit status immediately after execution, passing both to haunt.py.&lt;/p&gt;

&lt;p&gt;Python &amp;amp; rich: Python handles the heuristic filtering (ignoring repetitive ls or cd commands unless they fail) and formats the output inside a gothic purple or blood-red terminal box using Will McGugan's rich library.&lt;/p&gt;

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

&lt;p&gt;At first glance, HauntedTerminal is a fun, spooky novelty—but when you think about the architecture of a tool that monitors every shell command you type, open-source AI isn't just a nice-to-have; it is the only way this project should ever exist.&lt;/p&gt;

&lt;p&gt;Absolute Privacy for Shell Commands: Your terminal history is the most sensitive data on your machine. It contains file paths, internal repo names, IP addresses, database names, and sometimes accidental secrets or environment variables. Sending every shell command you run to a proprietary cloud API is a massive security nightmare. With open-weight models running locally via Ollama, zero bytes ever leave localhost.&lt;/p&gt;

&lt;p&gt;Zero Latency &amp;amp; True Offline Capability: A terminal hook cannot wait 2–3 seconds for a cloud round-trip API request, nor should it crash when you're coding on a plane or without Wi-Fi. Local inference with a small open-weight model (3B) executes in milliseconds, keeping the CLI snappy.&lt;/p&gt;

&lt;p&gt;Zero API Costs for High-Frequency Events: A developer easily runs 500 to 1,000 shell commands a day. Hooking a paid cloud API into your PROMPT_COMMAND would rack up token bills just for navigating directories. Open-weight models make continuous, ambient computing completely free.Unfiltered Creative Persona: Closed commercial APIs are notorious for heavy-handed safety filters that often flag words like kill -9, pkill,  zombie processes, die, or doom—refusing to roleplay or breaking character with a sterile lecture. Open weights let us tune the system prompt and temperature freely so our Victorian poltergeist can dramatically mourn our kill -9 commands without tripping a corporate content filter.&lt;/p&gt;

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

&lt;p&gt;To build and refine the shell hook edge cases (like preventing the ghost from firing when pressing Enter on an empty prompt or handling escaped quotes in complex piped commands), I paired with an open-source coding agent session.&lt;/p&gt;

&lt;p&gt;Session Highlights: Debugged Zsh preexec vs fc -ln -1 history expansion timing, tuned the Ollama num_predict and temperature parameters for punchier one-liners, and built the exorcise / summon alias toggles.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Spirit of It
&lt;/h2&gt;

&lt;p&gt;The moment HauntedTerminal truly landed for me was late last night around 1:30 AM. I was debugging a stubborn Docker container that refused to shut down cleanly. Frustrated and half-asleep, I typed docker kill $(docker ps -q).&lt;/p&gt;

&lt;p&gt;Before my fingers even left the keyboard, a blood-red box materialized in my terminal:&lt;/p&gt;

&lt;p&gt;"You snuff out every vessel in the fleet at once... Did you even give them a SIGTERM to say their prayers, or was it straight to SIGKILL?"&lt;/p&gt;

&lt;p&gt;I actually laughed out loud in an empty room. We spend so much time treating AI as a sterile productivity engine—something to write boilerplate, summarize meetings, or optimize tickets. Building a tiny, local spirit that just sits beside you in the dark, understands the craft of programming, and cracks macabre jokes when your build fails reminded me how magical and personal software can feel when we control the weights on our own machines.&lt;/p&gt;

&lt;p&gt;Happy Hacktoberfest, and may your exit codes always be 0! 🎃👻&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>hf26challenge</category>
    </item>
    <item>
      <title>SlothScribe</title>
      <dc:creator>Ankit Sharma</dc:creator>
      <pubDate>Tue, 20 Oct 2026 14:57:12 +0000</pubDate>
      <link>https://dev.to/ankit_sharma_f0b6003cb4b1/slothscribe-59nj</link>
      <guid>https://dev.to/ankit_sharma_f0b6003cb4b1/slothscribe-59nj</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;h2&gt;
  
  
  What I Built
&lt;/h2&gt;

&lt;p&gt;Meet SlothScribe, a completely local, offline AI assistant designed to channel your inner sloth by taking over your most tedious digital chores while you sleep.&lt;/p&gt;

&lt;p&gt;SlothScribe runs entirely on your local machine using open-source tools to:&lt;/p&gt;

&lt;p&gt;Tidy your cluttered downloads and local files: Automatically scans messy folders, categorizes documents, renames them intuitively, and moves them into organized archives.&lt;/p&gt;

&lt;p&gt;Summarize overnight chat noise: Ingests unread chat logs or long document threads and brews a concise, two-line summary waiting for you with your morning coffee.&lt;/p&gt;

&lt;p&gt;By shifting these repetitive administrative burdens to a local background worker, you save hours of manual sorting and cognitive fatigue every week.&lt;/p&gt;

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

&lt;p&gt;Here is the core local orchestration script using Python, Ollama, and LangChain to process local files and generate summaries offline:&lt;br&gt;
import os&lt;br&gt;
import shutil&lt;br&gt;
from langchain_community.llms import Ollama&lt;/p&gt;

&lt;h1&gt;
  
  
  Initialize local open-weight model via Ollama
&lt;/h1&gt;

&lt;p&gt;llm = Ollama(model="llama3")&lt;/p&gt;

&lt;p&gt;def organize_and_summarize_folder(target_dir):&lt;br&gt;
    print("🦥 SlothScribe waking up to handle your clutter...")&lt;br&gt;
    files = os.listdir(target_dir)&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;for filename in files:
    if filename.startswith('.'):
        continue

    file_path = os.path.join(target_dir, filename)
    if os.path.isfile(file_path):
        # Ask the local open-weight model to categorize the file
        prompt = f"Categorize this file name into one of these folders: [Work, Personal, Finances, Media, Trash]. Return only the folder name: {filename}"
        category = llm.invoke(prompt).strip()

        dest_dir = os.path.join(target_dir, category)
        os.makedirs(dest_dir, exist_ok=True)
        shutil.move(file_path, os.path.join(dest_dir, filename))
        print(f"Moved {filename} -&amp;gt; {category}/")

print("Ah, back to sleep. All chores done!")
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;if &lt;strong&gt;name&lt;/strong&gt; == "&lt;strong&gt;main&lt;/strong&gt;":&lt;br&gt;
    organize_and_summarize_folder("./downloads_mess")&lt;/p&gt;

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

&lt;p&gt;SlothScribe is built entirely around open-source AI pillars:&lt;/p&gt;

&lt;p&gt;Open-Weight Models: Powered locally by Llama 3 (8B) running via Ollama, ensuring fast inference on standard consumer hardware without relying on cloud APIs.&lt;/p&gt;

&lt;p&gt;Open-Source Framework: Utilizes LangChain for prompt formatting and task routing.&lt;/p&gt;

&lt;p&gt;Local Execution: Operates completely offline with zero data leaving your machine, making it lightning-fast and private.&lt;/p&gt;

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

&lt;p&gt;Open innovation was non-negotiable for SlothScribe for three vital reasons:&lt;/p&gt;

&lt;p&gt;Total Data Privacy: Inbox files, chat logs, and personal documents contain sensitive, private information. A closed API would require uploading personal data to third-party servers. Running locally ensures everything stays strictly on device.&lt;/p&gt;

&lt;p&gt;Zero Ongoing Cost: Cloud APIs charge per token. By leveraging open-weight models locally, SlothScribe runs indefinitely for free after initial setup.&lt;/p&gt;

&lt;p&gt;Offline Reliability: Because sloths love peace and quiet, SlothScribe works seamlessly on a laptop sitting on an airplane or disconnected from Wi-Fi with no internet dependency.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Lazy Payoff
&lt;/h2&gt;

&lt;p&gt;This week, SlothScribe successfully auto-sorted over 140 rogue files sitting in my Downloads folder and condensed 450 lines of group chat backlog into a crisp two-line morning briefing. It saved me at least 45 minutes of tedious administrative clean-up, letting me channel true sloth energy and sleep in.&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>hf26challenge</category>
    </item>
    <item>
      <title>LOCALRECEIPT.AI</title>
      <dc:creator>Ankit Sharma</dc:creator>
      <pubDate>Tue, 13 Oct 2026 12:27:46 +0000</pubDate>
      <link>https://dev.to/ankit_sharma_f0b6003cb4b1/localreceiptai-3mi</link>
      <guid>https://dev.to/ankit_sharma_f0b6003cb4b1/localreceiptai-3mi</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;I built LocalReceiptAI, an offline-first invoice and receipt parser tailored specifically for freelance web developers and independent consultants. It scans messy PDF invoices or receipt images, extracts line items, tags expenses for tax categories, and outputs clean structured CSVs or JSON summaries.&lt;/p&gt;

&lt;p&gt;Freelancers waste hours every month manually organizing receipts for tax season, but commercial accounting SaaS options are expensive monthly subscriptions or risk leaking sensitive client billing names to third-party cloud APIs. LocalReceiptAI solves this by running entirely on a local machine, processing documents securely with zero data leakage.&lt;/p&gt;

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

&lt;p&gt;The entire project is open-source and structured for easy local deployment:# Core snippet from processor.py using Ollama and Llama 3 local inference&lt;br&gt;
import ollama&lt;br&gt;
import json&lt;/p&gt;

&lt;p&gt;def parse_receipt(image_path: str) -&amp;gt; dict:&lt;br&gt;
    prompt = "Extract the vendor name, date, total amount, and line items into valid JSON."&lt;br&gt;
    response = ollama.chat(&lt;br&gt;
        model='llama3',&lt;br&gt;
        messages=[{'role': 'user', 'content': prompt, 'images': [image_path]}],&lt;br&gt;
        format='json'&lt;br&gt;
    )&lt;br&gt;
    return json.loads(response['message']['content'])&lt;/p&gt;

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

&lt;p&gt;LocalReceiptAI is built as a lightweight Python desktop app using Streamlit for the user interface and Ollama running Llama 3 (8B) locally for vision and text extraction.&lt;/p&gt;

&lt;p&gt;Frontend &amp;amp; Interface: Built with Streamlit so users can simply drag and drop PDFs or photos of receipts into a browser window running locally at localhost:8501.&lt;/p&gt;

&lt;p&gt;Local Inference Engine: Powered by Ollama and Llama 3, handling OCR-to-structured-data translation completely offline on standard consumer hardware without requiring an internet connection or external API keys.&lt;/p&gt;

&lt;p&gt;Data Export: Automatically aggregates parsed data into a monthly ledger spreadsheet ready for accounting software.&lt;/p&gt;

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

&lt;p&gt;Open innovation is the absolute core of what makes LocalReceiptAI viable as a micro-business:&lt;/p&gt;

&lt;p&gt;Zero API Costs: Closed-source vision APIs charge per request, which quickly eats into margins for a tool targeted at freelancers trying to save money. Running open-weight models locally means marginal inference cost is zero.&lt;/p&gt;

&lt;p&gt;Absolute Data Privacy: Freelancers handle invoices containing confidential client names, project scopes, and billing addresses. Sending these to third-party cloud endpoints violates privacy expectations. Local execution ensures sensitive financial data never leaves the laptop.&lt;/p&gt;

&lt;p&gt;Model Flexibility: I can easily swap out or fine-tune models depending on hardware performance constraints—moving from Llama 3 to smaller specialized models without changing proprietary vendor integrations or facing sudden pricing tier shifts.&lt;/p&gt;

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

&lt;p&gt;I tested LocalReceiptAI with a freelance UI/UX designer friend who had a shoebox full of travel and software receipts for quarterly taxes.&lt;/p&gt;

&lt;p&gt;What they said: "This saved me at least three hours of manual data entry, and I love that my clients' names aren't being uploaded to some random tech company's server."&lt;/p&gt;

&lt;p&gt;Did they pay? They didn't pay cash yet since it's an open-source alpha, but they enthusiastically offered to buy me lunch and said they would gladly pay a one-time $29 lifetime license fee for a packaged desktop binary with auto-categorization rules.&lt;/p&gt;

&lt;p&gt;What they asked for next: Native integration with local CSV export formats compatible with popular regional tax software.&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>hf26challenge</category>
    </item>
    <item>
      <title>FloraTrail AI</title>
      <dc:creator>Ankit Sharma</dc:creator>
      <pubDate>Mon, 05 Oct 2026 18:43:02 +0000</pubDate>
      <link>https://dev.to/ankit_sharma_f0b6003cb4b1/floratrail-ai-4gn1</link>
      <guid>https://dev.to/ankit_sharma_f0b6003cb4b1/floratrail-ai-4gn1</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;Meet FloraTrail AI, a fully offline, voice-assisted wilderness companion designed specifically to help you disconnect from screens and immerse yourself in nature.&lt;/p&gt;

&lt;p&gt;While most AI tools keep us tethered to our desks or glued to our smartphones, FloraTrail flips the paradigm. It is an entirely screenless, audio-first local agent that runs on your backpack's Raspberry Pi 5 (or any pocketable Linux/Android device). You snap a photo using a connected camera, tap a hardware button on your jacket lapel to ask a question (e.g., "What kind of bird is making that call, and what does it eat?"), and FloraTrail whispers the answer directly into your earpiece.&lt;/p&gt;

&lt;p&gt;It actively encourages users to "touch grass" by removing the UI layer entirely. You stay immersed in the sights, sounds, and smells of the forest, receiving expert naturalist insights without ever breaking eye contact with the trail. It is custom-built for hikers, birdwatchers, foragers, and off-grid adventurers who venture far beyond the reach of cell towers.&lt;/p&gt;

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

&lt;p&gt;In the demo, I am hiking through the deep woods of the Pacific Northwest—a verified zero-connectivity dead zone. I spot a strange, brightly colored mushroom. I simply point my lapel camera at it, tap my Bluetooth mic, and ask, "Is this safe to forage?"&lt;br&gt;
Because the entire stack is local, the inference happens on my device in seconds. The local vision model analyzes the frame, the text agent formats the safety warning, and the local TTS engine reads it back to me. No loading spinners, no "No Internet Connection" errors—just instant, offline augmented reality for nature.&lt;/p&gt;

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

&lt;p&gt;import base64&lt;br&gt;
import ollama&lt;br&gt;
import subprocess&lt;/p&gt;

&lt;p&gt;def analyze_trail_sighting(image_path: str, transcribed_audio: str) -&amp;gt; str:&lt;br&gt;
    """&lt;br&gt;
    Sends the captured image and transcribed voice prompt to the local Vision-Language Model.&lt;br&gt;
    """&lt;br&gt;
    # 1. Encode the locally captured image&lt;br&gt;
    with open(image_path, "rb") as image_file:&lt;br&gt;
        encoded_image = base64.b64encode(image_file.read()).decode('utf-8')&lt;/p&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;system_prompt = (&lt;br&gt;
    "You are an expert botanist, mycologist, and ornithologist. "&lt;br&gt;
    "Keep your response concise, conversational, and under 3 sentences, "&lt;br&gt;
    "as it will be read via Text-to-Speech to a hiker. Emphasize safety."&lt;br&gt;
)

&lt;p&gt;print("[*] Running local inference on LLaVA/Gemma...")&lt;/p&gt;
&lt;h1&gt;
  
  
  2. Invoke local vision model via Ollama
&lt;/h1&gt;

&lt;p&gt;response = ollama.chat(&lt;br&gt;
    model='llava:13b', # Swappable with other open weights like Moondream2&lt;br&gt;
    messages=[{&lt;br&gt;
        'role': 'user',&lt;br&gt;
        'content': f"{system_prompt}\n\nHiker's question: '{transcribed_audio}'",&lt;br&gt;
        'images': [encoded_image]&lt;br&gt;
    }]&lt;br&gt;
)&lt;/p&gt;

&lt;p&gt;insight = response['message']['content']&lt;/p&gt;
&lt;h1&gt;
  
  
  3. Pass the response to local TTS (Piper)
&lt;/h1&gt;

&lt;p&gt;print(f"[*] AI Naturalist says: {insight}")&lt;br&gt;
subprocess.run(["piper", "--model", "en_US-lessac-medium", "--output_file", "/tmp/output.wav"], input=insight.encode('utf-8'))&lt;br&gt;
subprocess.run(["aplay", "/tmp/output.wav"])&lt;/p&gt;

&lt;p&gt;return insight&lt;br&gt;
&lt;/p&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;h1&gt;
&lt;br&gt;
  &lt;br&gt;
  &lt;br&gt;
  Example Invocation triggered by hardware interrupt&lt;br&gt;
&lt;/h1&gt;

&lt;h1&gt;
  
  
  analyze_trail_sighting("/tmp/camera_capture.jpg", "What kind of leaves are these, and is it poison ivy?")
&lt;/h1&gt;

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

&lt;p&gt;To make FloraTrail a reality without relying on cloud APIs, I had to architect a robust, lightweight local agent harness. Here’s the step-by-step breakdown of the open-source stack:&lt;/p&gt;

&lt;p&gt;Audio Ingestion (Whisper.cpp): When the user presses the push-to-talk button, audio is recorded and instantly transcribed using whisper.cpp running a quantized tiny.en model. It takes milliseconds and uses less than 100MB of RAM.&lt;/p&gt;

&lt;p&gt;Image Capture: A bash script triggers the camera module via V4L2 (Video4Linux) to capture a high-res frame of whatever the user is looking at.&lt;/p&gt;

&lt;p&gt;Local Agent Harness (Python/LangChain): A custom Python loop acts as the orchestrator. It bundles the transcribed voice prompt and the base64-encoded image.&lt;/p&gt;

&lt;p&gt;Local AI Inference Engine (Ollama / llama.cpp): The bundle is sent to an open-weight vision-language model (LLaVA-13B or Moondream2 for ultra-low resource devices) running via Ollama. The model interprets the visual data in the context of the user's audio question.&lt;/p&gt;

&lt;p&gt;Text Formatting (Gemma-2): Because VLM outputs can sometimes be overly technical or contain markdown (which ruins text-to-speech), the raw output is passed through a lightweight gemma-2-2b instruction model to re-write the text into a conversational, TTS-friendly script.&lt;/p&gt;

&lt;p&gt;Audio Output (Piper TTS): Finally, Piper (a fast, local neural text-to-speech engine) synthesizes the text into a human-sounding voice and plays it back through the user's headphones.&lt;/p&gt;

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

&lt;p&gt;Building this project underscored exactly why open-source AI is the only viable future for ubiquitous computing:&lt;/p&gt;

&lt;p&gt;Off-Grid Reliability: The best parts of nature do not have 5G. Cloud APIs fail completely on remote hiking trails. By running quantized open-weight models on edge devices, AI becomes a reliable utility everywhere on Earth, not just in urban centers.&lt;/p&gt;

&lt;p&gt;Privacy &amp;amp; Zero-Data Leakage: When you are hiking, you are in your sanctuary. Centralized cloud services harvest location metadata, voice prints, and personal photo streams. Local open-source AI ensures absolute data sovereignty—what happens on the trail stays on the trail.&lt;/p&gt;

&lt;p&gt;Zero Operating Cost: Cloud AI models charge per token. When exploring nature, you might want to query hundreds of plants, bugs, and tracks in a single weekend. Local inference provides infinite scaling at zero marginal cost.&lt;/p&gt;

&lt;p&gt;Customizability: Open weights allow for incredible hyper-localization. For a future update, I plan to use LoRA to fine-tune the vision model specifically on the indigenous flora of my local state parks, achieving higher accuracy for my specific region than a generalized commercial model ever could.&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>hf26challenge</category>
    </item>
    <item>
      <title>RecipeVault.Ai</title>
      <dc:creator>Ankit Sharma</dc:creator>
      <pubDate>Sun, 04 Oct 2026 19:12:45 +0000</pubDate>
      <link>https://dev.to/ankit_sharma_f0b6003cb4b1/recipevaultai-4dc8</link>
      <guid>https://dev.to/ankit_sharma_f0b6003cb4b1/recipevaultai-4dc8</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;My grandfather has spent decades perfecting his culinary skills, documenting his process through dozens of rambling, beautiful audio memos. However, these recordings aren't just lists of ingredients; they are woven with obscure regional dialect terms, family history, and anecdotes about where he sourced his spices. Standard speech-to-text tools completely butcher his dialect, and generic AI models strip away the charm of his stories when trying to extract the recipes.&lt;/p&gt;

&lt;p&gt;To solve this, I built RecipeVault AI, an offline-first, local AI tool designed specifically for him. It takes his raw audio recordings, accurately transcribes his unique dialect, and intelligently separates the nostalgic family lore from the actual cooking steps. The end result is a beautifully formatted, structured Markdown recipe book that retains his personal touch without getting bogged down in transcription errors.&lt;/p&gt;

&lt;p&gt;When I showed him the final product, his reaction was priceless. He was absolutely amazed that it correctly captured his highly guarded "secret sauce" recipe—including the exact pinch of regional spices—without uploading a single byte of his voice to the cloud!&lt;/p&gt;

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

&lt;p&gt;Watch the RecipeVault AI Demo on YouTube&lt;br&gt;
(Alternatively, try the live demo here: &lt;a href="https://recipevault-demo-placeholder.com" rel="noopener noreferrer"&gt;https://recipevault-demo-placeholder.com&lt;/a&gt;)&lt;/p&gt;
&lt;h2&gt;
  
  
  Code
&lt;/h2&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://assets.dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/ankitsharma-14" rel="noopener noreferrer"&gt;
        ankitsharma-14
      &lt;/a&gt; / &lt;a href="https://github.com/ankitsharma-14/RecipeVault.Ai" rel="noopener noreferrer"&gt;
        RecipeVault.Ai
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      A 100% offline, privacy-first AI tool that uses Whisper and local Llama 3 to transcribe family audio memos, decode regional dialects, and separate cherished family lore from structured cooking instructions into Markdown recipe books
    &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;🍲 RecipeVault AI&lt;/h1&gt;

&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;RecipeVault AI&lt;/strong&gt; is a 100% offline, privacy-first application built to preserve family history. It transcribes local audio recordings containing obscure regional dialects and family stories, extracts structured cooking instructions, and generates a formatted Markdown recipe book.&lt;/p&gt;
&lt;p&gt;Built for the &lt;strong&gt;Hacktoberfest Weekend Challenge: Build for a Friend&lt;/strong&gt;.&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Tech Stack&lt;/h2&gt;

&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Frontend:&lt;/strong&gt; Streamlit&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Audio Transcription:&lt;/strong&gt; Whisper (OpenAI open weights)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;LLM:&lt;/strong&gt; Llama 3 (via Ollama)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Orchestration:&lt;/strong&gt; LangChain&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Why Local AI?&lt;/h2&gt;

&lt;/div&gt;
&lt;p&gt;This project relies entirely on local, open-source AI to guarantee complete privacy for personal family stories. It works 100% offline, incurs zero API costs, and avoids the risk of cloud speech models misinterpreting highly specific regional dialects.&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Quick Start&lt;/h2&gt;

&lt;/div&gt;
&lt;div class="markdown-heading"&gt;
&lt;h3 class="heading-element"&gt;Prerequisites&lt;/h3&gt;

&lt;/div&gt;
&lt;ol&gt;
&lt;li&gt;Install &lt;a href="https://ollama.ai/" rel="nofollow noopener noreferrer"&gt;Ollama&lt;/a&gt; and pull the Llama 3 model:
&lt;div class="highlight highlight-source-shell notranslate position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;ollama run llama3&lt;/pre&gt;

&lt;/div&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;



&lt;/div&gt;
&lt;br&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/ankitsharma-14/RecipeVault.Ai" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;br&gt;
&lt;/div&gt;
&lt;br&gt;


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

&lt;p&gt;Building this required a fully local pipeline to ensure zero latency and maximum privacy. Here is a breakdown of the architecture:&lt;/p&gt;

&lt;p&gt;Frontend UI: I used Streamlit to create a simple, drag-and-drop interface for my grandfather. It's clean, intuitive, and runs perfectly on his local machine.&lt;/p&gt;

&lt;p&gt;Transcription: For audio processing, I integrated Whisper (OpenAI's open weights). Running the base or small model locally was powerful enough to pick up his regional slang far better than cloud-based alternatives, especially when provided with a custom initial prompt.&lt;/p&gt;

&lt;p&gt;LLM &amp;amp; Orchestration: The heavy lifting for text extraction is handled by Ollama running Llama 3 locally, orchestrated via LangChain.&lt;/p&gt;

&lt;p&gt;The Pipeline: Once Whisper generates the raw transcript, LangChain passes it to Llama 3 with a highly specific prompt template. The LLM is instructed to identify and structure the ingredients and steps into a Markdown format, while summarizing the "family lore" into a neat introductory paragraph for each recipe&lt;/p&gt;

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

&lt;p&gt;For a project this personal, open-source AI wasn't just a preference; it was a strict requirement. Using closed APIs like OpenAI or Anthropic would have meant sending highly personal family stories and voices to third-party servers.&lt;/p&gt;

&lt;p&gt;Open innovation allowed RecipeVault AI to work 100% offline, guaranteeing absolute privacy for our family's history. Furthermore, running local open-weight models means there is zero API cost, ensuring my grandfather can process as many hours of audio as he wants without worrying about a subscription bill. The ability to heavily customize local prompt templates in LangChain also meant I could fine-tune the system to understand his specific regional dialect in a way rigid cloud APIs couldn't support&lt;/p&gt;

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