<?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: Aryan 74</title>
    <description>The latest articles on DEV Community by Aryan 74 (@aryan_74_e992d1695f646ff3).</description>
    <link>https://dev.to/aryan_74_e992d1695f646ff3</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%2F4152871%2Ff1fda3b5-0662-4625-8bf9-6bc43d4ab39e.png</url>
      <title>DEV Community: Aryan 74</title>
      <link>https://dev.to/aryan_74_e992d1695f646ff3</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/aryan_74_e992d1695f646ff3"/>
    <language>en</language>
    <item>
      <title>I Built an AI Assistant for My Dad’s Wholesale Business</title>
      <dc:creator>Aryan 74</dc:creator>
      <pubDate>Mon, 05 Oct 2026 05:34:52 +0000</pubDate>
      <link>https://dev.to/aryan_74_e992d1695f646ff3/i-built-an-ai-assistant-for-my-dads-wholesale-business-481g</link>
      <guid>https://dev.to/aryan_74_e992d1695f646ff3/i-built-an-ai-assistant-for-my-dads-wholesale-business-481g</guid>
      <description>&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%2Fu1ip85xj9s0jqbow2joi.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%2Fu1ip85xj9s0jqbow2joi.png" alt=" " width="800" height="520"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  I Built an AI Assistant for My Dad’s Wholesale Business
&lt;/h1&gt;

&lt;p&gt;&lt;em&gt;My submission for the Hacktoberfest Weekend Challenge — Build for a Friend.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;I didn't have to think very hard about who I wanted to build for.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;My dad.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;He runs a wholesale business, and like many small business owners, a lot of his work happens inside Excel.&lt;/p&gt;

&lt;p&gt;Invoices. Customers. Payment history. Outstanding amounts.&lt;/p&gt;

&lt;p&gt;The data is there.&lt;/p&gt;

&lt;p&gt;But there's one question that still requires a lot of manual work:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;“Who should I call first?”&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That's the problem I decided to solve this weekend.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Problem I Had Already Seen
&lt;/h2&gt;

&lt;p&gt;This wasn't a problem I discovered while brainstorming a hackathon idea.&lt;/p&gt;

&lt;p&gt;I'd seen it at home.&lt;/p&gt;

&lt;p&gt;My dad would go through his spreadsheet, look at outstanding invoices, remember which customers usually paid late, check how much they owed, and then decide who needed a follow-up.&lt;/p&gt;

&lt;p&gt;None of this is particularly complicated individually.&lt;/p&gt;

&lt;p&gt;But when you're dealing with a lot of customers and invoices, it becomes repetitive.&lt;/p&gt;

&lt;p&gt;And the frustrating part is that &lt;strong&gt;the information needed to make the decision already exists in the spreadsheet.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I kept thinking:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Could we just make the computer do the first pass?&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Not make the decision for him.&lt;/p&gt;

&lt;p&gt;Just help him decide where to start.&lt;/p&gt;

&lt;p&gt;So I built &lt;strong&gt;Collection Radar&lt;/strong&gt;.&lt;/p&gt;




&lt;h1&gt;
  
  
  What Is Collection Radar?
&lt;/h1&gt;

&lt;p&gt;Collection Radar is a local AI tool that takes an existing wholesale invoice spreadsheet and turns it into a collection priority list.&lt;/p&gt;

&lt;p&gt;The workflow is intentionally simple:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Upload Excel → Learn from history → Predict risk → Prioritize invoices&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;For historical invoices, the model can learn from information such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Invoice amount&lt;/li&gt;
&lt;li&gt;Customer&lt;/li&gt;
&lt;li&gt;Previous late payments&lt;/li&gt;
&lt;li&gt;Average payment time&lt;/li&gt;
&lt;li&gt;Credit period&lt;/li&gt;
&lt;li&gt;Outstanding amount&lt;/li&gt;
&lt;li&gt;Region&lt;/li&gt;
&lt;li&gt;Whether the invoice was eventually paid late&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Then, for current outstanding invoices, it estimates the likelihood of late payment.&lt;/p&gt;

&lt;p&gt;The result is grouped into:&lt;/p&gt;

&lt;p&gt;🔴 &lt;strong&gt;High Risk&lt;/strong&gt;&lt;br&gt;
🟠 &lt;strong&gt;Medium Risk&lt;/strong&gt;&lt;br&gt;
🟢 &lt;strong&gt;Low Risk&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;But I didn't want to stop at a probability score.&lt;/p&gt;


&lt;h1&gt;
  
  
  Risk Isn't the Same as Priority
&lt;/h1&gt;

&lt;p&gt;Imagine the model gives me:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Invoice A:&lt;/strong&gt; 80% chance of being late&lt;br&gt;
&lt;strong&gt;Invoice B:&lt;/strong&gt; 65% chance of being late&lt;/p&gt;

&lt;p&gt;At first glance, Invoice A seems like the obvious one to call.&lt;/p&gt;

&lt;p&gt;But what if:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Invoice A = ₹15,000&lt;/li&gt;
&lt;li&gt;Invoice B = ₹5,00,000&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The business impact is very different.&lt;/p&gt;

&lt;p&gt;So Collection Radar also calculates &lt;strong&gt;potential cash exposure&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Potential Exposure
= Late Payment Probability × Invoice Amount
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now the system isn't simply asking:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“Which invoice is risky?”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;It's asking:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;“Which risky invoice could have the biggest impact on cash flow?”&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That's much closer to the decision my dad actually needs to make.&lt;/p&gt;




&lt;h1&gt;
  
  
  Why TabPFN?
&lt;/h1&gt;

&lt;p&gt;This project gave me an excuse to experiment with &lt;strong&gt;TabPFN&lt;/strong&gt;, a model designed specifically for tabular data.&lt;/p&gt;

&lt;p&gt;And this problem is almost entirely tabular.&lt;/p&gt;

&lt;p&gt;There's no need to build a complicated chatbot around the data.&lt;/p&gt;

&lt;p&gt;The input is structured:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Customer
Invoice Amount
Payment History
Credit Period
Outstanding Amount
...
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And the thing we're trying to predict is also straightforward:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Paid Late = Yes / No
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;TabPFN learns patterns from the historical data and uses them to score current invoices.&lt;/p&gt;

&lt;p&gt;One thing I deliberately &lt;strong&gt;didn't&lt;/strong&gt; want to do was claim that TabPFN is automatically better than every other model.&lt;/p&gt;

&lt;p&gt;That's something I want to measure.&lt;/p&gt;

&lt;p&gt;For the next version, I'll benchmark &lt;strong&gt;TabPFN vs XGBoost&lt;/strong&gt; using the same dataset and compare metrics such as ROC-AUC, F1, accuracy and runtime.&lt;/p&gt;

&lt;p&gt;If XGBoost performs better, that's the result.&lt;/p&gt;

&lt;p&gt;The point is to build something useful, not force the technology to win.&lt;/p&gt;




&lt;h1&gt;
  
  
  Why Local AI Was Important
&lt;/h1&gt;

&lt;p&gt;This is probably the most important product decision I made.&lt;/p&gt;

&lt;p&gt;We're dealing with real business information.&lt;/p&gt;

&lt;p&gt;Invoices contain financial data, customer information, payment behaviour and other details that shouldn't casually be sent to external services.&lt;/p&gt;

&lt;p&gt;So I wanted Collection Radar to run &lt;strong&gt;locally&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The idea is:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Set up the model while connected to the internet.&lt;/li&gt;
&lt;li&gt;Cache the model locally.&lt;/li&gt;
&lt;li&gt;Disconnect from the internet.&lt;/li&gt;
&lt;li&gt;Open Collection Radar.&lt;/li&gt;
&lt;li&gt;Upload the spreadsheet.&lt;/li&gt;
&lt;li&gt;Run the prediction locally.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The invoice data doesn't need to be sent to a cloud AI service for inference.&lt;/p&gt;

&lt;p&gt;For a small business, I think that matters.&lt;/p&gt;

&lt;p&gt;You shouldn't need an enterprise infrastructure team just to experiment with AI on your own spreadsheet.&lt;/p&gt;




&lt;h3&gt;
  
  
  Who should I call first?
&lt;/h3&gt;

&lt;p&gt;That's why the UI is deliberately simple.&lt;/p&gt;

&lt;p&gt;Upload the spreadsheet.&lt;/p&gt;

&lt;p&gt;Map the columns.&lt;/p&gt;

&lt;p&gt;Run the model.&lt;/p&gt;

&lt;p&gt;Get the priority list.&lt;/p&gt;

&lt;p&gt;The technology is behind the scenes.&lt;/p&gt;

&lt;p&gt;The output should be understandable in a few seconds.&lt;/p&gt;




&lt;h1&gt;
  
  
  The Architecture
&lt;/h1&gt;

&lt;p&gt;The current version is intentionally small:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;                 Excel / CSV
                     │
                     ▼
              Data Preparation
                     │
                     ▼
              Local TabPFN
                     │
                     ▼
              Risk Probability
                     │
                     ▼
          Cash Exposure Calculation
                     │
                     ▼
            Collection Priority
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The application is built with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Python&lt;/li&gt;
&lt;li&gt;Streamlit&lt;/li&gt;
&lt;li&gt;Pandas&lt;/li&gt;
&lt;li&gt;scikit-learn&lt;/li&gt;
&lt;li&gt;TabPFN&lt;/li&gt;
&lt;li&gt;OpenPyXL&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I've also kept the UI and ML logic reasonably separated so the interface can evolve without having to rebuild the model pipeline.&lt;/p&gt;




&lt;h1&gt;
  
  
  What I Learned
&lt;/h1&gt;

&lt;p&gt;The biggest lesson from this project wasn't actually about machine learning.&lt;/p&gt;

&lt;p&gt;It was about &lt;strong&gt;starting with a person instead of starting with technology.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Before this challenge, I would often approach projects by asking:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“What can I build with this new AI tool?”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This time I started with:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;“What does someone I care about struggle with?”&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That led me somewhere much more interesting.&lt;/p&gt;

&lt;p&gt;My dad didn't ask for TabPFN.&lt;/p&gt;

&lt;p&gt;He didn't ask for an AI assistant.&lt;/p&gt;

&lt;p&gt;He didn't ask for a risk model.&lt;/p&gt;

&lt;p&gt;He had a spreadsheet and a repetitive problem.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;I chose the technology after understanding the problem.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;That changed the way I built the project.&lt;/p&gt;




&lt;h1&gt;
  
  
  From “I Should Build This” to Actually Building It
&lt;/h1&gt;

&lt;p&gt;The most personal part of this project is also the simplest.&lt;/p&gt;

&lt;p&gt;I'd known about this problem for a while.&lt;/p&gt;

&lt;p&gt;I'd watched my dad work with spreadsheets and manually decide which customers needed attention.&lt;/p&gt;

&lt;p&gt;At some point I thought:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;There has to be a better way to do this.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;And then, like a lot of side-project ideas, it stayed in my head.&lt;/p&gt;

&lt;p&gt;Until this challenge.&lt;/p&gt;

&lt;p&gt;The &lt;strong&gt;Build for a Friend&lt;/strong&gt; theme gave me the push to finally turn that idea into something real.&lt;/p&gt;

&lt;p&gt;It's still a prototype.&lt;/p&gt;

&lt;p&gt;It's not going to magically solve collections tomorrow.&lt;/p&gt;

&lt;p&gt;But now I can actually put it in front of my dad and ask:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;“Would this make your work easier?”&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;And I think that's a much better test than asking whether a demo looks impressive.&lt;/p&gt;




&lt;h1&gt;
  
  
  What's Next?
&lt;/h1&gt;

&lt;p&gt;This is V1.&lt;/p&gt;

&lt;p&gt;There are a few things I want to add next.&lt;/p&gt;

&lt;h3&gt;
  
  
  V2: Model Benchmarking
&lt;/h3&gt;

&lt;p&gt;Compare:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;TabPFN vs XGBoost&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;on the same historical data.&lt;/p&gt;

&lt;p&gt;I'll measure:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;ROC-AUC&lt;/li&gt;
&lt;li&gt;F1&lt;/li&gt;
&lt;li&gt;Accuracy&lt;/li&gt;
&lt;li&gt;Runtime&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Better Collection Intelligence
&lt;/h3&gt;

&lt;p&gt;Eventually I'd like to add:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Due dates&lt;/li&gt;
&lt;li&gt;Days overdue&lt;/li&gt;
&lt;li&gt;Aging buckets&lt;/li&gt;
&lt;li&gt;Outstanding balance&lt;/li&gt;
&lt;li&gt;Payment terms&lt;/li&gt;
&lt;li&gt;Customer-level payment history&lt;/li&gt;
&lt;li&gt;Collection/follow-up status&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And eventually, instead of only showing invoice-level risk, I'd like to show something like:&lt;br&gt;
&lt;/p&gt;

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

Outstanding: ₹4.8L
Invoices: 7
Average Payment: 47 days
Late Payments: 5/9

Current Risk: 🔴 HIGH
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That starts turning Collection Radar from a prediction tool into an actual &lt;strong&gt;collection assistant&lt;/strong&gt;.&lt;/p&gt;




&lt;h1&gt;
  
  
  Try It
&lt;/h1&gt;

&lt;p&gt;The project is open source.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;GitHub:&lt;/strong&gt;&lt;br&gt;
&lt;code&gt;https://github.com/aryan7412/invoice-py.git&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;I'd genuinely love feedback from people who run small businesses or work with accounts receivable:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What would you want an AI assistant to tell you when you open your invoice spreadsheet?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Because that's ultimately what I'm trying to build.&lt;/p&gt;

&lt;p&gt;Not an AI demo.&lt;/p&gt;

&lt;p&gt;Not another dashboard.&lt;/p&gt;

&lt;p&gt;Just something that can look at a messy spreadsheet and say:&lt;/p&gt;

&lt;p&gt;Built for my dad. ❤️&lt;/p&gt;

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