Add a goal for users of the building blocks, and plan todo.md as a scored table
This commit was merged in pull request #174.
This commit is contained in:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user