ADR 0024: Pod planner and Gardyn plant catalog
Status: Accepted Date: 2026-11-02
Context
lightZones.ts shows each pod’s light zone and says when a planted pod
would suit its plant better elsewhere. That helps one pod at a time. It does
not answer the questions you have before planting a batch of yCubes: where
should these twelve go, and should they all start today?
Gardyn publishes the answers in prose: each plant’s zone, “if the ideal spot is unavailable, place your plants one light zone lower”, cucumbers at the bottom of the middle column, space between large plants, and a succession table that staggers sowing by crop group. A third-party web app, My Pod Planner, automates this but has no licence and departs from Gardyn’s rules in places (knowledge/evaluation/mypodplanner-crosscheck-2026-11-02.md).
Decision
- Catalog (
src/plants/catalog.json, generated byscripts/plants/build-catalog.py): 139 plants from Gardyn’s zone guide, with first-harvest windows, care level and yield from Gardyn’s yCube product pages. Fields derived by rule, not published by Gardyn, carryharvestEstimatedorsuccessionInferred(knowledge/plants/catalog-provenance.md). A test keeps every zone equal toPLANT_ZONESinlightZones.ts. - One grid. The planner reads pod zones from
lightZones.ts; it has no grid of its own. The nursery (10 pods, no zones) is the only planner-only model. - Layout (
src/plants/planner.ts) follows Gardyn’s rules literally: ideal zone, else step down one zone, never up; never substitute another plant; on a Home, cucumbers take the bottom of the middle column; large plants avoid neighbouring large plants. What does not fit is reported, not dropped. - Sowing: the next yCube of a plant starts at the previous one’s first-harvest month plus its succession group’s gap (10, 21, 31 or 56 days); flowers and “all now” mode sow together.
- Plans are stored (
planstable). Applying one marks today’s pods seeded, notes later waves on their pods, starts a grow cycle if none is open, and the grow engine raisesreminder_sowwhen each later wave is due. - Exposed on the API (
/api/planner/*,/api/plans), as MCP tools (plant_catalog,plan_layout,best_spot,save_plan,apply_plan), on the Plan screen, and as a Home Assistant reminder.
Consequences
- Catalog harvest windows are months; ADR 0022’s per-crop profiles stay the place for day-level windows and leaf-cover targets. A later change could seed profiles from the catalog.
- The catalog goes stale as Gardyn’s range changes: re-extract, rebuild and review the diff.
- Applying a plan overwrites the pods it names; the MCP tool says to confirm with the user first.
- Not built: an automatic plant mix from preferences. If added, it should come from Gardyn’s kit guidance rather than invented ratios.
Sources: Gardyn Plant Placement Guide: Understanding Light Zones · Gardyn Succession Planting guide · ADR 0022: Harvest outlook from the camera, with optional plant profiles
Imported from docs/adr/0024-pod-planner.md in seedypod/core. Edit it there, not here.