/** * Zentrale Inhalte der Onepage. * * REGELN FUER DIESE DATEI * - Nichts erfinden: Termine, Leistungen, Qualifikationen, Bewertungen und * Rechtliches nur aus bestaetigten Angaben. * - "confirmed: false" heisst Entwurf. Entwuerfe erscheinen in Entwicklung * und Staging sichtbar als solche markiert und werden im Produktivbetrieb * (APP_ENV=production) ausgeblendet oder durch einen neutralen Hinweis * ersetzt. * - Termin, Ort, Zimmer-/Bettbeschreibung, Veranstalter, Steuerhinweis, * Bedingungen und Widerrufsbelehrung pflegt der Adminbereich (Datenbank), * weil sie den Live-Verkauf freischalten. Hier steht alles Uebrige. * - Bilder: nur mit bestaetigter Nutzungsberechtigung und immer als lokale * Datei, nie per Hotlinking. Feste Bilder liegen in public/images/. * Logo, Headerbild, Portraets und Reels kommen ueber feste Dateinamen aus * dem Medienverzeichnis (src/lib/site-media.ts, docs/MEDIEN.md). * Die Unterkunftsbilder stammen aus dem Booking.com-Eintrag der Villa * und wurden vom Auftraggeber am 01.10.2026 zur Nutzung freigegeben. * - Keine Gedankenstriche in Texten (Wunsch des Auftraggebers). * * Offene Punkte: docs/OFFENE-PUNKTE.md */ export type PlaceholderTone = "cover" | "villa" | "garden" | "room" | "terrace" | "portrait" | "studio"; export type Media = | { kind: "placeholder"; label: string; tone: PlaceholderTone; glyph?: string } | { kind: "image"; src: string; alt: string; width: number; height: number }; export type Confirmable = T & { confirmed: boolean }; export type ScheduleItem = { time: string; text: string; coach?: string; photo?: boolean }; export type ScheduleDay = { title: string; items: ScheduleItem[] }; const portrait = (name: string, initials: string): Media => ({ kind: "placeholder", label: `Porträt ${name}`, tone: "portrait", glyph: initials }); /** Lokales Bild aus public/images/unterkunft (1280 x 853 px). */ const villa = (file: string, alt: string): Media => ({ kind: "image", src: `/images/unterkunft/${file}.jpg`, alt, width: 1280, height: 853 }); export const site = { hero: { title: "Modelcamp Toskana 2027", // Entwurf zur Freigabe: bewusst ohne Versprechen zu Shootings, // Vermittlung oder Ergebnissen. subline: "Eine Woche in einer Villa in der Toskana. Lernen vor und hinter der Kamera, mit einem Team aus Fotografen, Models und Content Creators, und Abende, an denen alle zusammen am Tisch sitzen.", cta: "Jetzt Platz sichern", // Standardbild, solange kein header.jpg im Medienverzeichnis liegt. media: villa("villa-luftbild", "Luftaufnahme der Villa La Chiesina zwischen Zypressen und Wiesen in der Toskana"), }, expect: { title: "Was dich erwartet", lead: "Eine Woche in der Villa La Chiesina, mitten in der Toskana.", paragraphs: [ "Die Villa liegt zwischen Zypressen oberhalb von Arcidosso, mit Blick über die Hügel am Monte Amiata. Hier wohnen, arbeiten und essen wir eine Woche lang zusammen.", "Garten, Pool, alte Steintreppen und Räume mit Holzbalkendecken: Die Villa bietet viele Orte zum Fotografieren und zum Durchatmen.", ], highlights: ["Eigenes Bett im geteilten Zimmer", "Bustransfer ab und bis Florenz", "20 Workshops und Shootings mit dem Team"], slides: [ villa("villa-eingang", "Die Villa La Chiesina mit Steintreppe und Rasen im Frühling"), villa("pool-zypressen", "Pool zwischen hohen Zypressen, im Hintergrund die Hügel der Toskana"), villa("wohnzimmer-kamin", "Wohnzimmer mit Holzbalkendecke, Natursteinwand und Kamin"), villa("terrasse", "Sitzplatz auf der Gartenterrasse"), villa("anwesen-luftbild", "Luftaufnahme des Anwesens mit Zypressenallee, Pool und Tennisplatz"), ] as Media[], }, schedule: { title: "Tagesablauf", // Quelle: Modelcamp_2027_Wochenplan.pdf vom Auftraggeber (02.10.2026), // Seiten 2 bis 4. Ein Eintrag pro Tag ab Anreisetag; Wochentag und // Datum kommen aus dem Camp-Termin im Adminbereich. days: [ { title: "Anreise", items: [ { time: "Vormittag", text: "Eigene Anreise nach Florenz" }, { time: "15:30", text: "Bustransfer vom Bahnhof Santa Maria Novella zur Unterkunft" }, { time: "17:30 bis 18:00", text: "Ankunft der Selbstfahrer" }, { time: "18:00", text: "Zimmerverteilung" }, { time: "18:30", text: "Kennenlernen" }, { time: "19:00", text: "Abendessen" }, { time: "20:00", text: "Abendausklang am Kamin" }, ], }, { title: "Fundament", items: [ { time: "08:30 bis 09:30", text: "Frühstück, ab 09:00 Einführung und Ziele der Woche" }, { time: "10:00 bis 11:15", text: "Stretching & Mobility: Yoga und Quick-Routine", coach: "Lola" }, { time: "11:15 bis 13:00", text: "Catwalk-Grundlagen, inkl. Vorher-Video (gefilmt von Eric und Saskia)", coach: "Eileen" }, { time: "13:30 bis 14:30", text: "Make-up-Basics: Clean / Natural Look", coach: "Gabi" }, { time: "15:00 bis 16:30", text: "Social-Media-Grundlagen", coach: "Saskia" }, { time: "17:30 bis 18:45", text: "Stimmtraining", coach: "Eric" }, { time: "19:00", text: "Abendessen" }, { time: "20:00 bis 21:00", text: "Toastmasters Runde 1: Stegreif-Reden, erste Wirkung", coach: "Eric" }, ], }, { title: "Ausdruck & Kamera", items: [ { time: "07:30 bis 08:15", text: "Frühsport (optional)", coach: "Gabi" }, { time: "08:30 bis 09:30", text: "Frühstück" }, { time: "10:00 bis 11:30", text: "Mimikkontrolle", coach: "Eric", photo: true }, { time: "11:30 bis 13:30", text: "Range: Angel or Devil Shoot, Emotion vor der Kamera", coach: "Lola, Eric, Michele", photo: true }, { time: "14:00 bis 15:00", text: "Commercial-Posing", coach: "Gabi" }, { time: "15:00 bis 16:00", text: "Testimonial-Look", coach: "Gabi", photo: true }, { time: "16:15 bis 17:15", text: "Runway-Posen am Laufstegende", coach: "Eileen", photo: true }, { time: "17:30 bis 18:30", text: "Tennisshoot", coach: "Michele" }, { time: "19:00", text: "Abendessen" }, { time: "20:00", text: "Angel-or-Devil-Bildbesprechung und Spieleabend", coach: "Lola" }, ], }, { title: "Ausflugstag Arcidosso", items: [ { time: "08:30 bis 09:30", text: "Frühstück / Sandwichstation" }, { time: "10:00 bis 11:00", text: "Spaziergang nach Arcidosso" }, { time: "11:00 bis 12:30", text: "Foto-Content fürs eigene Profil, vor Ort", coach: "Saskia", photo: true }, { time: "12:30 bis 14:00", text: "Freies Shooten in Arcidosso" }, { time: "14:00", text: "Treffen und Austausch" }, { time: "14:30 bis 15:30", text: "Spaziergang zurück zum Camp" }, { time: "16:30 bis 18:00", text: "Range: Acting & Performance", coach: "Lola" }, { time: "19:00", text: "Abendessen" }, { time: "20:00", text: "Lagerfeuer und Musik" }, ], }, { title: "Walk, Content & Pool", items: [ { time: "08:30 bis 09:30", text: "Frühstück" }, { time: "10:00 bis 13:00", text: "Walk: Runway-Analyse, High-Fashion & Commercial, Fashion Cities, Runway Practice", coach: "Lola" }, { time: "13:30 bis 14:15", text: "Walk mit Musik & Rhythmus", coach: "Eileen", photo: true }, { time: "14:15 bis 16:15", text: "Content & Reels produzieren", coach: "Saskia", photo: true }, { time: "16:30 bis 18:30", text: "Poolparty mit Cocktails und Fingerfood" }, { time: "18:30", text: "Gruppenfoto" }, { time: "19:00", text: "Abendessen" }, { time: "20:00 bis 21:00", text: "Toastmasters Runde 2: Fortschritt sichtbar machen", coach: "Eric" }, { time: "21:30", text: "Special-Programm für Mutige" }, ], }, { title: "Editorial, Pitch & Finale", items: [ { time: "07:30 bis 08:15", text: "Frühsport (optional)", coach: "Gabi" }, { time: "08:30 bis 09:30", text: "Frühstück" }, { time: "10:00 bis 13:00", text: "Editorial Posing inkl. Test-Shoot", coach: "Lola, Michele", photo: true }, { time: "13:45 bis 14:30", text: "Elevator Pitch: erarbeiten", coach: "Eric" }, { time: "14:30 bis 15:30", text: "Elevator Pitch: vorstellen, als Vorstellungsvideo (gefilmt von Saskia)", coach: "Eric", photo: true }, { time: "16:00 bis 17:30", text: "Bildauswahl und Einzelfeedback", coach: "Team" }, { time: "17:30 bis 19:00", text: "Pause und Styling" }, { time: "19:00 bis 20:30", text: "Golden-Hour-Finalshooting", coach: "Michele", photo: true }, { time: "20:30", text: "Abschiedsdinner, Reel- und Bildervorstellung, Abschiedsfeier" }, ], }, { title: "Abreise", items: [ { time: "08:00 bis 08:45", text: "Sandwichstation" }, { time: "09:00 bis 12:00", text: "Bustransfer nach Florenz" }, ], }, ] as ScheduleDay[], footnote: "Frühstück, Snacks über den Tag und Abendessen sind für alle inklusive.", }, services: { included: [ // Bestaetigt durch das Buchungsprodukt bzw. den Auftraggeber // (Wochenplan-PDF vom 02.10.2026): { text: "Teilnahme am Modelcamp 2027 mit 20 Workshops und Shootings", confirmed: true }, { text: "Sechs Nächte in der Villa La Chiesina, eigenes Bett im geteilten Zimmer", confirmed: true }, { text: "Bustransfer vom Bahnhof Firenze Santa Maria Novella zur Villa und zurück", confirmed: true }, { text: "Frühstück, Snacks über den Tag und Abendessen", confirmed: true }, ] satisfies Confirmable<{ text: string }>[], excluded: [ // Laut Vorlage ausdruecklich nicht enthalten. "Anreise nach Italien und zurück", "Persönliche Ausgaben vor Ort", "Reiserücktrittsversicherung", ], }, accommodation: { title: "Die Unterkunft", lead: "Eine Villa zwischen Zypressen, mit Blick über die Hügel am Monte Amiata. Wohnen, arbeiten und abends zusammensitzen, alles an einem Ort.", name: "Villa La Chiesina", place: "Arcidosso, Toskana", // Ausstattung laut Unterkunftsbeschreibung (Booking.com, Stand 01.10.2026). // Die Booking-Seite selbst wird bewusst nicht verlinkt. features: [ "Eigener Außenpool (saisonal)", "Großer Garten mit Terrasse", "Blick auf die Berge", "Gemeinsames Wohnzimmer", "Tennisplatz", "Bettwäsche und Handtücher", "WLAN", ], images: [ villa("villa-eingang", "Die Villa La Chiesina mit Steintreppe und Rasen im Frühling"), villa("pool", "Pool mit Liegen im Garten der Villa"), villa("wohnzimmer-kamin", "Wohnzimmer mit Holzbalkendecke, Natursteinwand und Kamin"), villa("anwesen-luftbild", "Luftaufnahme des Anwesens mit Zypressenallee, Pool und Tennisplatz"), villa("schlafzimmer-einzelbetten", "Schlafzimmer mit zwei Einzelbetten und Holzbalkendecke"), villa("esszimmer", "Esszimmer mit großem Holztisch und Kamin"), villa("terrasse", "Sitzplatz auf der Gartenterrasse"), villa("pool-zypressen", "Pool zwischen hohen Zypressen, im Hintergrund die Hügel der Toskana"), villa("steintreppe", "Alte Steintreppe im Garten unter Bäumen"), villa("arcidosso", "Blick auf den mittelalterlichen Ort Arcidosso mit Burg"), ] as Media[], }, team: { title: "Mit dabei", lead: "Fotografie, Modelcoaching, Content und eine Küche, die alle zusammenbringt: Diese Menschen sind beim Modelcamp 2027 dabei.", // Namen und Rollen vom Auftraggeber (01.10.2026). Portraets kommen ueber // das Medienverzeichnis als team/.jpg (docs/MEDIEN.md). // Kurzbeschreibungen nur aus freigegebenen Angaben, keine erfundenen Referenzen. head: { slug: "eric-heitz", name: "Eric Heitz", title: "Head of Modelcamp", role: "Fotograf · Content Creator · Modelcoach", bio: null as string | null, portrait: portrait("Eric Heitz", "EH"), }, people: [ { slug: "michele-ietro", name: "Michele Ietro", role: "Editorial- und Casual-Fotograf", bio: null as string | null, portrait: portrait("Michele Ietro", "MI") }, { slug: "lola-stoll", name: "Lola Stoll", role: "Editorial Model · UGC · GNTM 2026", bio: null as string | null, portrait: portrait("Lola Stoll", "LS") }, { slug: "eileen-kaupp", name: "Eileen Kaupp", role: "Editorial Model · Fashion · GNTM 2026", bio: null as string | null, portrait: portrait("Eileen Kaupp", "EK") }, { slug: "gabriela-pronkin", name: "Gabriela Pronkin", role: "Commercial · Casual Model · UGC", bio: null as string | null, portrait: portrait("Gabriela Pronkin", "GP") }, { slug: "saskia-sirowatka", name: "Saskia Sirowatka", role: "Social Media Managerin", bio: null as string | null, portrait: portrait("Saskia Sirowatka", "SS") }, { slug: "andre-hartshauser", name: "André Hartshauser", role: "Workshop-Organisation · Assistenz Küche", bio: null as string | null, portrait: portrait("André Hartshauser", "AH") }, { slug: "ante-rejo", name: "Ante Rejo", role: "Chefkoch", bio: null as string | null, portrait: portrait("Ante Rejo", "AR") }, ], }, about: { title: "Über ARTISTA", // Grundlage soll die ARTISTA-Stammmodel-Seite sein (Link folgt). Bis // dahin keine Unternehmensgeschichte und keine Zahlen. sourceUrl: null as string | null, paragraphs: [] as string[], }, reels: { title: "Stimmen", lead: "Models erzählen, wie sie ARTISTA erleben.", // Genau drei Slots. Video und Vorschaubild kommen ueber das // Medienverzeichnis (reels/reel-1.mp4 und reels/reel-1.jpg usw.). // Name und Begleittext nur mit Freigabe der gezeigten Person. slots: [ { name: null as string | null, caption: null as string | null }, { name: null as string | null, caption: null as string | null }, { name: null as string | null, caption: null as string | null }, ], }, faq: { title: "Häufige Fragen", }, } as const; /** Links in der Kopfzeile: die ersten drei links vom Logo, der Rest rechts. */ export const NAV_ITEMS = [ { id: "erwartet", label: "Was dich erwartet" }, { id: "ablauf", label: "Tagesablauf" }, { id: "unterkunft", label: "Unterkunft" }, { id: "preis", label: "Preis" }, { id: "team", label: "Team" }, { id: "fragen", label: "Fragen" }, { id: "erstgespraech", label: "Erstgespräch" }, ] as const;