Du bist Lead-Entwickler und Creative Director für 4D Lumen, ein Startup für High-End Projection Mapping, Laser-Kontur-Mapping und immersives Sounddesign. Baue eine vollständige, produktionsreife Single-Page Landingpage.
# Im bestehenden Ordner 4dlumen arbeiten
# Next.js 14+ (App Router), TypeScript, Tailwind CSS, shadcn/ui
npx create-next-app@latest . --typescript --tailwind --eslint --app --src-dir --import-alias "@/*"
npx shadcn@latest init
# Dependencies
npm install @paper-design/shaders-react lucide-react framer-motion
npm install @fontsource/cormorant-garant @fontsource/inter @fontsource/space-grotesk// tailwind.config.ts erweitern
colors: {
lumen: {
black: '#242B2C', // Jet Black (Haupt-Hintergrund)
aqua: '#47E5BC', // Aquamarine (Primär-Akzent: CTAs, Highlights, Glow)
amethyst: '#9D4EC2', // Amethyst (Sekundär-Akzent: Hover, Depth, Glow-Effekte)
muted: '#9F9FAD', // Lavender Grey (Subtexte, sekundäre Elemente, Platzhalter)
dark: '#1a1f20', // Aufgehelltes Jet Black (Cards, Sections, Trennung)
glass: 'rgba(255, 255, 255, 0.05)', // Glasmorphismus-Basis
}
}
// Farbhierarchie:
// - Jet Black: Hintergrund, großflächig
// - Aquamarine: "Hier klicken / hier schauen" - sparsam einsetzen für maximalen Impact
// - Amethyst: Glow-Effekte, Hover-States, sekundäre Akzente, Gradient-Partner zu Aquamarine
// - Lavender Grey: Body-Text auf dunklem Grund, Sublines, deaktivierte States
// - Kombiniert ergibt Aquamarine + Amethyst das Farbspektrum einer Cyan/Magenta-Projektion auf dunkler Fläche- Headlines:
Cormorant Garant(Serif, edel, Lichtkünstler-Anspruch) - Body:
Inter(clean, modern, optimale Lesbarkeit) - Technische Daten/Zahlen:
Space Grotesk(monospaced-Vibe für Specs) - Konfiguriere alle drei als next/font/google mit display: 'swap'
.glass-card {
background: rgba(255, 255, 255, 0.05);
backdrop-filter: blur(16px);
border: 1px solid rgba(255, 255, 255, 0.08);
border-radius: 16px;
}- Position: fixed, top 0, z-50
- Glasmorphismus-Hintergrund (wird sichtbar beim Scrollen, transparent im Hero)
- Logo: "4D LUMEN" in Cormorant Garant, font-medium
- Nav-Items: Services / Vision / Technik / Kontakt (smooth-scroll Anker)
- Rechts: CTA-Button "Projekt anfragen" (klein, Aquamarine-Akzent)
- Mobile: Hamburger-Menu mit fullscreen Overlay (dark, animiert)
- Scroll-Detection: Navbar bekommt nach 100px Scroll eine stärkere Glass-Opacity
Nutze exakt diesen bestehenden Code als Basis:
import { Warp } from "@paper-design/shaders-react"
import { ArrowRight, Play } from "lucide-react"
export default function WarpShaderHero() {
return (
<main className="relative min-h-screen overflow-hidden bg-black">
<div className="absolute inset-0 opacity-60">
<Warp
style={{ height: "100%", width: "100%" }}
proportion={0.45}
softness={1}
distortion={0.25}
swirl={0.8}
swirlIterations={10}
shape="checks"
shapeScale={0.1}
scale={1}
rotation={0}
speed={0.6}
colors={["#242B2C", "#47E5BC", "#9D4EC2", "#1a1f20"]}
/>
</div>
<div className="relative z-10 min-h-screen flex items-center justify-center px-8">
<div className="max-w-4xl w-full text-center space-y-8">
<div className="inline-block px-4 py-1.5 mb-4 border border-white/10 bg-white/5 backdrop-blur-md rounded-full text-white/70 text-sm tracking-widest uppercase">
Future of Projection Mapping
</div>
<h1 className="text-white text-6xl md:text-8xl font-sans font-extralight tracking-tighter text-balance">
4D <span className="font-medium">LUMEN</span>
</h1>
<p className="text-white/70 text-xl md:text-2xl font-sans font-light leading-relaxed max-w-2xl mx-auto">
Immersive Licht-Erlebnisse, Sounddesign und Laser-Mapping für High-End Events und Fassaden-Inszenierungen.
</p>
<div className="flex flex-col sm:flex-row gap-6 justify-center items-center pt-8">
<button className="group flex items-center gap-2 px-8 py-4 bg-white rounded-full text-black font-semibold hover:bg-[#47E5BC] transition-all duration-300 hover:scale-105">
Projekt anfragen <ArrowRight size={18} className="group-hover:translate-x-1 transition-transform" />
</button>
<button className="flex items-center gap-2 px-8 py-4 bg-white/10 backdrop-blur-sm border border-white/20 rounded-full text-white font-medium hover:bg-white/20 hover:border-[#9D4EC2]/40 transition-all duration-300">
<Play size={18} fill="currentColor" /> Showreel ansehen
</button>
</div>
</div>
</div>
</main>
)
}WICHTIG: Mobile Fallback für den Shader
- Prüfe per
navigator.gpuoder einem simplen Performance-Check ob WebGL performant läuft - Fallback: Ein statisches CSS-Gradient (radial-gradient mit Jet Black, Aquamarine und Amethyst) + dezente CSS-Animation (slow hue-shift oder scale-pulse)
- Der Fallback muss visuell zum Shader passen, nicht wie ein "kaputtes" Erlebnis wirken
- Full-Width Container, 16:9 Ratio
- Placeholder: Dunkler Hintergrund mit zentriertem Play-Icon und Text "Showreel Coming Soon"
- Glasmorphismus-Overlay über dem Placeholder
- Später wird hier ein
<video>oder YouTube-Embed eingebettet - Dezenter Glow-Effekt um den Play-Button (animierter Aquamarine Ring-Pulse)
Drei Glasmorphismus-Cards nebeneinander (Mobile: gestapelt):
Card 1: Projection Mapping
- Icon: custom SVG eines Beamers mit Lichtkegel (oder Lucide
Projector) - Headline: "Projection Mapping"
- Text: "Architektur wird zur Leinwand. Wir transformieren Fassaden, Innenräume und Objekte in lebendige Lichtskulpturen, die Geschichten erzählen."
- Hover: Card hebt sich leicht an (translateY -4px), Glow-Border in Aquamarine
Card 2: Laser Mapping
- Icon: Lucide
Zapoder custom Laser-SVG - Headline: "Laser-Kontur-Mapping"
- Text: "Präzise Laserkonturen zeichnen Architektur nach, betonen Strukturen und erzeugen eine Tiefe, die klassische Beleuchtung nicht erreicht."
- Hover: Glow-Border in Amethyst
Card 3: Sound Design
- Icon: Lucide
AudioWaveform - Headline: "Immersives Sounddesign"
- Text: "Klang und Licht verschmelzen. Wir designen räumliche Soundscapes, die jede visuelle Inszenierung um eine emotionale Dimension erweitern."
- Hover: Glow-Border als Gradient von Aquamarine zu Amethyst
Animation: Scroll-Reveal mit Framer Motion. Cards faden einzeln nacheinander ein (stagger 0.15s), von unten nach oben (y: 40 → 0, opacity: 0 → 1).
- Section-Headline: "Every Project Begins as a Vision"
- Subline: "Konzeptstudien für die Zukunft immersiver Erlebnisse."
Portfolio-Grid (2x2 Desktop, 1 Spalte Mobile) mit 4 Konzeptkarten:
| Projekt | Beschreibung |
|---|---|
| Industrial Facade Mapping | "Rohe Industriearchitektur trifft generative Kunst. Eine Vision für Hafen- und Werksfassaden." |
| Corporate Lobby Immersion | "Besucher betreten nicht nur einen Raum, sie betreten eine Marke. Permanente Lichtinstallation für Headquarters." |
| Festival Main Stage | "360°-Mapping für Festivalbühnen. Sound-reaktive Projektionen, die mit der Musik atmen." |
| Heritage & Monument Lighting | "Historische Gebäude respektvoll in Szene gesetzt. Kulturerbe trifft zeitgenössische Lichtkunst." |
Jede Karte:
- Dunkler Overlay-Gradient (bottom) über dem Bild
- Titel in Cormorant Garant
- Beschreibungstext erscheint on Hover (Slide-Up Animation)
- Placeholder-Bilder: Verwende abstrakte, dunkle Bilder von Unsplash. Nutze
next/imagemit blur-placeholder. Schlage passende Unsplash-Photo-IDs vor oder nutze/api/placeholder/Pfade. - Wichtig: Nutze KEINE echten Projekt-Fotos. Diese Karten kommunizieren Vision, nicht Portfolio.
Ein Canvas-basiertes interaktives Element:
- Zeige eine dunkle, stilisierte Gebäudefassade (kann ein SVG sein oder ein dunkles Foto)
- Der User bewegt die Maus (oder den Finger auf Mobile) über die Fassade
- Ein kreisförmiger "Lichtkegel" folgt dem Cursor und zeigt innerhalb des Kreises eine projizierte Grafik/Pattern (z.B. generative Linien, Farbverläufe oder geometrische Muster in Aquamarine und Amethyst)
- Außerhalb des Kreises: dunkle Fassade
- Innerhalb des Kreises: "projiziertes" Licht, leichter Glow am Rand
- Effekt: Wie eine Taschenlampe, die über ein verborgenes Kunstwerk streicht
Technische Umsetzung:
- Nutze CSS
clip-path: circle()oder Canvas 2D mit radialem Gradient-Mask - Der "projizierte" Content kann ein animiertes SVG-Pattern sein oder ein CSS-Gradient-Animation
- Cursor-Position per
onMouseMove/onTouchMovetracken - Smooth-Interpolation (lerp) für den Lichtkreis, damit er nicht ruckelt
- Radius: ~150px Desktop, ~100px Mobile
- Section-Headline: "Experience the Projection"
- Subline: "Bewege deinen Cursor über die Fassade."
Split-Layout: Text links, technische Grafik rechts
Text-Content:
- Headline: "Eigene Technik. Unbegrenzte Skalierung."
- Body (professioneller Ton, KEIN Handwerker-Sound):
Unser Kern-Setup umfasst professionelle Projektionssysteme und präzise Laser-Technik, die wir vollständig kontrollieren. Für Inszenierungen, die über unser eigenes Equipment hinausgehen, greifen wir auf ein etabliertes Netzwerk aus spezialisierten Technik-Partnern zurück. So liefern wir von der intimen Lobby-Installation bis zur Großfassade stets dieselbe künstlerische Qualität, ohne Kompromisse bei der technischen Umsetzung.
Rechte Seite: Eine stilisierte Grafik/Infografik (SVG):
- Zentrum: "4D Lumen" als Kern
- Darum: Verbindungslinien zu Icons für "Projection", "Laser", "Sound", "Partner Network"
- Animiert: Linien ziehen sich beim Scroll-Reveal, Nodes pulsen dezent
- Farben: Aquamarine-Linien (#47E5BC) auf Jet Black, Nodes in Amethyst (#9D4EC2) pulsen dezent
Ein geführter Mini-Funnel, KEIN simples Kontaktformular:
Step 1: Projekt-Art (Kartenauswahl, Single-Select)
- Event-Inszenierung
- Fassaden-Mapping
- Permanente Installation
- Etwas Anderes
Step 2: Details (je nach Auswahl in Step 1 leicht variierend)
- Geschätzte Fläche: Slider oder Auswahl (< 50m², 50-200m², 200-500m², > 500m²)
- Zeitraum: Monat-Picker oder Freitext
- Location: Freitext-Input
Step 3: Budget-Range (Kartenauswahl)
- ab 5.000€
- 5.000 - 15.000€
- 15.000 - 50.000€
-
50.000€
- "Noch unklar, beratet mich"
Step 4: Kontaktdaten
- Name, E-Mail, Telefon (optional), Kurzbeschreibung (Textarea)
- Submit-Button: "Anfrage senden"
UI-Details:
- Fortschrittsbalken oben (Step 1/4, 2/4 etc.)
- Smooth Transitions zwischen Steps (Framer Motion, slide-left)
- Glasmorphismus-Container für den gesamten Funnel
- Validierung pro Step, weiter-Button erst aktiv wenn ausgefüllt
- Backend: Für jetzt reicht eine
console.logdes gesammelten Objekts + eine "Danke"-Seite. Kein echtes Backend nötig im ersten Sprint.
Zwischen Inquiry und Footer, als eigenständige Section:
- Headline: "Laden Sie unser Lookbook herunter"
- Subline: "24 Seiten Inspiration: Konzeptstudien, technische Möglichkeiten und unser kreativer Ansatz."
- Mockup: Ein stilisiertes PDF/Buch-Cover (CSS-only, 3D-Perspective-Transform, Schatten)
- Input: E-Mail-Feld + Button "Lookbook anfordern"
- Backend: Auch hier erstmal
console.log. Kein echtes E-Mail-System im Sprint 1. - Glasmorphismus-Card, dezenter Glow
- Dunkelster Hintergrund der Seite (lumen-black, ggf. noch einen Tick dunkler: #1c2122)
- Logo + Kurztext (1 Satz: "4D Lumen - Immersive Lichterlebnisse für Events, Architektur und Marken.")
- Drei Spalten:
- Navigation (Anker-Links zur Seite)
- Kontakt (E-Mail, Telefon-Platzhalter, Stadt)
- Legal (Impressum-Link, Datenschutz-Link als separate
/impressumund/datenschutzRouten, erstmal leere Seiten anlegen)
- Copyright-Zeile: "© 2025 4D Lumen. Alle Rechte vorbehalten."
- Social Icons: Instagram, LinkedIn, Vimeo (Platzhalter-Links)
Nutze Framer Motion useInView Hook:
// Wiederverwendbare Wrapper-Komponente
const ScrollReveal = ({ children, delay = 0 }) => {
const ref = useRef(null)
const isInView = useInView(ref, { once: true, margin: "-100px" })
return (
<motion.div
ref={ref}
initial={{ opacity: 0, y: 40 }}
animate={isInView ? { opacity: 1, y: 0 } : {}}
transition={{ duration: 0.7, delay, ease: "easeOut" }}
>
{children}
</motion.div>
)
}- Jede Section nutzt diesen Wrapper
- Headlines: fade-in von links (x: -30)
- Cards: stagger von unten
- Bilder: scale 0.95 → 1.0 + opacity
- Performance:
will-change: transformnur während der Animation, danach entfernen
// app/layout.tsx
export const metadata = {
title: '4D Lumen | Projection Mapping, Laser & Sounddesign',
description: 'High-End Projection Mapping, Laser-Kontur-Mapping und immersives Sounddesign für Events, Fassaden und Marken. Bespoke Licht-Erlebnisse aus Deutschland.',
keywords: 'projection mapping, laser mapping, sounddesign, event technik, fassadenprojektion, lichtinstallation, immersive experiences',
openGraph: {
title: '4D Lumen | Immersive Licht-Erlebnisse',
description: 'Projection Mapping, Laser & Sounddesign für High-End Events.',
type: 'website',
locale: 'de_DE',
},
}- Strukturierte Daten: JSON-LD
LocalBusinessSchema im<head> - Alt-Tags auf allen Bildern (beschreibend, mit Keywords)
- Semantic HTML:
<section>,<nav>,<footer>,<article>korrekt einsetzen - Erstelle leere Routen für
/impressumund/datenschutz(minimale Seiten mit "Inhalt folgt")
- Mobile First: Basis-Styles für < 768px
md:(768px+): Zwei-Spalten-Layoutslg:(1024px+): Volle Desktop-Layouts, größere Typografiexl:(1280px+): Max-Width Container, mehr Whitespace- Der Shader-Hero muss auf allen Größen funktionieren (oder Fallback zeigen)
- Touch-Support für den Projection Simulator auf Mobile
- Alle Bilder via
next/imagemitpriorityauf Hero,lazyauf alles andere - Fonts:
next/font/googlemitdisplay: swap, Subsetlatin - Framer Motion: Nur importieren was gebraucht wird (
motion,useInView,AnimatePresence) - Shader: Lazy-Load mit
dynamic(() => import(...), { ssr: false })da WebGL serverseitig nicht funktioniert - Ziel: Lighthouse Score > 90 auf allen Kategorien
src/
├── app/
│ ├── layout.tsx // Root Layout mit Fonts, Metadata
│ ├── page.tsx // Hauptseite, alle Sections zusammengesetzt
│ ├── impressum/
│ │ └── page.tsx // Platzhalter
│ └── datenschutz/
│ └── page.tsx // Platzhalter
├── components/
│ ├── navigation/
│ │ └── Navbar.tsx
│ ├── sections/
│ │ ├── HeroSection.tsx // WarpShaderHero + Fallback
│ │ ├── VideoSection.tsx
│ │ ├── ServicesSection.tsx
│ │ ├── VisionSection.tsx
│ │ ├── SimulatorSection.tsx // Projection Simulator
│ │ ├── TechSection.tsx
│ │ ├── InquirySection.tsx // Project Inquiry Funnel
│ │ └── LookbookSection.tsx // Lead Magnet
│ ├── ui/
│ │ ├── ScrollReveal.tsx
│ │ ├── GlassCard.tsx
│ │ └── ... (shadcn components)
│ └── footer/
│ └── Footer.tsx
├── lib/
│ └── utils.ts
└── styles/
└── globals.css
- Kein echtes Backend/API für Formulare (nur console.log)
- Kein CMS
- Kein Analytics/Cookie-Banner (kommt in Sprint 2)
- Kein Blog/Case Study Seiten (nur die Route-Struktur vorbereiten)
- Keine echten Bilder (Unsplash-Platzhalter oder generierte Grafiken)
- Kein Deployment (lokal entwickeln, Vercel kommt danach)
Bevor du den Code als fertig markierst, prüfe:
- Alle Sections rendern korrekt auf Mobile (375px) und Desktop (1440px)
- Shader-Hero hat funktionierenden Fallback
- Scroll-Reveal Animationen laufen smooth (kein Layout-Shift)
- Projection Simulator reagiert auf Mouse UND Touch
- Project Inquiry Funnel: alle 4 Steps navigierbar, Validierung funktioniert
- Navbar wird beim Scrollen glasig, bleibt beim Hero transparent
- Alle Texte sind lesbar (Kontrast-Check auf dunklem Hintergrund)
-
npm run buildläuft ohne Errors - Keine TypeScript-Errors
- Lighthouse: Performance > 90
Fang an. Erstelle zuerst die Projektstruktur und das Design System, dann arbeite dich Section für Section durch.