Terminal app · Rust · ratatui
Shed Roster
A keyboard-only roster for a dairy shed office: fourteen milking shifts, five staff and four rules checked on every keystroke.

- User
- The manager of a 400-cow dairy shed who builds next week’s roster on a whiteboard.
- Risky assumption
- A keyboard-only terminal roster is fast enough on an old laptop in the shed office.
- Stack
- Rust with ratatui and crossterm. The same code draws frames to HTML for the screenshots.
- Status
- Runs in any terminal. Staff invented.
Codex built it from a one-page brief.
What it does
- Move with the arrow keys and press 1 to 5 to put someone on a shift; x clears it.
- Press a to fill the gaps with a simple fill that respects the rules.
- Empty shifts, three shifts in a row, anyone over five shifts and anyone rostered on their day off are flagged, with a running count in the rule line.
- The roster saves to a local file on every change.
What is real and what is simulated
| Roster storage | A local file; nothing is sent |
|---|---|
| Days off | Invented, one per person, and checked by the rules |
| Staff and shed | Invented |
How far we took it
- Five tests cover the four rules and the fill.
- The screenshots are real frames: the app draws them through ratatui’s test backend and writes them out as HTML.
- The first build let someone be rostered on their day off without a warning. We spotted it while writing this page; the rule and its test came in the next pass.
Screens


What happens next
Time a manager filling next week’s roster in the terminal against the whiteboard. If it is not faster in the first week, the terminal was the wrong surface.