Five inputs, five sources, five failure modes.
This is the reference page. Every live input on this site, where it comes from, how long it is held, what it changes, and precisely what the visitor sees when it is not there.
The five, as they are right now.
Key, current reading, source and time to live. The readings are seeded placeholders in this build.
Watching the wheat
Harvest is coming
- Date and season Autumn · day 242 System clock, server-sideno TTL
- Weather at OX7 14°C, light rain Met Office DataPoint or equivalent15 min
- Crop growth stage Winter barley, BBCH 92 Farm ops entry24 h
- Live yield 4.9 t/ha Weighbridge, or an ops entry when the bridge is down1 h
- Series window Closed · series six in production Manual flagno TTL
20°C at the farm shop, and dry for now
Winter barley running at 4.1 tonnes the hectare
Chapter 41 is open. Forty came before it
All five are produced by one PHP function. Making them real means replacing that function and nothing else, which was the point of writing it that way.
Every input, in full.
| Input | Source | TTL | What it changes | Without it |
|---|---|---|---|---|
| Date and season | System clock, server-side | no TTL | Field palette and illustration set swap | Cannot fail — it is the server clock |
| Weather at OX7 | Met Office DataPoint or equivalent | 15 min | Sky treatment and the ambient copy line | Seasonal sky treatment and the seasonal ambient line |
| Crop growth stage | Farm ops entry | 24 h | Beast and crop illustration stage, and Plotting status | The seasonal default illustration stage |
| Live yield | Weighbridge, or an ops entry when the bridge is down | 1 h | The ambient ticker in the header rail | That ticker line is omitted entirely, not blanked |
| Series window | Manual flag | no TTL | Second-screen mode activates | Defaults to closed |
The contract every feed is held to.
Before first paint
- May a feed be fetched
- No
- May a feed block rendering
- No
- May a feed decide layout
- No
- What is rendered instead
- The seasonal default, computed server-side
After first paint
- Fetch
- Yes, with a two-second timeout
- Replace
- In place, in the same box, with no reflow
- Retry
- Once, then stopA retry storm is worse than a missing temperature
- Log
- Yes. Surface to the visitor, no
Never, under any circumstances
- A spinner
- There is nothing worth waiting for
- An error state
- Nothing has failed from the visitor’s point of view
- A stale value presented as current
- This is the one that actually misleads people
- A price, stock level or legal statement from a feed
- Not one, anywhere
The layer, in four numbers.
Why five and not fifteen.
Every additional live input is a new way for the site to be wrong, a new cache to reason about, and a new thing somebody has to notice has stopped working.
These five earn their place because each one changes something a visitor can actually feel: the colour of the page, the sky in the picture, what the crop is doing, a number that moved this morning, and whether it is television night. Nothing else on the shortlist passed that test.
Soil moisture, stock levels, social follower counts, a live queue length at the shop — all of them were considered and all of them were either dull, misleading or load-bearing. Load-bearing was the disqualifier every time.
Every live number is a new way to be wrong in public.
One rule governs all five
Live data must never block first paint. The seasonal default renders at build time and is always correct; live values hydrate afterwards or they do not. If the weather API is down, the site simply looks like the season it is.
Five inputs
And no plans for a sixth.
Four TTLs
Fifteen minutes, an hour, a day, and never.
One rule
Nothing live blocks first paint.
One function
The whole integration surface.