{{ summaryTitle }}
{{ summaryValue }}

{{ summaryLine }}

Low conflict{{ resultsReady ? computation.values.low_count : '—' }} Watch{{ resultsReady ? computation.values.watch_count : '—' }} Conflict{{ resultsReady ? computation.values.conflict_count : '—' }}

{{ summaryAnnouncement }}

{{ bed.label }} {{ rotation_years }} seasons
Crop rotation history and next-season planting inputs
Example: Bed A: 2025 tomato, pepper | 2024 bush bean. Use 1–12 beds.
Use 1–12 crop lines. Unknown crops stay visible and receive the selected caution rule.
{{ rotation_years }} seasons
seasons
A longer interval increases the lookback, not a guarantee that pests or disease have cleared.
{{ bed_capacity }} crop{{ Number(bed_capacity) === 1 ? '' : 's' }}
per bed
Capacity is a roster limit, not a spacing or companion-planting recommendation.
Choose the caution level supported by your own bed history and local guidance.
Balanced keeps family and feeder signals at their baseline weights.
{{ unknown_family_penalty }} points
points
Neutral default: 0. Verify unknown crop families before treating any assignment as low conflict.
CropBedFamilyRiskScoreReasonNext stepCopy
{{ row.crop }}{{ row.bed }}{{ row.family }}{{ row.risk }}{{ row.score }}{{ row.reason }}{{ row.action }}

The chart renderer is unavailable. The same assignments and risk scores remain in the tables.

BedRecent familiesPlanned cropsStatusNext stepCopy
{{ row.bed }}{{ row.recentFamilies }}{{ row.plannedCrops }}{{ row.status }}{{ row.nextStep }}

Introduction:

Garden beds remember more than the crop name on last year's label. Plant residue, roots, nutrient demand, insects, and soil-borne pathogens can carry effects into later seasons. Crop rotation uses that history to avoid returning closely related plants to the same ground too soon.

Botanical family is the key connection. Tomato after pepper is still a nightshade repeat because both belong to Solanaceae. Cabbage after kale repeats Brassicaceae, and cucumber after squash repeats Cucurbitaceae. Switching crop names without switching families may leave the main disease and pest relationship unchanged.

Common garden crop families
FamilyCommon cropsPlanning clue
SolanaceaeTomato, pepper, potato, eggplantKeep nightshade disease history together.
BrassicaceaeCabbage, broccoli, kale, radishClubroot and brassica pests can make repeats consequential.
CucurbitaceaeCucumber, squash, pumpkin, melonTrack mildew, wilt, and vine-pest history.
FabaceaeBean, pea, cowpea, cloverLegumes can support fertility planning but do not erase disease risk.
ApiaceaeCarrot, parsnip, celery, parsleyRoot and umbel crops share a family even when growth habits differ.

Rotation intervals are guides rather than guarantees. University extension advice commonly recommends leaving two to four years between members of the same family in one location, but the right break depends on the pathogen, climate, crop variety, garden sanitation, and local history. Some problems persist longer, while airborne disease can arrive even after a careful rotation.

Fertility adds a second decision. Following one heavy feeder with another can increase nutrient pressure, while a recent legume may be a useful predecessor for a heavy-feeding crop. That relationship is not a fertilizer prescription. Nitrogen contribution varies with species, biomass, inoculation, harvest, residue handling, and soil conditions.

Small gardens rarely permit a perfect rotation. Bed count, crop demand, sunlight, trellising, watering, spacing, and harvest access may force compromises. A useful plan identifies the least conflicting placements and keeps uncertain crops visible instead of pretending every crop has been classified correctly.

Rotation is only one part of disease management. Clean planting material, resistant varieties, airflow, watering practice, sanitation, scouting, and local diagnostic advice can matter as much as the bed sequence. A low-conflict placement should still be checked against current conditions and local guidance.

How to Use This Tool:

Record the newest season first so recent family repeats receive the strongest weight.

  1. Enter one line per bed in Bed history. Put the bed name before a colon, separate seasons with vertical bars, and list crops within a season after its year.
  2. Enter one requested crop per line in Next crops. Up to 12 bed lines and 12 crop lines are accepted.
  3. Set the Rotation interval from two to six seasons and the Bed capacity from one to six crop lines per bed. Capacity limits assignments; it does not check plant spacing or companion planting.
  4. Choose Disease pressure and Planning goal to change the weight of family repeats and feeder history. Use the unknown-family penalty only when unidentified crops should receive explicit caution points.
  5. Review Rotation plan for each proposed assignment and Conflict heatmap for alternatives. Verify unknown families and resolve unassigned or conflict rows before planting.

Interpreting Results:

Read the row reason before the score. The score explains how the local heuristic ranked a crop-bed pair; it is not a probability of disease, expected yield, or agronomic approval.

  • Low covers scores below 25. It means the recorded history produced limited modeled conflict.
  • Watch covers scores from 25 through 59. Review family history, fertility, residue, and local conditions before keeping the assignment.
  • Conflict begins at 60. Prefer another bed, a locally suitable break crop, or a longer rotation when practical.
  • Unassigned means every bed reached the selected crop-line capacity. Increase capacity only after confirming that physical spacing and management can support the extra crop.

Technical Details:

Bed history is read one line at a time, with up to six pipe-separated seasons per bed. The first season is treated as most recent even when a year is omitted. Crop names are normalized and matched against a local family catalog; unrecognized names remain in the plan as Mixed / unknown.

Formula Core

Each crop-bed pair receives additive conflict and feeder terms. Season recency declines linearly across the selected interval. The total is clamped to 0 through 100 and rounded to the nearest whole point.

S= round( clamp( U+F+E+H+QL ,0,100 ))
Crop rotation score contributions
TermExact contribution
U, unknown familyThe selected unknown-family penalty, 0 to 40. A bed with no usable history adds 8 points to the family term.
F, same familyFor each matching season: 42 × recency × disease-family multiplier × goal-family multiplier.
E, exact cropFor each exact-name repeat: 12 × recency × disease exact-crop multiplier.
H, heavy-feeder repeatFor a heavy feeder after another heavy feeder: 14 × feeder multiplier in the newest season, or 7 × feeder multiplier one season further back.
Q, sensitive-family repeatWhen a cataloged sensitive crop has any same-family match: 8 × disease-family multiplier × goal-family multiplier.
L, recent legume creditFor a heavy feeder after a legume: subtract the larger of 10 × feeder multiplier for the newest season or 5 × feeder multiplier one season further back.

For a selected interval of n seasons, recency is 1 for the newest season, then (n − 1)/n, continuing down to 1/n. The disease and goal settings supply the following multipliers.

Crop rotation pressure and goal multipliers
SettingFamilyExact crop or feeder
Low disease pressure0.780.85 exact crop
Moderate disease pressure1.001.00 exact crop
High disease pressure1.351.20 exact crop
Balanced goal1.001.00 feeder
Disease-caution goal1.240.85 feeder
Feeder-balance goal0.901.35 feeder
Compact-fit goal0.850.95 feeder

Rule Core

Assignments are greedy rather than globally optimized. Crops are processed in the order entered. For each crop, all beds are sorted by conflict score and then by original bed order; the first bed below capacity receives the crop. Earlier crop lines can therefore occupy a low-conflict slot that a later crop might also need.

Crop rotation score bands
BandBoundaryAssignment meaning
LowScore < 25No strong modeled conflict in the recorded interval.
Watch25 ≤ score < 60Keep only after reviewing the named family or feeder concern.
ConflictScore ≥ 60Prefer another placement or extend the break.
UnassignedAll beds at capacityReturned with score 100 and a capacity warning.

Limitations and Privacy:

The score is a repository-authored planning heuristic, not a plant-disease model or extension recommendation. It uses a finite crop-name catalog and cannot account for local pathogen survival, resistant cultivars, soil tests, weather, microclimate, pesticides, sanitation, spacing, or the physical layout of mixed plantings.

  • Verify unknown crop families before accepting a low score, especially when the unknown-family penalty is zero.
  • A longer lookback includes more history but does not prove pests or pathogens have cleared.
  • Legume credit is a feeder-balance hint, not a measured nitrogen value or fertilizer recommendation.
  • Bed histories and plans remain in the browser; no garden records are uploaded.

Worked Examples:

Two beds and two requested crops

Suppose Bed A held tomato last season and bean the season before, while Bed B held cabbage and then carrot. With moderate pressure, a balanced goal, three-season lookback, and capacity one, tomato scores 71 in Bed A but 14 in Bed B, so it goes to Bed B. Bean then scores 36 in Bed A and 0 in Bed B, but Bed B is already full; bean is assigned to Bed A with a Watch label. Reversing the crop-line order can change the greedy assignment.

References: