Portal 0.5 in the plan, mails scored as read, and a front door that shows

Portal 0.5's content, from the plan: `grants` (an approval that is
membership; refused without a mail sender, since the sign-in link goes
by mail), `deadlines` (portal's `after:`, only along a move the
machine has), and `public_states` with an `empty` line on public lists,
whose words now say which stages they show.

Onboarding is a mail too: a plan that invites or grants gets
`mail.invite` in site.yaml in its own language, and a reword that loses
{link} gets it back. `rate --repo` rates every mail, the invite
included, read as it arrives: LIX, and what happened / what now / who
wrote, each against a gutted twin. The mail words are guided by what
that found on uhhm (name the case by a short required field, sign with
the business, invite a reply rather than promise a reason).

The front door shows public lists instead of pointing at them: each
public bucket is a feature with its newest three records inline and a
link to the whole list. Its card is named for what it shows. The plan
reference gains 'What a portal site can do': the schema's options and
when each pays off, as guidance rather than rules.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
Bendik Aagaard Lynghaug
2026-09-28 20:34:53 +02:00
co-authored by Claude Opus 5.5
parent 040a95ee07
commit d4d4c7cba3
4 changed files with 399 additions and 46 deletions
+5 -1
View File
@@ -161,9 +161,13 @@ needs:
success: [approved]
events: { open: proposed }
stages_text: { open: "received", approved: "approved", rejected: "turned down" }
# The site changes in the open: anyone can read what was approved,
# without who proposed it.
watched_by: [public]
public_states: [approved]
max_fields: 3
collects:
- { name: submitted_by }
- { name: submitted_by, private: true }
- { name: email, type: email, optional: true }
- { name: page, optional: true }
- { name: rationale, type: textarea }