<?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: SRIRAM S</title>
    <description>The latest articles on DEV Community by SRIRAM S (@sriram01).</description>
    <link>https://dev.to/sriram01</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fthepracticaldev.s3.amazonaws.com%2Fi%2F99mvlsfu5tfj9m7ku25d.png</url>
      <title>DEV Community: SRIRAM S</title>
      <link>https://dev.to/sriram01</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/sriram01"/>
    <language>en</language>
    <item>
      <title>Lazy Mode: An Open-Weight Model That Renames and Sorts My Files Offline</title>
      <dc:creator>SRIRAM S</dc:creator>
      <pubDate>Wed, 21 Oct 2026 15:52:32 +0000</pubDate>
      <link>https://dev.to/sriram01/lazy-mode-an-open-weight-model-that-renames-and-sorts-my-files-offline-1k0n</link>
      <guid>https://dev.to/sriram01/lazy-mode-an-open-weight-model-that-renames-and-sorts-my-files-offline-1k0n</guid>
      <description>&lt;p&gt;This is a submission for the Hacktoberfest Open-Source AI Challenge Week 3: Slow and Steady&lt;/p&gt;

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

&lt;p&gt;sloth-sorter is a lazy, fully local tidier for your Downloads folder.&lt;/p&gt;

&lt;p&gt;When a new file lands, a small open-weight model reads the filename and the first bit of the content. It renames the file to something meaningful and files it into the right folder. scan0042 (3).pdf becomes Invoices/Invoice_Airtel_Oct2026.pdf. Every move is logged with a one-line summary, so a single command gives you a morning digest of what got sorted.&lt;/p&gt;

&lt;p&gt;It is built for people who know their Downloads folder is a disaster and keep putting off fixing it. You set it up once and never think about it again.&lt;/p&gt;

&lt;p&gt;Safety features, because nobody should trust an AI with their files on day one:&lt;/p&gt;

&lt;p&gt;Dry run by default. It prints what it would do and moves nothing until you pass --apply.&lt;br&gt;
Undo log. Every move is recorded, and undo --last N reverses the most recent moves.&lt;br&gt;
It never overwrites. Name collisions get _2, _3, and so on.&lt;br&gt;
It skips unfinished downloads (.crdownload, .part) and files that are still growing.&lt;br&gt;
If the model fails, the file is left alone.&lt;br&gt;
Demo&lt;/p&gt;

&lt;p&gt;Code&lt;/p&gt;

&lt;p&gt;bash&lt;br&gt;
ollama pull qwen2.5:3b&lt;br&gt;
python sloth.py once --folder ~/Downloads # dry run, moves nothing&lt;br&gt;
python sloth.py watch --folder ~/Downloads --apply # lazy mode: runs forever&lt;br&gt;
python sloth.py digest # what got sorted overnight&lt;br&gt;
python sloth.py undo --last 5 # changed your mind&lt;br&gt;
How I Built It&lt;br&gt;
Model: a small open-weight model (default qwen2.5:3b) served locally by Ollama. The model is a command-line flag, so swapping in Gemma, Llama, or Phi is one flag.&lt;br&gt;
Structured output: the Ollama request uses a JSON schema, so the model must return {category, new_name, summary}, and category can only be one of a fixed list of folders. That keeps a small model from inventing folders or returning free-form text.&lt;br&gt;
Content reading: the standard library handles text, CSV, JSON, and .docx. pypdf is optional, for PDFs. Scanned PDFs and images fall back to the filename.&lt;br&gt;
Dependencies: there are none beyond Ollama. The folder watcher is a simple polling loop with a “has the file stopped growing?” check, so there is nothing to install or break.&lt;br&gt;
Cleanup layer: the model’s suggested name is sanitized in code (safe characters only, 60-character cap, original extension kept), so a bad model answer can’t produce an invalid filename.&lt;br&gt;
Why Does Open Innovation Matter?&lt;/p&gt;

&lt;p&gt;Downloads folders hold invoices, bank statements, ID scans, and medical reports. Sending those to a cloud API just to rename them is a bad trade.&lt;/p&gt;

&lt;p&gt;Privacy: the contents never leave the machine. With a closed API, the tool would have to upload your most sensitive documents.&lt;br&gt;
Cost: it costs nothing to run. Sorting thousands of old files would be a per-token bill on a hosted API. Here it only uses electricity.&lt;br&gt;
Offline: it works with no internet at all.&lt;br&gt;
Swappable models: I can pick the model that handles my own files best instead of whatever one vendor offers.&lt;br&gt;
Control: the categories, the naming style, and the prompt are all editable, so the behavior is yours to change.&lt;/p&gt;

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

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

&lt;p&gt;Prize Categories&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>hf26challenge</category>
    </item>
    <item>
      <title>I Built an Offline “Sales Analyst” for Small Shops with Ollama and DuckDB</title>
      <dc:creator>SRIRAM S</dc:creator>
      <pubDate>Sat, 17 Oct 2026 12:49:47 +0000</pubDate>
      <link>https://dev.to/sriram01/i-built-an-offline-sales-analyst-for-small-shops-with-ollama-and-duckdb-3e1b</link>
      <guid>https://dev.to/sriram01/i-built-an-offline-sales-analyst-for-small-shops-with-ollama-and-duckdb-3e1b</guid>
      <description>&lt;p&gt;This is a submission for the Hacktoberfest Open-Source AI Challenge Week 2: Side Hustle&lt;/p&gt;

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

&lt;p&gt;AskMyShop is a local app that lets a small shop or restaurant owner ask questions about their sales in plain language and get a chart plus a one-line answer.&lt;/p&gt;

&lt;p&gt;Many small businesses keep sales in Excel or CSV exports from a billing app, but can’t afford an analyst. They’re left asking questions like “which dish is not selling?” or “which day is my busiest?” and guessing the answers.&lt;/p&gt;

&lt;p&gt;With AskMyShop, the owner uploads their sheet, types a question (e.g. “Which items sold least last month?”), and gets:&lt;/p&gt;

&lt;p&gt;a chart&lt;br&gt;
a one-line insight in simple words&lt;br&gt;
the SQL used, so they can see how the answer was found&lt;/p&gt;

&lt;p&gt;Who would pay: small restaurants, tiffin shops and grocery stores. Pricing idea: [₹499 one-time setup, or ₹199/month for monthly report templates].&lt;/p&gt;

&lt;p&gt;Demo&lt;/p&gt;

&lt;p&gt;Tip: Show the Wi-Fi turned off in the video. It proves the “private and offline” claim in two seconds.&lt;/p&gt;

&lt;p&gt;Code&lt;/p&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/AWT-SRIRAM" rel="noopener noreferrer"&gt;
        AWT-SRIRAM
      &lt;/a&gt; / &lt;a href="https://github.com/AWT-SRIRAM/SRM_AUTOSUB_BOT" rel="noopener noreferrer"&gt;
        SRM_AUTOSUB_BOT
      &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;
  🎬 SRM AUTOSUB BOT
&lt;/h1&gt;
&lt;/div&gt;
&lt;p&gt;
  &lt;a rel="noopener noreferrer nofollow" href="https://camo.githubusercontent.com/32e877cf7dd186864ea6401c40fe6db3b73ea0d1d278803ebff3c3d5f7bc186e/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f446576656c6f7065722d53524952414d253230532d626c75653f7374796c653d666f722d7468652d6261646765266c6f676f3d676974687562266c6f676f436f6c6f723d7768697465"&gt;&lt;img src="https://camo.githubusercontent.com/32e877cf7dd186864ea6401c40fe6db3b73ea0d1d278803ebff3c3d5f7bc186e/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f446576656c6f7065722d53524952414d253230532d626c75653f7374796c653d666f722d7468652d6261646765266c6f676f3d676974687562266c6f676f436f6c6f723d7768697465" alt="Developer"&gt;&lt;/a&gt;
  &lt;a rel="noopener noreferrer nofollow" href="https://camo.githubusercontent.com/81a8a816ea3838a0dbae7e84abf187a136268e52342dece17bbc60c02f024bce/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f507974686f6e2d332e31322532422d626c75653f7374796c653d666f722d7468652d6261646765266c6f676f3d707974686f6e266c6f676f436f6c6f723d7768697465"&gt;&lt;img src="https://camo.githubusercontent.com/81a8a816ea3838a0dbae7e84abf187a136268e52342dece17bbc60c02f024bce/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f507974686f6e2d332e31322532422d626c75653f7374796c653d666f722d7468652d6261646765266c6f676f3d707974686f6e266c6f676f436f6c6f723d7768697465" alt="Python Version"&gt;&lt;/a&gt;
  &lt;a rel="noopener noreferrer nofollow" href="https://camo.githubusercontent.com/19296567c09d84e5ea0833bea126e529eae6a4cb035d2716604b7705be0e1870/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4c6962726172792d5079726f6772616d2d79656c6c6f773f7374796c653d666f722d7468652d6261646765266c6f676f3d74656c656772616d266c6f676f436f6c6f723d7768697465"&gt;&lt;img src="https://camo.githubusercontent.com/19296567c09d84e5ea0833bea126e529eae6a4cb035d2716604b7705be0e1870/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4c6962726172792d5079726f6772616d2d79656c6c6f773f7374796c653d666f722d7468652d6261646765266c6f676f3d74656c656772616d266c6f676f436f6c6f723d7768697465" alt="Pyrogram"&gt;&lt;/a&gt;
  &lt;a rel="noopener noreferrer nofollow" href="https://camo.githubusercontent.com/ff2e78793c0ba68a17278b08107ac1fad4d2e39bce95061cffe83c4e2dc1ab0e/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f456e67696e652d6661737465722d2d776869737065722d6f72616e67653f7374796c653d666f722d7468652d6261646765"&gt;&lt;img src="https://camo.githubusercontent.com/ff2e78793c0ba68a17278b08107ac1fad4d2e39bce95061cffe83c4e2dc1ab0e/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f456e67696e652d6661737465722d2d776869737065722d6f72616e67653f7374796c653d666f722d7468652d6261646765" alt="Whisper"&gt;&lt;/a&gt;
  &lt;a rel="noopener noreferrer nofollow" href="https://camo.githubusercontent.com/3ef1082ed4e998c4377573ac24abacf58f4b13de32ff47c92d1a3ee302b5eef4/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f466f726d61742d2e4153532d627269676874677265656e3f7374796c653d666f722d7468652d6261646765"&gt;&lt;img src="https://camo.githubusercontent.com/3ef1082ed4e998c4377573ac24abacf58f4b13de32ff47c92d1a3ee302b5eef4/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f466f726d61742d2e4153532d627269676874677265656e3f7374796c653d666f722d7468652d6261646765" alt="Format"&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
  &lt;b&gt;An asynchronous, GPU-accelerated Telegram Bot engineered using Pyrogram and faster-whisper (&lt;code&gt;distil-large-v3&lt;/code&gt;). Automatically extracts English audio streams, transcribes multi-channel media, and generates mobile-optimized, styled Advanced SubStation Alpha (&lt;code&gt;.ass&lt;/code&gt;) English subtitles.&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
  &lt;a href="https://github.com/AWT-SRIRAM/SRM_AUTOSUB_BOT#-features" rel="noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/999aa523ec64085f0827e65cb8f7ad990381d78d4ec1a232cbafbb62a86b454b/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f46656174757265732d566965772d626c75653f7374796c653d666f722d7468652d6261646765"&gt;&lt;/a&gt;
  &lt;a href="https://github.com/AWT-SRIRAM/SRM_AUTOSUB_BOT#-deployment--setup" rel="noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/51e72f61617e314b32bd1c3c94d7c19bf8431b5ab5856f257a2224cd5b6120d4/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4465706c6f796d656e742d53657475702d627269676874677265656e3f7374796c653d666f722d7468652d6261646765"&gt;&lt;/a&gt;
  &lt;a href="https://github.com/AWT-SRIRAM/SRM_AUTOSUB_BOT#-bot-commands--interactive-menu" rel="noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/c6dd251832caf24387276cc8e23ea77c0f7675ef3050faf9a75139794fb42935/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f436f6d6d616e64732d4c6973742d6f72616e67653f7374796c653d666f722d7468652d6261646765"&gt;&lt;/a&gt;
  &lt;a href="https://t.me/your_telegram_username" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/a22f9e97845bc5eaa1ae394cef54ef14728214c0f4ea52f0c19b02060b5bec56/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f537570706f72742d54656c656772616d2d3030383863633f7374796c653d666f722d7468652d6261646765266c6f676f3d74656c656772616d266c6f676f436f6c6f723d7768697465"&gt;&lt;/a&gt;
&lt;/p&gt;




&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;🔗 Quick Links&lt;/h2&gt;
&lt;/div&gt;

&lt;p&gt;
  &lt;a href="https://github.com/AWT-SRIRAM/SRM_AUTOSUB_BOT#-key-features" rel="noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/6cfcaf49db0af3210750962afbf70a4acc5e9733e3b58bbd2e7b73d7064a3285/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f486967686c69676874732d496e666f2d696e666f726d6174696f6e616c3f7374796c653d666c61742d737175617265"&gt;&lt;/a&gt;
  &lt;a href="https://github.com/AWT-SRIRAM/SRM_AUTOSUB_BOT#-subtitle-formatting-rules" rel="noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/e14374f2fc09e5149513ba3e4b7d2159462f9022f1f2db4f5dc37f02260844a0/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f466f726d617474696e672d52756c65732d707572706c653f7374796c653d666c61742d737175617265"&gt;&lt;/a&gt;
  &lt;a href="https://github.com/AWT-SRIRAM/SRM_AUTOSUB_BOT#-repository-structure" rel="noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/043509a77ece4f7c1f0cfd5e593912bdf3c3e7199c93497670205d8aa7f6370d/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f5374727563747572652d46696c65732d626c756576696f6c65743f7374796c653d666c61742d737175617265"&gt;&lt;/a&gt;
  &lt;a href="https://github.com/AWT-SRIRAM/SRM_AUTOSUB_BOT#-deployment--setup" rel="noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/6be6aea0969966301950b043f0f807b5074917a43a53792ab7129b6daa3afcdf/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4465706c6f796d656e742d47756964652d737563636573733f7374796c653d666c61742d737175617265"&gt;&lt;/a&gt;
  &lt;a href="https://github.com/AWT-SRIRAM/SRM_AUTOSUB_BOT#-bot-commands--interactive-menu" rel="noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/5b6e175d8bf29d47eb77912c1eef317f05c405da686b53f0d59b18a4feaafe88/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f436f6d6d616e64732d4d656e752d6f72616e67653f7374796c653d666c61742d737175617265"&gt;&lt;/a&gt;
  &lt;a href="https://github.com/AWT-SRIRAM/SRM_AUTOSUB_BOT#-license" rel="noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/152aa2a37725b9fd554b28ff24d270f6071c67927a63e6d635a55c8e188e20c7/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4c6963656e73652d4d49542d677265656e3f7374796c653d666c61742d737175617265"&gt;&lt;/a&gt;
&lt;/p&gt;




&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;🚀 Key Features&lt;/h2&gt;
&lt;/div&gt;


&lt;b&gt;⚡ High-Performance ASR Engine&lt;/b&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;distil-large-v3 Architecture&lt;/strong&gt;: Utilises quantized &lt;code&gt;distil-large-v3&lt;/code&gt; running on CUDA &lt;code&gt;float16&lt;/code&gt; hardware acceleration, achieving &lt;strong&gt;5x–12x real-time transcription performance&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Word-Level Timestamping&lt;/strong&gt;: Generates exact word‑level timestamp alignments and applies &lt;strong&gt;centisecond rounding&lt;/strong&gt; (&lt;code&gt;round()&lt;/code&gt;‑based) to eliminate IEEE 754 drift on long files.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;FFmpeg Audio Extraction&lt;/strong&gt;: Automatically probes multi‑track containers (&lt;code&gt;.mkv&lt;/code&gt;, &lt;code&gt;.mp4&lt;/code&gt;, &lt;code&gt;.avi&lt;/code&gt;), prefers explicit English streams, and converts raw Audio to 16kHz mono PCM WAV with a &lt;strong&gt;3x volume boost&lt;/strong&gt; to capture quiet dialogue.&lt;/li&gt;
&lt;/ul&gt;


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

&lt;b&gt;🎨 Styled .ASS Output (Custom Look)&lt;/b&gt;


&lt;ul&gt;

&lt;li&gt;

&lt;strong&gt;Embedded Styling&lt;/strong&gt;: Outputs Advanced SubStation Alpha (&lt;code&gt;.ass&lt;/code&gt;) files with a &lt;strong&gt;pre‑defined style&lt;/strong&gt; – Trebuchet MS Italic…&lt;/li&gt;

&lt;/ul&gt;&lt;/div&gt;
&lt;br&gt;
  &lt;/div&gt;
&lt;br&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/AWT-SRIRAM/SRM_AUTOSUB_BOT" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;br&gt;
&lt;/div&gt;
&lt;br&gt;


&lt;p&gt;How I Built It&lt;br&gt;
Model: [Qwen2.5 7B / Qwen2.5-Coder] running locally through Ollama&lt;br&gt;
Query engine: DuckDB, which queries the uploaded CSV/Excel directly with no database setup&lt;br&gt;
Structured output: Instructor with a schema, so the model returns the SQL and the chart type in a predictable format&lt;br&gt;
UI and charts: Streamlit with Plotly&lt;br&gt;
Safety layer: only read-only SELECT queries are allowed, and if the SQL fails, the error is sent back to the model for one retry&lt;br&gt;
Prompt design: the prompt includes the table schema, sample rows, and a few example questions with correct SQL, tuned to the shop’s own column names&lt;br&gt;
(Optional) faster-whisper for asking questions by voice&lt;/p&gt;

&lt;p&gt;What I learned: [e.g. small models sometimes write wrong SQL, so showing the query under every answer built trust, and schema plus examples in the prompt improved accuracy.]&lt;/p&gt;

&lt;p&gt;Why Does Open Innovation Matter?&lt;br&gt;
Privacy: sales and customer data never leave the owner’s laptop. For a small shop, that data is the business.&lt;br&gt;
Cost: there’s no per-question API fee, so a low flat price still leaves a margin. With a paid API, every question the owner asks would eat into a ₹199/month plan.&lt;br&gt;
Works offline: many small shops have unreliable internet, and this works without it.&lt;br&gt;
Customization: I could tune the prompt with the shop’s own column names and item names (including Tamil names), which a generic tool handles poorly.&lt;br&gt;
No lock-in: if a better open model comes out, or the shop has an older laptop, I can swap the model without rewriting the app.&lt;/p&gt;

&lt;p&gt;[Add one honest comparison here, e.g. “I tried the same questions on a hosted model: accuracy was [X], but it required uploading the data and costs [Y] per query.”]&lt;/p&gt;

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

&lt;p&gt;[Who they are: a shop owner, a relative who runs a business, a tea stall, a hotel.]&lt;/p&gt;

&lt;p&gt;What they asked first:&lt;br&gt;
What worked / what confused them:&lt;br&gt;
Would they pay, and how much:&lt;br&gt;
What they asked for next:&lt;/p&gt;

&lt;p&gt;If you haven’t shown it to anyone by the deadline, delete this section.&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>hf26challenge</category>
    </item>
    <item>
      <title>Traillcall</title>
      <dc:creator>SRIRAM S</dc:creator>
      <pubDate>Sat, 10 Oct 2026 17:14:58 +0000</pubDate>
      <link>https://dev.to/sriram01/traillcall-5eei</link>
      <guid>https://dev.to/sriram01/traillcall-5eei</guid>
      <description>&lt;p&gt;the BirdNET*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;/p&gt;

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

&lt;p&gt;&lt;strong&gt;TrailCall&lt;/strong&gt; is an offline bird-call companion for walks. You record a short clip on the trail, and it identifies the birds singing around you, then turns the detections into a short field note and adds them to your personal life list.&lt;/p&gt;

&lt;p&gt;The screen is the shortest part of the experience: tap record, put the device away, and keep walking. The detail only appears once you're back or at a rest stop. The goal is to make people look up and listen instead of scrolling.&lt;/p&gt;

&lt;p&gt;It's for beginner birders, students, and anyone who hears a call and wonders "what is that?", especially in places with weak or no signal.&lt;/p&gt;

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

&lt;p&gt;Field test: [TODO: where you went, how long, how many species it identified, what it got wrong. Write this from your real outing.]&lt;/p&gt;

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

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

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Detection:&lt;/strong&gt; BirdNET-Analyzer, an open-source bird sound classifier, runs fully locally on audio clips in Python.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Field notes:&lt;/strong&gt; a small open-weight model (e.g. Qwen2.5 or Llama 3.2 via &lt;strong&gt;Ollama&lt;/strong&gt;) turns the raw detections (species, confidence, time) into a readable note with a short, plain-language fact about each bird.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Storage:&lt;/strong&gt; a local &lt;strong&gt;SQLite&lt;/strong&gt; life list with date, species, and confidence.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Interface:&lt;/strong&gt; a minimal &lt;strong&gt;Streamlit&lt;/strong&gt; page (or CLI) with a record/upload button and a life-list view.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Flow:&lt;/strong&gt; record clip → BirdNET detections → confidence filter → local LLM writes the note → save to SQLite.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Everything runs on a laptop with no internet connection.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Works where there's no signal.&lt;/strong&gt; A cloud API is useless on a trail. Local models mean it works exactly where birds are.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Your recordings and locations stay with you.&lt;/strong&gt; Sightings and GPS context are sensitive, and nothing is uploaded to a server you don't control.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Zero running cost.&lt;/strong&gt; There's no per-call fee, so people can use it on every walk.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Swappable and tunable.&lt;/strong&gt; I can swap the language model, change the note style, or later fine-tune on local species without waiting on a vendor.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Licensing note:&lt;/strong&gt; BirdNET's model weights are released under a non-commercial license, so this is a learning and community tool, not a commercial product.&lt;/li&gt;
&lt;/ul&gt;

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

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

</description>
      <category>devchallenge</category>
      <category>hf26challenge</category>
    </item>
    <item>
      <title>MockMate: a free interview coach for [friend's name] that runs on my own laptop</title>
      <dc:creator>SRIRAM S</dc:creator>
      <pubDate>Sun, 04 Oct 2026 10:50:35 +0000</pubDate>
      <link>https://dev.to/sriram01/mockmate-a-free-interview-coach-for-friends-name-that-runs-on-my-own-laptop-24dg</link>
      <guid>https://dev.to/sriram01/mockmate-a-free-interview-coach-for-friends-name-that-runs-on-my-own-laptop-24dg</guid>
      <description>&lt;p&gt;This is a submission for the Hacktoberfest Weekend Challenge: Build for a Friend&lt;/p&gt;

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

&lt;p&gt;Ragul is preparing for cloud and data analytics jobs in Tamil Nadu, and so am I, which means we both know the same problem: nobody to practise interviews with. Paid mock interview tools cost money, and practising on a friend gets awkward fast.&lt;/p&gt;

&lt;p&gt;MockMate asks interview questions on Python, Excel, SQL, Power BI and cloud basics. You type your answer and it gives a score out of 10, what was good, what was missing, and a stronger sample answer. A progress tab tracks your average per topic and points out your weakest one. [Add one honest sentence on why this matters to your friend.]&lt;/p&gt;

&lt;p&gt;Code&lt;/p&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/SRIRAM007-2" rel="noopener noreferrer"&gt;
        SRIRAM007-2
      &lt;/a&gt; / &lt;a href="https://github.com/SRIRAM007-2/MockMate" rel="noopener noreferrer"&gt;
        MockMate
      &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;🎤 MockMate&lt;/h1&gt;
&lt;/div&gt;
&lt;p&gt;A free interview practice partner for cloud and data analytics jobs. It runs on your own machine using an open-weight model, so your answers never leave your laptop and there is nothing to pay for.&lt;/p&gt;
&lt;p&gt;Built for a friend for the &lt;a href="https://dev.to/challenges/hacktoberfest-weekend-2026-10-01" rel="nofollow"&gt;Hacktoberfest Weekend Challenge: Build for a Friend&lt;/a&gt;.&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;What it does&lt;/h2&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;Asks interview questions on &lt;strong&gt;Python, Excel, SQL, Power BI and Cloud basics&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Lets you pick a level: &lt;strong&gt;Fresher&lt;/strong&gt; or &lt;strong&gt;Intermediate&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Scores your answer out of 10 and shows &lt;strong&gt;what was good&lt;/strong&gt;, &lt;strong&gt;what was missing&lt;/strong&gt;, and a &lt;strong&gt;stronger sample answer&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Saves every attempt and shows your &lt;strong&gt;average per topic&lt;/strong&gt; and your &lt;strong&gt;weakest topic&lt;/strong&gt; in a Progress tab&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Tech stack (all open source)&lt;/h2&gt;
&lt;/div&gt;
&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Part&lt;/th&gt;
&lt;th&gt;Tool&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Model&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;qwen2.5:7b&lt;/code&gt; (open weights)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Local inference&lt;/td&gt;
&lt;td&gt;&lt;a href="https://ollama.com" rel="nofollow noopener noreferrer"&gt;Ollama&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Interface&lt;/td&gt;
&lt;td&gt;&lt;a href="https://streamlit.io" rel="nofollow noopener noreferrer"&gt;Streamlit&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Storage&lt;/td&gt;
&lt;td&gt;SQLite (a single local file, &lt;code&gt;mockmate.db&lt;/code&gt;)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Setup&lt;/h2&gt;

&lt;/div&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Install &lt;a href="https://ollama.com/download" rel="nofollow noopener noreferrer"&gt;Ollama&lt;/a&gt; and pull the model:&lt;/p&gt;
&lt;div class="highlight highlight-source-shell notranslate position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;ollama pull qwen2.5:7b&lt;/pre&gt;

&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Install the Python packages:&lt;/p&gt;
&lt;div class="highlight highlight-source-shell notranslate position-relative overflow-auto js-code-highlight"&gt;…
&lt;/div&gt;
&lt;/li&gt;
&lt;/ol&gt;&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/SRIRAM007-2/MockMate" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;How I Built It&lt;br&gt;
qwen2.5:7b through Ollama is the interviewer and the evaluator. One model asks the question, then judges the answer.&lt;br&gt;
JSON mode forces the evaluation into a fixed shape (score, good, missing, better answer), so the app can store scores and draw progress instead of showing loose text.&lt;br&gt;
SQLite keeps every attempt in one local file.&lt;br&gt;
Streamlit gives the two-tab interface.&lt;/p&gt;

&lt;p&gt;The whole app is one Python file of about 130 lines. [Add one real problem you hit, for example the model returning scores outside 1 to 10, which the code now clamps.]&lt;/p&gt;

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

&lt;p&gt;Interview practice is vulnerable. People answer badly, and nobody wants those attempts on someone else's server. With an open-weight model running locally, [friend's name]'s answers and weak spots stay on their own machine, there's no per-question bill, and it works without internet once the model is downloaded. I also made the interviewer fit our situation: the prompt targets entry-level cloud and data roles in India, which I could change in one line. I couldn't do that with a general-purpose closed chatbot.&lt;/p&gt;

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