Daffodil
AI-Powered Vegetation Line Prediction for Indoor & Controlled-Environment Farms
Market Focus: New York State (CEA / Vertical Farming Corridor)
New York has become one of the densest hubs for Controlled Environment Agriculture (CEA) in the U.S. — large vertical farms upstate (e.g., the Hudson Valley, Buffalo, and Newburgh corridor) and rooftop/warehouse farms in NYC. These operations grow indoors under LED arrays, hydroponic/aeroponic racks, and tightly controlled climate zones — but they still make planting, thinning, and harvest-line decisions largely by eye or fixed schedules, not by real-time plant growth data.
Daffodil's core idea: use computer vision + environmental sensor fusion to predict the "vegetation line" — the growth-front boundary showing which rows/trays are ready to advance to the next stage (germination → vegetative → harvest) — days before it's visually obvious to a human.
Target customer: indoor/vertical farm operators, greenhouse growers, and CEA facility managers across NY (5–500k sq ft facilities).
2. Core Features
🌟 Flagship Feature: Predictive Growth-Line Forecasting
Instead of just showing current plant health (what most agtech dashboards do), Daffodil forecasts where the vegetation line will be in 3, 7, and 14 days, using:
- Overhead/rack-mounted multispectral cameras (NDVI-style indoor imaging)
- Time-series growth-rate modeling per tray/row, calibrated per crop variety
- Environmental inputs (light hours, temp, humidity, CO2, nutrient dosing logs)
Output: a visual "growth-front map" of the facility with a countdown to harvest-readiness per zone, so labor and logistics can be scheduled in advance rather than reactively.
Supporting Features
| Feature | What it does |
|---|---|
| Zone Health Scoring | Per-tray/row health index (0–100) flagging stress, mold risk, or nutrient deficiency |
| Harvest Labor Planner | Auto-generates a 2-week harvest labor schedule from predicted readiness dates |
| Anomaly Alerts | Push/SMS alerts when a zone's growth curve deviates from its expected model |
| Yield Forecasting | Predicts total yield per crop cycle 10–14 days out, for buyer/distributor commitments |
| Multi-Facility Dashboard | For operators with multiple NY sites, a rollup view across facilities |
| NY Compliance Log | Auto-logs environmental/production data in a format aligned with NY Dept. of Ag & Markets CEA reporting practices |
3. Implementation Plan
Phase 1 — Hardware Integration (Weeks 1–4)
- Install fixed or rail-mounted multispectral/RGB cameras above grow racks
- Connect to existing climate/sensor systems (Priva, Argus, TrolMaster, etc. via API/Modbus)
- Edge device (NVIDIA Jetson-class) per zone for local image preprocessing
Phase 2 — Model Calibration (Weeks 3–8, overlaps Phase 1)
- Baseline data collection per crop variety grown (leafy greens, herbs, microgreens, strawberries, etc.)
- Train/fine-tune growth-curve prediction models per crop using facility's own historical + live data
- Human-in-the-loop correction: growers tag "ready" vs "not ready" for the first 2–3 cycles to refine accuracy
Phase 3 — Dashboard & Alerts Rollout (Weeks 6–10)
- Web dashboard (facility map, growth-line visualization, forecasts)
- Mobile app for floor staff (zone-level alerts, checklist, harvest queue)
- Integration with labor scheduling tools (e.g., When I Work, or CSV export)
Phase 4 — Optimization Loop (Ongoing)
- Monthly model retraining as more harvest cycles complete
- Expansion to yield forecasting and buyer-commitment tools
- Optional: integration with NY distributor/wholesale marketplaces for pre-harvest sales
Team & Timeline
- MVP for single facility: ~10 weeks
- Team needed: 1 CV/ML engineer, 1 backend/infra engineer, 1 frontend engineer, 1 agronomist (part-time, crop calibration), 1 installer/technician
4. Pricing Breakdown
Pricing is structured by facility size (sq ft of active grow space), since that drives camera/sensor count and compute load.
| Tier | Facility Size | Monthly Price | Includes |
|---|---|---|---|
| Sprout | Up to 5,000 sq ft | $650/mo | Growth-line forecasting, zone health scoring, mobile alerts, 1 facility |
| Bloom | 5,001–25,000 sq ft | $1,800/mo | + Harvest labor planner, yield forecasting, priority support |
| Harvest | 25,001–100,000 sq ft | $4,500/mo | + Multi-zone facility mapping, NY compliance logging, API access |
| Enterprise | 100,000+ sq ft or multi-site | Custom (starts ~$9,000/mo) | + Multi-facility dashboard, dedicated agronomist support, custom model tuning |
One-time costs:
- Hardware install (cameras, edge devices, cabling): $3,000–$15,000 depending on facility size (can be leased instead: +$150–$600/mo)
- Onboarding & model calibration: $2,500 flat fee (waived on annual contracts)
Add-ons:
- Extra crop variety model training: $400/variety (one-time)
- SMS alerting (beyond email/push): $50/mo
- NY buyer-marketplace integration: $200/mo
Discounts:
- Annual prepay: 15% off
- NY-based CEA co-ops / multi-farm consortiums: 10% additional volume discount
5. Go-to-Market Note
New York offers relevant angles worth leaning on in sales conversations: state CEA grant programs (via Empire State Development and NYSERDA energy-efficiency incentives for indoor ag), and the concentration of vertical farms in the Hudson Valley/Capital Region makes for an efficient regional sales and installation loop before expanding to other states with strong CEA activity (New Jersey, Ohio, Michigan).
Core principle: separate the edge (per-facility, low-latency) from the cloud (shared, heavy compute) from day one. Most agtech startups couple these and pay for it at scale-up.
1. Edge Layer (per facility)
- Jetson-class device per zone runs a lightweight inference model (quantized, e.g. TensorRT) for real-time image capture + basic anomaly detection — works even if internet drops.
- Sensor/camera data buffered locally (SQLite/MQTT broker), synced to cloud on interval, not continuously streamed. Keeps bandwidth and cloud ingestion costs flat as you add facilities.
- Why this matters for scale: compute cost scales with facility count, not centrally — you're not paying for one giant inference cluster serving every camera in real time.
2. Ingestion & Data Layer
- Ingestion: Kafka (or managed equivalent — MSK/Confluent) as the backbone. Every facility publishes to the same topic schema regardless of hardware vendor (Priva, Argus, TrolMaster) — normalize at the edge, not in the warehouse.
-
Storage split:
- Raw images/spectral data → object storage (S3), lifecycle-tiered (hot 30 days, cold after)
- Time-series sensor data → a TSDB (TimescaleDB or InfluxDB) — this is what your growth curves are built on
- Structured/relational (facilities, zones, crop cycles, users, billing) → Postgres
- This 3-way split is the single biggest scaling decision: don't put time-series in Postgres, don't put images in a database at all.
3. ML Layer (the actual product)
- Feature store (Feast or homegrown) sitting between raw data and models — this is what lets you retrain per-crop, per-facility models without duplicating pipelines.
- Per-crop-variety models, not one global model — leafy greens grow nothing like strawberries. Train a base model, fine-tune per facility with their calibration data (your Phase 2 human-in-the-loop labels).
- Training: batch, offline, scheduled (weekly retrain as cycles complete) — not real-time. Real-time is only inference at the edge.
- Model registry + versioning (MLflow) from day one, even for one facility — you'll thank yourself at facility #10 when you need to know which model version made which prediction.
4. Application Layer
- API layer (FastAPI/Node) — stateless, horizontally scalable, sits in front of Postgres + TSDB
-
Multi-tenancy from the start: every table keyed by
facility_id, even with one customer. Retrofitting multi-tenancy later is the most common rebuild I see in this space. - Dashboard (React) + mobile app both hit the same API — no separate backends.
5. Scaling Path
| Stage | What changes |
|---|---|
| 1 facility (MVP) | Single-region cloud, manual model calibration, one shared DB |
| 5–20 facilities | Feature store + automated retraining pipeline; per-region data residency if you leave NY |
| 50+ facilities | Move to a proper orchestrator (Kubernetes/EKS) for edge fleet management; introduce a model-serving layer (Seldon/BentoML) instead of ad hoc inference scripts |
| Multi-state | Data residency/compliance splits by state (esp. if selling to CEA co-ops with different ag-reporting rules) |
6. MLOps / Reliability
- CI/CD for models, not just code — every retrain gets validated against a holdout set before it's pushed to any facility's edge device.
- Drift monitoring: alert when a facility's live growth curves diverge from the model's training distribution (common when a grower switches crop variety or lighting recipe).
The single most important early decision is the edge/cloud split with per-crop model architecture — it's what lets you onboard facility #2 without re-engineering, and it's the part most competitors in this space get wrong by centralizing everything.
Calibration data is what turns a generic "plant growth" model into one that actually knows this facility's strawberries under this facility's lights. Here's what's actually in it:
1. Paired image + label data
For each tray/row, at each imaging timestamp:
- The raw multispectral/RGB image
- A human-assigned ground-truth label: "not ready" / "approaching" / "ready to harvest" / "past peak"
- Ideally a continuous score too (e.g., estimated days-to-harvest), not just a category — this is what lets you train a regression model instead of just a classifier
This comes from growers tagging trays on the floor for the first 2–3 crop cycles — either through the mobile app (quick tap: "this row is ready") or a technician doing a manual pass with a tablet alongside the cameras.
2. Environmental context at time of imaging
Each labeled image gets tagged with the conditions that produced that plant state:
- Cumulative light hours (DLI — daily light integral)
- Temperature/humidity history for that zone since planting
- CO2 levels
- Nutrient dosing log (EC/pH, feed schedule)
- Days since germination/transplant
This matters because "ready" doesn't mean the same thing at day 21 under 16-hour light as it does at day 21 under 12-hour light. Without this context, the model just memorizes "day 21 = ready" and breaks the moment the grower changes their light recipe.
3. Crop variety metadata
- Variety/cultivar name (e.g., "Rex Butterhead" vs "Salanova Green")
- Seed lot / supplier, if the facility tracks it (genetic variation affects growth rate)
- Planting density per tray
4. Outcome data (the feedback loop)
- Actual harvest date and yield weight per tray
- Any post-harvest quality flags (bolting, tip burn, mold) — these become negative examples that help the model learn what not to call "ready"
Concrete example row
facility_id: NY-004
zone_id: B-12
crop_variety: Butterhead Lettuce (Rex)
image_timestamp: 2026-07-03T09:00
image_ref: s3://.../B-12_20260703_0900.tif
days_since_transplant: 18
DLI_cumulative: 14.2 mol/m²/day
temp_avg_7d: 68°F
humidity_avg_7d: 62%
grower_label: "approaching"
grower_est_days_to_harvest: 4
actual_harvest_date: 2026-07-07
actual_yield_g: 142
quality_flag: none
That row is one training example. You need a few hundred per crop variety before the model is more useful than a fixed schedule — which is why Phase 2 calibration takes 2–3 full cycles rather than being a one-time setup step.
Here's a fuller breakdown of each tier and what lives inside it — building on the architecture from before:
Tier 1: Edge Layer (per facility)
Purpose: low-latency capture and first-pass inference, works offline.
| Element | Role |
|---|---|
| Multispectral/RGB cameras | Capture per-tray images on a schedule (e.g., every 4 hours) |
| Jetson-class edge device | Runs quantized inference model locally; flags anomalies without waiting on cloud round-trip |
| Local buffer (SQLite/MQTT broker) | Stores readings temporarily if network drops; syncs on reconnect |
| Protocol adapters | Normalize vendor-specific sensor data (Priva, Argus, TrolMaster) into one common schema before it leaves the facility |
Tier 2: Ingestion & Data Layer
Purpose: get normalized data from many facilities into the right storage, cheaply and reliably.
| Element | Role |
|---|---|
| Kafka (or MSK/Confluent) | Central event backbone; every facility publishes to the same topic schema |
| Object storage (S3) | Raw images/spectral data, lifecycle-tiered (hot → cold) |
| Time-series DB (TimescaleDB/InfluxDB) | Sensor readings over time — the backbone of growth-curve modeling |
| Relational DB (Postgres) | Structured entities: facilities, zones, crop cycles, users, billing |
Tier 3: ML Layer
Purpose: turn raw + calibration data into predictions.
| Element | Role |
|---|---|
| Feature store (Feast) | Serves consistent features to training and inference, per facility/crop |
| Per-crop-variety models | Trained/fine-tuned separately — lettuce ≠ strawberries |
| Training pipeline (batch, scheduled) | Weekly retraining as crop cycles complete |
| Model registry (MLflow) | Tracks every model version and which facility/crop it's deployed to |
Tier 4: Application Layer
Purpose: expose predictions to humans and other systems.
| Element | Role |
|---|---|
| API (FastAPI/Node) | Stateless, horizontally scalable; single source of truth for all clients |
| Dashboard (React) | Facility map, growth-line visualization, forecasts |
| Mobile app | Floor-staff alerts, harvest checklist, calibration labeling UI |
| Multi-tenancy layer | Every table keyed by facility_id from day one |
Tier 5: MLOps / Reliability (cross-cutting)
Purpose: keep models trustworthy as facilities and crop variety count grows.
| Element | Role |
|---|---|
| CI/CD for models | Validates every retrain against a holdout set before deployment |
| Drift monitoring | Alerts when live data diverges from training distribution (e.g., grower changes light recipe) |
| Model-serving layer (at scale: Seldon/BentoML) | Manages which model version serves which facility/zone |