A spreadsheet let me overwrite a harvest cell. The total still looked fine. That tray was already promised.
I needed a free offline farm ledger for Windows: standing orders, trays by the ounce, and books that do not live in a $30/month cloud farm app. No account. No subscription. File stays on the PC.
That is Groundtruth 0.1.3. Apache-2.0. I run my own microgreens farm on it.
Repo: https://github.com/alexjvv52-ops/groundtruth-app
The job: standing order tracker + honest books
Small growers sow trays, harvest by weight, and sell to kitchens or a market. The failure mode is not seed. It is promising the same tray twice, then finding out when the sheet and the WhatsApp thread disagree.
Groundtruth is a local-first desktop app for that loop.
- Today: move to light, harvest, sow the shortfall
- Standing orders next to what is actually on the rack (promised vs sown)
- Money in / money out — unpaid stays unpaid
- Farm currency in Settings; bills and Payment Links use that currency
- Export the database, event log, receipts, and CSVs and leave
Not a phone CRM. Not farmOS. Not QuickBooks.
Stack
- React + Vite UI
- Tauri commands into a Rust farm core
- SQLite on disk
- Append-only event log beside the database
%APPDATA%\com.prairieroots.groundtruth
Constraints that are code, not slogans
Unpaid stays unpaid. No silent mark-paid with no trail. Corrections and voids are new events.
Tray cost is computed when you look. Not a cached cell. Missing rows → it refuses to invent a number.
Health is not stored. A scan replays the event log against the database. Status is not a mood from yesterday.
Marketing cannot carry dollars. Samples and follow-ups stay money-free so a pipeline cannot pretend it is revenue.
One operator, one machine. No logins. Export everything. Stripe keys never ride along.
Restore checks a stamp. Bad bundles are rejected. Farms do not merge.
Those rules live in src-tauri (db.rs, events.rs, import.rs, export.rs) and docs/GT-D-SERIES.md.
Offline farm books, no subscription
Cloud farm software does real work: calendars, pack lists, a phone. It also keeps the ledger on a server you do not own and bills you whether the week sold.
This build is the opposite bet: Windows x64, unsigned installer, early 0.1.x, dead-laptop recovery documented and not magic. If you want the notebook gone tonight, do not.
Why this is on DEV
Local-first is easy to print on a landing page. It is harder when a cook is waiting on a tray count.
If you build desktop tools that have to survive a bad cell in a sheet, steal the event log + computed-health pattern. The microgreens skin is just the job I had.
Issues and PRs on the repo.
Top comments (0)