// mapemedia homepage — part B: gallery, before/after slider, testimonials, tools, about-CTA. // ── Gallery ───────────────────────────────────────────────────────────── const GALLERY = [ { id: 'gal-1', ratio: '3 / 4', label: 'Interior' }, { id: 'gal-2', ratio: '4 / 3', label: 'Exterior' }, { id: 'gal-3', ratio: '4 / 3', label: 'Produkt' }, { id: 'gal-4', ratio: '3 / 4', label: 'Real Estate' }]; const GallerySection = () =>
{GALLERY.map((g) =>
{g.label}
)}
; // ── Before / After slider ─────────────────────────────────────────────── const BeforeAfterSlider = () => { const [pos, setPos] = React.useState(50); const ref = React.useRef(null); const dragging = React.useRef(false); const setFromClientX = (clientX) => { const el = ref.current;if (!el) return; const r = el.getBoundingClientRect(); const p = (clientX - r.left) / r.width * 100; setPos(Math.max(0, Math.min(100, p))); }; React.useEffect(() => { const move = (e) => {if (dragging.current) setFromClientX(e.touches ? e.touches[0].clientX : e.clientX);}; const up = () => {dragging.current = false;}; window.addEventListener('mousemove', move);window.addEventListener('mouseup', up); window.addEventListener('touchmove', move, { passive: false });window.addEventListener('touchend', up); return () => {window.removeEventListener('mousemove', move);window.removeEventListener('mouseup', up);window.removeEventListener('touchmove', move);window.removeEventListener('touchend', up);}; }, []); return (
{dragging.current = true;setFromClientX(e.clientX);}} onTouchStart={(e) => {dragging.current = true;setFromClientX(e.touches[0].clientX);}} style={{ position: 'relative', width: '100%', aspectRatio: '16 / 9', overflow: 'hidden', border: '.5px solid var(--hairline-color)', cursor: 'ew-resize', userSelect: 'none', background: 'var(--surface-warm-grey)' }}> {/* After (base, full) */} Nachher — fertiges Render {/* Before (overlay, clipped to left of slider) */}
Vorher — Ausgangsmodell
{/* Labels */} Vorher Nachher {/* Handle */}
‹›
); }; const baLabel = (side) => ({ position: 'absolute', top: 16, [side]: 16, fontFamily: 'var(--font-sans)', fontSize: 9, fontWeight: 500, letterSpacing: '.2em', textTransform: 'uppercase', color: side === 'right' ? 'var(--primary)' : '#fff', background: 'rgba(26,26,26,.7)', padding: '6px 12px', zIndex: 2 }); // ── Testimonials (dark, 4-up) ─────────────────────────────────────────── const TestimonialCard = ({ quote, initials, name, company }) =>
{'★★★★★'}

„{quote}"

{initials}
{name}
{company}
; const TestimonialsSection = () => { const items = [ { quote: 'Das von mapemedia erstellte Video hat die geplante Küche sehr hochwertig und realistisch dargestellt, obwohl sie so noch gar nicht existiert. So konnte dem Kunden die spätere Ausführung richtig gut und überzeugend gezeigt werden.', initials: 'BE', name: 'Benno Ewert', company: 'Projektleitung | Kuhn Design' }, { quote: 'Die erstellten Visualisierungen haben die komplexe Material- und Möblierungssituation des Projekts sehr realistisch und hochwertig dargestellt. Dadurch konnte dem Kunden die geplante Ausführung anschaulich und überzeugend vermittelt werden.', initials: 'JB', name: 'Jordi Barcelo', company: 'Barcelo Baumann Architekten' }, { quote: 'Die von mapemedia erstellten, kundenspezifischen Renderings haben unsere Immobilie sehr hochwertig und realistisch dargestellt. Die Visualisierungen unterstützen die Vermarktung optimal und vermitteln einen überzeugenden Eindruck der Raumqualität.', initials: 'CT', name: 'Christian Tscheulin', company: 'Tscheulin Architekten' }, { quote: 'Ehrliche Beratung, klare Timings, fotoreales Ergebnis. Dass KI im Spiel ist, merkt man den Bildern nicht an.', initials: 'MB', name: 'Manuel Beuck', company: 'Privatkunde' }]; return (
{items.map((t, i) => )}
); }; // ── Tools band (deep dark marquee) ────────────────────────────────────── const ToolsBand = () => { const tools = ['Kling', 'Grok', 'Claude', 'Seedance', 'Google Veo', 'Gemini', 'GPT', 'Adobe Creative Suite', 'Magnific']; return (
— TOOLS, MIT DENEN ICH ARBEITE —
{t}· )} />
); }; // ── About / CTA band ──────────────────────────────────────────────────── const AboutStat = ({ value, label }) =>
{value}
{label}
; const AboutCTA = () =>
05 — Über das Studio

Marketing für die gebaute Welt.

mapemedia unterstützt Unternehmen aus Bau, Architektur, Immobilien und Produktentwicklung dabei, ihre Projekte visuell stark und professionell zu vermarkten.

Marco Pendt
Marco Pendt
Gründer · mapemedia
; Object.assign(window, { GallerySection, BeforeAfterSlider, TestimonialsSection, TestimonialCard, ToolsBand, AboutCTA, AboutStat });