An integrated crop monitoring and automated watering system connecting applications with ESP32 devices.
Delivered scope
- ASP.NET Core API, PostgreSQL and domain model for users, organizations and devices
- React web portal, administration intranet and React Native mobile application
- Three ESP32 modules for watering, soil and light measurements, and air conditions
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
In both home and professional cultivation, conditions are often checked manually and only at intervals, while readings from separate sensors do not form a consistent history. This makes trend analysis difficult and delays reactions to abnormal soil moisture, temperature, air humidity or light levels.
Solution
The system connects three ESP32 modules with an ASP.NET Core API, PostgreSQL database, React portal and React Native application. Devices periodically upload measurements and fetch commands, while the backend stores their history, compares readings with species thresholds, creates alerts and can start watering. Users manage plants, zones, sensors, valves and schedules from the web or mobile application.
- TenantId-based isolation for organization and user data.
- Alerts for temperature, humidity, light and device state.
- Manual, scheduled and automatic watering.
- Sequential valve control with a local 120-second safety limit per valve.
- Administration intranet, announcements and static portal content editing.
- Shared TypeScript logic across web and mobile clients.
- xUnit tests for the API, Vitest and Testing Library for web, and Jest for the mobile application.
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.





