feat: bell-tower favicon, lfx-clean flows, branded HTML mail

This commit is contained in:
Jonas Miederer 2026-09-13 17:57:42 +02:00
parent 672faf3af8
commit df5c1e296c
15 changed files with 288 additions and 30 deletions

View file

@ -135,6 +135,22 @@ request); anything else → 403 and the frontend forwards to
`/access?email=…` (prefilled). Rate-limited (5/hour), token by mail only,
delivery failures never 500 (see §0.4 hardening).
## 0.6 Polish round (bell-tower favicon, lfx-clean flows, HTML mail)
* Favicon simplified to a stylized bell tower (spire + shaft + bell-arch
knockout); PNGs regenerated via `npm run icons`.
* `lfx validate --level 4` now green for ALL canonical flows + regression
test (`test_lfx_validate.py`). Root cause: required form fields have no
edge (values arrive via the form_values envelope). Fix: generator writes
a single-space sentinel value for required template fields; the form
parser treats whitespace-only values as "no default". L3
Message-vs-str warnings are known lfx-validator noise (MessageTextInput
accepts Message at runtime).
* New-input authoring docs: `backend/components/kirche/README.md`.
* Magic-link + access-notification mails are branded multipart
(text + HTML): kirchenblau header, serif headline, real button link,
German copy, email-safe tables/inline styles, no external assets.
## 1. Locked decisions (do not re-ask)
* Auth: SMTP magic-link, 15-min single-use tokens (`secrets.token_urlsafe`,