Portfolio / Case Study / Smart Farm IoT
Agriculture · IoT · Offline-First · Flutter

12 fields. 100+ sensors.
No reliable internet.

Most IoT apps assume connectivity. This one had to work when there was none. That single constraint changed everything about how we built it.

30%
Water savings
12
Fields monitored
18 wks
Delivery incl. hardware
100+
IoT devices connected

Monitor everything. From one app. In real time. Without internet.

A farming client needed to monitor soil moisture, temperature, and irrigation conditions across 12 fields, all from a single app, in real time. Standard request for an IoT project.

Then the last constraint: no reliable internet on site. That changed everything. You can't build a real-time monitoring system for an environment where real-time connectivity doesn't exist without rethinking the architecture from scratch.

"Most IoT apps assume connectivity. This one had to work when there was none."

Smart Farm IoT App
Smart Farming IoT Control System · App Screenshots

An offline-first IoT system with transparent data age

The app had to serve a farmer who might be standing in a field with spotty signal, or checking in remotely over cellular. We built two distinct communication layers and designed the UI to handle both gracefully.

Hardware integration ran over Bluetooth Low Energy for on-site control and MQTT over cellular for remote monitoring. Two protocols, one unified app experience.

Flutter Firebase MQTT Bluetooth Low Energy Cloud Functions SQLite (local cache) Push Notifications IoT Hardware Integration

What does the app show when the data is 4 hours old?

The hardest problem wasn't the sensors, the Bluetooth stack, or the MQTT broker. It was a design question: what should the UI show when a device has been offline for hours?

If you show stale data without context, a farmer might irrigate fields that were already irrigated, or ignore a dry field because the last reading looked fine. Both scenarios cause real damage to yield.

The Decision

We designed the UI to show data age transparently. Every sensor reading displays when it was last updated. If a device hasn't synced in over an hour, the reading is visually flagged as potentially stale. The farmer always knows what they're looking at and can make an informed decision.

This sounds simple. In practice, it required rethinking how every data point was stored, timestamped, and rendered, and how sync events would propagate through the UI without causing unnecessary re-renders on 100+ sensors.

Measurable impact on yield and cost.

30%
Water savings via smart irrigation
100+
IoT devices monitored
18 wks
Full delivery incl. hardware testing
0
Data lost during offline periods

Agriculture is one of those industries where a well-built app has a direct impact on yield and cost. Not hypothetically. Measurably. The 30% water savings translated directly into lower operating costs for the farm season over season.

Offline-first is a speciality, not an afterthought.

Most developers treat offline support as a nice-to-have: a sync indicator, maybe a cached response. Building for an environment where connectivity is the exception, not the rule, requires treating offline as the primary state and online as the bonus.

This project also reinforced that the hardest problems in mobile development are often UX problems in disguise. The technical challenges around BLE and MQTT were solvable. Deciding how to communicate uncertainty to a farmer making operational decisions. That required real thought.

Building something that needs to work
without reliable internet?

That is a speciality, not an afterthought. If you're exploring IoT, agriculture, or any field-deployed system, let's talk about the architecture before you start building.