<?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: Arin Dewangan</title>
    <description>The latest articles on DEV Community by Arin Dewangan (@arin_dewangan_6110e41aadb).</description>
    <link>https://dev.to/arin_dewangan_6110e41aadb</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%2F4170068%2F1b017c4f-f6c0-4f19-933a-6829c2aed85e.png</url>
      <title>DEV Community: Arin Dewangan</title>
      <link>https://dev.to/arin_dewangan_6110e41aadb</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/arin_dewangan_6110e41aadb"/>
    <language>en</language>
    <item>
      <title>SlothSort: I taught an open-source AI to clean my Downloads folder so I'd never have to 🦥</title>
      <dc:creator>Arin Dewangan</dc:creator>
      <pubDate>Tue, 20 Oct 2026 10:17:56 +0000</pubDate>
      <link>https://dev.to/arin_dewangan_6110e41aadb/slothsort-i-taught-an-open-source-ai-to-clean-my-downloads-folder-so-id-never-have-to-aid</link>
      <guid>https://dev.to/arin_dewangan_6110e41aadb/slothsort-i-taught-an-open-source-ai-to-clean-my-downloads-folder-so-id-never-have-to-aid</guid>
      <description>&lt;p&gt;My Downloads folder is where files go to be forgotten. Installers from 2024. &lt;code&gt;report-final(1).pdf&lt;/code&gt; sitting next to &lt;code&gt;report-final.pdf&lt;/code&gt;. Screenshots of things I no longer remember screenshotting. Every few months I open the folder, sigh, and close it again — the digital equivalent of shoving everything into a closet before guests arrive.&lt;/p&gt;

&lt;p&gt;So I built &lt;strong&gt;SlothSort&lt;/strong&gt; — a file tidier that does the procrastinated chore for you, using &lt;strong&gt;TabPFN&lt;/strong&gt;, the open-source tabular foundation model, running entirely on your own CPU. Point it at a folder listing and it triages every file into &lt;strong&gt;KEEP / ARCHIVE / DELETE&lt;/strong&gt; with a confidence score and a plain-English reason — the 24-file demo folder scores in a single ~9-second forward pass — then archives or deletes in one click, always with undo, because laziness should never be irreversible.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;🔗 Live demo:&lt;/strong&gt; &lt;a href="https://arindewangan.github.io/slothsort/demo/" rel="noopener noreferrer"&gt;https://arindewangan.github.io/slothsort/demo/&lt;/a&gt; (precomputed TabPFN outputs on a simulated folder, clearly labeled — works with zero backend)&lt;br&gt;
&lt;strong&gt;💻 Repo:&lt;/strong&gt; &lt;a href="https://github.com/arindewangan/slothsort" rel="noopener noreferrer"&gt;https://github.com/arindewangan/slothsort&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What it does
&lt;/h2&gt;

&lt;p&gt;Open the dashboard and SlothSort has already triaged a simulated ~/Downloads folder — 24 files, the usual suspects:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;ChromeSetup.exe&lt;/strong&gt; (untouched 400 days) → &lt;strong&gt;DELETE&lt;/strong&gt; — "It's an installer — you can re-download it any time"&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;report-final(1).pdf&lt;/strong&gt; → &lt;strong&gt;DELETE&lt;/strong&gt; — "Suspicious name — smells like a duplicate"&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;trip-goa-2024.mp4&lt;/strong&gt; (1.8 GB, unopened 480 days) → &lt;strong&gt;ARCHIVE&lt;/strong&gt; — "Cold media file worth keeping, not worth the clutter"&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;report-final.pdf&lt;/strong&gt; (opened 3 days ago) → &lt;strong&gt;KEEP&lt;/strong&gt; — "still in active use"&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The dashboard shows a verdict badge, a confidence bar, and the reasons for every file. One click archives or deletes (simulated in the demo, with full undo), and a stats row totals what you'd reclaim. There's also a "score your own file metadata" box — paste a filename, size, and dates, and get a verdict. Note the deliberate design choice: &lt;strong&gt;you paste metadata, never the file&lt;/strong&gt;. SlothSort never reads file contents, because it never needs to.&lt;/p&gt;

&lt;h2&gt;
  
  
  How it's built
&lt;/h2&gt;

&lt;p&gt;A Python/Flask backend with a vanilla JS frontend. The pipeline:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;code&gt;data/build_dataset.py&lt;/code&gt; generates &lt;strong&gt;6,000 simulated file records&lt;/strong&gt; locally (seeded RNG, reproducible) — filename clutter signals, sizes, ages, access gaps — labeled KEEP/ARCHIVE/DELETE by common-sense "digital hoarding" heuristics with ~8% label noise, so the model has to generalize instead of memorizing a rule list.&lt;/li&gt;
&lt;li&gt;At request time, &lt;strong&gt;TabPFN classifies each file in-context&lt;/strong&gt; on a seeded, class-stratified 999-row context (333 per class) — one forward pass per batch, local CPU, no gradient training, no API key. Low-confidence calls (&amp;lt;55%) are flagged "review manually" rather than auto-acted on.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;recommender.py&lt;/code&gt; turns the winning class into an action plus deterministic reasons drawn from the file's &lt;em&gt;own metadata&lt;/em&gt;. The model decides the class; the file explains itself.&lt;/li&gt;
&lt;li&gt;The frontend is vanilla HTML/CSS/JS. The GitHub Pages demo bakes &lt;strong&gt;real precomputed TabPFN outputs&lt;/strong&gt; (via &lt;code&gt;demo/build_demo.py&lt;/code&gt;, stamped with the build date) so it works with zero backend.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  The honest hard parts
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Getting TabPFN running at all.&lt;/strong&gt; The build machine's &lt;code&gt;/tmp&lt;/code&gt; is a 512MB tmpfs, and the default torch wheel (~800MB) died mid-unpack with "No space left on device" — on a disk with gigabytes free. The fix was a CPU-only torch install with &lt;code&gt;TMPDIR&lt;/code&gt; pointed at real disk, plus &lt;code&gt;--ignore-installed&lt;/code&gt; to dodge a Debian-pinned &lt;code&gt;typing_extensions&lt;/code&gt; that pip refused to touch. Then the real surprise: current TabPFN (v9.x) requires a Prior Labs account + license acceptance + API token just to download weights — a non-starter for a "no accounts, no keys" project. So SlothSort runs &lt;strong&gt;TabPFN 2.2.1&lt;/strong&gt;, the last version with freely downloadable open weights. None of this is in any tutorial; all of it is the actual tax of "runs on your CPU."&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Making the synthetic data non-trivial.&lt;/strong&gt; My first label rules were so clean a decision stump could ace them — which would make TabPFN decorative, not load-bearing. The 8% label noise and overlapping rules (a big cold media file that's &lt;em&gt;also&lt;/em&gt; recently opened, a cluttered name on a warm document) exist specifically so the classifier has to weigh evidence like a real triage decision.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Refusing to fake explanations.&lt;/strong&gt; It would have been easy to dress up rule outputs as "the model's reasoning." Instead the architecture is explicit: TabPFN outputs class probabilities; the reasons come from the file's metadata. The UI tooltips say exactly that. An explanation you can't trace to something real is marketing, not AI.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I'm proud of
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Real open-source-AI core:&lt;/strong&gt; TabPFN inference on real (simulated, disclosed) data, reproducible end-to-end from the repo — no API keys, no proprietary models, no fake "AI" labels. If TabPFN isn't installed, the app runs a &lt;em&gt;labeled&lt;/em&gt; fallback and says "NOT TabPFN" on every output.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Privacy as architecture, not a bullet point:&lt;/strong&gt; metadata-only features mean the file list never needs to leave the machine. That's the whole reason open weights matter here (more below).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Laziness with a safety net:&lt;/strong&gt; every destructive action is one click &lt;em&gt;with undo&lt;/em&gt; — the demo keeps a full undo stack, and the design assumes you'll never double-check the AI.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;An honest demo:&lt;/strong&gt; precomputed vs. live is labeled, simulated data is labeled, the build date is stamped, low-confidence verdicts ask for review.&lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;TabPFN does 3-class in-context learning out of the box with no architecture changes — the same &lt;code&gt;TabPFNClassifier&lt;/code&gt; that did binary risk scoring in my Week 2 entry (LatePay) handled KEEP/ARCHIVE/DELETE with just a stratified context. The technical takeaway: for small tabular problems, &lt;strong&gt;data plumbing beats model choice&lt;/strong&gt; — the interesting work was all in the label design and the feature encoding (log-size, clutter signals), not the classifier. And the process takeaway: labeling your demo "simulated" costs nothing and buys everything. Nobody trusts a file-deleting AI that won't show its work.&lt;/p&gt;

&lt;h2&gt;
  
  
  What's next
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Real folder scanning:&lt;/strong&gt; a &lt;code&gt;pathlib&lt;/code&gt; walker that reads actual &lt;code&gt;~/Downloads&lt;/code&gt; metadata into the same feature pipeline, with the undo log persisted to disk.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Learn from overrides:&lt;/strong&gt; when you undo the AI's verdict, feed the correction back as context — TabPFN's in-context learning makes this nearly free.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Per-user thresholds:&lt;/strong&gt; let the chronically anxious set "never auto-delete above 90% confidence."&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Scheduled sloth mode:&lt;/strong&gt; a weekly background pass that quietly archives the cold stuff and reports what it did — maximum laziness, minimum surprise.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  How it uses open-source AI
&lt;/h2&gt;

&lt;p&gt;SlothSort's decision engine is &lt;strong&gt;TabPFN&lt;/strong&gt; (Apache 2.0, Prior Labs) — an open-source tabular foundation model. I generate a simulated file-history dataset locally with a seeded script, and TabPFN classifies each file's metadata vector in-context on the local CPU at inference time. No proprietary models or API keys are involved anywhere in the pipeline — which is exactly why this product can exist: a file tidier that phones your file list to a cloud API is a privacy non-starter, but an open-weight model on your own machine never sends anything anywhere. It works offline, it costs nothing, and nobody's file list is the product.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Built with: Python, Flask, TabPFN (open-source), JavaScript. License: MIT.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>hf26challenge</category>
      <category>ai</category>
      <category>opensource</category>
    </item>
    <item>
      <title>LatePay — know which invoices will ghost you, before they do 💸</title>
      <dc:creator>Arin Dewangan</dc:creator>
      <pubDate>Mon, 19 Oct 2026 02:44:37 +0000</pubDate>
      <link>https://dev.to/arin_dewangan_6110e41aadb/latepay-know-which-invoices-will-ghost-you-before-they-do-29ea</link>
      <guid>https://dev.to/arin_dewangan_6110e41aadb/latepay-know-which-invoices-will-ghost-you-before-they-do-29ea</guid>
      <description>&lt;h1&gt;
  
  
  LatePay — know which invoices will ghost you, before they do 💸
&lt;/h1&gt;

&lt;p&gt;&lt;em&gt;DEV Hacktoberfest AI Challenge — Week 2: Side Hustle.&lt;/em&gt;&lt;/p&gt;




&lt;p&gt;Every freelancer knows the feeling: the work is delivered, the invoice is sent, and then… silence. Cash flow is the oxygen of a side hustle, and one late payer can choke it for a month.&lt;/p&gt;

&lt;p&gt;So I built &lt;strong&gt;LatePay&lt;/strong&gt; — a late-payment risk predictor that scores every outstanding invoice with &lt;strong&gt;TabPFN&lt;/strong&gt;, the open-source tabular foundation model, and tells you what to do about it: chase now, ask for partial upfront, send a reminder, or relax.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;🔗 Live demo:&lt;/strong&gt; &lt;a href="https://arindewangan.github.io/latepay/demo/" rel="noopener noreferrer"&gt;https://arindewangan.github.io/latepay/demo/&lt;/a&gt; (precomputed TabPFN outputs, clearly labeled simulated)&lt;br&gt;
&lt;strong&gt;💻 Repo:&lt;/strong&gt; &lt;a href="https://github.com/arindewangan/latepay" rel="noopener noreferrer"&gt;https://github.com/arindewangan/latepay&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What it does
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Score an invoice&lt;/strong&gt; — enter the amount, client history (tenure, prior late rate, average days to pay), contract strength, and payment terms. TabPFN returns P(paid &amp;gt; 30 days past terms) as a risk band: HIGH / MEDIUM / ELEVATED / LOW.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Get one clear action&lt;/strong&gt; — HIGH → chase now and pause further billable work; MEDIUM → require 50% upfront before the next milestone; ELEVATED → send a polite nudge on the due date; LOW → normal terms.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Batch-score a CSV&lt;/strong&gt; — upload your invoice list and download a scored risk report with a recommendation per row. Missing history columns fall back to an honest new-client baseline.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Explore offline&lt;/strong&gt; — the static demo ships 4 real client profiles plus a what-if grid (late rate × contract × amount), every cell a real precomputed TabPFN prediction, build-dated and labeled simulated.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  How it's built
&lt;/h2&gt;

&lt;p&gt;A Python/Flask backend with a vanilla HTML/CSS/JS frontend. The pipeline:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;code&gt;data/build_dataset.py&lt;/code&gt; generates a SIMULATED invoice-history dataset (4,000 invoices, seeded RNG) with 12 features per invoice — amount, client tenure, prior invoice count, prior late rate, average days to pay, contract strength, payment terms, client size, international flag, invoice month.&lt;/li&gt;
&lt;li&gt;At request time, &lt;code&gt;TabPFNClassifier(device="cpu")&lt;/code&gt; — fitted in-context on that dataset in &lt;code&gt;risk.py&lt;/code&gt; — predicts the late-payment probability for the new invoice. No gradient training, no API key, no proprietary models.&lt;/li&gt;
&lt;li&gt;The GitHub Pages demo bakes real precomputed TabPFN outputs via &lt;code&gt;demo/build_demo.py&lt;/code&gt; (build date stamped on the page) so it works with zero backend.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  The honest hard parts
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;TabPFN's license gate.&lt;/strong&gt; The latest &lt;code&gt;tabpfn&lt;/code&gt; releases (≥2.1) demand interactive license acceptance at install time — a non-starter for a fully automated pipeline. So &lt;code&gt;requirements.txt&lt;/code&gt; pins &lt;code&gt;tabpfn==2.0.6&lt;/code&gt; — the same version that proved itself in our Week 1 build (Frostwise). Same proven path, zero new surprises.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Attention is O(n²) on CPU.&lt;/strong&gt; Our dataset has 4,000 simulated invoices, but fitting TabPFN in-context on all 4,000 rows made per-request inference painfully slow on CPU. The trade-off, documented in &lt;code&gt;risk.py&lt;/code&gt;: a seeded, label-stratified 1,000-row subsample as the inference context — per-request scoring stays in the seconds range. The full 4,000-row CSV still ships as the data artifact; the demo's precomputed grid used the same setup.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Synthetic data means synthetic confidence.&lt;/strong&gt; The model learned real, sensible patterns — a clean client scores 5.0% late risk, a serial late-payer 63.4% — but it has never seen a real invoice. That's why every demo screenshot, every CSV row, every UI badge says SIMULATED, and the README states plainly: these are risk &lt;em&gt;estimates&lt;/em&gt; for prioritising follow-ups, not financial advice, not a credit score.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I'm proud of
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Real open-source-AI core: local TabPFN inference on real (simulated) tabular data, reproducible end-to-end from the repo — no API keys, no proprietary models, no fake "AI" labels.&lt;/li&gt;
&lt;li&gt;An honest demo: every number on the static page is a real precomputed TabPFN prediction, build-dated and labeled SIMULATED.&lt;/li&gt;
&lt;li&gt;CSV batch scoring that degrades gracefully — missing history columns fall back to a new-client baseline instead of erroring.&lt;/li&gt;
&lt;li&gt;A UI a non-technical freelancer can actually use: one form, one gauge, one action.&lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;&lt;strong&gt;Technical:&lt;/strong&gt; TabPFN genuinely collapses tabular ML to a one-liner — fit in-context, no training loop, no feature engineering — and the risk separation it produced was immediately sensible (5.0% LOW vs 63.4% HIGH). For a prioritisation tool like this, calibration across bands matters far more than any single accuracy number.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Process:&lt;/strong&gt; honesty is a feature, not a tax. My first banner render shipped with an invented "94.2% accuracy" line in the artwork — I threw it out and regenerated it clean. Labeling simulated data visibly, pinning versions honestly, documenting the 1000-row trade-off: the write-up is stronger for every one of those, and this challenge weights writing most heavily.&lt;/p&gt;

&lt;h2&gt;
  
  
  What's next
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Let freelancers import real invoice history (Stripe/Invoicely exports) so the context set is their own data, not simulated.&lt;/li&gt;
&lt;li&gt;Per-client portfolio view: total at-risk revenue across all outstanding invoices.&lt;/li&gt;
&lt;li&gt;Email reminder templates wired to the ELEVATED band's nudge schedule.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  How it uses open-source AI
&lt;/h2&gt;

&lt;p&gt;LatePay's risk core is &lt;strong&gt;TabPFN v2&lt;/strong&gt; (&lt;code&gt;tabpfn&lt;/code&gt;, an open-source tabular foundation model). We generate a simulated invoice-history dataset locally, and TabPFN fits in-context on it and predicts P(payment &amp;gt; 30 days past terms) per invoice at inference time — all on local CPU. No proprietary models or API keys are involved anywhere in the pipeline.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Built with: Python, Flask, TabPFN (open-source), JavaScript. License: MIT.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>hf26challenge</category>
      <category>ai</category>
      <category>opensource</category>
    </item>
    <item>
      <title>Frostwise — know your frost dates, plant with confidence</title>
      <dc:creator>Arin Dewangan</dc:creator>
      <pubDate>Thu, 08 Oct 2026 02:54:03 +0000</pubDate>
      <link>https://dev.to/arin_dewangan_6110e41aadb/frostwise-know-your-frost-dates-plant-with-confidence-3hc1</link>
      <guid>https://dev.to/arin_dewangan_6110e41aadb/frostwise-know-your-frost-dates-plant-with-confidence-3hc1</guid>
      <description>&lt;h1&gt;
  
  
  Frostwise — know your frost dates, plant with confidence
&lt;/h1&gt;

&lt;p&gt;&lt;em&gt;DEV Hacktoberfest AI Challenge — Week 1: Touch Grass.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Every gardener knows the heartbreak: a surprise late frost wipes out weeks of seedlings overnight. Frost dates are the single most important number in gardening, yet most people guess them from a vague zone map or a neighbor's memory.&lt;/p&gt;

&lt;p&gt;So I built &lt;strong&gt;Frostwise&lt;/strong&gt; — a hyperlocal garden planner that computes &lt;em&gt;your&lt;/em&gt; frost dates from real climate history using &lt;strong&gt;TabPFN&lt;/strong&gt;, the open-source tabular foundation model — then turns them into a planting plan you can actually follow.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Live demo:&lt;/strong&gt; &lt;a href="https://arindewangan.github.io/frostwise/demo/" rel="noopener noreferrer"&gt;https://arindewangan.github.io/frostwise/demo/&lt;/a&gt; (real precomputed TabPFN predictions, clearly labeled)&lt;br&gt;
&lt;strong&gt;Repo:&lt;/strong&gt; &lt;a href="https://github.com/arindewangan/frostwise" rel="noopener noreferrer"&gt;https://github.com/arindewangan/frostwise&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;Video:&lt;/strong&gt; &lt;a href="https://youtu.be/ZpVZ8wFglvg" rel="noopener noreferrer"&gt;https://youtu.be/ZpVZ8wFglvg&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What it does
&lt;/h2&gt;

&lt;p&gt;Type any city — or tap a sample like Chicago, Berlin, Bengaluru, Sydney, Tokyo — and Frostwise:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;pulls &lt;strong&gt;20 years of daily minimum temperatures&lt;/strong&gt; for your location from the Open-Meteo archive (ERA5 reanalysis),&lt;/li&gt;
&lt;li&gt;runs &lt;strong&gt;TabPFN&lt;/strong&gt; to predict whether your location gets frost at all, and if so, your &lt;strong&gt;last spring frost&lt;/strong&gt; and &lt;strong&gt;first autumn frost&lt;/strong&gt; dates,&lt;/li&gt;
&lt;li&gt;generates a &lt;strong&gt;planting calendar for 12 common crops&lt;/strong&gt; (tomatoes, peppers, kale, garlic, spinach…), with sow windows anchored to your predicted frost dates and honest notes per crop.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;No frost where you live? It tells you that too — the model learned it from the data, and you get a year-round growing calendar instead.&lt;/p&gt;

&lt;h2&gt;
  
  
  How it's built
&lt;/h2&gt;

&lt;p&gt;A Python/Flask backend with a clean single-page frontend. The pipeline:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;code&gt;data/build_dataset.py&lt;/code&gt; fetches 2005–2024 daily minimums for &lt;strong&gt;80 stratified global locations&lt;/strong&gt; and derives per-location labels — median first/last frost day-of-year (frost = daily min ≤ 0°C) — plus 17 climate features.&lt;/li&gt;
&lt;li&gt;At request time, TabPFN performs the whole prediction &lt;strong&gt;in-context&lt;/strong&gt;: a classifier for frost/no-frost, two regressors for the dates — a single forward pass per model, &lt;strong&gt;no gradient training&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;The frontend is vanilla HTML/CSS/JS. The GitHub Pages demo bakes real precomputed TabPFN predictions (labeled with the build date) so it works without a backend.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  The honest hard parts
&lt;/h2&gt;

&lt;p&gt;The real challenge was making the AI &lt;em&gt;genuine&lt;/em&gt; instead of decorative. A frost date isn't in any API — it has to be derived, so I built the entire label pipeline from raw reanalysis data and had to get the day-of-year statistics right &lt;strong&gt;across hemispheres&lt;/strong&gt; (autumn frost in Sydney falls in a different part of the year than in Berlin). Tropical locations needed genuine "no frost" handling rather than a hardcoded hack — hence the two-stage classifier → regressor design. The other fight was practical: PyTorch's download servers kept timing out, so the environment setup needed patient retries and mirror fallbacks.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I'm proud of
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;A &lt;strong&gt;real open-source-AI core&lt;/strong&gt;: TabPFN inference on real ERA5 data, reproducible end-to-end from the repo — no API keys, no proprietary models, no fake "AI" labels.&lt;/li&gt;
&lt;li&gt;The two-stage design (frost/no-frost classifier → date regressors) that handles everything from Chicago winters to Bengaluru's frost-free climate &lt;strong&gt;without special cases&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;A static demo that stays honest: every number is a genuine precomputed inference, clearly labeled as such.&lt;/li&gt;
&lt;li&gt;A UI clean enough that a non-technical gardener can actually use it.&lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;TabPFN's in-context learning is remarkably well suited to small, high-signal tabular problems — 80 locations were enough to learn a physically sensible climate→frost mapping. I also learned that the unglamorous half of "AI projects" is &lt;strong&gt;data plumbing&lt;/strong&gt;: deriving trustworthy labels from raw observations mattered more than any model choice. And that honesty in demos (labeling precomputed vs live) costs nothing and buys trust.&lt;/p&gt;

&lt;h2&gt;
  
  
  What's next
&lt;/h2&gt;

&lt;p&gt;Per-crop frost-&lt;em&gt;damage&lt;/em&gt; risk (not just dates), user-saved locations with frost alerts, Southern-Hemisphere season handling in the calendar copy, and a TabPFN uncertainty readout (prediction intervals) so gardeners see the confidence behind each date.&lt;/p&gt;

&lt;h2&gt;
  
  
  How it uses open-source AI
&lt;/h2&gt;

&lt;p&gt;Frostwise's prediction engine is &lt;strong&gt;TabPFN&lt;/strong&gt; (Apache-2.0, PriorLabs) — an open-source tabular foundation model that performs supervised learning in a single forward pass. We derive frost-date labels from 20 years of open ERA5 reanalysis data (via Open-Meteo's free archive), and TabPFN learns the climate→frost-date mapping in-context at inference time: a classifier predicts frost occurrence and two regressors predict first/last frost day-of-year. No proprietary models or API keys are involved anywhere in the pipeline.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Built with: Python, Flask, TabPFN (open-source), Open-Meteo / ERA5, JavaScript. License: MIT.&lt;/em&gt;&lt;/p&gt;

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