Every box the same is easy. Ninety-six boxes that respect what ninety-six households actually eat is the hard problem, and it's the one the box builder exists to solve.
CSA → Build the boxes (/portal/box-builder), then pick the pickup day. One screen, top to bottom, in the order the work happens.
Preferences: the level and the note
A member's opinion of a crop is one of five levels: never · less · ok · more · love. An unrated crop counts as ok, so you only ever store the opinions people actually have.
Never is a hard constraint the builder may not trade away, because the reason people mark a crop Never is usually an allergy.
Each preference can also carry a free-text note — "makes me itch", "my daughter is the one who eats these".
Here's the important part, and it's a deliberate line: the note never reaches the builder. It's packer-facing. It appears on the pack screen and on the customer record, where a human reads it.
That's not an oversight, it's a safety decision. A free-text allergy note that software claims to "consider" is a liability — a farmer would reasonably believe it had been honoured, and the software cannot read English. So the level is machine input and the note is human output. One record, two audiences, one boundary.
If a member's constraint genuinely matters, it has to be a level, not a sentence.
The dials
Every dial has named stops and a unit. No bare number to guess at.
| Dial | Stops | What it does |
|---|---|---|
| Clear the glut | Not now · Some · Aggressively | How hard to push a crop you have too much of |
| How short a box may come in | Tight · Balanced · Forgiving | The value tolerance under target |
| How far over a box may go | Tight · Balanced · Forgiving | The value tolerance over target |
| Most of any one item | A count, per box | Caps repetition in a single box |
| Fewest different items | A count, per box | Floors the variety in a single box |
A per-box setting states its total across the run, so "no more than 6 of any one item per box" also tells you what that is across ninety-six boxes.
There is deliberately no "honour preferences" dial. The builder's preference weights are fixed, and a control that changed nothing would be worse than no control. The nearest honest lever is Clear the glut, which at full tilt does outrank what members asked for — and the help text on it says exactly that.
The preview is a sample, and it says so
On a big run the preview is worked out on a sample of about fifty boxes so that dragging a dial answers in under a second. It tells you it's a sample.
Treat it as a direction, not the final answer. The full run happens once, when you build.
The compromise list
Under the preview is the list of what had to be given up: a box under value, a crop that ran out, something that wouldn't fit. Leftovers are listed too.
Beside each line is a button that moves the dial that would fix it — and tells you what that costs elsewhere before you take it. Clicking a compromise line also filters the box grid to the boxes it affected, so you can go and look.
This is the screen's most useful feature and the one people miss. You are not supposed to get a clean run. You're supposed to read what it gave up and decide whether you care.
What building actually writes
Building replaces the contents of every box not yet locked, and leaves locked ones exactly as they are.
It changes the contents, not the money. The member bought one share at one price; the share line and its total are untouched. A heavy week doesn't cost them more and a thin week doesn't cost them less.
No stock moves. Stock comes off the shelf when a box is rung up, not when it's built.
You can still open any box and edit it by hand afterwards, and undo, right up until you lock the run.
Read the counts at the top
Three numbers matter:
- Already locked — these take no share of the harvest.
- On hold, unclaimed or cancelled — not boxes; nothing is set aside for them.
- Not a box — an order that doesn't have exactly one share line.
That last one is the trap. An order with two or more products on it is never filled and never packed, and this tally is the only signal you get. Nothing errors. If you take orders by hand, put exactly one product on each.
When a crop fails
Change the harvest counts in step 1 and build the run again, before you lock it. There is no control that swaps one crop for another across a whole run — a member can swap an item in their own box, but that's a per-member change, not a run-wide one.
Next: locking the run and pack day. Or start at the beginning.
Create a free account — CSA is included on every plan, no credit card required.