Sprout
Tells you exactly when to water each plant in your specific home, adapts to how the plant actually responds, and walks you through rescuing the ones that are struggling.
- Status
- Build-ready
- Platforms
- Web (PWA)
- Role
- Spec, design and build
- Source
- PaisehSG/sprout (private)
Most plant apps hand you a fixed watering interval from a species table and leave you to it. Sprout starts there and then learns.
Content trust matters here, so the app is explicit about it: all care and diagnosis content is researched from authoritative sources — university extension guides, the RHS, the ASPCA — and cited. It is not reviewed by an in-house horticulturist, and the app says so rather than implying otherwise.
How it’s built
React 18, Vite and strict TypeScript with Tailwind, over Firebase for Auth, Firestore, Storage and Cloud Messaging. Installable as a PWA with an offline Today list and background sync. Without Firebase environment variables it runs in demo mode, so the landing page, species library and diagnosis symptoms are all browsable immediately.
Schedule accuracy is a week-one credibility trap: if the first interval it gives you is obviously wrong, nothing else gets a chance. So the two engines that decide it are pure and thoroughly tested — 37 tests across the interval calculation (pot, light and season factors, hemisphere, season boundaries, clamping, brand-new-plant defaults) and the adaptive feedback loop (learning-phase versus settled step sizes, bounds).
Limits that can’t be forged
The free tier caps you at eight plants and one diagnosis. Those caps are
enforced by Firestore Security Rules using getAfter() count-mirror checks
against counters that Cloud Functions maintain and clients are forbidden to
write — so a tampered client can’t bypass them. Photos are compressed on the
device before upload, and Storage rules restrict every path to its owner while
rejecting non-images and anything over 3 MB.
Scheduled functions handle the parts that have to be server-side: batching each day’s due plants into a single reminder digest that respects quiet hours (never per-plant nagging), and a monthly job that re-derives seasonal baselines while preserving whatever adjustment the plant has taught the app so far.