Skip to content
All workLive deploymentNominal
Enterprise TelemetryCase 012024 — present

Farm OS

solder to type

A low-cost, AI-integrated poultry telemetry platform for the Indian market — unifying custom ESP32 edge nodes and printed enclosures with a premium Flutter command centre.

  • 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
Failure mode 01

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.

Elapsed
T+00:00
Shed temp
28.5°C
Nominal
Exhaust bank running. Shed holding 28.5°C.
Shed D13 · plan view
4/4 3/4
INLETEXHAUST BANK 3
LETHAL > 41°CSAFE 28–29°C
T+00── unmonitored: total flock lossT+45
Farm OS · critical · shed D13
Temp 34.8°C climbing 0.4°C/min. Exhaust bank 3 unresponsive.
Acknowledged T+08:12 · backup engaged
OutcomeMeasured over 3 cycles

What changed once the shed could speak.

−0%
Flock mortality

From 6.5% to 2.1% across 22,000-bird sheds.

Mass-casualty events prevented

During Hyderabad's peak summer, caught before intervention windows closed.

−0%
Hardware cost

Against imported legacy European monitoring systems.

01Context

Two silent killers, and nobody in the shed at 2am.

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.

The legacy bottleneckBreach

Existing monitoring was prohibitively expensive — imported, proprietary hardware with no real-time mobile access. Managers fell back on manual walk-throughs, reacting to crises instead of preventing them.

Detection latencyhoursvs<40ms
02Field research

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.

    A 19 ppm alert threshold set so the house never reaches 25, where damage starts. The threshold ships attached to the reading it judges.

  • 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.

Where the numbers at the top come from

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 I can defend is the mechanism: three specific mass-casualty events were caught and named by the system inside the intervention window, and those are in the alert log with timestamps.

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.

03Contract

What the shed reports, and what the schema promises.

Measured

House 3 — Node Fleet

mqtt://farm-os.local/house-3/#

LiveData is updating in real time
  • ammonia.ppm18.4ppmDegraded
  • temp.ambient24.1°CNominal
  • humidity.relative61%Nominal
  • node.07.battery11%Breach
  • node.11.uplinkIdle
14 nodes reporting · 22,000 birds · updated 4s ago

Specified

Reading contract

packages/farm-os-core/src/reading.ts

TypeScript
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.

04Hardware

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.

Sensor node · exploded view

Five layers, printed and populated in-house. Hover one to read why it is the way it is — scroll to seal the enclosure.

05Operate it

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.

Exhaust
4/4
t+00:00
Modelled, not measured
House 3
120 × 14 m · 22,000 birds
INLETEXHAUST
Hover a bay to compare · click a node or a fan to knock it out
NH₃
0 – 45+ ppm
19 · alert25 · damage
ReportingOver alertOver damageOffline
06:00live
House 3
14/14 nodes reporting
Ammonia · peakNominal
13.0ppm
bay 22 · 40ms end to end
House map
Ambient
28.5°
Fleet
14/14

Recreated in the app's sampled chrome

House is clear

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 does not report a smaller problem, it reports a different room. The alert threshold of 19 ppm fires early precisely so the house never reaches 25, where respiratory damage starts — but a threshold only protects the birds standing near an instrument.

06System

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.

0102030405
Select a stage to read the design note
07Interface

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.

Dashboard — Farm OS
DashboardSettings › AlertsSettings › DashboardReportsAnalyticsInventory
01 · Safe bandsDashboard

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.

08Reflection

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 latency-free architecture. 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.

Next — Full-Stack & AI

Farm OS proved the shed could talk. The harder problem was the people inside it.

Operators still logged mortality and feed on paper, in a dusty shed with no signal. So I built an offline-first native app they actually enjoy using.

Poultry Ledger