Farm OS
Farm OS helps poultry farmers monitor the conditions inside their chicken sheds and respond when they become dangerous. I designed and built the sensors, alerts and mobile dashboard for our family's farm in Telangana.
- TypeScript (core stack)
- Next.js (core stack)
- Flutter (working knowledge)
- ESP32 (working knowledge)
- MQTT (working knowledge)
- PostgreSQL (working knowledge)
- Role
- Founder · Firmware · Product Design
- Context
- EC Farms · 22,000 birds
- Location
- Shadnagar, Telangana
- Breed
- Cobb 430Y Broilers
- The problem
- Our farm raises about 22,000 chickens at a time. Managers relied on walking through the sheds to check conditions. Between visits, rising heat or ammonia — a gas released from poultry waste — could go unnoticed and harm the birds.
- What I did
- I placed fourteen sensors near the birds and connected them to a mobile dashboard. Managers can check conditions remotely and receive alerts. A local alarm can also sound when the internet connection drops.
- What changed
- Managers gained continuous readings and alerts between manual checks. Farm records showed mortality falling from 6.5% to 2.1% after deployment, alongside other management changes; this was not a controlled comparison.
A ventilation failure kills the flock in 45 minutes.
Hyderabad summer, 22,000 birds at 100% capacity. The exhaust bank stalls at night. Scroll to run the clock.
What changed once the shed could speak.
From 6.5% to 2.1% across 22,000-bird sheds.
Three summer incidents recorded in the alert log and addressed before conditions worsened.
Against imported legacy European monitoring systems.
What could go wrong between manual checks.
On the outskirts of Hyderabad, Environmentally Controlled poultry farms run at high density — up to 22,000 birds per shed. The preferred breed, the Cobb 430Y, is prized for meat yield and feed conversion, and is acutely sensitive to environmental stress.
The two killers are ammonia and temperature spikes. Ammonia pools at bird height and, left unchecked, drives respiratory disease, immune failure and stunted growth. Heat is faster and less forgiving.
Available monitoring systems were imported and too expensive for this farm. Without a live mobile view, managers relied on manual walk-throughs and could discover a dangerous change late.
Most of this was decided standing in the shed.
I had an unusual amount of access here — this is the family business, so the research was not a two-week discovery phase with a farm that tolerated me. It was full cycles, in the house, over years. Almost every decision on this page came from something that happened in front of me rather than from a requirement someone wrote down.
- 01
Full cycles on the farm
Not a site visit. A broiler cycle is about six weeks and I was there for several of them, including the 2am walk-throughs this system was built to make unnecessary.
- 02
Walking the house with the manager
Following the person who already knew where the trouble starts — which corners go bad first, which fan failing matters and which does not.
- 03
Instrumented pilot
Once fourteen nodes were reporting, the shed became its own research instrument. Most of what I believed about airflow before that turned out to be roughly right and locally wrong.
- 04
Costing the incumbent
Pricing and teardown of the imported European systems the farm had already refused to buy. The barrier was never capability.
Six things the shed said, and what each one became.
The right column is not a restatement of the finding. It is the thing that shipped because of it — and in four of the six cases it is a decision that looks arbitrary until you know what produced it.
- 01Full cycles
The hours that kill a flock are the hours nobody is watching. Heat peaks in the small hours of a Telangana summer and there is no one in the shed between the last walk-through and dawn.
Alerting that escalates to a phone rather than a screen in an office, and a local siren the node can fire on its own authority.
- 02Walking the house
Managers judged ammonia by smell. A human nose registers it reliably well above the concentration at which it is already doing respiratory damage — so the first reliable human signal arrives after the harm.
An early warning at 19 ppm, giving managers time to investigate before conditions become more severe. Each sensor keeps its alert setting locally so it can still sound an alarm without an internet connection.
- 03Instrumented pilot
Ammonia is not a room-level quantity. It pools low, and it pools unevenly — the fourteen nodes disagreed with each other by more than they disagreed with my model of the house.
Sensor heads at bird height rather than ceiling height. A probe in the wrong place does not report a smaller problem, it reports a different room.
- 04Full cycles
The uplink drops. Rural signal, and a poultry house is a long metal box — the network is least reliable exactly when the weather is worst.
Thresholds travel with the reading rather than living in the client, so a node that loses uplink still knows when to shout. It looks redundant on the wire and it is the whole design.
- 05Walking the house
The dashboard gets read standing in a dark shed, at arm's length, one-handed, by someone who has already decided something is wrong and wants confirmation in under two seconds.
Dark by default, one number per surface at the size it can be read at, and no interaction that needs a second hand.
- 06Costing the incumbent
The farm had priced imported monitoring and declined it. The objection was never that it did not work — it was capital cost per house, on a business that runs on thin per-bird margins.
A bill of materials the farm could self-fund per house, which is the constraint that put ESP32 and printed PETG in the design rather than an off-the-shelf industrial sensor.
The mortality figures are the farm's own cycle records — birds placed against birds sold, which is a number this business has every commercial reason to count accurately and was already counting long before I built anything. The comparison is the three cycles after deployment against the cycles before it, in the same houses.
It is not a controlled result and I would not present it as one. One farm, no control shed, and the deployment was not the only thing that changed in that window — the same period covers a litter-management change and my own much closer attention to a business I have a stake in. What the alert log can establish is that three critical conditions triggered warnings and were acted on before they became more severe.
The −75% hardware figure is the cleanest of the three, because it is arithmetic rather than an outcome: our bill of materials against the quoted per-house price of the imported system the farm had already declined to buy.
What the shed reports, and what the schema promises.
Measured
House 3 — Node Fleet
mqtt://farm-os.local/house-3/#
- ammonia.ppm18.4ppmDegraded
- temp.ambient24.1°CNominal
- humidity.relative61%Nominal
- node.07.battery11%Breach
- node.11.uplink—Idle
Specified
Reading contract
packages/farm-os-core/src/reading.ts
export interface Reading { nodeId: string; channel: "ammonia.ppm" | "temp.ambient" | "humidity.relative"; value: number; recordedAt: string; // Thresholds ship with the reading, not the client. // A node that loses uplink still knows when to shout. threshold: { warn: number; critical: number; };}Thresholds travel with the reading rather than living in the client. It looks redundant on the wire and it is the reason a node that loses uplink still knows when to trip its local siren — the shed does not stop being dangerous because the network went down.
What actually goes in the shed.
Every node is printed, populated and sealed in-house. Most of the decisions that kept these alive for a full cycle were physical ones, not software ones.
Five layers, printed and populated in-house. Hover one to read why it is the way it is — scroll to seal the enclosure.
A dashboard is a hypothesis about a room.
On the left is House 3. On the right is what Farm OS can tell you about it — reconstructed from fourteen nodes and nothing else. The two agree while coverage is good. Stop a couple of exhaust fans, then knock out the nodes nearest wherever it starts to pool, and watch the shed keep getting worse while the app goes quiet.
Recreated in the app's sampled chrome
Peak 13.2 ppm at bay 22, and the dashboard agrees to within 0.7 ppm. Stop a couple of fans and watch where it starts to pool.
Sensor heads sit at bird height rather than ceiling height, and that is the decision this whole set-piece exists to make arguable. Ammonia pools low and it pools unevenly; a probe in the wrong place can miss what the birds are experiencing. The early warning at 19 ppm gives a manager time to investigate before conditions become more severe — but an alert can only reflect the areas covered by working sensors.
How a reading becomes a decision.
I built this end to end — designing the enclosures, writing the firmware, and shipping the full-stack web and mobile applications. Five stages sit between a sensor head and a manager's lock screen.
Six surfaces, designed for a dark shed at arm's length.
The live dashboard is the part people notice. The decisions that made it usable are mostly everywhere else — in how alerts escalate, what the operator is allowed to override, and where a report actually ends up.

Every metric carries the range it should sit in.
“28.5°C” means nothing to a shed hand at 2am. “Safe 28–29°C” directly beneath it turns a reading into a decision. Encoding the agronomy into the interface is what let this replace a supervisor's memory — and it's why ammonia gets equal weight with temperature rather than being buried a level down.
What owning the whole stack actually taught me.
This required stepping out of the IDE and into an EC farm — understanding the specific panic of a 40°C afternoon, and translating that urgency into a system that can alert locally when the internet connection is unavailable. The design decisions that mattered were not screen decisions. They were where to physically mount a sensor head, and what a system should do when its own network is gone.
Owning everything from the solder on the board to the type on the dashboard is what made the experience cohesive. It is also what convinced me that hardware and interface are not two disciplines that meet at an API — they are one product, and the seams are where users get hurt.
The same farm also needed a better way to record each sale.
My parents received handwritten slips from poultry traders and later copied the numbers into a ledger. Poultry Ledger turns a photograph of each slip into an editable sales record.
Poultry Ledger



