Concept-oriented overview of Plotwise. For one-off answers, see the FAQ.
Location → climate → season → plots. The welcome wizard walks through these in order.
The welcome wizard collects four things before you can start planting:
Settings are editable any time via Settings.
A plot is a rectangular outdoor area. Containers sit inside plots or as standalones.
A plot is a rectangular outdoor area with real-world dimensions (e.g. 3m × 2m). Inside a plot, you place containers: raised beds, in-ground rows, pots, etc.
A container is always one of: inside a plot, inside a seedling area, or standalone (not placed anywhere). Seedling trays can only live in seedling areas, never in plots.
Each container has a cell grid (e.g. 6 × 3 cells at 15cm each). Plant instances occupy cells — at most one active instance per cell at a time.
The app simulates shadows from your obstructions at your latitude.
When you toggle Surroundings on a plot, you can draw rectangular obstructions (fences, sheds, house walls) and trees (with trunk + canopy). On any date, the app projects shadows from each obstruction based on sun position at your latitude.
This produces a per-cell sun exposure map for each container in that plot. The recommender and layout optimizer use this map to score placements: plants preferring full sun get higher scores in unshaded cells, shade-tolerant plants fit better in shadowed corners.
Containers not placed in a plot — or accounts with no location set — fall back to a neutral sun value and show an info hint in the optimizer.
Click a plant in the toolbox, then click cells to place. Drag across cells to paint.
In the container editor:
Instances progress through statuses — planned, seeded, germinated, transplanted, etc.
Each plant instance has a status representing its current stage:
Change status via right-click on the cell, or bulk-change via the selection toolbar. Dates you set (seeded, germinated, transplanted, first harvest) are authoritative and survive downstream recalculations.
Tray-to-tray, pot-up, and bed-to-bed rearrangement, plus the bulk Move action.
Every plant has a Move plant button in its detail panel. The picker is scoped by source:
Status survives the move when it makes sense: a seeded plant moved tray-to-tray stays seeded, a flowering plant moved bed-to-bed keeps blooming, and only the staging-to-bed transition flips status to transplanted.
Multi-select on the canvas exposes a Moveaction on the bulk toolbar — pick a destination container and the server drops every selected plant into the next free cells row-major (fails fast if the destination doesn't have enough room).
Frost, hard freeze, heat. The dashboard mirrors what /weather shows.
The dashboard surfaces the same alerts as the /weather page. Two banners live above your overview tiles:
The threshold sits in lib/weather/service.ts → getFrostRisk (severity = “danger” when tempMin < 0) so the dashboard banner can never disagree with the forecast page.
Daily and weekly plans rolled up per container, factoring in rain forecasts.
The schedule engine computes each plant's water and fertilize needs based on stage, plant type, and local weather. Results roll up by container — all plants sharing a container appear in one row so you can water them as a unit.
The Watering planner shows a 7-day forecast with rainfall overlay (subtract what the sky provides). The Fertilize tracker groups upcoming feedings by fertilizer type.
One active season at a time. Past seasons stay searchable for comparison.
A season groups one year of your garden. The Seasons page shows all your seasons with summary stats.
Start a new season when the calendar year turns — the app can copy plots, containers, and a plant template forward so you don't start blank. Previous seasons become read-only, preserving what actually happened for multi-year comparisons in Insights.
Pinch to zoom. Long-press for context menu. Single-finger to pan.
Every canvas (plot, tray, container) supports these touch gestures:
Per-cell plant suggestions and whole-container layout optimization.
The recommender suggests plants for a specific cell based on sun exposure, companion compatibility with neighbours, and your seed inventory. Open it from a cell context menu or the plot-level Recommend button.
The optimizer takes a container with N empty cells, a list of plants you want to plant, and produces a layout that maximizes sun fit, companion benefit, and yield. It can also reshuffle existing plants if you allow it.
Both features are on paid tiers (Grower and Harvest).
Plan your week, log harvests, ask grounded questions about your garden.
On Sprout and up, the assistant can call read-only tools to read fresh state — your plots, containers, indoor areas, plant instances, tasks, weather — before answering. It can also propose mutations (creating a tray, logging a harvest, completing a task) which surface as confirmation cards you click to run; nothing is written without an explicit yes.
Common asks:
Conversations stay in your account; the model never trains on your data. A per-tier monthly cap controls cost; you can see remaining usage in the chat drawer.
Gantt across the season. Per-bed or per-plant grouping; collapse groups to focus.
The Timeline renders one swimlane per plant instance — colored segments for each lifecycle phase (seeded, germinated, hardening, transplanted, harvest). Group by bed or by plant.
Each group header has a chevron toggle: click to collapse a group when you want to focus on a couple of beds. Collapse-all and Expand-all live in the toolbar. Per-group choices remember in the current tab via sessionStorage — a fresh tab starts expanded.
JSON export on every tier. Dataset refresh for power users.
Account → Export data downloads every row you own as JSON — portable and greppable.
Settings → Data exposes dataset-refresh tools and CSV imports for things like bulk seed inventory loads.