Add a goal for users of the building blocks, and plan todo.md as a scored table
CI / full-gate (push) Successful in 4s
Mirror / github-mirror (push) Successful in 4s

This commit was merged in pull request #174.
This commit is contained in:
2026-10-30 20:45:24 +01:00
parent 3491e660e9
commit 53e996394f
2 changed files with 193 additions and 75 deletions
+16 -8
View File
@@ -131,32 +131,40 @@ From here, render real pages against the app shell and fetch upstream data — s
forms built only from the core building blocks.
- Counter-signal: the core grows features only one project needs.
- Why: boilerplate removed by absorbing a project's domain only moves it into the core.
2. **Maintain:** Plainpages solves only the parts every project shares: auth, the GUI
2. **Achieve:** Every building block works for the person using it: a non-technical user
gets what they meant on the first try, and can't hurt themselves by accident.
- Signal: bugs users hit in a shipped flow get fixed and stay fixed, such as a pasted
code being refused, a double click acting twice, or an admin locking themselves out.
- Counter-signal: a fix adds client-side JavaScript, or a setting every plugin has to
know about.
- Why: a fix that breaks zero-JS or simplicity moves the irritation from users to every
plugin author.
3. **Maintain:** Plainpages solves only the parts every project shares: auth, the GUI
building blocks (menu, tables, filters, forms) and the plugin structure. Everything
else is a plugin.
3. **Maintain:** Every page is a server-rendered document that works with zero JavaScript.
4. **Maintain:** State lives in the URL. Only state the URL can't carry lives in the
4. **Maintain:** Every page is a server-rendered document that works with zero JavaScript.
5. **Maintain:** State lives in the URL. Only state the URL can't carry lives in the
database, never in local storage or JavaScript. A cookie carries only what must be bound
to the browser: the session and its CSRF token.
5. **Maintain:** The frontend is semantic: the HTML says what each thing is, and the CSS
6. **Maintain:** The frontend is semantic: the HTML says what each thing is, and the CSS
styles meaning, not looks. That keeps every page accessible.
6. **Achieve:** Hackable: a plugin can change anything, and Plainpages stays out of its way.
7. **Achieve:** Hackable: a plugin can change anything, and Plainpages stays out of its way.
- Signal: a plugin replaces any page, partial, menu entry or string without forking the
host, and fewer plugins need a host change to get unblocked.
- Counter-signal: plugins break on upgrade with no version signal, or a plugin mistake
shows up at runtime instead of at boot.
- Why: freedom that breaks silently costs more than the boilerplate it saved.
7. **Achieve:** Speed: pages render fast and stay small.
8. **Achieve:** Speed: pages render fast and stay small.
- Signal: server time per page and bytes sent per page fall.
- Counter-signal: a building block loses a feature or accessibility to save bytes.
- Why: a fast page that does less only moves the work back into each plugin.
8. **Achieve:** LLM-friendly: an LLM builds a correct plugin from the README and the
9. **Achieve:** LLM-friendly: an LLM builds a correct plugin from the README and the
examples alone.
- Signal: an agent given only those writes a plugin that passes discovery and its E2E
test on the first try.
- Counter-signal: the README grows to restate what the code already shows.
- Why: docs that pass the test by growing cost every later reader, human or LLM.
9. **Maintain:** Every behaviour is an explicit configuration choice, the same in every
10. **Maintain:** Every behaviour is an explicit configuration choice, the same in every
environment.
## Audience