Example project — Frond is not real.
Authored demo content for a fictional plant-care app, rendered by the same parsers and held to the same invariants as a real project's dashboard. This is the system in use, three months in.
2026-09-05
Reminders are a daily digest, not per-plant pushes
What: All due plants collapse into one notification per day, at a time the user picks.
Why: Per-plant pushes tested as the fastest route to being muted: six plants meant six buzzes. The accepted cost is that we can no longer nag about a single urgent plant.
Instead of:- Per-plant pushes with a rate limit — harder to reason about, and still bursty.
Scope: The reminder schedule and the notification the user actually receives.
2026-09-01
Light readings are a range, never a number
What: The room survey reports a band ("bright, indirect") instead of a lux figure.
Why: A phone camera cannot justify three significant figures, and a precise-looking number invites more trust than it deserves. A band is honest about our resolution and still enough to pick a schedule.
Scope: How the room survey reports its result, everywhere a light level is shown.
2026-08-27
One plant before any account
What: Onboarding adds the first plant before asking the user to sign up.
Why: The signup wall was where the funnel died, because people had nothing invested yet. Adding a plant first means the account protects something the user already made.
Instead of:- Full anonymous mode — deferred, not refused: sync complexity we cannot carry yet.
Scope: The onboarding order, and where the account gate sits.
2026-08-20
Species data is licensed, not curated
What: We license a third-party species database rather than maintaining our own.
Why: Curating care data is a full-time botany job we are not staffed for, and being wrong about a rare plant is worse than being generic. The cost is that we cannot fix a bad entry directly, which the "never present as certainty" principle absorbs.
Instead of:- Curating our own species database — the staffing we do not have.
Scope: Where species care data comes from, and the certainty any surface may claim for it.
2026-08-15
Offline is the default assumption, not a mode
What: Every read path serves from the local store first; the network is an enhancement.
Why: Watering happens in bathrooms, basements and balconies. An explicit "offline mode" would mean two code paths, and one of them would rot.
Instead of:- Online-first with a cache — rejected after the first hallway test.
Scope: Every read path in the app, and the assumption each feature doc is written against.
2026-08-08
Adopted Groundwork as the work model
What: The project runs on phases, modes and rituals, with a derived dashboard at /system.
Why: Two prior attempts drowned in stale docs and a README nobody trusted. A derived dashboard cannot lie, and distill-and-delete keeps the working set small.
Scope: How the whole project is worked — phases, modes, rituals, and the derived record.