An integrated crop monitoring and automated watering system connecting applications with ESP32 devices.
Delivered scope
- API and domain model for users, organizations and devices
- React web portal and React Native mobile application
- ESP32 firmware, telemetry, alerts and watering control
Concrete outcomes
- A working data path from a physical sensor to the user interface
- Shared access rules and business logic across web and mobile clients
- An architecture that lets firmware, backend and applications evolve independently
Problem
Plant records, sensor measurements and watering controls easily become scattered across separate tools. The goal was to bring them into one system that works for both individual users and organizations.
Solution
The system combines an ASP.NET Core API, React portal, React Native application and ESP32 firmware. Devices send measurements and receive commands, while users manage zones, plants, sensors, alerts and schedules from one application.
- TenantId-based isolation for organization and user data.
- Alerts for temperature, humidity, light and device state.
- Manual, scheduled and automatic watering.
- Shared TypeScript logic across web and mobile clients.
- API, web interface and mobile application test suites.
Key decisions
Business rules and access control stay in the API, which returns section-level permissions to clients. This keeps the web portal and mobile app consistent while allowing them to expose different interface scopes.
The device layer uses dedicated hardware identifiers and secrets. Measurements trigger domain events that drive alerts and watering decisions.
Result
The project demonstrates an end-to-end path from a physical sensor through the API and PostgreSQL database to the user interface. Its architecture lets the web, mobile and firmware layers evolve independently without duplicating core rules.




