import { site, type Media } from "@/content/site"; import type { Reel } from "@/lib/site-media"; import { MediaFrame } from "../MediaFrame"; import { Reveal } from "../Reveal"; import { VideoSlot } from "../VideoSlot"; type TeamMember = { slug: string; name: string; role: string; bio: string | null; portrait: Media }; function Bio({ bio, showDrafts }: { bio: string | null; showDrafts: boolean }) { if (bio) return

{bio}

; return showDrafts ?

Kurzbeschreibung folgt

: null; } /** * Team: Eric Heitz als Head of Modelcamp gross vorangestellt, darunter alle * weiteren gleichwertig im Raster. Portraets im Rundbogen, ein Motiv aus * der Architektur der Villa. Liegt team/.jpg im Medienverzeichnis, * ersetzt das Foto den Initialen-Platzhalter. */ export function TeamSection({ showDrafts, portraits }: { showDrafts: boolean; portraits: Record }) { const { team } = site; const { head } = team; const portraitOf = (member: TeamMember) => portraits[member.slug] ?? member.portrait; const missing = [head, ...team.people].some((member) => portraitOf(member).kind !== "image"); return (

{team.title}

{team.lead}

{head.title}

{head.name}

{head.role}

    {team.people.map((person: TeamMember, index) => (
  • {person.name}

    {person.role}

  • ))}
{showDrafts && missing && (

Porträts folgen Platzhalter mit Initialen, bis die Fotos im Medienverzeichnis liegen (docs/MEDIEN.md).

)}
); } export function AboutSection({ showDrafts }: { showDrafts: boolean }) { const { about } = site; if (about.paragraphs.length === 0 && !showDrafts) return null; return (

{about.title}

{about.paragraphs.length > 0 ? ( about.paragraphs.map((p) =>

{p}

) ) : (

Inhalt folgt Grundlage wird die ARTISTA-Stammmodel-Seite (Link folgt).

)} {about.sourceUrl && (

Zur ARTISTA-Stammmodel-Seite

)}
); } /** * Drei Reels im Hochformat. Leere Slots erscheinen nur in Entwicklung und * Staging; oeffentlich nie ein erfundenes Testimonial als Ersatz. */ export function ReelsSection({ showDrafts, reels }: { showDrafts: boolean; reels: Reel[] }) { const { reels: content } = site; const slots = content.slots.map((slot, index) => ({ ...slot, ...(reels[index] ?? { src: null, poster: null }) })); const visible = showDrafts ? slots : slots.filter((s) => s.src); if (visible.length === 0) return null; return (

{content.title}

{content.lead}

    {visible.map((slot, index) => (
  • ))}
); }