Changelog — frisch aufgeschrieben.
Features, Fixes, Polish, Security, Breaking Changes — chronologisch und mit Kategorie-Tag. Was wir für die Beta-Fotografen gebaut, gefixt oder geschliffen haben.
Rabatt-Codes: Kategorie- & Plan-Beschränkungen + Backstop-Cron
Discount-Codes lassen sich jetzt strukturiert beschränken — kein rohes JSON mehr, sondern Checkboxen.
Im Admin → Einstellungen → Rabattaktionen findest du beim Anlegen eines Codes neue Checkbox-Gruppen:
- Print-Kategorien (Photograph-Codes): Fotobücher, Wandbilder, Kalender, Kissen, Phone-Cases, Tassen, Postkarten. Anhaken = Code gilt nur für diese Auswahl. Leer = Code gilt für alle Print-Bestellungen.
- Plan-Tiers (Platform-Codes, nur Kevin sichtbar): Trial, Core, Founding Core, Pro. Anhaken = Code nur einlösbar wenn Photograph zu einem dieser Plans wechselt. Leer = gilt für alle Plan-Wechsel.
Bestehende Codes ohne Restrictions verhalten sich unverändert — kein Migrations-Aufwand für deine laufenden Aktionen.
Versucht ein Kunde einen Code auf eine nicht-erlaubte Kategorie anzuwenden, bekommt er eine klare Meldung („Code gilt nicht für diese Produkt-Kategorie") statt einer kryptischen Stripe-Fehlermeldung erst nach dem Submit.
Backstop-Cron gegen verlorene Reservierungen. Wenn ein Kunde im Checkout den Tab schließt und Stripe weder das completed- noch das expired-Event sendet (z. B. Webhook-Endpoint kurz down, Quota-Drop), blieb bisher der Code-Slot bis in alle Ewigkeit reserviert. Ein Code mit max_uses=10 und 10 abgebrochenen Checkouts wäre faktisch ausgeschöpft, obwohl niemand bezahlt hat.
Frames trackt ab jetzt jede Reservation in einer eigenen Tabelle und ein nightly Cron-Job (api/cron/discount-cleanup) released alle Reservierungen, die nach 24 Stunden weder committed noch released wurden. Damit „heilen" sich Code-Slots automatisch — egal wie launisch das Stripe-Webhook-Wetter gerade ist.
Komplette Test-Infrastruktur: Vitest + Playwright + GitHub Actions
Frames hat ab sofort eine durchgehende automatisierte Test-Pipeline. Jeder Push und jeder Pull-Request gegen main löst auf GitHub Actions drei Jobs aus:
- Unit-Tests (Vitest) — pure Funktionen ohne DB: Discount-Code-Validation, Marketing-Trigger-Resolver (2. Sonntag im Mai, letzter Freitag im November, Anniversary-Toleranz), Reminder-Intervalle, XRechnung-XML-Generator (inkl. §19-Kleinunternehmer-Pfad), Cron-Secret-Validation (Bearer + Query, constant-time-compare).
- Integration-Tests (Vitest gegen Postgres-Container) — Migration-Runner läuft alle Migrations sauber durch + prüft dass keine Changelog-Entries eine ungültige Category haben (das hätte den heutigen
category=change-Bug verhindert). Gallery-IDOR-Defense gegen die echte DB. - E2E-Smoke (Playwright) — Dev-Server startet, Landingpage liefert HTML, Login-Route ist erreichbar.
Lokal nutzbar. Mit npm test läuft die Unit-Suite in unter einer Sekunde. npm run test:e2e startet Dev-Server + Playwright lokal. npm run test:all macht das volle Programm.
Coverage-Stand. 38 Unit-Tests passing, Integration-Tests hängen an einer Test-DB (TEST_DATABASE_URL), E2E-Smoke + zwei TODO-Stubs für Login und Gallery-Pick die in Phase 2 fertig werden (brauchen Mailer-Mock + Storage-Mock).
Was die Tests verhindern werden. Den heutigen Migration-Outage (category=change statt feature), IDOR-Lücken in requireOwnedGallery, kaputte Marketing-Trigger an Datumsgrenzen (Schaltjahr, DST), XML-Wohlgeformtheits-Brüche in XRechnung, Cron-Endpoints die ohne Auth callable wären.
Doku: docs/TESTING.md. CI-Workflow: .github/workflows/test.yml.
Mehr Login-Sicherheit: Sessions werden bei jedem Auth-Schritt rotiert
Defense-in-Depth gegen Session-Fixation. Nach jedem Login, Signup, Magic-Link-Consume und 2FA-Verify löscht Frames die vorher gesetzte Session-Row in der Datenbank und stellt eine frische Session-ID aus.
War vorher nur ein theoretisches Risiko — Frames setzt keine Pre-Auth-Cookies, also gab es nie eine „untergeschobene" Session, die ein Angreifer kapern könnte. Trotzdem ist Session-Rotation bei Auth-Stufenwechseln Best-Practice (OWASP ASVS V3.2.1), und jetzt geschlossen.
Was sich für dich ändert: nichts. Login fühlt sich identisch an. Die alte Session-Row verschwindet sauber aus der DB statt als Orphan zu verrotten — kleiner Bonus für die Hygiene unserer Session-Tabelle.
Technisch. Neuer Helper discardPreAuthSession(cookies) in src/lib/server/sessions.ts wird in allen vier Auth-Pfaden aufgerufen, bevor createPhotographerSession die neue Session erzeugt. Bei DB-Fehler bleibt der Login funktional — die orphan Row läuft via expires_at automatisch aus.
Verträge: echter PDF-Download statt Browser-Drucken
Signierte Verträge lassen sich jetzt als echte PDF herunterladen — direkt aus dem Admin, ein Klick, fertig.
Vorher konnten Photographen nur die HTML-Print-Page öffnen und mussten über den Browser-Dialog „Als PDF speichern" gehen. Das war funktional, aber fummelig — auf manchen Browsern landete der Header doppelt, auf anderen rutschte der Audit-Trail auf eine eigene Seite, und auf Mobile war es de-facto unmöglich.
Jetzt gibt es unter Admin → Verträge → [Vertrag öffnen] den Button Download PDF. Frames erzeugt das PDF serverseitig (pdfkit, kein Headless-Browser) mit:
- Vertragstext aus dem eingefrorenen
sent_body_md-Snapshot (Markdown wird in Headings, Listen und Bold-Text übersetzt). - Signatur-Bild — das SVG vom Sign-Canvas wird sauber als 480×140-PNG ins PDF eingebettet.
- Audit-Trail-Block mit IP, Browser, Zeitstempel (ISO-8601 + lokale Zeit), Rechtsgrundlage (Art. 6 (1) f DSGVO) und Hinweis auf die 10-jährige Aufbewahrungspflicht (§147 AO, §257 HGB).
- Footer mit Studio-Name, Vertrags-Kurz-ID und Seitenzahl auf jeder Seite.
Stil wählbar. Unter Admin → Einstellungen → Studio-Tools gibt es eine neue Auswahl:
- Editorial (Default) — Times-Roman/Italic, dezent, passt zum Frames-Look.
- Sachlich — Helvetica, hochkontrast, klassisches Behörden-Layout. Für alle die ihren Vertrag bei Finanzamt oder Anwalt einreichen.
Sicherheit. Der Download-Endpoint prüft photographer_id — fremde Vertrags-IDs liefern 404, keine 401, damit Existenz-Probing nicht funktioniert. Drafts und versendete Verträge geben 400 (kein Sinn für unsignierte Texte).
Die alte HTML-Print-Page bleibt erhalten — wer lieber browser-druckt oder vorher per Preview gegenlesen will, kann den Link „Drucken / Als PDF speichern" weiter nutzen.
Print-Shop: Multi-Bild-Editor live — Fotobücher direkt aus der Galerie bestellbar
Multi-Bild-Editor für Fotobücher ist live. Bisher konnte deine Kundin im Print-Shop nur Einzel-Bild-Produkte bestellen (Wandbild, Tasse, Phone-Case, Kissen). Multi-Image-Produkte (Fotobuch, Kalender, Postkarten-Set) zeigten den Hinweis „Multi-Bild-Editor folgt in Kürze" und blockierten den Submit.
Jetzt: Eine neue Route /<studio>/<galerie>/print-book öffnet einen vollwertigen Bild-Picker. Deine Kundin sieht links das komplette Galerie-Raster, klickt Bilder an, baut die Reihenfolge per Up/Down-Buttons. Rechts läuft eine Live-Vorschau der gewählten Reihenfolge mit Index-Badges, dazu die Min/Max-Validierung pro Produkt (Fotobuch z. B. 12–50 Bilder, Kalender 12–13, Postkarten-Set genau 8). Mehrfach-Auswahl desselben Bildes ist erlaubt — Cover plus Mitte ist ein klassisches Buch-Pattern.
Tab-Bar wie im Single-Image-Shop schaltet zwischen Fotobuch / Kalender / Postkarten-Set; Default ist die höchste AOV-Gruppe (Fotobuch, „Beste Erinnerung"-Badge). Versand-Quote, Rabatt-Codes, Stripe-Checkout und die Bestätigungs-Mail funktionieren identisch zum Single-Image-Flow.
Provider-Submission: Für Prodigi-Fotobücher wird pro gewähltem Bild ein eigener printArea-Slot belegt (page-1, page-2, …) — Prodigi rendert das Buch direkt aus diesen URLs, kein PDF-Generation auf unserer Seite. Kalender und Postkarten-Set sind UI-seitig nutzbar, die Provider-Submission ist aktuell noch als Stub markiert und wirft eine sprechende Fehlermeldung; das Mapping kommt in Sprint 2c.
Galerie-Seite: Wenn Photograph die Fotobuch-Kategorie aktiv hat, erscheint unter der Bilder-Übersicht ein „Fotobuch bestellen"-CTA, der direkt in die neue Route springt. Der Single-Image-Print-Flow (/print/<file_id>) bleibt unverändert — Wandbilder, Tassen, Kissen und Phone-Cases bestellt der Kunde weiter wie gehabt aus der Lightbox.
Hinweis Photographen: Wenn du Fotobuch / Kalender / Postkarten unter Admin → Print-Shop → Welche Produkte anbieten? deaktiviert hast, bleibt die neue Route 404 — die Filterung auf print_shop_disabled_categories greift identisch zur Single-Image-Page.
Album-Proofing mit mehreren Reviewern (Brautpaar + Brautmutter + …)
Bisher hatte ein Album genau einen Reviewer — typischerweise das Brautpaar als Einheit über die recipient_email der Galerie. Ab heute kannst du pro Album mehrere Reviewer parallel einladen. Jeder bekommt einen eigenen Token-Link, jeder entscheidet eigenständig pro Spread, und du wählst, ob die finale Freigabe Konsens oder Mehrheit braucht.
- Opt-in pro Album: im Admin → Galerie → Album findest du den Block „Reviewer" mit Toggle „Multi-Reviewer aktivieren". Default ist aus — bestehende Alben verhalten sich unverändert.
- 1–5 Reviewer pro Album mit Name + Email. Jeder bekommt einen eigenen unguessbaren Token-Link (analog Vertrags-Signaturen) und sieht nur seine eigenen Decisions.
- Approval-Modus wählbar: Alle müssen zustimmen (Default, sicherer — jeder Reviewer muss jeden Spread approven) oder Mehrheit reicht (schneller bei vielen Reviewern).
- Status pro Spread aggregiert: im Admin siehst du pro Spread wie viele Reviewer schon approved/Änderung gewünscht/ausstehend haben. Der Gesamt-Album-Status respektiert den gewählten Modus.
- Audit-Trail erweitert: jede Entscheidung wird mit Reviewer-Name + Email + Timestamp in
album_activityfestgehalten.
Backward-Compat ist garantiert: solange das Toggle aus ist, läuft die alte Logik (Galerie-Cookie + recipient_email) unverändert. Wer Album-Proofing hat (Pro-Plan, Founding Core, Trial), hat auch Multi-Reviewer ohne extra Toggle.
Frames-Rechnungen jetzt als XRechnung-XML — fertig für die B2B-Pflicht 2027
Frames generiert ab sofort auf Wunsch deine Subscription-Rechnungen im DACH-standardisierten E-Invoice-Format XRechnung (UBL 2.1, CIUS-XRechnung 3.0). Ab Januar 2027 ist das Format für B2B-Rechnungen in Deutschland Pflicht — und für Lieferungen an Behörden gilt es heute schon.
Was du davon hast:
- Jeden Monat (oder Jahr) automatisch eine maschinen-lesbare XRechnung-XML in deinem Posteingang, parallel zur Standard-PDF.
- Importierbar in alle gängigen Buchhaltungs-Tools (DATEV, lexoffice, sevDesk, Buchhaltungsbutler, BMD, Candis …).
- Kleinunternehmer-konform: bei aktivem §19-Status setzen wir Steuersatz 0 % + den Pflicht-Vermerk im VAT-Breakdown automatisch.
- Optional Leitweg-ID-Feld für Photographen, die direkt an Behörden weiterleiten.
Wie du es aktivierst: Admin → Einstellungen → Rechnungs-Daten → E-Rechnung. Drei Optionen:
1. Standard-PDF (Default) — wie bisher, nichts ändert sich. 2. XRechnung-XML — die UBL-XML kommt zusätzlich zur PDF per Mail. 3. ZUGFeRD-Hybrid (Beta) — eigentliches hybrides PDF/A-3 mit eingebetteter XML kommt in Phase 2; aktuell fällt diese Option auf XRechnung-XML zurück.
Die Generierung passiert im Stripe-Webhook invoice.payment_succeeded und wird in einer Audit-Tabelle nachgehalten — die Übersicht findest du unter Admin → Einstellungen → E-Rechnungen (sobald du das Format umgestellt hast).
Plan-Gate: Pro und Founding Core. B2B-Photographen sind typischerweise Pro — wer Core nutzt, kann jederzeit upgraden.
Migration-Tool kann jetzt in jeden Cloud-Storage schreiben
Das Migration-Tool importiert Pixieset/Picdrop/Scrappbook-Galerien in dein Frames — und legt die Bilder in deinem eigenen Cloud-Storage ab. Bisher ging das nur für Google Drive, Dropbox und S3-kompatible Endpoints. Ab heute auch für die restlichen vier:
- OneDrive (Microsoft Graph):
PUT /me/drive/items/{folder}:/{filename}:/contentmitconflictBehavior=rename. Folder-Anlage überPOST /me/drive/items/{parent}/children. - Box: Upload via
upload.box.com/api/2.0/files/content(Multipart). Folder-Anlage mit sauberem 409-Fallback — wenn der Ziel-Ordner schon existiert, finden wir ihn im Parent-Listing wieder, statt einen Dummy-Fehler zurückzugeben. - pCloud:
POST /uploadfile?folderid=&filename=&nopartial=1. Folder-Anlage übercreatefolderifnotexists— idempotent, kein "Ordner existiert bereits"-Fehlerpfad nötig. - WebDAV (Nextcloud, ownCloud, generisch):
PUTfür Datei,MKCOLfür Ordner. Akzeptiert 405 als "Ordner existiert bereits" und macht weiter, statt abzubrechen.
Was bleibt unsupported: iCloud-Shared-Albums. Apple bietet kein offizielles Upload-API, und die Reverse-Engineering-Pfade über icloud.com brechen regelmäßig — das ist nicht der Pfad auf dem wir Foto-Migrationen für dich aufbauen. iCloud bleibt read-only (lesen von geteilten Alben).
Damit ist Sprint 2b des Migration-Tools abgeschlossen. Egal in welchem Cloud-Speicher du deine Bilder hostest — wenn Frames damit reden kann (Drive/Dropbox/S3/OneDrive/Box/pCloud/WebDAV), kann das Migration-Tool deine Konkurrenten-Galerien direkt dort ablegen.
Migration-Tool: Picdrop-Import (Beta)
Picdrop-Import ist live — Beta. Sprint 3 schaltet den DACH-Lieblings-Konkurrenten scharf. Du kannst deine Picdrop-Galerien jetzt direkt in dein Frames-Studio überführen, ohne sie Galerie-für-Galerie neu anzulegen. Bilder werden vom Picdrop-CDN in Original-Auflösung gezogen und in deinen Frames-eigenen Storage (Google Drive, Dropbox, S3) hochgeladen — Frames hostet weiterhin nichts selbst.
Warum Beta? Picdrop hat kein offizielles API und keine dokumentierten Endpoints. Der Adapter nutzt Reverse-Engineering: er versucht zuerst JSON-Endpoints (best-effort), fällt dann auf HTML-Scrape des Dashboards zurück, mit mehreren Pattern-Strategien (__NEXT_DATA__-JSON-Blob, Owner-Gallery-Links, Detail-Links). Wenn Picdrop ihre HTML-Struktur zwischen heute und morgen ändert, brauchen wir kurz für ein Adapter-Update — du bekommst eine sprechende Fehlermeldung statt eines Silent-Fails.
Picdrop-Setup für dich: Logge dich bei picdrop.com ein → DevTools (F12) → Application → Cookies → https://picdrop.com → kopiere den gesamten Cookie-Header als Single-Line-String. Im Frames-Wizard Admin → Migration → Neue Migration wählst du „Picdrop", fügst den Cookie ein, optional deinen Studio-Slug (falls Auto-Discovery nichts findet), wählst Ziel-Storage und optional einen Root-Ordner. Frames listet deine Picdrop-Galerien, du wählst welche importiert werden, der Cron-Worker zieht Batch für Batch.
Pro importierter Galerie wird ein eigener Subfolder im Photograph-Storage erstellt und am Ende eine Frames-Galerie als DRAFT angelegt (cryptic Slug, nicht öffentlich). Du prüfst Style/Layout/Cover in den Galerie-Settings und schaltest dann live. Wie bei Pixieset wird der Cookie AES-256-GCM-verschlüsselt gespeichert und nach Job-Ende nicht weiter genutzt.
Was noch kommt: Sprint 4 = Scrappbook-Adapter + SEO-Landings „Von Picdrop zu Frames wechseln". Pic-Time und ShootProof sind danach geplant.
Reminder + Marketing-Mails: Pro-Feature & Custom-Domain-Links
Endkunden-Erinnerungs-Mails und Marketing-Kampagnen sind jetzt offiziell ein Pro-Feature (auch in Founding-Core und Trial enthalten). Photographen im Core-Plan können den Empfänger pro Galerie weiterhin hinterlegen, der automatische Versand bleibt aber pausiert — beim Upgrade auf Pro läuft alles ohne weitere Konfiguration sofort wieder an.
Mail-Links zeigen jetzt auf deine Custom-Domain. Hast du unter Admin → Einstellungen → Domains eine eigene Domain (z. B. bilder.studio-mueller.de) aktiv geschaltet, werden die Galerie-Links in allen Reminder- und Marketing-Mails automatisch auf deine Domain umgeschrieben. Endkunden sehen ausschließlich deine Marke — Frames bleibt unsichtbar.
Was bleibt auf der Plattform-Adresse? Der 1-Click-Abmelde-Link (/g/unsubscribe/<token>) ist eine zentrale Route und wird bewusst nicht umgeschrieben. So funktioniert der Unsubscribe-Link auch noch, wenn du deine Custom-Domain später entfernst oder wechselst — kein Endkunde sitzt mit einem toten Abmelde-Link da.
Nichts zu tun für dich: Bist du auf Pro / Founding-Core / Trial, läuft alles wie bisher. Hast du eine aktive Custom-Domain, profitierst du ab sofort von den Domain-Links — alte Galerien inklusive.
Print-Bestellungen erstatten — auf Knopfdruck, voll oder anteilig
Endkunde reklamiert wegen Druckschaden? Bestellung doppelt aufgegeben? Du kannst Print-Bestellungen jetzt direkt aus dem Admin erstatten — voll oder anteilig, mit Audit-Trail und Mail-Benachrichtigung an den Endkunden.
Wo: Admin → Print-Shop → Bestellungen → <Bestellung öffnen> → Block „Erstattung" → Button „Erstatten…"
Was passiert:
- Confirmation-Modal pflicht — kein versehentlicher Klick. Du gibst Betrag in EUR ein (leer = vollständige Erstattung) und optional einen Grund/Notiz für den Endkunden.
- Stripe-Refund wird auf dem original Payment-Intent ausgelöst — Rückbuchung auf das ursprüngliche Zahlungsmittel des Endkunden. Gutschrift erscheint je nach Bank in 5–10 Werktagen.
- Endkunden-Mail geht automatisch raus (Voll- vs. Teilrückerstattung mit korrektem Wording, plus deine Grund-Notiz wenn gesetzt).
- Audit-Trail persistiert auf der Order: Wer hat wann wieviel erstattet, mit Stripe-Refund-ID als Audit-Link ins Stripe-Dashboard.
- 180-Tage-Fenster (Stripe-Limit) — Refund-Button blendet sich für ältere Bestellungen automatisch aus.
Order-Detail-Page ist neu: Die bisherige Liste verlinkt auf eine vollständige Detail-Seite mit Status-Timeline, Lieferadresse, Bestell-Items (Produkt, Bild, Größe, Menge, Preis, Lab-Kosten), Provider-Tracking, Stripe-Referenzen, Refund-Audit und einem Mini-Audit-Log mit allen Lebenszyklus-Events.
Defense in Depth: Der bestehende Stripe-Webhook (charge.refunded) bleibt aktiv und synchronisiert externe Refunds aus dem Stripe-Dashboard zurück in Frames. Egal wo der Refund ausgelöst wird — Admin-UI oder Stripe — die Order bleibt in einem konsistenten Status.
Vier neue Landing-Pages für Wechsler: Pixieset, picdrop, Scrappbook, Pic-Time
Du googelst „Pixieset Alternative DSGVO" oder „von picdrop wechseln"? Frames hat jetzt eigene Landing-Pages dafür — vier ehrliche Vergleichsseiten, eine pro Konkurrent, alle unter /wechseln/<name>.
Was drin steht:
- Hero + drei Differenzierer pro Konkurrent (was Frames anders macht, ohne Marketing-Geschwurbel)
- Vergleichstabelle Frames vs Konkurrent mit 12+ Features (DSGVO, eigener Storage, Editorial-Themes, Print-Shop, Album-Proofing, Marketing-Automation, eSignature, Custom-Domain, Pricing). Wo der Konkurrent besser ist, steht das auch drin — Pixieset hat eine native Mobile-App, Pic-Time hat Story-Slideshows, picdrop hat den stärkeren Auswahl-Workflow. Wir lügen unsere Vergleichstabelle nicht schön.
- 4-Schritte-Migration-Anleitung mit konkurrenten-spezifischem Cookie-Hinweis und realistischer Zeitangabe (500 Bilder = 25–90 min je nach Quelle)
- Was übernommen wird (Galerie-Struktur + Bilder in Original-Auflösung) und was frisch startet (Picks, Kommentare, Watermarks, Bestellungen)
- Pricing-Teaser mit Founding-Core-49-€/Jahr-Hinweis und Link zum Preisrechner
- 6 FAQ pro Page zu den typischen Wechsel-Fragen
Concierge-Migration als Alternative: du schickst uns deine Konkurrenten-Credentials per sicherer Übertragung, wir lassen den Import-Job für dich laufen. Beta-Nutzer bekommen Concierge kostenfrei.
Footer-Verlinkung: Neue Spalte „Wechseln" im Marketing-Footer mit Links zu allen vier Pages. SEO-Setup pro Page: Title, Meta-Description, Canonical, Open-Graph, Twitter-Cards, JSON-LD-Structured-Data.
Damit ist Migration-Tool Sprint 4 von 4 fertig — Framework (Sprint 1), Pixieset-Adapter (Sprint 2), Picdrop+Scrappbook (Sprint 3), Wechsler-Landings (jetzt). Photographen googeln, Frames rankt, Migration-Tool importiert.
Migration-Tool: Pixieset-Import + echter Storage-Upload
Pixieset-Import ist live. Sprint 2 schaltet den ersten echten Konkurrenten-Adapter scharf — du kannst deine Pixieset-Galerien jetzt direkt in dein Frames-Studio überführen, ohne sie hand-für-hand neu anzulegen. Bilder werden vom Pixieset-CDN in Original-Auflösung gezogen und in deinen Frames-eigenen Storage (Google Drive, Dropbox, S3) hochgeladen — Frames hostet weiterhin nichts selbst.
Echter Upload-Pfad statt Stub: Sprint 1 hatte den Storage-Upload als Stub. Sprint 2 implementiert uploadImage() und createFolder() am StorageProvider-Interface für die drei meistgenutzten Provider (Google Drive files.create multipart, Dropbox /2/files/upload, S3-kompatibel PutObject). OneDrive, Box, pCloud und WebDAV folgen in Sprint 2b mit dokumentierten TODO-Stubs — wer einen davon nutzt, bekommt eine klare Fehlermeldung statt eines Silent-Fails. iCloud-Upload bleibt permanent unsupported (Apple bietet kein API).
Pixieset-Setup für dich: Logge dich bei pixieset.com ein → DevTools (F12) → Application → Cookies → kopiere den gesamten Cookie-Header. Im Frames-Wizard Admin → Migration → Neue Migration wählst du „Pixieset", fügst den Cookie ein, wählst Ziel-Storage und optional einen Root-Ordner. Frames listet deine Pixieset-Collections, du wählst welche importiert werden, der Cron-Worker zieht Batch für Batch.
Pro importierter Galerie wird ein eigener Subfolder im Photograph-Storage erstellt und am Ende eine Frames-Galerie als DRAFT angelegt (cryptic Slug, nicht öffentlich). Du prüfst Style/Layout/Cover in den Galerie-Settings und schaltest dann live.
Was noch kommt: Sprint 2b = die fünf restlichen Provider-Uploads (OneDrive/Box/pCloud/WebDAV, iCloud bleibt read-only). Sprint 3 = Picdrop + Scrappbook. Sprint 4 = SEO-Landing-Pages „Von Pixieset zu Frames wechseln".
Migration-Tool: Foundation für Pixieset/Picdrop/Scrappbook-Wechsler
Wechsle zu Frames, ohne deine Galerien hand-zu-hand neu anzulegen. Sprint 1 von 4 legt das Framework, mit dem du Galerien aus Pixieset, Picdrop, Scrappbook, Pic-Time und ShootProof direkt in dein Frames-Studio überführen kannst. Bilder werden vom Konkurrenten geladen und in deinen Frames-eigenen Storage (Drive, Dropbox, S3, …) hochgeladen — Frames hostet nichts selbst.
Drei-Phasen-Lifecycle: Discovery (Frames listet deine Quell-Galerien auf) → Auswahl (du wählst pro Galerie, ob importiert werden soll) → Import (Background-Worker zieht Bilder Batch für Batch, retry-bar, abbrechbar). Pro Migration siehst du Live-Progress (Anzahl Bilder, fehlgeschlagene Items, Fehler-Log).
Pro Studio aktivierbar: Admin → Einstellungen → Migration-Tool. Standardmäßig aus, damit das Menü nicht für Studios überladen ist, die nie migrieren. Pro/Founding-Core/Trial enthalten das Feature — Core nicht (Core-Studios brauchen es nicht).
Sprint 1 — was funktioniert: Vollständiger Framework-Lifecycle, atomare Status-Transitions (race-safe), AES-256-GCM-Verschlüsselung der Source-Credentials, Cron-Worker-Pattern, und der Concierge-Adapter (manueller Import via uns, du gibst Bild-URLs als JSON-Manifest ein). Damit ist das Framework end-to-end testbar und wir können schon manuelle Migrationen für Wechsler durchführen.
Was in den nächsten Sprints kommt: Sprint 2 = Pixieset-Adapter (Session-Cookie + bekannter Endpoint), Sprint 3 = Picdrop + Scrappbook, Sprint 4 = SEO-Landing-Pages „Von X zu Frames wechseln". Storage-Upload-Pfad ist in Sprint 1 noch Stub — wird mit dem ersten echten Adapter scharf geschaltet.
Brand-Akzent: deine Farbe in den Editorial-Themes
Deine Brand-Farbe in den 9 Editorial-Themes. Die Theme-Defaults bleiben — graphit-schwarz bei Modern, gold-rot bei Salon, kreide-weiß bei Atelier. Wenn dein Studio aber eine eigene Akzent-Farbe pflegt (dusty rose, forest, slate), kannst du sie jetzt als Override über alle Galerien legen ohne den Editorial-Charakter zu kicken.
Globaler Default: Admin → Einstellungen → Branding. Hex-Farbe für Akzent (z. B. #b07a72), optional separate Dark-Mode-Variante. Toggle aus = kein Override (Default). Live-Vorschau-Mockup zeigt Light + Dark direkt im Settings.
Pro Galerie überschreibbar: Galerie → Einstellungen → Grunddaten → Brand-Akzent (Override). Drei Modi: Photograph-Default nutzen (Standard), eigene Farbe für diese eine Galerie, oder explizit Theme-Default erzwingen (Photograph-Default ignorieren — praktisch wenn dein dusty rose nicht zum Kino-Theme passt).
Was bewusst NICHT überschrieben wird: Hintergründe, Schriften, Borders, Frame-Mat — die Editorial-Identität pro Theme bleibt erhalten. Nur --accent und die daraus berechnete --accent-soft-Variante (10% Alpha) werden ersetzt. So bleiben die 9 Themes visuell ehrlich und du bekommst trotzdem den Brand-Touch.
Sicherheit: Hex-Werte werden server-side gegen ^#[0-9a-fA-F]{6}$ validiert — keine CSS-Injection-Vektoren.
Galerien als <iframe> auf eigener Website einbetten
Galerien embedden. Jede Galerie kann jetzt pro Wunsch als <iframe> auf einer fremden Website laufen — WordPress-Seite, Squarespace-Block, eigene HTML-Landingpage. Photograph aktiviert Embed pro Galerie, kopiert den fertigen Snippet, fertig.
Wo: Admin → Galerie → Einstellungen → Zugriff → Toggle „Embed". Default aus aus Privatsphäre-Gründen. Sobald aktiv, erscheint auf der Galerie-Detail-Seite ein neuer Block „Einbetten" mit Layout-Dropdown (Grid/Masonry), Theme-Override (Galerie-Theme oder einer der Frames-Themes) und „Code kopieren"-Button.
Sicherheit: Passwort- und PIN-geschützte Galerien sind unabhängig vom Toggle nicht embeddable — der Auth-Flow ist in fremden iframes (Third-Party-Cookies, Storage-Partitioning) nicht zuverlässig. Wer Embed will, schaltet Passwort/PIN ab. Die CSP-Regel frame-ancestors gilt nur für /embed/-Routen — der Admin-Bereich und normale Galerie-Views bleiben mit X-Frame-Options: DENY Clickjacking-geschützt.
Embed-URL: https://app.frames.photo/embed/<slug> — optional mit ?layout=masonry und ?theme=editorial. Embed-Views laden ohne Header/Footer/Nav und sind noindex (kein doppelter SEO-Content).
Studio-Tools: eSignatur-Verträge & Pre-Shoot-Fragebögen
Verträge und Fragebögen sind live (Pro-Feature, opt-in). Neuer Bereich unter Admin → Einstellungen → Studio-Tools — zwei Toggles, einer für Verträge, einer für Fragebögen. Beide sind standardmäßig aus, damit nichts in deinem Workflow auftaucht das du nicht willst.
eSignatur-Verträge
- Vertrag im Markdown-Editor schreiben oder aus einer eigenen Vorlage duplizieren.
- Empfänger eintragen, „Zur Signatur senden" — Brautpaar bekommt eine Mail mit Link in deinem Branding.
- Endkunde liest im Browser, unterschreibt per Touch oder Maus auf einem Canvas, akzeptiert den DSGVO-Hinweis und ist fertig.
- Audit-Trail mit IP, Browser und Timestamp wird als technischer Echtheits-Nachweis gespeichert (Art. 6 (1) f DSGVO).
- Du bekommst Mail-Benachrichtigung, siehst Signatur und Audit-Trail im Admin und kannst die unterschriebene Fassung als PDF speichern (Browser → Drucken → „Als PDF speichern").
- Vertragstext wird beim Senden eingefroren — was unterschrieben wurde, kann danach nicht mehr verändert werden.
Pre-Shoot-Fragebögen
- Fragen-Schema mit 6 Typen: Kurztext, Langtext, Single-Choice, Multi-Choice, Datum, Ja/Nein. Pro Frage Pflicht-Flag.
- Vor dem Shooting Link rausschicken, Brautpaar füllt im Browser aus.
- Du siehst alle Antworten gebündelt im Admin — keine Mail-Pingpong, kein Formular-PDF, kein OCR.
- Vorlagen-Bibliothek pro Studio: einmal „Hochzeitsfragebogen 2026" definieren, beliebig oft duplizieren.
Sicherheit
- Token-basierte Endkunden-Links (32-Byte Random, unguessbar).
- Sign-/Submit-Aktionen sind race-safe — Doppel-Submit per Reload führt zu sauberem 409 statt Duplikat.
- Pro-Plan: Trial, Founding Core und Pro. Bestehende Photographen sehen nichts neues, solange sie die Toggles nicht aktivieren.
Phase 2 (Backlog): Drag&Drop-Frage-Builder statt JSON-Editor, echter PDF-Renderer mit Puppeteer, Vertrag automatisch an Galerie binden + bei Veröffentlichung mitverschicken, Multi-Signatur (Braut + Bräutigam einzeln).
Drei neue Schalter für mehr Kontrolle
Drei neue Schalter für mehr Kontrolle. PWA-„App"-Installation pro Galerie ein-/ausschaltbar (default an), Print-Shop-Produkt-Kategorien pro Photograph wählbar (Phone-Cases nicht jeder Brand-Look, kein Problem mehr), „Galerie ist bereit"-Mail-Template pro Studio anpassbar mit {var}-Substitution und Live-Vorschau.
PWA pro Galerie: Admin → Galerie → Einstellungen → Zugriff → Toggle „Galerie als App installierbar". Default an. Aus = klassische Browser-Bookmark, kein App-Icon, kein Manifest. Praktisch für kurzlebige Galerien oder wenn das Cover-Bild nicht zum App-Icon taugt.
Print-Shop-Kategorien: Admin → Print-Shop → Block „Welche Produkte anbieten?". Sieben Toggles (Fotobuch, Wandbild, Kalender, Kissen, Phone-Case, Tasse, Postkarte). Deaktivierte Kategorien verschwinden aus dem End-Kunden-Checkout. Default ist alles an — neue Kategorien sind forward-compatible automatisch aktiv.
Custom „Galerie ist bereit"-Mail: Admin → Einstellungen → E-Mail-Templates. Subject und Body in eigener Tonalität, mit Variablen-Platzhaltern wie {recipient_name}, {gallery_name}, {gallery_url}, {image_count}, {password_hint}, {studio_name}. Live-Vorschau-Block zeigt die Mail mit Dummy-Werten — gerendert mit dem echten Mail-Renderer, nicht mit einer JS-Approximation. „Auf Default zurücksetzen"-Button bringt das Standard-Frames-Editorial-Wording zurück.
Album-Proofing: Spread für Spread, ohne PDF-Pingpong
Album-Proofing ist live (Pro-Feature). Neuer Bereich pro Galerie unter Admin → Galerie → Album. Statt PDFs hin und her zu schicken, baust du das Album direkt im Browser.
Workflow:
- Du legst pro Galerie ein Album an (Name, Format, Seitenzahl).
- Du lädst die Spreads (Doppelseiten als Bild-Exports aus InDesign/Canva) hoch — beliebig viele, in Reihenfolge.
- „Zur Freigabe senden" schaltet das Album für dein Brautpaar frei und schickt eine Mail mit deinem Branding.
- Dein Brautpaar öffnet das Album im Browser, scrollt Spread für Spread, gibt pro Doppelseite Feedback: Annehmen oder Änderung wünschen mit Kommentar.
- Du siehst den aggregierten Status live im Admin (Fortschrittsbalken, Spread-Liste, Aktivitäts-Feed).
- Du revidierst gezielt: „Spread ersetzen" lädt eine neue Datei, setzt Status zurück auf Ausstehend, Revisions-Zähler +1.
- Sobald alle grün sind: Finaler „Album final freigeben"-Button — danach sind keine Änderungen mehr möglich, du kannst in Druck.
Audit-Trail: Jede Spread-Bewertung, jede Revision, jede Freigabe ist mit Timestamp und Akteur (Photograph oder Endkunde mit Email) dokumentiert. Falls dein Brautpaar später behauptet „das hab ich nie freigegeben" — du hast es schriftlich.
Mails: Drei Templates in deinem Branding — Album bereit zur Durchsicht (an Endkunde), Änderungswunsch (an dich, mit Spread-Nr + Kommentar), Final freigegeben (an dich, mit Spread-Count).
Phase 2 (kommt später): echter Page-Flip mit Physics-Animation, PDF-Export der finalen Spreads, Auto-Submission an Print-Shop nach Approval, mehrere Reviewer pro Album (z. B. Brautpaar + Mutter).
Marketing-Kampagnen: automatische Aktions-Mails an deine Kundinnen
Marketing-Kampagnen sind live (Pro-Feature). Neuer Bereich unter Admin → Marketing-Kampagnen. Du legst Trigger-basierte Aktions-Mails an Endkundinnen-Galerien an — Frames cron-läuft täglich und verschickt automatisch mit deinem Branding und deinem SMTP.
Vier Trigger-Typen:
- Festes Datum (jährlich) — z. B. 15. November Weihnachts-Aktion
- Beweglicher Feiertag — Muttertag (2. Sonntag im Mai), Black Friday (letzter Freitag im November), 1. Advent
- N-ter Jahrestag des Anlasses — z. B. 1. Hochzeitstag, Marketing-Tonalität als Ergänzung zum sentimentellen Reminder-Cron
- Anlass-Alter-Fenster — z. B. Familien-Shootings 6–24 Monate alt
Segment-Filter: Anlass-Typen (Hochzeit, Taufe, Maternity, Familie), Mindest-Bildauswahl, Cooldown („nicht öfter als alle X Tage").
Vorlagen zum ein-Klick übernehmen: Muttertag, Weihnachten, Black Friday, Erstes Hochzeitsjubiläum.
Variablen-Substitution im Template: {recipient_name}, {gallery_url}, {gallery_name}, {discount_code}, {discount_value}, {photographer_name}, {anniversary_years}, {event_date}.
Optional verknüpfter Rabatt-Code: Wähle einen deiner Print-Shop-Codes aus Rabattaktionen — Frames blendet ihn in der Mail prominent ein.
DSGVO: Mails gehen nur an Empfängerinnen mit aktivem Opt-in („Erinnerungs-Mails erlauben" in der Galerie). Jede Mail hat einen 1-Click-Abmelde-Link. Volume-Schutz: max 500 Mails pro Photograph pro Tag.
Galerien als „App" am Home-Bildschirm
Galerien als „App" am Home-Bildschirm. Jede Galerie kann jetzt von deinen Kundinnen wie eine echte App aufs Handy gelegt werden — das App-Icon zeigt das Cover-Foto. iOS Safari + Android Chrome zeigen automatisch die „Zum Home-Bildschirm hinzufügen"-Option. Beim Tippen öffnet sich die Galerie im Standalone-Modus ohne Browser-Chrome. Bisher mussten Endkunden umständlich Lesezeichen anlegen oder die URL merken.
Apple Pay, Google Pay & SEPA aktiviert
Apple Pay, Google Pay & SEPA aktiviert. Im Print-Shop und beim Plan-Upgrade akzeptieren wir jetzt zusätzlich zur Kreditkarte: SEPA-Lastschrift, Sofort, Apple Pay (Safari/iOS) und Google Pay (Chrome). Mobile-Konversion steigt typischerweise um 20–30 %, DACH-User bevorzugen SEPA bei Beträgen >50 €. Die Auswahl erscheint automatisch je nach Gerät und Browser im Stripe-Checkout — keine Konfiguration nötig. Subscriptions akzeptieren Kreditkarte + SEPA (Sofort ist von Stripe für Abos ausgeschlossen).
Endkunden-Reminder + 7 neue Print-Shop-Kategorien
Zwei größere Erweiterungen, die der Anlass-Daten-Foundation aus dem gleichen Tag folgen:\n\nAutomatische Erinnerungs-Mails an deine Kundinnen. Cron läuft täglich und schickt branded-Mails zu definierten Intervallen — Hochzeiten: 1, 5 und 10 Jahre danach; Taufen/Baby-Shootings: 6 Monate, 1 und 3 Jahre; Maternity: 1. Geburtstag des Kindes; Familien-/Portrait-Shootings: jährlicher Update-Reminder. Unter Admin → Einstellungen → Erinnerungs-Mails kannst du pro Intervall einzeln aktivieren/deaktivieren und einen eigenen Intro-Text pro Anlass-Typ hinterlegen. Live-Vorschau zeigt dir die generierte Mail. Jede Mail bekommt automatisch einen 1-Click-Unsubscribe-Link — DSGVO-Pflicht-Anforderung.\n\nPrint-Shop-Catalog: 7 Kategorien statt nur Wandbilder. Über Prodigi sind jetzt verfügbar: Fotobücher (Layflat & Hardcover, A4/Quadratisch, 26–50 Seiten), Wandbilder (Foto-Print, Canvas, gerahmt), Wandkalender (A4/A3), Kissen, Phone-Cases (iPhone & Samsung), Tassen und Postkarten-Sets. Die End-Kunden-Checkout-Page sortiert nach durchschnittlichem Bestellwert — Fotobücher bekommen ein „Beste Erinnerung"-Badge. Multi-Image-Produkte (Fotobuch, Kalender, Postkarten) folgen mit Bild-Picker in einer späteren Phase; Single-Image-Produkte (Wandbild, Tasse, Phone-Case) sind sofort bestellbar.\n\nKevin extern: Coolify-Cron für /api/cron/event-reminders täglich (z. B. 11:00 UTC) anlegen mit Authorization: Bearer $CRON_SECRET-Header.
Galerie per Mail, Anlass-Erinnerung & Rabattaktionen
Drei frische Bausteine für den Kundenkontakt — alle in dieser Welle live:\n\nGalerie per Mail senden. Im Admin → Galerie findest du jetzt unter dem Share-Link einen Button „Galerie per Mail senden". Sobald du in den Grunddaten den Empfänger-Kontakt hinterlegt hast, geht die Mail mit deinem Branding und deinem SMTP raus — Frames bleibt im Hintergrund.\n\nAnlass-Daten & Reminder-Vorbereitung. Pro Galerie kannst du jetzt Anlass-Typ (Hochzeit, Taufe, Maternity, Familien-Shooting) und Anlass-Datum hinterlegen. Mit Endkunden-Kontakt und ausdrücklichem DSGVO-Opt-in baut Frames daraus später automatische Erinnerungs-Mails (z. B. zum 1. Hochzeitstag). Opt-in ist Pflicht, 1-Click-Unsubscribe-Link in jeder Mail.\n\nRabattaktionen für den Print-Shop. Unter Admin → Einstellungen → Rabattaktionen (Pro-Feature) legst du Codes wie BRAUTPAAR-15 an: Prozent oder fix, Gültigkeitszeitraum, max. Einlösungen. Im Print-Shop-Checkout deiner Kundinnen erscheint ein Code-Feld. Race-safe gegen Doppelt-Einlösung, Stripe-Coupon wird lazy beim ersten Apply erzeugt.
Wall-Art-Preview: dein Bild im Raum
Kunden können ein Galerie-Bild jetzt direkt in einem von vier Raum-Mockups (Wohnzimmer, Schlafzimmer, Esszimmer, Arbeitszimmer) und in vier Druck-Größen (30×40, 50×70, 70×100, 100×150 cm) ansehen — als Verkaufs-Hilfe für gerahmte Prints. Skalierung passt sich an die echten Bild-Proportionen an; bei Hochformat-/Querformat-Mismatch wird die Druck-Orientierung automatisch gedreht.\n\nAktivieren: Galerie → Einstellungen → Zugriff → "Wall-Art-Preview". Default ist AUS. Kunden sehen dann im Lightbox den Button "An die Wand".
Founding-Expiry läuft jetzt automatisch
Ein neuer Cron (/api/cron/founding-expiry) prüft täglich, welche Founding-Core-Plätze in den nächsten 30 Tagen ablaufen, und schickt eine einmalige Vorwarnung. Sobald der 24-Monats-Zeitraum erreicht ist, stellt der Cron den Plan automatisch auf Core um — bei aktiver Stripe-Subscription wird das Subscription-Item dort sauber umgehängt (mit Proration), ansonsten wird der Plan lokal geflippt. Idempotenz via admin_events (founding_expiry_warning_sent, founding_expired).\n\nWas Photographen sehen: 30 Tage vor Ablauf eine Mail mit Datum und Preis-Hinweis. Am Ablauftag eine Bestätigungs-Mail. Kein manuelles Eingreifen nötig.
Print-Shop (Beta) — Foundation steht
Frames bekommt einen Druck-Verkauf. Phase 1 ist die Architektur-Foundation: Schema für Provider-Verbindungen, Produkt-Katalog und Order-Lifecycle steht. Photographen können unter Admin → Print-Shop jetzt vier Druck-Anbieter sehen: Prodigi (Standard, günstig), WhiteWall (Fine-Art-Premium), Saal Digital (DACH-Klassiker für Hochzeit/Familie) und Picanova (Canvas + Geschenkartikel).\n\nWas schon geht: Verbindungen anlegen, Markup pro Provider einstellen (Standard 30%), Produkt-Katalog durchstöbern mit Filter nach Provider und Kategorie. Lab-Preise zeigen wir mit deinem Markup direkt als Endkundenpreis an, damit du sofort siehst was Kunden zahlen würden.\n\nWas Phase 2 bringt: Echte API-Anbindung an die Provider (sobald Reseller-Accounts angelegt sind), Endkunden-Checkout im Photograph-Brand, Stripe-Connect für die automatische Geld-Aufteilung Lab/Plattform/Photograph, Webhook-Tracking für Versand-Status. Bis dahin sind alle Provider-Calls Stubs — bestellen kann noch niemand.\n\nPro-Feature (inkl. Founding Core und aktive Trial). Wer mit-testen will: schreib uns an kevin@frames.photography.
Webhooks für Slack, Zapier und Make.com (Pro)
Frames kann jetzt Galerie-Events an deine eigenen Systeme schicken. Pro-Feature, auch für Founding-Core-Lifetime-Plätze freigeschaltet.\n\nSechs Events stehen bereit: Galerie geöffnet (max 1×/h pro Besucher), Pick gesetzt oder geändert, Auswahl abgeschlossen, Kommentar zu einem Bild, Download erfolgt, Galerie läuft in 7 oder 1 Tag(en) ab.\n\nEinrichtung in 30 Sekunden: Admin → Webhooks → URL eintragen (z. B. Slack Incoming-Webhook, Zapier-Hook oder Make.com-Trigger), Events auswählen, fertig. Frames signiert jeden Payload mit HMAC-SHA256 und legt das Hex-Digest in den Header x-frames-signature — du verifizierst die Echtheit serverseitig mit deinem Signing-Secret.\n\nRobust: 5 Sekunden Timeout pro Lieferung, kein Sofort-Retry (das nächste Event ist die Retry-Chance), nach 50 Fehlversuchen pausieren wir den Webhook automatisch — kein Spam wenn dein Receiver mal eine Stunde down ist. Jeder Versuch landet im Delivery-Log, das du im Admin pro Subscription aufklappen kannst (HTTP-Status, Response-Zeit, Error-Snippet).\n\nSSRF-Schutz: Webhook-URLs müssen in Production https sein und dürfen nicht auf private IP-Ranges zeigen (10.0.0.0/8, 192.168.0.0/16, 172.16.0.0/12, 127.0.0.0/8, IPv6-Loopback und Link-Local).
Bezahlte Downloads: Hi-Res-Fotos pro Galerie verkaufen
Endkunden können ab sofort einzelne Hi-Res-Bilder oder die komplette ZIP-Auswahl direkt aus deiner Galerie kaufen. Du setzt den Preis, Frames erledigt den Rest.\n\nSo funktioniert es: In den Galerie-Grunddaten schaltest du Bezahlte Downloads ein und trägst Preise ein — pro Einzelbild, pro ZIP, oder beides. Wenn ein Kunde Download klickt, leitet Frames ihn automatisch in einen Stripe-Checkout. Nach erfolgreicher Zahlung bekommt er einen privaten Download-Link per Mail: gültig 7 Tage, max. 5 Downloads pro Kauf. Eine Quittung geht im Editorial-Stil mit raus.\n\nSicher und sauber: Token sind kryptographisch generiert (32-Byte) und limitiert; Refunds invalidieren den Link sofort. Die kostenfreien Download-Galerien bleiben unverändert — Bezahl-Galerien sind ein optionaler Layer obendrauf.\n\nVerfügbarkeit: Pro-Feature. Founding-Core-Plätze und aktive Trials bekommen es ebenfalls freigeschaltet. Voraussetzung ist ein verbundenes Stripe-Konto.
Onboarding-Mail-Sequenz für neue Photographen
Neue Photographen bekommen jetzt automatisch eine 5-Mail-Sequenz über 14 Tage — ruhig, editorial, ohne Marketing-Pathos:\n\n- Tag 0 — Willkommen: Drei Schritte zur ersten Galerie (Speicher, Theme, Upload).\n- Tag 2 — Speicher: Nudge zur Google-Drive- oder S3-Anbindung; personalisiert, falls schon verbunden.\n- Tag 5 — Theme & erste Galerie: Push zum Galerie-Wizard, mit Theme-Tipps, falls noch keine Galerie steht.\n- Tag 9 — Kundenerlebnis: Passwort, Auswahl-Workflow, Wasserzeichen — die Details, die Vertrauen schaffen.\n- Tag 13 — Feedback & Roadmap: Bitte um Feedback und Ausblick auf kommende Features.\n\nIdempotent über Timestamp-Spalten auf photographers, max. eine Mail pro Photograph pro Cron-Lauf. Opt-Out jederzeit über den Link am Mail-Ende oder direkt unter Einstellungen → ?onboarding_opt_out=1.
Pricing-Page live: Founding Core, Core, Pro + Preisrechner
Drei klare Pakete, alle Preise brutto inkl. MwSt., voll transparent:
Founding Core — 49 €/Jahr (Einführungspreis): Die ersten 50 Beta-Photographen bekommen Core-Funktionsumfang zum vergünstigten Einführungspreis.
Core — 7,90 €/Monat oder 59 €/Jahr: Für Solo-Photographen mit eigenem Speicher. 30 aktive Galerien, 5 Sammlungen, alle Themes, Email-Templates, Statistiken.
Pro — 12,90 €/Monat oder 99 €/Jahr: Für Studios mit eigener Marke. Unbegrenzte Galerien und Sammlungen, eigene Domain, abschaltbares Frames-Branding, mehrere Marken-Presets.
Dazu gibt es einen interaktiven Preisrechner auf /pricing: Du wählst Paket, Zahlungsweise und Speicheranbieter (Mainstream-Cloud oder günstiges Object-Storage) und siehst sofort Gesamtkosten plus Vergleich mit picdrop oder Scrappbook. Inklusive Capacity-Anzeige: „Reicht für ungefähr 80 Hochzeiten" macht abstrakte 2 TB greifbar.
Intern: Plan-Namen umbenannt (Klein → Core, Groß → Pro). Alle bestehenden Beta-Tester wurden automatisch auf Founding Core gehoben.
Sammlung & Einzelgalerie sauber getrennt
Klare Trennung zwischen Sammlung-Modus und Einzelgalerie-Modus:\n\nSammlung hat jetzt ein eigenes Theme. Wenn du eine Galerie aus einer Sammlung heraus aufrufst (von der Sammlung-Übersicht), übernimmt sie das Theme der Sammlung und bekommt eine Geschwister-Navigation (← Sammlungsname →) im Header — du kannst direkt zur nächsten oder vorherigen Galerie innerhalb der Sammlung springen.\n\nEinzelgalerie behält ihr eigenes Theme. Wenn jemand eine Galerie direkt aufruft (Bookmark, geteilter Link), zeigen wir das in der Galerie hinterlegte Theme und keinen Zurück-Link zur Sammlung — die Galerie existiert komplett eigenständig.\n\nTechnisch: Sammlung-Klicks setzen ?via=<sammlung-slug> an den URL. Direkter Aufruf ohne diesen Parameter bleibt standalone. Beide Wege sind über reine URL bookmarkbar.
Vier Themes runderneuert (Salon · Folio · Atelier · Album)
Die vier Galerie-Themes Salon, Folio, Atelier und Album haben eine komplett neue optische Sprache bekommen. Editorial, Modern, Clean, Kino und Magazin bleiben unverändert.\n\nSalon wechselt von dunklem Walnut zu warmem Cream mit dusty-pink Akzent. Tiles wirken jetzt wie gerahmte Werke an einer Galerie-Wand — mit Paper-Mat, dezentem Schatten und minimaler Rotation pro Tile (Salon-Hang-Gefühl). Cormorant Garamond Italic für Headlines.\n\nFolio wird ein echtes Monograph: Pure-White-Hintergrund, Playfair Display für Titel, jedes Bild bekommt eine eigene "Seite" mit Roman-Numeral darunter — wie ein gedrucktes Photo-Buch beim Durchblättern.\n\nAtelier verliert die Museums-Passepartouts und wird ein persönliches Photographen-Moodboard: warmes Ivory, Polaroid-artige Paper-Cards mit Kraft-Tape-Streifen oben, dezente Schatten und minimale Rotation. Fraunces Italic.\n\nAlbum bekommt einen Champagne-Hintergrund, abgerundete Tile-Cards (6px Radius) mit weichem Schatten und Cormorant Italic — wie ein gedrucktes Hochzeitsalbum aufgeschlagen.\n\nAlle Themes haben Light- UND Dark-Mode-Varianten. Bestehende Galerien übernehmen den neuen Look automatisch — Theme-Auswahl unter Einstellungen.
Jahres-Rabatt, Auto-Reminder, Geo-Analytics & neues Hilfe-Center
Vier Sachen auf einmal:\n\nJahres-Rabatt. Im Plan-Wechsel-Dialog (/admin/billing) kannst du jetzt zwischen monatlicher und jährlicher Zahlung wählen. Jährlich = zehn Monatspreise statt zwölf — du sparst zwei Monate pro Jahr.\n\nAuto-Reminder bei Galerie-Ablauf. Galerien mit Ablaufdatum lösen automatisch eine Erinnerungs-Mail aus — sieben Tage und einen Tag vor dem Stichtag. Mit Direktlink zur Galerie-Bearbeitung. Verlängert sich nicht automatisch, du behältst die Kontrolle.\n\nHerkunft & Geräte in der Galerie-Statistik. Auf der Galerie-Detail-Seite siehst du jetzt zusätzlich die Top-Länder, Top-Geräte und Top-Browser deiner Besucher. Alles aus anonymisiertem User-Agent + Cloudflare-Country-Header — kein Tracking-Profil, keine Drittanbieter.\n\nHilfe-Center mit Suche. Neue Route /docs mit zwölf Artikeln in sechs Kategorien (Erste Schritte, Storage, Galerien, Branding, Abrechnung, Beta) plus Volltextsuche. Die FAQ bleibt für die häufigen schnellen Fragen, das Hilfe-Center geht in die Tiefe.
Backend-Stil wählbar + Warteliste-Verwaltung
Zwei kleine Wünsche eingebaut: Du kannst jetzt in den Einstellungen unter „Backend-Stil" zwischen Editorial (Frames-Standard mit italics + Cream) und Clean (Inter überall, neutrale Farben, reduziert) umschalten. Für alle die's persönlicher oder schlichter mögen.\n\nUnd: die Plattform-Admin-Seite hat jetzt eine richtige Warteliste-Verwaltung unter /platform/waitlist — alle Einträge mit Status (wartend / eingeladen / registriert / abgelehnt), interne Notizen, Filter, und Action-Buttons um den Workflow zu durchlaufen.
Galerie duplizieren mit einem Klick
Du kannst jetzt jede Galerie 1:1 kopieren — in der Galerie-Detail-Ansicht gibt es einen neuen Block „Galerie duplizieren". Die Kopie übernimmt Theme, Layout, alle Settings, die Storage-Verbindung, Watermark-Override und Zugriffs-Flags. Kommentare, Auswahl und Analytics starten frisch. Slug wird automatisch auf {slug}-kopie gesetzt (mit Nummerierung bei Mehrfach-Kopien). Praktisch wenn du eine Vorlage für eine Galerie-Art etablierst.
Zwei neue Themes: Kino + Magazin
Frames hat zwei neue Galerie-Themes bekommen. Kino ist die cinematische Vorhang-Variante — schwarzer Letterbox-Hintergrund, gedimmtes Brass als Akzent, das Bild leuchtet wie projiziert. Ideal für Mode-Editorials, Akt, Konzert, Cinematic-Hochzeit. Magazin ist die asymmetrische Zeitschriften-Doppelseite — Heavy-Display-Serif, Drop-Caps am Section-Anfang, Vermillion-Akzent für Pull-Quote-Borders. Ideal für editoriale Strecken mit Text-Anteil: Reportage, Foodfotografie mit Rezept, Architektur mit Werk-Notizen, Heritage-Hochzeiten. Beide Themes funktionieren in Light- und Dark-Mode und stehen ab sofort im Galerie-Settings-Picker zur Auswahl. Damit umfasst die Theme-Library 9 Themes.
Rechtliches aktualisiert (Impressum, Datenschutz, AGB)
Impressum, Datenschutzerklärung und AGB wurden auf den aktuellen Frames-Stand gebracht: vollständige Anbieter-Angaben (luckyCONCEPT / Kevin Luck, Hannover, USt-IdNr. DE310812706), detaillierte Auflistung aller Auftragsverarbeiter (Hostinger Frankfurt, Stripe, alle freigeschalteten Storage-Provider, EU-SMTP-Fallback), klare Trennung zwischen Photograph:innen- und Endkund:innen-Daten, Hinweis auf verschlüsselte OAuth-Token-Speicherung (AES-256-GCM) sowie Kündigungs- und Datenexport-Regeln in den AGB. Texte sind als anwaltlich noch zu prüfender Entwurf markiert.
Status-Page ist live
Unter /status (bald auch status.frames.luckyconcept.cloud) seht ihr jetzt den Live-Zustand aller Frames-Systeme: Web App, Datenbank, Storage-Anbindungen, E-Mail-Versand und Stripe-Webhooks. Mit 90-Tage-Uptime-Bar pro System und einer Chronologie aller aktuellen und vergangenen Vorfälle — komplett öffentlich, kein Login nötig.
Beta-Code-Gate und 4-Step-Onboarding
Frames startet in die geschlossene Beta: Über BETA_MODE lässt sich auf der Signup-Strecke ein Code-Gate aktivieren, das Codes aus /platform/beta-codes verlangt. Frisch registrierte Photographen werden außerdem durch einen 4-stufigen Willkommens-Wizard geführt (Willkommen → Storage verbinden → Theme/Layout-Defaults → Erste Galerie), bevor sie auf das Dashboard landen.
Editorial-Mails für Galerie-Veröffentlichung, Kundenauswahl und Zahlung
Die drei wichtigsten Benachrichtigungen kommen ab sofort im neuen Editorial-Look: Cream-Hintergrund, Newsreader-Italic-Headlines, Hairline-Borders. Die "Auswahl abgeschlossen"-Mail an dich landet bereits automatisch im neuen Style. Die "Zahlung erhalten"-Mail wird nach jeder erfolgreichen Stripe-Buchung verschickt — mit direktem Download-Link zur Rechnung. Die "Galerie veröffentlicht"-Mail an deine Endkunden ist als Render-Helper bereit; der UI-Trigger im Galerie-Zugriff-Tab folgt im nächsten Schritt.
8 Speicher-Anbieter sind voll verbunden
WebDAV (Nextcloud, ownCloud), OneDrive und Box sind ab sofort verbindbar — zusätzlich zu Drive, Dropbox, iCloud, pCloud und S3-kompatibel. Für jeden Anbieter gibt es eine Schritt-für-Schritt-Anleitung unter Verbindungen → Setup-Hilfe.
S3-kompatibler Speicher: Backblaze, R2, AWS und mehr
Du kannst jetzt deinen eigenen S3-kompatiblen Storage anbinden — Backblaze B2, Cloudflare R2, AWS S3, Wasabi und alle anderen Anbieter mit S3-API.
Im Gegensatz zu Drive/Dropbox/iCloud/pCloud konfigurierst du das selber mit deinen API-Schlüsseln. Vorteil: volle Kontrolle, oft günstiger, Backblaze + R2 haben einen kostenlosen Tier.
Frames-Logo ist live
Das Frames-Wordmark ersetzt jetzt überall den Text-Schriftzug — im Admin, auf der Website und auf den Galerien als Fallback. Wenn du dein eigenes Brand-Logo gesetzt hast, ändert sich für deine Kunden natürlich nichts: deins gewinnt.
Pakete und Preise versteckt bis Launch
Auf der Website gibt es bis zum Launch keine konkreten Pläne oder Preise mehr zu sehen. Wir testen mit einer Beta-Kohorte, alle bekommen die volle Plattform mit 14-Tage-Trial. Pakete und Preise verkünden wir kurz vor Launch.
Echte Beispielbilder auf der Website
Statt Stock-Bildern zeigt die Demo jetzt zwei zusammenhängende Shoots — Hochzeit und Fashion — als KI-generierte Beispiele. Du kannst beide Shoots in jedem Theme und Layout durchspielen.
Preise bewusst noch offen
Wir nehmen die konkreten Preise vorerst von der Website. Klein und Groß bleiben als Pläne sichtbar mit allen Features — die Beträge geben wir bekannt, sobald die Beta abgeschlossen ist. Beta-Photographen bekommen einen Bonus-Tarif.
Salon heller, Album minimaler, KI-Hinweise dezenter
Salon ist freundlicher: Walnut-Hintergrund leicht heller, statt der Brass-Ecken eine schlanke Brass-Hairline am Bild, mehr Platz zwischen den Bildern.
Album verzichtet jetzt komplett auf Foto-Ecken und Schatten — das Bild liegt clean auf Cremepapier, italic Numeral-Caption bleibt.
KI-Plakette und Demo-Hinweis sind deutlich zurückhaltender.
Sammlungen mit eigenem Theme + Back-Navigation
Sammlungen bekommen jetzt ihr eigenes Theme und Layout — alle Galerien darin sehen automatisch gleich aus. Pro Galerie kannst du es aber weiterhin überschreiben.
Außerdem: aus jeder Untergalerie kommst du jetzt mit einem Klick zurück auf die Sammlungs-Landing.
KI-Transparenz auf der Marketing-Site
Alle Beispielbilder auf der Website sind jetzt klar als KI-generiert gekennzeichnet — kleine KI-Plakette in der Ecke jedes Bildes plus ein Hinweis im Footer. Transparenz vor Marketing-Hochglanz.
Themes-Polish: Album ersetzt Streifen, Atelier + Salon poliert
Streifen ist raus — stattdessen Album: cremepapier mit Fotoecken und handschriftlicher Caption, persönlich und warm.
Atelier zeigt sich aufgeräumter — Nº01 statt PLATE I., mehr Whitespace zwischen Bildern, ruhigerer Mosaic-Rhythmus.
Salon bekommt Brass-Fotoecken statt dunkler Holzrahmen.
Alle Captions und Pick-Buttons sitzen jetzt durchweg gleich — keine Layoutbrüche mehr beim Theme-Wechsel.
Themes und Anordnungen abgestimmt + Streifen neu
Jedes Theme bekommt seine Lieblings-Anordnungen — passende Layouts sind hervorgehoben, weniger passende mit dezentem Hinweis markiert. Wählen kannst du weiterhin alles.
Streifen ist von Grund auf neu: zeitgenössisches Cinema-Editorial statt vintage-Sepia. Monotypografie, Timecode-Captions, warm-bronze Akzent.
Klein-Paket: 30 Galerien + 5 Sammlungen
Das Klein-Paket umfasst jetzt 30 aktive Galerien (vorher 3) und 5 Sammlungen als Landingpages. Realistisch für ein Jahr Hochzeits- oder Portrait-Geschäft — ohne sofort upgraden zu müssen.
Doppelunterstreichungen entfernt
Editorial sauberer: wo bisher eine Hairline UND ein aktiver Status-Strich übereinander lagen, bleibt jetzt nur noch der präzisere Status-Strich. Betrifft Lightbox-Toolbar, Tab-Strips und mehrere kleine Kanten.
Analytics konsolidiert
Kunden-Liste und Stille-Sessions-Aufräumen wandern in den Analytics-Block. Ein Klick, alles übersichtlich — statt drei separate Cards. Chevron-Indikator ist deutlicher sichtbar.
Brute-Force-Schutz für Logins
Login-Versuche sind jetzt auf 5 pro 15 Minuten begrenzt — pro Email und pro IP. Außerdem Spam-Schutz für Feedback-Submits, Waitlist-Anmeldungen und OAuth-Verbindungen.
Frames Beta ist live
Die ersten Photographen sind drin. Wenn du Bugs findest oder etwas vermisst: nutze den Feedback-Button unten rechts in deinem Admin — die Mail landet direkt bei mir.
Standard-Darstellung pro Account
In deinen Account-Einstellungen kannst du jetzt ein Standard-Theme und eine Standard-Anordnung wählen. Neue Galerien starten direkt mit deiner Vorauswahl — pro Galerie weiterhin überschreibbar.
Migration 0025: Dead-Lock behoben
Die Multi-Tenant-Constraints-Migration hängte sich beim Self-Backfill auf. Sie macht den Backfill jetzt selbst — sauber, ohne Lock.
Themes v2: sieben Visual-Identitäten
Editorial, Salon, Folio, Atelier, Streifen, Clean, Modern — jede Wahl färbt die ganze Galerie: Hintergrund, Schrift, Rahmen, Lightbox. Du wählst pro Galerie eine eigene Stimmung.
Themes auf die ganze Public-Galerie ausgeweitet
Dein gewähltes Theme bestimmt jetzt auch Hero, Footer und Lightbox deiner öffentlichen Galerie — nicht mehr nur den Bildraster. Eine Galerie, eine konsistente Atmosphäre.
FAQ + Transparenz-Hinweise
"Wo bleiben meine Bilder?", "Was kostet das?", "Was passiert wenn ich kündige?" — alles offen aufgeschrieben unter /faq. Keine Marketing-Antworten.
Feedback-Button im Admin (unten rechts)
Ein Tap, ein Satz Text, optional Screenshot — die Nachricht landet direkt bei Kevin. Kein Support-Portal, kein Ticket-System dazwischen.
Drive, Dropbox & pCloud verbinden
Drei Storage-Provider voll integriert. iCloud nur über geteilte Alben (Apple bietet keine Foto-API). Dropbox-Beta ist auf 5 Verbindungen plattformweit begrenzt, bis wir Production-Status haben.
pCloud als vierter Storage-Provider
pCloud-Lifetime-Plan-Nutzer aufgepasst: ihr könnt euer Konto jetzt direkt verbinden. EU- und US-Endpoints werden automatisch erkannt.
Unterordner werden zu Sektionen
Hat dein Drive-Ordner Unterordner (zB. Standesamt / Kirche / Feier)? Frames erkennt sie und schlägt sie als Galerie-Sektionen vor — ein Klick, fertig strukturiert.
Magic-Link-Login + 2FA für Platform-Admins
Kein Passwort mehr nötig — Login per Magic-Link via E-Mail. Platform-Admins müssen zusätzlich TOTP-2FA einrichten.
Einstellungen sauber in fünf Tabs
Konto, Brand, Versand, Tarif, Zugang. Schluss mit Mega-Page-Scrollen — alles dort, wo du es vermutest.
Multi-Tenant-Foundation: Photographer-Konten
Frames ist jetzt SaaS: jeder Photograph hat sein eigenes Konto, seine eigenen Galerien, seine eigenen Storage-Verbindungen. Photograph-Slug landet in der URL: frames.de/dein-name/galerie-slug.
Sieben Anordnungen für deine Bilder
Raster, Mauerwerk, Liste, Säule, Mosaik, Kontaktbogen. Wähle die Anordnung, die zu deiner Serie passt — beim Klick wird sofort gespeichert.
Set-Erstellung im Modal statt Browser-Prompt
Schluss mit dem hässlichen prompt()-Dialog. Sets werden jetzt in einem richtigen Modal angelegt — mit Vorschau und Auto-Save.
Auto-Save im Anordnungs-Picker
Du klickst die Anordnung an, sie wird gespeichert — ohne Submit-Button. Spinner zeigt dir an, wann der Server fertig ist.
Email-Vorlagen für deine Kunden
Einladung, Erinnerung, Auswahl-fertig — passe die Templates an deinen Ton an. Frames schickt sie für dich.
Wasserzeichen für deine Galerien
Lade ein Logo oder einen Text als Watermark hoch — kombinier es mit Draft-Modus, um Vorab-Looks rechtssicher zu teilen.
Sets, Scribbles & Annotationen
Gruppiere Bilder in Sets, lass Kunden mit Scribbles direkt aufs Bild markieren, sammle Annotationen pro Foto — Auswahl wird zur Konversation.