Inspiration
Houseplants are awesome—until you forget to water them… or water them way too much. We wanted something that makes plant care easy, social, and actually fun. So we kept the cozy, game-y vibe—every plant is a little cauldron “brewing vitality”—and turned smart watering into points, streaks, and friendly competition. Bonus: saving water (and money) is a core mechanic, not an afterthought.
What it does
CauldronCare is a gamified plant-care app paired with a small soil-moisture sensor that streams live readings to your phone. It also supports an ESP32-driven spray mechanism you can trigger from the app for short, precise bursts. Sensor + app loop:
Capacitive soil moisture readings drive a live “Brew Score”
“Overflowing cauldron” (too wet) and “underfilled cauldron” (too dry) cost points
Keep moisture in the target band to earn streaks, badges, and guild points
Optional photo-based species hints and care tips using the Google Gemini API
You can tap to add "potions" (water) to the "cauldron" (plant) right from the app!
App features (React Native):
Home: your overall “Brew Score,” per-plant health, streaks, and water/money saved
Guilds: join friends, compare weekly totals, climb a playful leaderboard
Insights: moisture trend graphs and nudges when you’re drifting out of range
Onboarding: quick flow to add a plant, set a target moisture band, and pick notifications
Controls: tap-to-spray bursts with dose presets
How we built it
Hardware & firmware
ESP32 (ESP-IDF/Arduino) reads a capacitive soil moisture sensor and publishes normalized % moisture.
Low-power sampling + calibration routine to map raw ADC → stable moisture percentage.
BLE (default) or Wi-Fi (optional) transport for sending readings to the phone at a fixed interval.
Software & cloud
Mobile app: React Native + Expo. Bottom-tab nav with Home / Guilds / Insights.
Auth & onboarding: Auth0-hosted login, token storage, first-run flow to name your plant and set a target band.
Telemetry: BLE characteristic (notify) for moisture%; Wi-Fi mode uses a lightweight HTTP/WebSocket bridge if desired.
Health & scoring: on-device logic converts moisture% vs. target band into Brew Score deltas, streaks, and badges.
Insights: optional Photo → Gemini API → care summary (species hints, watering ranges, red flags).
State: TypeScript, Zustand for app state; local persistence for offline graphs.
Challenges we ran into
Sensor calibration: different soils/pots read differently; we built a guided 2-point calibration and smoothing.
Transport choices: balancing BLE simplicity vs. Wi-Fi range and reconnection behavior.
Scoring feel: making the Brew Score responsive without punishing normal fluctuations.
Accomplishments that we're proud of
A fully gamified front end that talks to a real sensor and turns moisture control into a game.
Calibration + normalization that makes cheap sensors feel consistent across plants.
Clean onboarding that gets a new user from zero → paired sensor → target band in minutes.
Guilds and streaks that actually motivate better watering habits.
What we learned
Calibration is king: a quick two-step baseline/wet reference beats fancy models when time is tight.
Gentle feedback > nagging: positive streaks and small nudges outperform harsh penalties.
Offline-first matters: caching readings locally keeps graphs and scores smooth even when connections wobble.
Simple transports win: BLE notifications with a tiny payload were enough for a great UX.
What's next for CauldronCare
Smarter targets: seasonal moisture bands and substrate-aware presets.
Adaptive scoring: per-species ranges and dynamic penalties for chronic overwatering.
Social events: weekly guild quests, limited-time badges, and campus club challenges.
Sustainability dashboard: verified water saved (mL → $) with impact badges.
Hardware kit: pre-calibrated sensor stick with printable clips, a long-life battery, and a quick-pairing flow.
Built With
- arduino
- arduino-framework
- auth0
- esp32
- git
- github
- google-gemini-api
- javascript
- node.js
- npm
- pwm
- python
- react-native
- typescript

Log in or sign up for Devpost to join the conversation.