Commit Graph
20 Commits
Author SHA1 Message Date
Nick SzaunigandClaude Opus 5.5 33f5096bf1 feat: Video unter dem Headerbild aus dem Medienverzeichnis (intro.mp4)
Startet nur nach Klick; mit Vorschaubild (intro.jpg) lädt vorab nichts vom Video. Vorschaubilder von Intro und Reels laufen über die Bildoptimierung statt im Original, Videos bevorzugen eine Web-Fassung <name>.web.mp4.

Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
2026-10-06 07:09:46 +02:00
Nick SzaunigandClaude Opus 5.5 df105aafca fix: Stefan Höchtl aus dem Team entfernt, Tennisplatz statt Küche bei der Ausstattung
Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
2026-10-06 06:51:24 +02:00
Nick SzaunigandClaude Opus 5.5 1ce7947d93 fix: Stripe-Ratenplan bei Prüfung anhalten, doppelte Pläne verhindern
Befunde aus dem Sicherheits-Review des vorherigen Commits:

- Gerät eine Buchung in "Prüfung nötig" (Rückbuchung, Doppelzahlung ...),
  wird der Stripe-Plan beendet und offene Rechnungen storniert. Nach
  Bestätigung legt der Worker einen neuen Plan für die offenen Raten an.
  Vorher zog Stripe auch bei Buchungen in Prüfung weiter ein.
- Vor dem Anlegen wird bei Stripe nach einem laufenden Plan der Buchung
  gesucht; der Idempotenzschlüssel enthält Generation und Start. Verhindert
  einen zweiten Plan nach verlorener ID und die Rückgabe des alten,
  beendeten Plans nach einer Prüfung.
- Start bei bereits verstrichener Fälligkeit deterministisch am nächsten
  9-Uhr-Termin, letzte Rate bleibt am Stichtag.
- Rückbuchungs-Event meldet die betroffene Buchung zurück.

Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
2026-10-06 06:28:41 +02:00
Nick SzaunigandClaude Opus 5.5 c1ad9ad2ca feat: Folgeraten über Stripe Billing einziehen
Statt eigener Off-Session-Einzüge durch den Worker legt die Anwendung nach
bezahlter erster Rate einen Stripe Subscription Schedule an. Stripe übernimmt
Einzug, Wiederholungen (Smart Retries), 3-D-Secure-Links und Mahnungen.

- Gateway: Zeitplan anlegen/beenden, Rechnungen lesen; chargeOffSession entfällt
- Webhook: invoice.paid, invoice.payment_failed, invoice.payment_action_required
- Worker: fehlende Zeitpläne anlegen, überfällige Raten abgleichen,
  Zeitpläne stornierter Buchungen beenden
- Storno beendet den Zeitplan und storniert offene Rechnungen
- "Rate bezahlen" führt auf Stripes Rechnungsseite
- Migration: Booking.stripeScheduleId, Installment.stripeInvoiceId

Zeitplan-Form mit Stripe-Testuhr gegen die Test-API geprüft.

Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
2026-10-05 23:52:43 +02:00
Nick SzaunigandClaude Opus 5.5 bcf0f5c937 fix: Medien unabhaengig von Gross- und Kleinschreibung finden
Docker-Images bauen und veroeffentlichen / build-and-push (push) Successful in 2m53s
Im Container (Linux) wurde z. B. reels/Reel-1.JPG nicht als Vorschaubild
erkannt, weil nur exakt reel-1.jpg gesucht wurde. Die Suche vergleicht
Dateinamen jetzt ohne Ruecksicht auf die Schreibweise und liefert den
echten Dateinamen aus. Gilt fuer Logo, Headerbild, Portraets und Videos.

Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
2026-10-02 06:37:00 +02:00
Nick SzaunigandClaude Opus 5.5 84c8f2f32b feat: Tagesablauf laut Wochenplan, Termin 03. bis 09. Mai 2027
Docker-Images bauen und veroeffentlichen / build-and-push (push) Successful in 2m51s
- Alle sieben Tage aus dem Wochenplan-PDF mit Uhrzeit, Coach und
  Foto-Kennzeichnung im Karussell
- Migration: Camp-Termin 03.05. bis 09.05.2027 (ersetzt 08. bis 15.05.)
- Leistungen laut PDF: 20 Workshops und Shootings, sechs Naechte,
  Bustransfer ab und bis Florenz, Fruehstueck, Snacks und Abendessen
- FAQ Anreise mit Transferzeiten
- Hinweise "Programmentwurf" und "Laut Beschreibung der Unterkunft" entfernt

Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
2026-10-02 05:49:33 +02:00
Nick SzaunigandClaude Opus 5.5 7203cd1e6e feat: Onepage nach Filmcamp-Gliederung umgebaut
- Figtree als einzige Schrift, Logo mittig in fester Kopfzeile
- Headerbild ueber volle Breite und Hoehe, ohne Preis, mit Terminleiste
- "Was dich erwartet" stellt die Villa mit animierter Bilderfolge vor,
  darunter Tagesablauf als Karussell (Programm folgt als PDF)
- Preis: regulaerer Preis durchgestrichen, kein Verkaufsstartdatum,
  Ueberschrift "Jetzt Platz sichern mit Early Bird"
- Team als "Mit dabei", danach drei Reels im Hochformat
- Logo, Headerbild, Portraets und Reels ueber feste Dateinamen im
  Medienverzeichnis (docs/MEDIEN.md), ohne Neustart austauschbar
- Widerrufsbelehrung im Admin pflegbar, Seite /widerruf, Live-Verkauf
  ohne Freigabe gesperrt
- Anreise: Abholung am Bahnhof Firenze Santa Maria Novella
- Booking-Link entfernt, Gedankenstriche aus Kundentexten entfernt

Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
2026-10-01 23:53:18 +02:00
Nick SzaunigandClaude Opus 5.5 3cba3e2341 docs: Testlauf nach Team- und Unterkunftsumbau
Docker-Images bauen und veroeffentlichen / build-and-push (push) Successful in 2m42s
Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
2026-10-01 18:39:42 +02:00
Nick SzaunigandClaude Opus 5.5 804bb832ea feat: Team, Villa-Bilder und bestaetigte Camp-Eckdaten
Docker-Images bauen und veroeffentlichen / build-and-push (push) Successful in 2m49s
- Team-Abschnitt mit neun Personen, Eric Heitz als Head of Modelcamp,
  Portraets im Rundbogen mit Initialen-Platzhaltern bis Fotos vorliegen
- Unterkunftsbilder der Villa La Chiesina lokal in public/images/unterkunft
  (vom Auftraggeber freigegeben), Hero-Leitbild, Ausstattung, Booking-Link
- Migration: Termin 08.05.-15.05.2027, Ort Arcidosso (Toskana), eigenes
  Bett im geteilten Zimmer, 13 Plaetze; Admin-Werte bleiben erhalten
- Reveal: kein Hydration-Fehler mehr bei reduzierter Bewegung
- Doku zu offenen Punkten aktualisiert

Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
2026-10-01 07:39:27 +02:00
Nick SzaunigandClaude Opus 5.5 6a9c6c8e50 docs: Gestaltung um Rezensionen, Platzhalter-Tafeln und Formregeln ergaenzt
Docker-Images bauen und veroeffentlichen / build-and-push (push) Successful in 3m7s
Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
2026-09-28 17:46:47 +02:00
Nick SzaunigandClaude Opus 5.5 67cdddc33f docs: Betriebsdoku auf neue k8s-Dateinamen und Pod-Security-Stufe
Docker-Images bauen und veroeffentlichen / build-and-push (push) Successful in 1m57s
Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
2026-09-28 11:26:29 +02:00
Nick SzaunigandClaude Opus 5.5 91791b791f refactor(k8s): minimale, flache Manifeste zum Kopieren
Kustomize-Struktur (base/overlays) entfernt. Stattdessen nummerierte
Einzeldateien, ausrollbar mit "kubectl apply -f k8s/":
00-namespace, 01-config, 02-storage (SMB-PVs/PVCs Postgres + Medien),
03-postgres (StatefulSet + Service), 04-app (Deployment mit
Migrations-initContainer + Service), 05-ingress, 06-worker,
07-networkpolicy. Secrets als secrets.yaml.example (echte secrets.yaml
ist gitignored). Images mit Tag latest aus der Gitea-Pipeline.
Kurzanleitung in k8s/README.md, Betriebsdoku angepasst.

Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
2026-09-28 01:12:26 +02:00
Nick SzaunigandClaude Opus 5.5 c84eb1e740 refactor(k8s): schlanker Umfang, Postgres und Medien auf SMB
Docker-Images bauen und veroeffentlichen / build-and-push (push) Successful in 2m17s
Auf Wunsch des Betreibers auf das Noetige reduziert: StatefulSet
PostgreSQL, Services, Ingress, App-Deployment, zwei SMB-PersistentVolumes
(Postgres-Daten, Medien). Beibehalten nach Absprache: Worker-CronJob
(Folgeraten, Reservierungsfreigabe, Mail-Wiederholung), ConfigMap und die
NetworkPolicies (Sicherheitsbefund Rate-Limit-Umgehung).

- Migration als initContainer im App-Deployment statt eigenem Job
- Entfernt: Backup-CronJob/-Volume (NAS sichert die Freigabe),
  Migrations-CronJob, PodDisruptionBudget, HTTP-Redirect-Ingress und
  Middleware, Namespace-Objekt (einmalig von Hand anzulegen)
- PostgreSQL auf SMB als bewusste, dokumentierte Ausnahme mit
  hard, cache=strict, SMB 3.1.1 + seal, uid 70 / 0700

Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
2026-09-27 20:36:30 +02:00
Nick SzaunigandClaude Opus 5.5 974c403a8b docs: SMB-Verschluesselung und Rechte der Volumes beschrieben
Docker-Images bauen und veroeffentlichen / build-and-push (push) Successful in 1m39s
Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
2026-09-27 20:14:58 +02:00
Nick SzaunigandClaude Opus 5.5 a7c11ccbd0 docs: Einrichtung der SMB-Volumes im Betriebshandbuch
Docker-Images bauen und veroeffentlichen / build-and-push (push) Successful in 1m50s
Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
2026-09-27 20:11:20 +02:00
Nick SzaunigandClaude Opus 5.5 24939b58d5 feat: SMB-PersistentVolumes fuer Medien und Datenbank-Sicherungen
Statische PVs ueber csi-driver-smb (smb.csi.k8s.io), fest an die PVCs
artista-modelcamp-media (App liest, uid 1001) und
artista-modelcamp-db-backup (pg_dump-Job, uid 70, 0700/0600) gebunden,
reclaimPolicy Retain. Zugang ueber Secret artista-modelcamp-smb.
Das PostgreSQL-Datenverzeichnis bleibt bewusst auf Blockspeicher
(SMB erfuellt dessen Sperr- und fsync-Anforderungen nicht, Briefing §13);
die Datenbank landet ueber die taeglichen Dumps trotzdem auf dem NAS.

Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
2026-09-27 20:11:04 +02:00
Nick SzaunigandClaude Opus 5.5 95e3733ab8 refactor: Kubernetes-Ressourcen und Images heissen artista-modelcamp
Docker-Images bauen und veroeffentlichen / build-and-push (push) Successful in 2m19s
Alle Ressourcen tragen den Praefix artista-modelcamp- im Namespace
artista; Images <owner>/artista-modelcamp und
<owner>/artista-modelcamp-tools. DATABASE_URL-Host, Backup-Host,
Traefik-Middleware-Referenz und Betriebsdoku entsprechend angepasst.

Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
2026-09-27 14:38:37 +02:00
Nick SzaunigandClaude Opus 5.5 f9349144ea refactor: Kubernetes-Ressourcen und Images heissen artista-filmcamp
Docker-Images bauen und veroeffentlichen / build-and-push (push) Successful in 4m39s
Alle Ressourcen tragen den Praefix artista-filmcamp- (Deployment,
Service, StatefulSet, CronJobs, PVCs, ConfigMap, Secret, Ingress,
NetworkPolicies, Middleware) und liegen im Namespace artista. Die Images
heissen wieder <owner>/artista-filmcamp und <owner>/artista-filmcamp-tools,
passend zum Repo. DATABASE_URL-Host, Backup-Host und Betriebsdoku
entsprechend angepasst.

Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
2026-09-27 14:15:12 +02:00
Nick SzaunigandClaude Opus 5.5 c18c628131 fix: Image-Namen auf artista-modelcamp statt Repo-Namen "Filmcamp"
Die Pipeline leitete den Image-Namen vom Repo "Artista-Filmcamp" ab. Das
Produkt ist das ARTISTA MODELCAMP 2027: Images heissen jetzt fest
<owner>/artista-modelcamp und <owner>/artista-modelcamp-tools, passend zu
Overlay und Betriebsdoku.

Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
2026-09-27 13:26:29 +02:00
Nick Szaunig 59bb5a38a3 first commit
Docker-Images bauen und veroeffentlichen / build-and-push (push) Failing after 1m32s
2026-09-27 06:06:56 +02:00