<?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: Yagna Vyas</title>
    <description>The latest articles on DEV Community by Yagna Vyas (@yagya_vyas_ef6ff67900a599).</description>
    <link>https://dev.to/yagya_vyas_ef6ff67900a599</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%2F4160129%2Fa2d2bb74-f3ac-4edf-84f7-f5cf1704b9ad.png</url>
      <title>DEV Community: Yagna Vyas</title>
      <link>https://dev.to/yagya_vyas_ef6ff67900a599</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/yagya_vyas_ef6ff67900a599"/>
    <language>en</language>
    <item>
      <title>Receipt Sorter Pro: A Private Expense Tracker Powered by Local Qwen3</title>
      <dc:creator>Yagna Vyas</dc:creator>
      <pubDate>Fri, 16 Oct 2026 18:35:14 +0000</pubDate>
      <link>https://dev.to/yagya_vyas_ef6ff67900a599/receipt-sorter-pro-a-private-expense-tracker-powered-by-local-qwen3-55bn</link>
      <guid>https://dev.to/yagya_vyas_ef6ff67900a599/receipt-sorter-pro-a-private-expense-tracker-powered-by-local-qwen3-55bn</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;Receipt Sorter Pro is a private expense tracker for freelancers and small business owners. You upload receipts (.txt or text-based PDF) or paste the text, and a local open-weight model extracts the vendor, date, currency, tax, total, payment method, category, and line items.&lt;/p&gt;

&lt;p&gt;Who would pay for it: a freelancer or shop owner who dreads sorting receipts at tax time but doesn't want to upload financial records to a cloud service.&lt;/p&gt;

&lt;p&gt;What it gives them:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A dashboard with spending by category and month, plus top vendors&lt;/li&gt;
&lt;li&gt;An editable review table to fix mistakes&lt;/li&gt;
&lt;li&gt;A ⚠️ flag when the extracted total doesn't appear in the receipt&lt;/li&gt;
&lt;li&gt;Vendor rules (for example, "uber" is always travel)&lt;/li&gt;
&lt;li&gt;Duplicate detection&lt;/li&gt;
&lt;li&gt;CSV and Excel export with summary sheets&lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;I kept it local on purpose, because its main selling point is that your data never leaves your computer.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Flcu9ad26lcmsocc51ygp.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Flcu9ad26lcmsocc51ygp.png" alt=" " width="799" height="381"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F5ax02kv6v5g982k9on18.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F5ax02kv6v5g982k9on18.png" alt=" " width="800" height="370"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F57xnb1w58yumvee8b43x.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F57xnb1w58yumvee8b43x.png" alt=" " width="800" height="306"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fd5ffi82mvr3fitug807g.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fd5ffi82mvr3fitug807g.png" alt=" " width="799" height="267"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F5y00mxn3xfn07c4933l3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F5y00mxn3xfn07c4933l3.png" alt=" " width="800" height="225"&gt;&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/Yagya443" rel="noopener noreferrer"&gt;
        Yagya443
      &lt;/a&gt; / &lt;a href="https://github.com/Yagya443/receipt-sorter" rel="noopener noreferrer"&gt;
        receipt-sorter
      &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;Local Receipt Sorter&lt;/h1&gt;
&lt;/div&gt;
&lt;p&gt;This small Python tool reads &lt;code&gt;.txt&lt;/code&gt; receipts from &lt;code&gt;receipts/&lt;/code&gt;, asks a local Ollama
model to extract the vendor, date, total, and category, then writes the results to
&lt;code&gt;output.csv&lt;/code&gt; and prints spending totals for each category.&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Requirements&lt;/h2&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;Python 3.9 or newer&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://ollama.com/" rel="nofollow noopener noreferrer"&gt;Ollama&lt;/a&gt; installed and running locally&lt;/li&gt;
&lt;li&gt;The &lt;code&gt;qwen3:4b&lt;/code&gt; model pulled into Ollama (or another model selected in &lt;code&gt;sorter.py&lt;/code&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Install the Python dependency:&lt;/p&gt;
&lt;div class="highlight highlight-source-shell notranslate position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;python -m pip install -r requirements.txt&lt;/pre&gt;

&lt;/div&gt;
&lt;p&gt;Download the default model if needed:&lt;/p&gt;
&lt;div class="highlight highlight-source-shell notranslate position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;ollama pull qwen3:4b&lt;/pre&gt;

&lt;/div&gt;
&lt;p&gt;Ollama must be running locally when you execute the sorter. If its service is
not already running, start it in a separate terminal:&lt;/p&gt;
&lt;div class="highlight highlight-source-shell notranslate position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;ollama serve&lt;/pre&gt;

&lt;/div&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Run&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;Put one plain-text receipt per &lt;code&gt;.txt&lt;/code&gt; file in the &lt;code&gt;receipts/&lt;/code&gt; folder, then run:&lt;/p&gt;
&lt;div class="highlight highlight-source-shell notranslate position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;python sorter.py&lt;/pre&gt;

&lt;/div&gt;
&lt;p&gt;The script uses Ollama's JSON response format and disables model thinking. It
removes any &lt;code&gt;&amp;lt;think&amp;gt;...&amp;lt;/think&amp;gt;&lt;/code&gt; block if one appears and retries once when the
response is invalid. The…&lt;/p&gt;&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/Yagya443/receipt-sorter" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


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

&lt;ul&gt;
&lt;li&gt;Model: Qwen3 4B, an open-weight model, running locally through Ollama. The app lets you switch to any model you have installed (I also have &lt;code&gt;qwen3:8b&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;Structured output: the model is given a JSON schema, so it can only return valid fields and allowed categories. Thinking mode is turned off and the temperature is 0, and there is one automatic retry on bad output.&lt;/li&gt;
&lt;li&gt;Safety checks:each extracted total must appear in the original receipt text, otherwise the receipt is flagged for review. Dates are normalised to YYYY-MM-DD, and currency codes are cleaned up (&lt;code&gt;Rs.&lt;/code&gt; becomes &lt;code&gt;INR&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;App: Python, Streamlit for the web interface, SQLite for saved history, and pandas for the dashboard and exports.&lt;/li&gt;
&lt;li&gt;Tools: I started with GitHub Copilot, which generated the first command-line version (&lt;code&gt;sorter.py&lt;/code&gt;) from one detailed prompt. I then extended it into the web app with a database, dashboard, and editing features.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I tested it on 10 receipts in different formats, including rupee bills with GST, a USD cloud invoice, and two deliberately messy receipts. The testing found a real bug: &lt;code&gt;5/10/26&lt;/code&gt; was read as May instead of October. I fixed it by parsing ambiguous dates day-first, and I added the editable table because small models will always make some mistakes.&lt;/p&gt;

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

&lt;p&gt;-Privacy: receipts are financial records. Because Qwen3 runs on the user's own laptop, nothing goes to a third-party server. For this audience, that's the whole point.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Cost: there are no per-receipt API fees. Processing 10 receipts or 10,000 costs the same, which is what makes this viable as an affordable tool for a small business.&lt;/li&gt;
&lt;li&gt;Offline: it works with no internet connection.&lt;/li&gt;
&lt;li&gt;Control: I can swap models, change the prompt, add vendor rules, and tune the categories for a specific niche. With a closed API, I'd be tied to someone else's pricing, model changes, and data policies.
Where it was weaker: a 4B model is slower than a cloud API and makes more mistakes, especially with ambiguous dates. I handled that with validation, a review flag, and manual editing, rather than hiding the problem.&lt;/li&gt;
&lt;/ul&gt;

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

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

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

</description>
      <category>devchallenge</category>
      <category>hf26challenge</category>
    </item>
    <item>
      <title>Run Club: Find your pace, your people, and a reason to get outside</title>
      <dc:creator>Yagna Vyas</dc:creator>
      <pubDate>Sat, 10 Oct 2026 18:13:55 +0000</pubDate>
      <link>https://dev.to/yagya_vyas_ef6ff67900a599/run-club-find-your-pace-your-people-and-a-reason-to-get-outside-3pp</link>
      <guid>https://dev.to/yagya_vyas_ef6ff67900a599/run-club-find-your-pace-your-people-and-a-reason-to-get-outside-3pp</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;Run Club is a running app that helps people plan a route and find others to run with. Runners can explore route options, connect with nearby people who have shared their availability, and organize group runs. If no one is available, they can create a public run that other runners can discover and join&lt;/p&gt;

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

&lt;p&gt;&lt;a href="https://run-club-tau.vercel.app/home" rel="noopener noreferrer"&gt;https://run-club-tau.vercel.app/home&lt;/a&gt;&lt;/p&gt;

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

&lt;p&gt;&lt;a href="https://github.com/Yagya443/Run-Club" rel="noopener noreferrer"&gt;https://github.com/Yagya443/Run-Club&lt;/a&gt;&lt;/p&gt;

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

&lt;p&gt;The app uses React and Vite for the frontend, Express for the backend, and MongoDB with Mongoose for storing app data. It uses map and routing services to help runners plan routes.&lt;br&gt;
For AI features, I use the open-weight Qwen3:4b model through Ollama running locally. It can help describe route options, explain why runners may be a good match, and generate a post-run reflection or suggestion for the next run. The app’s code handles route generation and matching scores; the AI adds natural-language explanations and suggestions&lt;/p&gt;

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

&lt;p&gt;Using an open-weight model lets me run AI locally and experiment with how it fits into the app without relying on a paid hosted AI API for each request. It also makes it easier to inspect the model setup and try a different model later.&lt;br&gt;
Open tools across the stack helped me build the mapping, backend, database, and AI features as parts I can adapt as the project grows.&lt;/p&gt;

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

&lt;p&gt;Ollama running Qwen3:4b&lt;/p&gt;

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

&lt;p&gt;Best Use of Render&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>hf26challenge</category>
      <category>vibecoding</category>
    </item>
    <item>
      <title>ThinkTrace - AI-Powered Adaptive Interview Platform</title>
      <dc:creator>Yagna Vyas</dc:creator>
      <pubDate>Sun, 04 Oct 2026 23:21:02 +0000</pubDate>
      <link>https://dev.to/yagya_vyas_ef6ff67900a599/thinktrace-ai-powered-adaptive-interview-platform-1g8f</link>
      <guid>https://dev.to/yagya_vyas_ef6ff67900a599/thinktrace-ai-powered-adaptive-interview-platform-1g8f</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;h1&gt;
  
  
  What I Built
&lt;/h1&gt;

&lt;h1&gt;
  
  
  Demo
&lt;/h1&gt;

&lt;h1&gt;
  
  
  Code
&lt;/h1&gt;

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

&lt;p&gt;ThinkTrace is built as a full-stack application.&lt;/p&gt;

&lt;h1&gt;
  
  
  Frontend
&lt;/h1&gt;

&lt;ul&gt;
&lt;li&gt;React&lt;/li&gt;
&lt;li&gt;Vite&lt;/li&gt;
&lt;li&gt;Tailwind CSS&lt;/li&gt;
&lt;li&gt;React Router&lt;/li&gt;
&lt;li&gt;Axios&lt;/li&gt;
&lt;li&gt;Monaco Editor&lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;
  
  
  Backend
&lt;/h1&gt;

&lt;ul&gt;
&lt;li&gt;Node.js&lt;/li&gt;
&lt;li&gt;Express&lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;
  
  
  AI
&lt;/h1&gt;

&lt;ul&gt;
&lt;li&gt;Ollama&lt;/li&gt;
&lt;li&gt;GPT-OSS 20B (Open-Weight Model)&lt;/li&gt;
&lt;li&gt;Ollama Cloud API&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The core of ThinkTrace is built around open-weight AI models through Ollama&lt;br&gt;
The application uses Ollama's API to communicate with the AI model. The model can be changed through environment configuration rather than being hard-coded into the application.&lt;/p&gt;

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

&lt;h1&gt;
  
  
  Prize Categories
&lt;/h1&gt;

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