Skip to Content
DevelopersDecision records0024 Pod planner and Gardyn plant catalog

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 by scripts/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, carry harvestEstimated or successionInferred (knowledge/plants/catalog-provenance.md). A test keeps every zone equal to PLANT_ZONES in lightZones.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 (plans table). 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 raises reminder_sow when 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.

Last updated on