{{ headline }}
| Metric | Value | Copy |
|---|---|---|
| {{ metric.label }} | {{ metric.value }} |
| Row | Plants | Spacing | Notes | Copy |
|---|---|---|---|---|
| {{ row.label }} | {{ row.plants }} | {{ row.spacing }} | {{ row.note }} |
| Step | Date | Notes | Copy |
|---|---|---|---|
| {{ event.label }} | {{ event.dateLabel }} | {{ event.detail }} |
Plants render to scale within the plantable area; dashed shading marks offset lanes for better airflow.
No layout yet. Adjust bed size and choose a crop to preview spacing.
A raised-bed plan is mostly geometry with a few biological constraints layered on top. Bed width limits reach, spacing controls airflow and crowding, and sunlight changes how ambitious a crop choice should be. This planner turns those practical questions into a row layout you can inspect before you buy soil, set transplants, or sow seed.
The package works from a rectangular bed, a crop preset or custom crop profile, spacing values, and sun hours. From there it calculates how many rows fit, how many plants fit in each row, how much soil and mulch the bed needs, and what the season timeline looks like once you add a planting date. The result is not just a single total. You get a scaled Garden Layout, a detailed Garden Summary, a lane-by-lane Row Plan, a Season Timeline, a simple Succession Overview chart, and a reusable JSON export.
That is especially helpful when you are comparing bed setups that look similar on paper but behave differently in practice. A 12 by 4 foot bed can become one roomy tomato lane, several rows of lettuce, or no productive row at all if you reserve the last lane for pollinators. The package makes those tradeoffs visible before they become expensive or awkward to fix.
It also shows where the plan stops being precise. Auto orientation is a simple sun-hours heuristic, not a sun-path model. Yield is a plant count multiplied by a per-plant estimate, not a weather, pest, or irrigation forecast. Companion notes are reproducible text suggestions, not agronomic guarantees.
Treat the result as a planning draft rather than a promise. Cultivar vigor, pruning style, soil quality, heat, wind, disease pressure, and frost timing can all move harvest dates and reduce or raise the harvest beyond what a spacing model can predict.
Start with the inside planting dimensions of the bed rather than the outside lumber size. Then choose a preset that roughly matches the crop you actually intend to grow. Presets are useful because they immediately load spacing, sunlight range, maturity time, and yield assumptions into one scenario instead of forcing you to invent all of them from scratch.
A convincing-looking diagram does not make the plan agronomically safe. If Sunlight logged sits outside the recommended range, or if the row count only works under very tight spacing, use the layout as a warning to rethink the crop or the site before you buy materials.
The package models one rectangular bed with uniform lanes. It converts bed dimensions to feet, spacing to inches, yield to pounds, and then solves the layout with floor-based geometry. That means each result is intentionally conservative: partial rows and partial plant slots are not counted.
Two measurements drive the layout core. First comes usable planting width after subtracting the edge buffer from both sides. Then the package divides that width by the chosen lane spacing to determine how many rows fit. A second floor calculation divides bed length by in-row spacing to determine how many plants fit in each row. Double rows double the effective row count, while Staggered keeps the row count but marks alternate rows as offset.
Preset crops add interpretation layers on top of the geometry. Each preset carries recommended sun hours, a density note, a list of companion suggestions, a pollinator mix, days to maturity, indoor-start lead time, harvest-window length, succession gap, and a per-plant yield estimate. If you keep the preset, those values overwrite matching inputs. If you switch to Custom, the editable numbers become the governing assumptions instead.
The main layout quantities are derived from a small set of bed and crop measurements. Soil and mulch are then calculated from depth against either the full bed footprint or the plantable area, depending on the material.
| Symbol | Meaning | Source |
|---|---|---|
L |
Bed length | Bed length |
W |
Bed width | Bed width |
B |
Edge buffer on each side | Edge buffer |
U |
Usable planting width | Computed |
Sr |
Between-row spacing | Row spacing |
Sp |
In-row spacing | In-row spacing |
Rp |
Productive rows after any pollinator reservation | Computed |
T |
Total productive plants | Computed |
ypp |
Yield per plant | Preset or Yield per plant |
D |
Bed depth | Bed depth |
M |
Mulch depth | Mulch depth |
The package adds a few explicit rules after the geometry. If Orientation is set to Auto, the label becomes North–South when logged sun is >= 6 hours and East–West when it is lower. If Pollinator strip is enabled, the last row is converted to a zero-plant strip with a pollinator note. If Offset planting is enabled, every second non-pollinator row is marked as a 50% offset and drawn with dashed styling in the diagram.
The timeline is date arithmetic rather than climate modeling. With a Planting date, the package can add Start seeds indoors when transplants are enabled and the preset carries an indoor lead time, then Prep bed & amendments, planting day, Target first harvest, Likely final harvest, and an optional Next succession planting. Direct-sow and transplant paths use different wording, but both anchor harvest timing to the entered planting date plus the chosen days-to-maturity value.
| Output | What it represents |
|---|---|
| Garden Layout | Scaled SVG bed sketch with row shading, plant markers, and orientation arrow |
| Garden Summary | Metrics such as row count, area, soil, mulch, spacing, sunlight, dates, and estimated yield |
| Row Plan | One row per lane with plant count, spacing text, and notes like companion choice or pollinator strip |
| Season Timeline | Date-based milestones generated only when a planting date is present |
| Succession Overview | Bar chart of plants per row, including 0 for any reserved pollinator strip |
| JSON | Structured dump of inputs, derived values, timeline events, row plan, and any errors |
Material estimates are intentionally simple. Soil fill needed uses the full bed footprint, not just the plantable strip, because bed volume does not disappear when buffers are reserved. Mulch coverage uses the plantable area only. Bag counts round up to whole bags at 1.5 cubic feet for soil and 2 cubic feet for mulch.
All processing happens locally in the browser with no server-side calculation. The reproducible exception is the companion-note shuffle: it is intentionally deterministic, so the same Layout seed with the same inputs reproduces the same row notes.
Build the geometry first, then layer in crop behavior, timing, and materials.
A good handoff point is when the diagram, metric table, and row list all agree on the same number of productive rows and the same spacing assumptions.
Trust the geometry outputs before you trust the yield or the dates. If the row count or plant count is wrong, every later estimate inherits that mistake.
Use a 12 ft by 4 ft bed, a 0.5 ft Edge buffer, the tomato preset, single rows, 8 sun hours, and a planting date of 2025-05-15. The package returns Total rows of 1, Plants per row of 8, and Total plants of 8. Plantable area is 36 sq ft, Soil fill needed is 40 cu ft, Estimated yield is 76 lb total, and First harvest target lands on Aug 1, 2025. This is the kind of roomy tomato layout that trades maximum count for airflow and access.
Keep the same 12 ft by 4 ft tomato bed, but enable Pollinator strip. Because only one lane fits in the base geometry, the last row becomes the reserved pollinator row. Total rows becomes 1 with 0 productive and 1 pollinator row, Total plants drops to 0, and Estimated yield reads Needs productive rows to estimate
. This is a good reminder that companion habitat still costs growing space.
Enter a 4 ft wide bed and set Edge buffer to 2 ft on each side. The package reports Edge buffer leaves no room to plant; reduce the buffer or widen the bed. No result tabs are trustworthy after that because usable planting width is 0. Fix the bed geometry first, then rerun the crop plan.
Because the package uses a direct threshold when Orientation is set to Auto. If logged sun is below 6 hours, the orientation label switches to East–West; otherwise it becomes North–South.
Soil fill needed uses the full bed footprint and Bed depth. Mulch coverage uses only the plantable area after buffers, so it is usually smaller.
That message appears when usable width after buffers is too small for the chosen Row spacing. Reduce the buffer, widen the bed, or choose a tighter but still realistic spacing.
Yes. Keep the same Layout seed and the same other inputs. The package uses a deterministic seeded generator for those notes, so the same setup produces the same companion assignment.
No. The timeline is built from your Planting date, transplant toggle, and the preset or custom maturity and harvest values. It does not fetch location data, frost data, or soil temperatures.