PLOT ๐ŸŒฟ - TabPFN on Real Frost Data Tells You to Touch Grass

2026-10-09ๆฅๆบ dev.to ProductivityEnglish
PLOT ๐ŸŒฟ - TabPFN on Real Frost Data Tells You to Touch Grass

This is a submission for the Hacktoberfest Open-Source AI Challenge Week 1: Touch Grass ๐ŸŒฟ

๐Ÿ’ก The idea in one breath

Most weather apps keep you scrolling. PLOT does the opposite. ๐Ÿ“ตโžก๏ธ๐ŸŒฑ

You pick a place (or share your location ๐Ÿ“). Real weather loads ๐ŸŒฆ๏ธ. TabPFN, an open tabular foundation model ๐Ÿง , reads your day like a row in a frost table and answers:

โธ๏ธ Wait ยท ๐Ÿšถ Walk ยท ๐ŸŒฟ Garden

Then it hands you three concrete steps and expects you to leave. The screen's job is under a minute. โฑ๏ธ

๐Ÿ› ๏ธ What I Built

Field Value
๐ŸŒฟ Product PLOT - outdoor action signal + checklist
๐Ÿง  Brain TabPFN (tabpfn-client)
๐Ÿ“Š Training data 30,684 real daily rows, 12 US cities, 2018-2024
๐ŸŒฆ๏ธ Weather Open-Meteo ERA5 reanalysis + live forecast
โ˜๏ธ Hosting Render free tier
โšก Stack FastAPI, static UI, no chat layer

๐Ÿ‘ฅ Who it's for: anyone with a yard, balcony, or park nearby who overthinks the forecast and under-leaves the house.

๐ŸŽฌ Demo

๐ŸŽฅ Screen recording: [https://www.youtube.com/watch?v=0zisIS7GLjg]

๐Ÿ”— Try it yourself: plot-touch-grass.onrender.com

โณ First load on Render free tier may take ~30s while the service wakes up.

๐Ÿ“ธ Screenshots

Upload your images in the DEV editor and replace the placeholders below.

๐Ÿ”๏ธ Hero - PLOT landing page

๐ŸŒฆ๏ธ Live weather - Open-Meteo fills the form

๐ŸŽฏ TabPFN signal - wait / walk / garden with confidence

โš™๏ธ How it works (60 seconds)

flowchart LR subgraph YOU["You"] A["Pick city or use location"] end subgraph DATA["Open-Meteo"] B["Today's temps, rain, wind, soil"] C["92-day frost window"] end subgraph AI["TabPFN"] D["Classify: wait, walk, garden"] E["Class probabilities"] end subgraph OUT["Outside"] F["3-step checklist"] G["Phone down"] end A --> B A --> C B --> D C --> D D --> E E --> F F --> G

๐Ÿ—บ๏ธ User journey

sequenceDiagram participant U as User participant UI as PLOT UI participant OM as Open-Meteo participant T as TabPFN participant Y as Your yard U->>UI: Open site / pick Portland UI->>OM: GET /api/weather OM-->>UI: Real temps, frost lag, soil U->>UI: Get outdoor signal UI->>T: POST /api/check T-->>UI: garden, 83% confidence UI-->>U: Checklist (3 steps) U->>Y: Goes outside

๐Ÿ—๏ธ Architecture

graph TB subgraph Client["Browser"] WEB["Static UI / web"] end subgraph RenderHost["Render - plot-touch-grass"] API["FastAPI / backend/main.py"] ENG["OutdoorEngine / TabPFNClassifier"] CSV[("outdoor_history.csv - 30684 ERA5 rows")] WX["weather.py - Open-Meteo + fallback"] end subgraph External["Open services"] OM["Open-Meteo API"] TP["Prior Labs TabPFN"] end WEB -->|/api/weather| API WEB -->|/api/check| API API --> WX WX --> OM API --> ENG ENG --> CSV ENG --> TP

๐Ÿ“ˆ The data story (real, not synthetic)

This is the part I cared about most. No fake temperatures. โœ…

flowchart TD A["Open-Meteo Historical API - ERA5"] --> B["scripts/fetch_real_data.py"] B --> C["12 cities x 7 years of daily rows"] C --> D["Feature engineering"] D --> D1["days_since_last_frost from min temp at 0C"] D --> D2["soil_moisture, wind, daylight"] D --> E["Labels via backend/labels.py"] E --> F["outdoor_history.csv - 30684 rows"] F --> G["TabPFN fit and predict"]

๐ŸŒŽ Cities in the training set

City Climate Rows
๐ŸŒฒ Portland, OR Cool marine ~2,557
๐ŸŒง๏ธ Seattle, WA Marine west coast ~2,557
๐Ÿ™๏ธ Chicago, IL Continental ~2,557
โ„๏ธ Minneapolis, MN Upper Midwest ~2,557
โ›ฐ๏ธ Denver, CO High plains ~2,557
๐Ÿ—ฝ New York, NY Humid subtropical ~2,557
๐Ÿฆž Boston, MA Coastal temperate ~2,557
๐ŸŒณ Atlanta, GA Warm humid ~2,557
๐Ÿค  Austin, TX Warm ~2,557
โ˜€๏ธ Phoenix, AZ Desert ~2,557
๐ŸŒด Miami, FL Tropical humid ~2,557
๐ŸŒŠ Los Angeles, CA Mediterranean ~2,557

๐Ÿ“Š Label distribution (on real weather)

Action Meaning Share
๐Ÿšถ walk Good to be outside, not a planting day ~57%
โธ๏ธ wait Frost risk or bad conditions, prep indoors ~30%
๐ŸŒฟ garden Frost window + workable soil, hands in dirt ~13%

Labels come from transparent horticulture heuristics in backend/labels.py (frost-free days, precip, wind bounds). TabPFN learns patterns in the table, not chat prose. I'm upfront about that. ๐Ÿ“

๐Ÿ”จ How I Built It

1๏ธโƒฃ Real training pipeline

python scripts/fetch_real_data.py 

Pulls daily ERA5 weather from Open-Meteo for every city above. Regeneratable. Documented in data/DATA_SOURCES.md.

2๏ธโƒฃ TabPFN as the classifier

from tabpfn_client import TabPFNClassifier model = TabPFNClassifier() model.fit(X_train, y_train) # real rows proba = model.predict_proba(X_today) # wait / walk / garden 

Open-weight tabular model. Swap it without rewriting the product. ๐Ÿ”

3๏ธโƒฃ Live weather endpoint

GET /api/weather?lat=&lon= returns today's conditions + frost lag.

  • ๐ŸŒ Primary: Open-Meteo forecast with past_days=92 for frost history
  • ๐Ÿ›ก๏ธ Fallback: nearest city's real ERA5 row for today's calendar day (when API rate-limits on free hosting)

4๏ธโƒฃ UI that stays out of the way

No chat bubble. No purple gradients. One brand (PLOT), one CTA, one result card. โœจ

  • ๐Ÿ™๏ธ City presets across 12 climates
  • ๐Ÿ“ Use my location (browser geolocation)
  • ๐Ÿ”„ Refresh live weather
  • โœ… Checklist that ends at the door

5๏ธโƒฃ Deployed on Render

render.yaml blueprint, health check at /api/healthz, TABPFN_TOKEN in env (never committed). ๐Ÿ”’

๐Ÿ’ป Code

GitHub logo PranjalManhgaye / plot-touch-grass

PLOT - TabPFN outdoor go-signal for Hacktoberfest Touch Grass

PLOT

Leave the screen. Tend the ground.

PLOT is a Hacktoberfest Week 1 (Touch Grass) project. It uses Prior Labs TabPFN on real weather data (Open-Meteo ERA5) to classify todayโ€™s outdoor action as wait, walk, or garden โ€” then gives a short checklist meant to end at your door.

Live demo

Pick a city or use your location โ†’ live weather loads โ†’ TabPFN predicts โ†’ go outside.

Real data (not synthetic)






























What Source
Training rows
30,684 daily observations, 12 US cities, 2018โ€“2024
Weather
Open-Meteo ERA5 reanalysis
Frost lag Computed from real daily min temps โ‰ค 0 ยฐC
Labels Transparent horticulture heuristics (backend/labels.py)
Live inputs Open-Meteo forecast + 120-day archive

See data/DATA_SOURCES.md for full provenance.

Quick start

python3 -m venv .venv source .venv/bin/activate pip install -r requirements.txt cp .env.example .env # set TABPFN_TOKEN PYTHONPATH=. uvicorn backend.main:app --reload --host 127.0.0.1 --port
โ€ฆ
plot/ โ”œโ”€โ”€ backend/ โ”‚ โ”œโ”€โ”€ engine.py # TabPFN + transparent baseline โ”‚ โ”œโ”€โ”€ weather.py # Open-Meteo live + ERA5 fallback โ”‚ โ”œโ”€โ”€ labels.py # Documented outdoor-action heuristics โ”‚ โ””โ”€โ”€ main.py # FastAPI routes โ”œโ”€โ”€ data/ โ”‚ โ””โ”€โ”€ outdoor_history.csv # 30,684 real ERA5 rows โ”œโ”€โ”€ scripts/ โ”‚ โ””โ”€โ”€ fetch_real_data.py โ””โ”€โ”€ web/ # Static UI 

๐Ÿ”“ Why Does Open Innovation Matter?

Frost and planting decisions are tabular ๐Ÿ“‹. They belong in a spreadsheet, not a chat thread. ๐Ÿ’ฌโŒ

๐Ÿ”’ Closed approach ๐ŸŒฑ Open approach (PLOT)
Garden API locks your coordinates to a vendor Open-Meteo: free ERA5, no key
Chat model guesses from prose TabPFN: probabilities over features
Can't explain why without prompt engineering garden: 83%, wait: 9%, walk: 8%
Per-token cost at scale Tabular fit once, predict cheaply
Model swap = rewrite the app Swap TabPFN version, keep the CSV

๐Ÿ” Privacy: we don't store your location. Weather is fetched per request. Training table ships with the repo and is auditable.

๐Ÿ•๏ธ Offline path: the CSV + open model path means this could run on a laptop in the backcountry with cached rows. That's the Touch Grass future I want.

A closed chat API wouldn't know what to do with days_since_last_frost: 208. TabPFN was built for exactly that column. ๐ŸŽฏ

๐Ÿ† What I'd tell judges

๐ŸŒฟ Theme fit Screen is the shortest part; checklist ends at the door
๐Ÿง  Real open AI TabPFN on 30k+ ERA5 rows, not a wrapper
๐Ÿ“ Honest labels Heuristics documented, not pretending it's human survey data
๐Ÿš€ Shipped Live URL, GitHub, Render deploy
๐Ÿšซ No chatbot cosplay Tabular foundation model where it actually belongs

๐Ÿค– My Agent Session

Built with Cursor + TabPFN docs + Open-Meteo API. Happy to answer questions in the comments. ๐Ÿ’ฌ

๐ŸŽ Prize Categories

  • ๐Ÿง  Best Use of TabPFN - core classifier on real frost/weather tables
  • โ˜๏ธ Best Use of Render - production deploy at plot-touch-grass.onrender.com

๐Ÿ”— Links

Resource URL
๐Ÿš€ Live app plot-touch-grass.onrender.com
๐Ÿ’ป GitHub PranjalManhgaye/plot-touch-grass
๐ŸŒฆ๏ธ Open-Meteo open-meteo.com
๐Ÿง  TabPFN docs.priorlabs.ai
โ˜๏ธ Render render.com

Thanks for reading. Now go touch some grass. ๐ŸŒฟ๐Ÿ‘‹

ๅŽŸๆ–‡๏ผšhttps://www.a8q9.cn/en/article/plot-tabpfn-on-real-frost-data-tells-you-to-touch-grass-31c111.html

็›ธๅ…ณๆ–‡็ซ