✅ Merged & deployed — live preview live on sendmy.cards
Merged 445ad45 (merge 7c4e39c), deployed. Frontend-only (compose JS + CSS, no schema). A live card preview now sits at the bottom…
#15 erledigt — Live-Vorschau am Ende von /compose
Die Karte wird jetzt ganz unten im Compose-Formular live aufgebaut und aktualisiert sich, während man tippt/auswählt.
Was umgesetzt…
Auth UX (m, PWA): well-protected but NOT annoying — m must not re-enter the password every time.
- Admin password (
ADMIN_PASSWORDenv) for the initial login, then a **long-lived signed…
✅ Merged & deployed — card-level expiration live on sendmy.cards
Merged 5efd624 (merge bc81dc4), deployed. Migration 008 applied cleanly on prod (slug_valid_until→valid_until, app…
#14 card-level expiration — done (shift-1)
Expiration is now a card-level property, settable on any card (no custom-link requirement), enforced server-side at /c/{token}.
Commit…
✅ Merged & deployed — layout regressions fixed
Merged 620069e (merge e8d6df3), deployed. CSS-only (style.css, +30/-7): section-header bleed fixed, margins consistent, „Gültig bis“ +…
Fixed — compose layout regressions (#13)
Reproduced all three issues with headless-chrome screenshots of the rendered compose form at 375 px (mobile) and 900 px (desktop), then fixed…
m's call (PWA): max-views also card-level, same as expiration — not slug-bound. So #14 covers BOTH valid_until and max_visits at card level (enforced on /c/{token}), available on any…
✅ Merged & deployed — compose UX polish live on sendmy.cards
Merged 8e931d6 (merge 9852264), deployed. Verified live:
- Unified media picker: one field, 1 PNG + 1 MP4 uploaded…
#12 done — compose UX polish (shift-1)
Branch mai/hermes/issue-12-ux-unify-media, commit 8e931d6. Not…
✅ Merged & deployed — password protection live on sendmy.cards
Merged 2118ace (merge 1e108ed), deployed. Migration 007 applied. Set a stable CARD_SESSION_SECRET in the Dokploy env (so…