Skip to main content

Skill.md

crop-planner

Plan crop rotations, planting schedules, and companion planting for garden beds and fields. Use when asked to manage a farm, garden, or plot layout; schedule what to plant and when; check companion planting relationships; track rotation history; or generate a printable planting schedule. Triggers include "crop rotation", "planting schedule", "companion planting", "garden bed", "what to plant", "frost dates", or any task involving seasonal crop planning.

SKILL.md

---
name: crop-planner
description: Plan crop rotations, planting schedules, and companion planting for garden beds and fields. Use when asked to manage a farm, garden, or plot layout; schedule what to plant and when; check companion planting relationships; track rotation history; or generate a printable planting schedule. Triggers include "crop rotation", "planting schedule", "companion planting", "garden bed", "what to plant", "frost dates", or any task involving seasonal crop planning.
---

# crop-planner

Plan what to grow, where, and when. Tracks beds, crops, rotations, and generates a planting calendar from your frost dates.

## When to Use

- Planning what crops to plant in which garden beds this season
- Checking companion planting relationships (friends and enemies)
- Detecting crop rotation conflicts (same family in same bed too soon)
- Computing planting dates from frost dates
- Generating a printable planting schedule
- Tracking crop history per bed across multiple seasons

## Prerequisites

1. crop-planner server running (local or Docker)
2. At least one bed added to the system
3. Frost dates configured for your location

## Installation

Self-hosted. Run with Docker:

```bash
docker compose up -d
# App accessible at http://localhost:3000
```

Or run locally:

```bash
pnpm install
pnpm dev
# App accessible at http://localhost:3000
```

## Key Concepts

### Beds

A bed represents a physical growing area: a raised bed, in-ground plot, or field strip. Each bed has dimensions (in feet or meters) and a grid layout where you assign crops to cells.

### Crops

The crop database includes 30 common crops with growing data: days to maturity, spacing, sun requirements, water needs, whether to direct sow or transplant, and weeks before frost to start indoors.

### Planting Calendar

The calendar computes all sow, transplant, and harvest dates from:
- Your last spring frost date
- Your first fall frost date
- Each crop's growing requirements

### Companion Planting

Each crop has defined friend and enemy relationships. The bed layout editor shows warnings when enemy crops are placed in adjacent cells.

### Crop Rotation

The system tracks which plant family was grown in each bed each year. When the same family is planted again before the required rest period, a conflict is flagged.

## API Reference

All endpoints are at `/api/`. Requires session cookie if `AUTH_PASSWORD` is set.

### Beds

| Method | Path | Description |
|---|---|---|
| GET | /api/beds | List all beds |
| POST | /api/beds | Create bed |
| GET | /api/beds/:id | Get bed with plantings |
| PATCH | /api/beds/:id/layout | Save layout JSON |

### Crops

| Method | Path | Description |
|---|---|---|
| GET | /api/crops | List crops (supports ?search= and ?family=) |
| POST | /api/crops | Create crop |
| GET | /api/crops/:id/companions | Get companion relationships |

### Calendar

| Method | Path | Description |
|---|---|---|
| GET | /api/calendar | Planting calendar for active location |
| GET | /api/calendar?year=2025 | Specific year |

### Rotation

| Method | Path | Description |
|---|---|---|
| GET | /api/rotation | Rotation history per bed |
| GET | /api/rotation/conflicts | Detected conflicts |

## Environment Variables

| Variable | Description | Default |
|---|---|---|
| PORT | HTTP server port | 3000 |
| DATA_DIR | Directory for database and uploads | ./data |
| AUTH_PASSWORD | Optional password (empty = no auth) | (empty) |
| NODE_ENV | development or production | development |
| SESSION_SECRET | Session signing secret | (required in prod) |
| LOG_LEVEL | debug, info, warn, error | info |

Boolean env vars use `0` (false) and `1` (true).

## Workflow Example

```
1. Add beds: POST /api/beds {name: "North Bed", width_ft: 4, length_ft: 12}
2. Set frost dates: POST /api/frost-dates {location_name: "Springfield, IL", last_spring_frost: "04-15", first_fall_frost: "10-15", usda_zone: "6a"}
3. Activate location: POST /api/frost-dates/:id/activate
4. View calendar: GET /api/calendar?year=2025
5. Create planting: POST /api/plantings {bed_id: "...", crop_id: "...", year: 2025, season: "spring", planned_sow_date: "2025-04-15"}
6. Check conflicts: GET /api/rotation/conflicts
```

## Troubleshooting

### Calendar shows no events

Ensure a frost date location is active: `GET /api/frost-dates`. At least one record must have `is_active: 1`.

### Companion warnings not showing in layout

The companion relationship must exist in both directions. Check `GET /api/crops/:id/companions` for each crop.

### Rotation conflict not detected

Confirm the plant family is spelled exactly as in the crop record. Conflicts are detected per `family` field value.

When Claude will use it

Use when asked to manage a farm, garden, or plot layout; schedule what to plant and when; check companion planting relationships; track rotation history; or generate a printable planting schedule.