✅ Live on sendmy.cards (merge 7ffdf2d)
Shipped in the compose styling block (#23 field consistency, #24 Farbwelt→Farbschema + smaller equal tiles, #25 darker field text). CSS/copy only,…
#25 erledigt — Feldtext jetzt gut lesbar (hoher Kontrast)
In derselben Schicht/Branch wie #23/#24.
Ursache: Die Eingabefelder (Inputs, Wunsch-Adresse, Foto-Dropzone, Teilen-Box) haben in…
#24 erledigt — „Farbwelt“ → „Farbschema“ + kompaktere Auswahl-Buttons
In derselben Schicht/Branch wie #23 erledigt.
1. Label umbenannt: „Farbwelt“ → „Farbschema“ im…
#23 erledigt — „Max. Aufrufe“ jetzt einheitlich gestylt
Ursache: Das Feld „Max. Aufrufe“ ist ein input[type="number"] (seit #18 als kartenweite Option). Die Eingabefeld-Styles in…
✅ Merged & deployed — permanence copy fixed\n\nIn merge 3d44213. Copy no longer claims the card link is permanent — wording now reflects that a link works until the card expires (#14) or…
✅ Merged & deployed — tokenized media filenames live\n\nMerged 4c08b38 (merge 3d44213), deployed. Verified live: a new card's image is stored at {token}/{rand}.png (128-bit crypto/rand),…
Done — copy no longer claims the card link is permanent ✅
Bundled with #21 in the same commit (same templates).
Audit result: the only copy that still claimed permanence was the *Gültig…
Done — tokenized, unguessable media filenames ✅
Each uploaded media object now gets its own fresh ~128-bit crypto/rand filename component, so the public object URL is no longer…
✅ Merged & deployed — card-level max-views live on sendmy.cards
Merged fbaed3a (merge 7f4ee4f), deployed. Migration 009 applied (slug_max_visits→max_visits + visit_count, guarded…
#18 done — card-level max-views (per-card view counter)
Promoted the max-views cap from slug-level (Shlink-only) to a card-level property enforced server-side on /c/{token},…
m decision (PWA, 2026-06-17): page-protection is sufficient — NO private bucket / proxy — PROVIDED media filenames are tokenized + unguessable.
Rationale: today media keys are `{token}/0.png…
Follow-up: admin session TTL bumped 12h → 30 days (sliding) in the polish bundle (commit 3ae9684, merge 9a8eda4) — addresses the not-annoying requirement. Login once, remembered ~30 days.