brota
IoT platform for real-time plant monitoring
The Problem
Plant care depends on data that users simply don't have. Humidity, temperature and light conditions are invisible without the right tools.
The Solution
A complete IoT system that measures environmental conditions through custom sensors, processes data in real-time, and notifies users when their plants need attention.
Impact
From invisible data to actionable insights — plant care becomes data-driven instead of guesswork.
Architecture
ESP32 microcontrollers with environmental sensors (humidity, temperature, light)
Node.js API that processes sensor data, manages devices, and handles business logic
Dual database: PostgreSQL (Neon) for structured data, Supabase for auth and realtime
Flutter cross-platform app for iOS and Android with BLE device pairing
Next.js dashboard for data visualization and device management
Key Features
IoT Sensors
Real-time environmental monitoring with ESP32
BLE Provisioning
Device pairing and configuration via Bluetooth
Push Notifications
Automated alerts when plants need attention
Plant Dashboard
Visual data with historical charts and trends
Payment Integration
Stripe subscription management for premium features
Dual Database
PostgreSQL + Supabase architecture for different needs
+6 more features in the repo
Under the Hood
Dual Database Architecture
PostgreSQL (Neon) for structured transactional data, Supabase for auth and real-time subscriptions — each database handles what it does best.
- Client request
- API routes to correct DB
- Neon for structured data
- Supabase for auth/realtime
Error Code System
Structured error codes mapped to i18n keys — every error is traceable from backend to UI with full locale support.
- Backend generates error code
- Code mapped to locale
- Frontend renders localized message
Thin Client Firmware
ESP32 acts as a thin client: reads raw sensor data, transmits via BLE, and lets the backend handle all processing and decisions.
- ESP32 reads sensors
- Sends raw data via BLE
- Backend processes and decides
- App displays result