How this is built - a rules corpus in git, and an app that is only its front end
The product is a versioned YAML corpus with evidence grades, a Python engine, and a TypeScript port checked against it. The web app is a thin layer over the top and is the least interesting part.
The inversion
Most garden planners are an application with some data in it. This is a corpus with an application in front of it. The distinction sounds academic and decides everything downstream.
The product is corpus/: a set of YAML files holding 73 species, 15 guilds, 54 rules and 19 folklore beliefs. It is optimised to be correct, auditable, and survivable across a total rewrite of everything else. If the web app were deleted tomorrow, the thing worth having would still exist.
Every rule states its mechanism or it is not a rule
The corpus has four constraints it does not bend on. The first is the one that shapes the content most:
No enforced rule without a named mechanism. If a rule cannot state its mechanism in one sentence without the word "helps", it is not a top-grade rule. Downgrade it or delete it.
"Helps" is the tell. It is the word that lets an unexamined claim pass as a checked one, and banning it from the mechanism field turns out to eliminate most of the companion-planting canon in a single stroke.
The others: a guild that does not fit your bed is shown greyed with the reason, never silently substituted; the engine will tell you to get a soil test and will not invent an NPK number; and a citation that was never read cannot be marked as verified.
Two of those four are enforced mechanically by a validator that runs on every change. The fourth one cannot be, which is the point of the next section.
Verified means a human read the source
Every rule carries an evidence status. unverified means a language model asserted the claim from general knowledge and nobody has checked it. Promoting a rule to verified requires a real source in the rule's pointers, read by a person.
No automated process is allowed to make that promotion, including the one that writes most of this code. Right now 0 rules sit at unverified. That number is published rather than hidden, because a corpus that cannot report its own unchecked claims is not auditable.
The pointers are stored as prose, verbatim, usually including the sentence that carries the claim and the date it was read. When you open a source disclosure anywhere on this site, you are seeing what the corpus recorded, not a tidied summary of it.
Demotion is a feature
Grades move in both directions. A rule dropping from a confident tier to a weaker one because the literature turned out to be more equivocal than assumed is the system working correctly, and it gets recorded rather than quietly deleted.
This is the reason the corpus is YAML in git rather than rows in a database. Every grade change is its own commit, with the source that caused it in the commit message. The version history is the epistemic history of the project: you can ask when a claim was believed, why it changed, and what was read that changed it.
Two engines that have to agree
The rules engine exists twice. The reference implementation is Python; the app runs a TypeScript port in the browser. That is a duplication, and duplication drifts, so it is not left to discipline: the Python side generates conformance goldens and the TypeScript engine is checked against them on every change. If the two disagree about what a rule does, the build goes red.
The same pattern is used for these pages. The site you are reading renders the corpus a second time, beside the app, so a test parses the app's own source and fails if the two ever describe evidence differently.
No backend, no weather API
The app has no server. Climate data is precomputed to a static bundle at build time and versioned in the repo like any other artifact, which means the planner works offline, the climate layer is diffable, and the whole system's external dependency is refreshed roughly once a decade instead of once a request.
The bits that are deliberately missing
- No companion-planting chart, ever.
- No drag-and-drop canvas, except in one place with a specific reason.
- No fertiliser numbers without a soil test.
- No guilds sourced from permaculture blogs. The list of real ones is short, and the shortness is
- the feature.
Read it yourself
The evidence page in the app lists every rule and every belief with its grade, mechanism and sources. This site puts the same material on pages a search engine can reach.