Files
Artista-Filmcamp/README.md
T
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

63 lines
4.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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](docs/OFFENE-PUNKTE.md) im Adminbereich bestätigt sind.
| Dokument | Inhalt |
|---|---|
| [docs/ARCHITEKTUR.md](docs/ARCHITEKTUR.md) | Entscheidungen: Stack, Preisbindung, Ratenzahlung, Kapazität, Webhooks, Design |
| [docs/BETRIEB.md](docs/BETRIEB.md) | RKE2-Deployment, Secrets, Stripe-Webhooks, E-Mail, Sicherung, Storno/Erstattung |
| [docs/OFFENE-PUNKTE.md](docs/OFFENE-PUNKTE.md) | Noch benötigte Inhalte und Freigaben |
| [docs/TESTS.md](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.
```bash
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:
```bash
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](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](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](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.