Simplify your billing in 3 steps
From installation to invoicing, automate your worksite tracking with a plug & play solution.
Plug in
Plug & Play installation on any tractor in under 2 minutes.
Drive
Automatic GPS tracking, activity detection, and precise real-time mapping.
Invoice
Generate accurate reports and invoices validated by your field data.
My family runs an agricultural contracting business in the Loire Valley — ETA Vappereau. Tractors go out, work someone else's land, and at the end of the season every hour has to become an invoice.
For years that ran on paper. Drivers logged their days in a notebook, and on Sunday nights my dad rebuilt the whole week from those notes and from memory to work out who owed what.
The paperwork wasn't the real problem. The gaps were. A driver finishes a long day, forgets to write down one parcel, and that job is simply gone — work done, diesel burned, wages paid, nothing to bill. Every forgotten line was money the business never saw.
Fleet-trackers exist, of course. None of them fixed this. They track the vehicle, not the work: they'll show you where a tractor sat, but someone still has to say what job it did and which client to charge — the exact step that kept failing. So I didn't want a better notebook. I wanted the logging to vanish. Nothing to open, nothing to remember, nothing for a tired driver to forget.
Farmlink turns a working tractor into its own timesheet. A box on the machine records where it worked and for how long, by itself, and the office sees finished, billable worksites without anyone writing a word.
Three layers do the work:
- The board. A custom PCB I designed and built, wired straight into the tractor's 12 V — an ESP32, a GPS for position, and an LTE-M modem that sends data the moment the machine moves.
- The real-time API. A Node service on my own server that ingests the stream, turns raw GPS into worksites matched to fields, and stores it all in PostgreSQL.
- The dashboard. A Next.js app: a live map of every machine, work broken down by field and client, and invoices generated automatically from what was actually tracked.
Farmlink runs on infrastructure I own end to end. The board starts in KiCad, gets fabbed, and I solder it by hand. On the tractor it speaks to an LTE-M network over a SIM. The data lands on a server I administer myself: Proxmox as the hypervisor, every part of the app isolated in its own Docker container. A Node API parses the GPS stream into worksites and writes to PostgreSQL; a Next.js front end reads it back as a live map and ready-to-send invoices. No managed cloud.
I won't open the whole thing up here. The short version: an ESP32 wired into the tractor's 12 V, a GPS for position, and an LTE-M modem with a SIM so data leaves the machine the instant it moves — no gateway, no pairing, nothing to switch on.
It got there in three revisions. The first lived in my room: dev modules jumpered together on the bench to prove the idea. The second put those modules onto a carrier board I laid out in KiCad. The third is the real one — a PCB I designed and populated myself, the version now bolted into working tractors.
The Sunday-night reconstruction is gone. Worksites log themselves, so nothing slips through — no forgotten parcel, no unbilled day, no work the business did for free. What used to be weeks of office work across a season is mostly done before anyone opens the dashboard.
Twelve tractors run it today, across the full ETA Vappereau fleet. It's in-house for now, opening to other contractors soon.
Three layers, three different ways to be wrong.
Infrastructure. I've run the whole thing on my own server since day one — Proxmox, every service in its own Docker container, all of it administered by me. Owning the stack down to the metal means there are no black boxes to blame. It also means every outage is mine, at whatever hour it happens. I wouldn't build it any other way.
Product. I used to design from my desk and assume I knew what was useful. I didn't. The best changes came from my dad and the drivers — the people who actually live with it — pointing out that the obvious way was the wrong way. Now I ship, watch how it's really used, and let the field correct me.