Nick SzaunigandClaude Opus 5.5 84c8f2f32b
Docker-Images bauen und veroeffentlichen / build-and-push (push) Successful in 2m51s
feat: Tagesablauf laut Wochenplan, Termin 03. bis 09. Mai 2027
- 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
2026-09-27 06:06:56 +02:00
2026-09-27 06:06:56 +02:00
2026-09-27 06:06:56 +02:00
2026-09-27 06:06:56 +02:00
2026-09-27 06:06:56 +02:00
2026-09-27 06:06:56 +02:00
2026-09-27 06:06:56 +02:00
2026-09-27 06:06:56 +02:00
2026-09-27 06:06:56 +02:00
2026-09-27 06:06:56 +02:00
2026-09-27 06:06:56 +02:00
2026-09-27 06:06:56 +02:00

ARTISTA MODELCAMP 2027 – Buchungswebsite

Deutschsprachige Onepage mit echter Buchungsstrecke: Stripe-Zahlung (einmalig oder in bis zu drei Raten), persistente Bestell- und Gutscheinverwaltung, geschützter Adminbereich mit Zwei-Faktor-Anmeldung, Docker- und RKE2-Deployment.

Stand: technisch vollständig, im Stripe-Testmodus buchbar. Der Live-Verkauf ist serverseitig gesperrt, bis alle Inhalte und Freigaben aus docs/OFFENE-PUNKTE.md im Adminbereich bestätigt sind.

Dokument Inhalt
docs/ARCHITEKTUR.md Entscheidungen: Stack, Preisbindung, Ratenzahlung, Kapazität, Webhooks, Design
docs/BETRIEB.md RKE2-Deployment, Secrets, Stripe-Webhooks, E-Mail, Sicherung, Storno/Erstattung
docs/OFFENE-PUNKTE.md Noch benötigte Inhalte und Freigaben
docs/TESTS.md Ausgeführte Tests und verbleibende Einschränkungen

Stack

TypeScript 5.9 (strict) · Next.js 16.3 (App Router, standalone) · React 19.3 · Tailwind CSS 4.3 · Motion 13 · PostgreSQL 18 · Prisma 7.10 (versionierte Migrationen) · Stripe 22 (Checkout + PaymentIntents) · Zod 4 · Better Auth 1.7 (Admin, TOTP) · Nodemailer 10 · Vitest 4 · Playwright 1.63. Versionen sind exakt fixiert, Lockdatei: pnpm-lock.yaml.

Lokal starten

Voraussetzungen: Node.js 22+, pnpm 12. Docker ist optional.

pnpm install
cp .env.example .env            # APP_SECRET, BETTER_AUTH_SECRET setzen, Stripe-Testschlüssel eintragen
pnpm db:dev                     # eingebettetes PostgreSQL (eigenes Terminal)  – oder: docker compose up -d db mailpit
pnpm db:deploy                  # Migrationen anwenden
pnpm db:seed                    # nur Entwicklung: Early Bird simuliert, Test-Anreisetag, Gutschein TEST-STAMMMODEL
pnpm admin:create --email [email protected] --name "Dein Name"
pnpm dev                        # http://localhost:3000, Verwaltung unter /admin

Stripe-Testbuchung mit Webhooks lokal:

stripe listen --forward-to localhost:3000/api/stripe/webhook   # gibt das whsec_… für STRIPE_WEBHOOK_SECRET aus
pnpm worker                                                    # Reservierungen, Raten, E-Mails (im Cluster: CronJob)

Testkarte 4242 4242 4242 4242, für 3-D-Secure-Fälle 4000 0027 6000 3184. E-Mails landen mit MAIL_TRANSPORT=file als .eml in .mail-outbox/ (oder in Mailpit unter http://localhost:8025).

Befehle

Befehl Zweck
pnpm dev / pnpm build / pnpm start Entwicklung, Produktionsbuild, Produktionsserver
pnpm typecheck / pnpm lint Typprüfung, ESLint
pnpm test Unit- und Integrationstests (startet eine eigene PostgreSQL-Instanz)
pnpm test:e2e Playwright: Smartphone, Tablet, Desktop, axe-Barrierefreiheit (gegen laufenden Server)
pnpm db:migrate / pnpm db:deploy Migration erstellen / anwenden
pnpm worker Einmaliger Worker-Lauf
pnpm admin:create Admin-Konto anlegen (kein Standardpasswort)

Wo was gepflegt wird

  • Texte, Tagesablauf, Team, Reels, FAQ-Grundlagen: src/content/site.ts. Einträge mit confirmed: false gelten als Entwurf.
  • Termin, Ort, Zimmerbeschreibung, Veranstalter, Steuerhinweis, Bedingungen, Kapazität, Freigaben: Adminbereich → „Einstellungen und Freigaben“.
  • Preise und Preisphasen: fest in src/lib/pricing.ts, weil sie verbindlich vorgegeben sind.
  • Gutscheine (Stammmodel-Codes): Adminbereich → „Gutscheine“.
  • Feste Bilder: public/images/unterkunft/ (Villa, aus dem Booking.com-Eintrag, Nutzung vom Auftraggeber freigegeben).
  • Logo, Headerbild, Porträts, Reels: feste Dateinamen im Medienverzeichnis, werden automatisch erkannt. Liste: docs/MEDIEN.md.
  • Widerrufsbelehrung: Adminbereich → Einstellungen, erscheint unter /widerruf.
  • Weitere Medien: Dateien ins Medienverzeichnis (MEDIA_DIR) legen und in site.ts als { kind: "image", src: "/media/…" } eintragen.
Languages
TypeScript 93.8%
PLpgSQL 3.4%
CSS 1.3%
Dockerfile 0.6%
Shell 0.5%
Other 0.4%