✍ïļBlog / Behind the Build

Why We Built Sproutcast

The origin story: a plant that almost died, a weekend project, and an open-source commitment.

5 min readorigin, open source

The plant that started this was a *Dahlia pinnata* — a tuberous dahlia grown from seed in March. By July it was 90 cm tall and had just set its first buds. By August it was dead.

I had overwatered it. Badly. The tuber rotted from the bottom up while the top of the plant looked almost fine until it didn't. I had been looking at it every day. I saw nothing.

That is the problem with visual plant monitoring: you are looking for change over days and weeks, but your brain normalises gradual change. You need a reference point. You need a number.

The first prototype

The first version was a Python script and a webcam. It ran a simple HSV threshold segmentation, measured the green pixel count, and wrote a number to a CSV file every hour. It was ugly. It worked. Over three weeks watching a second dahlia, the CSV showed a clear decline in green fraction four days before any visible yellowing.

That was enough to keep going.

Why open source?

Plant monitoring data is personal — it is your home, your garden, your practices. We did not want to build a product that survives only as long as a startup does. An open-source project can be forked, self-hosted, and contributed to regardless of whether anyone is being paid to maintain it.

The edge pipeline is pure C++20 with OpenCV — no Python, no cloud dependency, no black-box model. Every pipeline is a single .cpp file that you can read, understand, and modify.

What Sproutcast is not

It is not a magic plant doctor. The metrics are proxies, not ground truth. The chlorophyll index from a phone camera is not as accurate as a SPAD meter. The growth rate from a fixed webcam is not as accurate as a 3D scanner.

What it is: a consistent, longitudinal, zero-cost signal that gives you *something to compare against*. That is enough to catch most of the problems that kill plants — overwatering, light deficiency, nutrient depletion — before they become irreversible.

Where we are now

Sproutcast has grown from that CSV script into a full stack: C++ edge pipelines, a Go NATS bridge, SpacetimeDB for real-time sync, and a Next.js PWA. The dahlia that started this is planted again — and this time there is a Raspberry Pi watching it.