Block a user
worker: reconnect on dropped DB connection instead of looping 'conn closed' forever (silent month-long outage)
Scheduler must evict ollama for higher-priority image leases (vram_managed guard defeats the manager's purpose)
CSS/copy: rename 'Farbwelt' → 'Farbschema', make choice buttons smaller
copy: fix descriptions claiming the link 'stays/persists forever' (now cards can expire / hit max-views)
CSS: 'Max. Aufrufe' field styled inconsistently with the other compose fields
CSS: form field text too light/grey — darken for readability
feat: free-form salutation (Anrede) — replace 'an wen', drop the 'für' prefix
UX: collapse verbose field hints behind an ⓘ info button (right of the field)
DESIGN: ready-made card gallery (occasion-filtered) — own media becomes one option
BUG: live preview broken after #28 (gallery) — likely JS halt in media preview wiring
Admin: full edit flow for existing cards (text + media + all fields)
feat: card-level max-views (per-card view counter) — follow-up to #14
feat: admin overview of all cards (password-gated)
CSS: reduce header→form spacing (gap under the header is too big)
feat/security: tokenized, unguessable media filenames (closes #11 media leak)
feat: live card preview in compose (at the bottom)
BUG: compose layout regressions from #12 (margins, section headers bleed, gültig-bis/max-aufrufe misaligned)
UX: unify media upload, clearer to/from, field order + equal buttons (compose polish)
BUG: changing occasion resets the chosen theme (should not)