- web/src/lib/plants.ts: zod-validated Plant schema + react-query hooks (list/create/update/delete) over the #12 endpoints, with the category enum, labels, isBuiltin helper, and a 409 conflict extractor. - /plants page: searchable, category-chip-filtered grid of PlantCard; built-ins badged and offer only Duplicate; own plants add Edit/Delete. A local metric/imperial spacing toggle (no per-user unit pref exists server-side). - PlantFormModal: create/edit/duplicate a custom plant (name, category, spacing, color, emoji icon, days-to-maturity, notes), unit-aware spacing, 409 rebase. - DeletePlantModal: confirm + surface the server's PLANT_IN_USE refusal inline. - editor/PlantPicker.tsx: reusable search-first chooser with recently-used (localStorage) and category filter, bottom-sheet on mobile / panel on desktop, onSelect callback. Demoed via the /plants "Try the picker" button until #15 consumes it. - units.ts: small-scale spacing helpers (cm/inches) + tests. tsc --noEmit clean; 20/20 vitest; production build green. Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]> Claude-Session: https://claude.ai/code/session_01JdQpdYYsTgtkJBxbcpAszi