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.

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