<?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: Harshit</title>
    <description>The latest articles on DEV Community by Harshit (@harshit_dev_0528d1254eb05).</description>
    <link>https://dev.to/harshit_dev_0528d1254eb05</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%2F4159244%2Ffd4eebe8-d54d-4838-98bd-56aa48d1861c.jpg</url>
      <title>DEV Community: Harshit</title>
      <link>https://dev.to/harshit_dev_0528d1254eb05</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/harshit_dev_0528d1254eb05"/>
    <language>en</language>
    <item>
      <title>A shop calendar that knows what will run out this week</title>
      <dc:creator>Harshit</dc:creator>
      <pubDate>Sat, 03 Oct 2026 18:38:20 +0000</pubDate>
      <link>https://dev.to/harshit_dev_0528d1254eb05/a-shop-calendar-that-knows-what-will-run-out-this-week-4ff2</link>
      <guid>https://dev.to/harshit_dev_0528d1254eb05/a-shop-calendar-that-knows-what-will-run-out-this-week-4ff2</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;The father of a friend runs an electrical shop. Wires, switches, bulbs, around 750 different things on the shelves.&lt;/p&gt;

&lt;p&gt;Every week he decides what to order by walking along those shelves and looking. Sometimes he orders too much. Sometimes a thing is finished before he notices.&lt;/p&gt;

&lt;p&gt;He already uses a billing app, and that app already makes two reports: every bill he has written, and how much stock is left. Nobody reads them.&lt;/p&gt;

&lt;p&gt;So I built Shop Stock Predictor. He gives it those two reports, and it says what will run out in the next 7 days and how much to order. The note comes in Hindi, English or Hinglish. The order goes to WhatsApp, a printed sheet, or a receipt printer.&lt;/p&gt;

&lt;p&gt;The page looks like the tear-off date calendar that hangs behind most shop counters in India: a big date, red Sundays, the weekday in Hindi and English. The next seven days are seven leaves, and each item sits on the day it will finish. I chose that look because it is something he already reads every morning.&lt;/p&gt;

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

&lt;p&gt;  &lt;iframe src="https://www.youtube.com/embed/Ky_6EVsYtyc" width="710" height="399"&gt;
  &lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;Try it: &lt;a href="https://shop-stock-predictor.onrender.com" rel="noopener noreferrer"&gt;shop-stock-predictor.onrender.com&lt;/a&gt;. It runs on a free host that sleeps, so the first visit can take about a minute.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fi119tdw24gqyrb3qyczw.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fi119tdw24gqyrb3qyczw.gif" alt="The sample run: two reports go in, the week fills in as seven calendar leaves, then the Hindi note, the order list and a receipt printing" width="560" height="315"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;"Try it with sample data" opens a recorded real run on made-up grocery items. You can also download the two sample files from the page and upload them to run it live.&lt;/p&gt;

&lt;p&gt;The voice in the video is my own, cloned with ElevenLabs.&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/avionicharshit-byte" rel="noopener noreferrer"&gt;
        avionicharshit-byte
      &lt;/a&gt; / &lt;a href="https://github.com/avionicharshit-byte/shop-stock-predictor" rel="noopener noreferrer"&gt;
        shop-stock-predictor
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      Tells a small shop what will run out this week and how much to order. TabPFN + Gemma, runs on one laptop.
    &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;Shop Stock Predictor&lt;/h1&gt;
&lt;/div&gt;
&lt;p&gt;Tells a small shop what will run out this week and how much to order.&lt;/p&gt;
&lt;p&gt;
  &lt;a rel="noopener noreferrer" href="https://github.com/avionicharshit-byte/shop-stock-predictor/docs/assets/site-hero.png"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fraw.githubusercontent.com%2Favionicharshit-byte%2Fshop-stock-predictor%2FHEAD%2Fdocs%2Fassets%2Fsite-hero.png" width="880" alt="The website's first screen, made to look like a tear-off shop wall calendar: a red header board, today's date as a giant blue 3 with Saturday written in Hindi and English, two slots for the sales report and the stock report, a black Check the stock button, and a small table showing TabPFN at 3.27 against two plain averages at 3.71 and 3.70."&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;Built for a friend's father, who runs an electrical shop and decides what to reorder by walking
the shelves. He gives it the two reports his billing app already makes. He gets back a short note
in Hindi, English or Hinglish and an order list to send on WhatsApp or print.&lt;/p&gt;
&lt;p&gt;
  &lt;a href="https://shop-stock-predictor.onrender.com" rel="nofollow noopener noreferrer"&gt;Try it live&lt;/a&gt; ·
  &lt;a href="https://shop-stock-predictor.onrender.com/media/demo.mp4" rel="nofollow noopener noreferrer"&gt;Watch the one-minute video&lt;/a&gt; ·
  Made for the DEV &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;br&gt;The free host sleeps when idle, so the first visit can take about a minute.
&lt;/p&gt;

&lt;p&gt;
  &lt;a rel="noopener noreferrer" href="https://github.com/avionicharshit-byte/shop-stock-predictor/docs/assets/demo.gif"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fraw.githubusercontent.com%2Favionicharshit-byte%2Fshop-stock-predictor%2FHEAD%2Fdocs%2Fassets%2Fdemo.gif" width="880" alt="A sample run on the site: a sales report and a stock report go in, the week fills in as seven calendar leaves with each item on the day it runs out, then the note in Hindi, the order list, and a receipt printing on a thermal printer."&gt;&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;p&gt;&lt;/p&gt;&lt;div class="table-wrapper-paragraph"&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;table&gt;

  &lt;tbody&gt;

&lt;tr&gt;

    &lt;td width="33%"&gt;
&lt;br&gt;
&lt;a rel="noopener noreferrer" href="https://github.com/avionicharshit-byte/shop-stock-predictor/docs/assets/site-week.png"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fraw.githubusercontent.com%2Favionicharshit-byte%2Fshop-stock-predictor%2FHEAD%2Fdocs%2Fassets%2Fsite-week.png" alt="The week as seven calendar leaves from Saturday 3 to Friday 9 October. Sunday is solid red and marked runs out first, with Bread, order 11 packs. Each other item sits on its own day with a packs count and a Hindi line, and a stamp says made-up sample items."&gt;&lt;/a&gt;&lt;br&gt;Each item lands on the day it runs out.&lt;/td&gt;

    &lt;td width="33%"&gt;
&lt;br&gt;
&lt;a rel="noopener noreferrer" href="https://github.com/avionicharshit-byte/shop-stock-predictor/docs/assets/site-order.png"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fraw.githubusercontent.com%2Favionicharshit-byte%2Fshop-stock-predictor%2FHEAD%2Fdocs%2Fassets%2Fsite-order.png" alt="The order list: eight ticked items with a quantity box each, such as Bread 110 and Colgate 100g 36, then three buttons: copy for WhatsApp, print the order sheet, and print on a receipt printer with a 2 inch or 3 inch paper choice."&gt;&lt;/a&gt;&lt;br&gt;Change any quantity, then send or print the order.&lt;/td&gt;

    &lt;td width="33%"&gt;
&lt;br&gt;
&lt;a rel="noopener noreferrer" href="https://github.com/avionicharshit-byte/shop-stock-predictor/docs/assets/receipt.jpg"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fraw.githubusercontent.com%2Favionicharshit-byte%2Fshop-stock-predictor%2FHEAD%2Fdocs%2Fassets%2Freceipt.jpg" alt="A printed receipt held up over a small Bluetooth thermal printer. It reads Shop Stock Predictor, sample order, made-up items, order list 03 Oct 2026, then eight items from Bread 110 pcs to Tata Salt 1kg 20 pcs."&gt;&lt;/a&gt;&lt;br&gt;A receipt from the browser, on a Bluetooth printer.&lt;/td&gt;

  &lt;/tr&gt;

&lt;/tbody&gt;

&lt;/table&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;How it works&lt;/h2&gt;
&lt;/div&gt;

&lt;p&gt;
  &lt;a rel="noopener noreferrer" href="https://github.com/avionicharshit-byte/shop-stock-predictor/docs/assets/flow.svg"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fraw.githubusercontent.com%2Favionicharshit-byte%2Fshop-stock-predictor%2FHEAD%2Fdocs%2Fassets%2Fflow.svg" width="880" alt="Two reports from the billing app go through five steps. Plain code reads the files. TabPFN, an AI model, guesses each item's sales for the next 7 days. Plain arithmetic works out what runs out, on which day and how much to order. Gemma, an AI model, words each line but never sees a name or a number. Code checks each line. Out come a short note, an order list for WhatsApp or an order sheet, and a receipt. It runs on the shop's laptop or on the website."&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/PriorLabs/TabPFN" rel="noopener noreferrer"&gt;TabPFN&lt;/a&gt;, an open model for tables, guesses each item's
sales for 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/avionicharshit-byte/shop-stock-predictor" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;MIT licensed. There are two ways to run it:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;On the shop laptop.&lt;/strong&gt; TabPFN and Gemma both run locally, and the sales never leave the machine.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;On the website.&lt;/strong&gt; The free host has 512 MB of memory and cannot hold the models, so it calls TabPFN through the Prior Labs API and Gemma 4 through the Google API. Item names go to neither. Only quantities and the position of each day on the calendar are sent.&lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;I kept one rule: the AI never decides a number. A wrong number here becomes a wrong order.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;TabPFN&lt;/strong&gt; guesses how much of each item will sell on each of the next 7 days.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Plain arithmetic&lt;/strong&gt; compares that with the stock, finds the day it runs out, and works out the order.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Gemma 4&lt;/strong&gt; only rewords each finished line. It never sees an item name or a number. It gets &lt;code&gt;[ITEM] will run out of stock by Monday, order [QTY] pieces&lt;/code&gt;, and my code puts the real values back.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Code checks every line&lt;/strong&gt; Gemma writes. Each blank must survive exactly once and the right weekday must be named. A line that fails stays as the plain sentence.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  What went wrong with TabPFN first
&lt;/h3&gt;

&lt;p&gt;My first version put every item into one table, with averages I made by hand. On a public dataset it lost to a plain average: 228 pieces off per week against 143.&lt;/p&gt;

&lt;p&gt;The mistake was mine. The forecasting recipe from Prior Labs is one small table per item, with nothing but calendar features. After I rebuilt it that way, it was closer than the plain average in six hidden weeks out of six on that same dataset.&lt;/p&gt;

&lt;h3&gt;
  
  
  Does it help on the real shop?
&lt;/h3&gt;

&lt;p&gt;The app has an honesty test. It hides the last week of sales, predicts it, and shows how far off TabPFN was, next to two averages that need no AI.&lt;/p&gt;

&lt;p&gt;On three months of real bills from the shop, over six hidden weeks, in pieces off per item:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Guess&lt;/th&gt;
&lt;th&gt;Per day&lt;/th&gt;
&lt;th&gt;Per week&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Plain average&lt;/td&gt;
&lt;td&gt;0.81&lt;/td&gt;
&lt;td&gt;3.71&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Same-weekday average&lt;/td&gt;
&lt;td&gt;0.80&lt;/td&gt;
&lt;td&gt;3.70&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;TabPFN&lt;/td&gt;
&lt;td&gt;0.63&lt;/td&gt;
&lt;td&gt;3.27&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;TabPFN was closer per day in six weeks of six, and per week in five of six. With only one month of bills it was a toss-up: one week won, one lost.&lt;/p&gt;

&lt;h3&gt;
  
  
  What went wrong with Gemma first
&lt;/h3&gt;

&lt;p&gt;Asked to rewrite a whole list, it added "Okay, here is a WhatsApp note" and an English translation nobody asked for. Given one example, it copied the day from that example into every line. It spelled numbers as words and invented "kal".&lt;/p&gt;

&lt;p&gt;Blanks, two examples per language and a check on every line fixed it. I tried this with Gemma 3 locally too, and it worked fine. On the site, Gemma 4 took 11 seconds a line until I turned its thinking down. Then it took 2.&lt;/p&gt;

&lt;h3&gt;
  
  
  The day I tested the real files
&lt;/h3&gt;

&lt;p&gt;On a big shop the site checks 25 items. I had it pick the 25 best sellers. It said one item needed ordering.&lt;/p&gt;

&lt;p&gt;It was right, and useless. The best sellers are the things he never lets run low. Plain arithmetic over all 332 regular items showed 23 about to finish, and only one of them was a best seller. Now the site picks the 25 items closest to running out, and the model predicts those.&lt;/p&gt;

&lt;h3&gt;
  
  
  Printing
&lt;/h3&gt;

&lt;p&gt;A web page can talk to a Bluetooth printer directly in Chrome. So the order list prints on a 2 inch thermal printer straight from the browser, with the same bytes the laptop version sends. I have tested it on one printer.&lt;/p&gt;

&lt;h3&gt;
  
  
  What is still not good
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;The "busy week" number is meant to cover 8 weeks in 10. On the real shop it covered 66 percent of items.&lt;/li&gt;
&lt;li&gt;Scanned or handwritten bills are not read.&lt;/li&gt;
&lt;li&gt;A sudden bulk sale cannot be predicted by anything.&lt;/li&gt;
&lt;li&gt;The website runs on free quotas, so live checks are limited each day. When they run out, the page says so and the recorded run still works.&lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;The sales of a shop are its private business. The only reason I could build this for him is that the models are open.&lt;/p&gt;

&lt;p&gt;The TabPFN weights are open, so on his laptop the forecast runs with no account and no internet. The Gemma weights are open, so the Hindi note is written on the same machine. Nothing he sells has to leave the shop to get an answer.&lt;/p&gt;

&lt;p&gt;And the recipe that fixed my forecast was not mine. It was written down in a paper anyone can read. I lost to a plain average until I followed it.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Best Use of TabPFN.&lt;/strong&gt; It makes every forecast, and the app measures it against two plain averages on real sales instead of asking you to trust it.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Best Use of Gemma.&lt;/strong&gt; Gemma 4 words every note in Hindi, English or Hinglish, kept away from the numbers and checked line by line.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The site is hosted on Render.&lt;/p&gt;

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