Sidney
An AI gardener riding shotgun in the Mali app.
AI gardener riding shotgun in Mali. Reads the user's plants, growth log and local weather, then writes a clear daily care plan.
// architecture
The Mali app (Flutter) keeps each user's plants and per-plant care state in Firestore. For a care insight, the app POSTs to a Python FastAPI backend that runs Gemini 2.5 Flash, grounded by vector search over a plant knowledge base (and optionally the local weather). Plant photos are run through a Plant.id health assessment whose findings feed the model. The daily plan is separate: a Cloud Function runs hourly and timezone-aware, tallies everything due, and sends one grouped push. Real-time voice chat runs on Gemini Live.
// how it works
- 1
Know the garden
Reads the user's plants and per-plant care state from Firestore — what's due for water, feeding, a germination check or a transplant.
- 2
Ground the advice
On demand, the app POSTs to a Python backend that runs Gemini 2.5 Flash, grounded by embedding-based vector search over a plant knowledge base, optionally folding in local weather — so the tips are about today, not generic.
- 3
Photo check-ins
A plant photo is run through a Plant.id health assessment; the findings feed the model, which falls back to Gemini-only if that quota is hit.
- 4
Daily plan
A Cloud Function runs hourly and timezone-aware, tallies everything due, and sends one grouped push — N plants need water today, tap for the full report — instead of a pile of separate reminders.
- 5
Talk it through
The user can voice-chat Sidney in real time on Gemini Live for a quick, plants-only second opinion (capped to a few short sessions a day).
// tool calls
POST /gardens/{id}/insightsapp → FastAPI backend; returns Gemini-synthesized care tipsGemini 2.5 Flashwrites the grounded care insightsembedding + Qdrantvector search over the plant knowledge base for groundingPlant.id assessmentdiagnoses issues from a plant photodailyGardenSummary (hourly)tallies due tasks per timezone and sends one grouped FCM pushGemini Livereal-time voice chat, capped 3/day × 10 min
// daily report
// stack
// infrastructure
- ▸App: Flutter (iOS + Android)
- ▸AI backend: Python FastAPI
- ▸Daily push: Cloud Function (hourly, timezone-aware) → FCM
- ▸Data: Firestore
- ▸Models: Gemini 2.5 Flash + Gemini Live
// why it exists
Plant-care advice online is generic. Sidney's is specific to your plants, your climate, and what they need today.