Skip to main content
JCR.DEV / DESIGN
02.3Internship / Solo Developer6 sheets

Fresco Grow Lab: IoT Telemetry for Grow-Bag Experiments

IoT telemetry for Fresco Greenovations, an agritech startup in Cagayan de Oro. ESP32 sensors log grow-bag temperature at four depths and tipping-bucket rainfall, and a Next.js dashboard turns the readings into watering, thermal and rain analytics. Boards are flashed and configured from the browser.

Fresco Grow Lab temperature dashboard with a weigh-the-bag status, a watering countdown, sensor health and readings from control, surface, root-zone and bottom probes.

Watering status, next-watering countdown and four probe channels

Sheet 1 of 6

Sheet 1 of 6. Watering status, next-watering countdown and four probe channels

6 sheets
Tech stack
ESP32
C++
PlatformIO
Next.js
React
TypeScript
Supabase
PostgreSQL
Tailwind CSS
shadcn/ui
Recharts
SWR
Zod
Web Serial
esptool-js
Vitest
Playwright
GitHub Actions
Vercel
Skills
Embedded systems
IoT data pipelines
Data visualisation
Database security
Sensor calibration
CI/CD
Context
Fresco Greenovations needed to know whether low-cost temperature probes can tell when a grow bag needs water, and how much rain reaches its plots. The grow-bag experiment logs four depths around the clock against daily 2 L waterings and 10-minute weigh-ins. The rain gauge turns a tipping bucket into calibrated rainfall, intensity and event data.
Role
Solo developer during an internship: hardware wiring, firmware, data pipeline, dashboard and deployment.
Timeline
Field build in July 2026; public release on October 1, 2026.
Firmware
C++ on PlatformIO with four build environments. Two ESP32 boards send data three ways: Wi-Fi to Supabase, USB serial into the browser, or the rain gauge’s own access point. Interrupt handlers only update counters; debouncing and publishing run in the main loop, so sensing and networking share one microcontroller.
Calibration
The hall-effect sensor counts both magnet edges per tip (tips = edges / 2). Each tip is calibrated to 2.3695 ml, the mean of 42 trials, and an odd edge count shows as a pending half tip.
Hardware setup
Boards are flashed from the browser with esptool-js over Web Serial. Wi-Fi and Supabase settings are entered over USB and saved on the board, so images carry no credentials and no one recompiles. Boards hold only the publishable key; writes run through server routes under row-level security.
Data
Supabase Postgres ships as five migrations: readings, irrigation events, rain gauge, RLS policies and SQL views. Rain sessions are kept locally in IndexedDB. A deterministic simulator models air at 24–33 °C, deeper probes lagging, bag weight dropping and afternoon showers, so every visitor sees the same realistic history without hardware.
Analytics
Thermal heatmap, vertical depth profile, recovery after watering, weight drift, rain events and intensity classes, each computed from the raw readings.
Correctness
95 Vitest tests, Playwright, ESLint and strict TypeScript. GitHub Actions builds and publishes the firmware images; Vercel deploys the dashboard from main.