Files
mintel.me/apps/web/app/page.tsx
Marc Mintel c1295546a6
Some checks failed
Build & Deploy / 🔍 Prepare (push) Successful in 8s
Build & Deploy / 🧪 QA (push) Failing after 1m2s
Build & Deploy / 🏗️ Build (push) Failing after 3m44s
Build & Deploy / 🚀 Deploy (push) Has been skipped
Build & Deploy / 🩺 Health Check (push) Has been skipped
Build & Deploy / 🔔 Notify (push) Successful in 2s
feat: unify code-like components with shared CodeWindow, fix blog re-render loop, and stabilize layouts
2026-02-15 17:34:07 +01:00

318 lines
12 KiB
TypeScript
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.
"use client";
import {
ComparisonRow,
ConceptCode,
ConceptCommunication,
ConceptPrice,
ConceptPrototyping,
ConceptWebsite,
} from "../src/components/Landing";
import { Reveal } from "../src/components/Reveal";
import { Section } from "../src/components/Section";
import {
H1,
H3,
LeadText,
BodyText,
MonoLabel,
Label,
} from "../src/components/Typography";
import { Card, Container } from "../src/components/Layout";
import { Button } from "../src/components/Button";
import { GradientMesh, CodeSnippet } from "../src/components/Effects";
import { IconList, IconListItem } from "../src/components/IconList";
import { HeroSection } from "../src/components/HeroSection";
import { GlitchText } from "../src/components/GlitchText";
import { Marker } from "../src/components/Marker";
export default function LandingPage() {
return (
<div className="flex flex-col bg-white overflow-hidden relative">
{/* Dark Hero */}
<HeroSection />
{/* Rest of page on white */}
{/* Section 02: The Promise Streamlined */}
<Section
number="02"
title="Das Versprechen"
borderTop
effects={<GradientMesh variant="metallic" className="opacity-70" />}
>
<div className="space-y-16 relative">
<Reveal>
<H3 className="max-w-3xl">
Kein Agentur-Zirkus. <br />
<span className="text-slate-400">
Nur{" "}
<Marker delay={0.3} color="rgba(148,163,184,0.15)">
Ergebnisse.
</Marker>
</span>
</H3>
</Reveal>
<div className="grid grid-cols-1 md:grid-cols-2 gap-8 relative z-10">
{[
{
icon: <ConceptCommunication className="w-8 h-8" />,
title: "Direkte Kommunikation",
text: "Sie sprechen mit dem Entwickler. Keine Stille Post, keine Umwege.",
},
{
icon: <ConceptPrototyping className="w-8 h-8" />,
title: "Schnelle Umsetzung",
text: "Sichtbare Fortschritte in Tagen. Prototypen statt Konzeptpapiere.",
},
{
icon: <ConceptCode className="w-8 h-8" />,
title: "Sauberer Code",
text: "Maßgeschneiderte Architektur. Kein Baukasten, kein Plugin-Chaos.",
},
{
icon: <ConceptPrice className="w-8 h-8" />,
title: "Klare Fixpreise",
text: "Volle Budgetsicherheit. Keine versteckten Kosten.",
},
].map((item, i) => (
<Reveal key={i} delay={0.1 + i * 0.1}>
<Card
variant="glass"
padding="normal"
techBorder
className="group"
>
<div className="space-y-4 relative z-10">
<div className="w-12 h-12 rounded-xl bg-slate-50 border border-slate-100 flex items-center justify-center group-hover:scale-110 transition-transform duration-500">
{item.icon}
</div>
<Label className="text-slate-900">{item.title}</Label>
<BodyText className="text-slate-500">{item.text}</BodyText>
</div>
</Card>
</Reveal>
))}
</div>
</div>
</Section>
{/* Section 03: The Difference Visual Comparison */}
<Section number="03" title="Der Unterschied" variant="white" borderTop>
<div className="space-y-16 relative">
<Reveal>
<H3 className="max-w-3xl">
Ich arbeite für das Ergebnis, <br />
<span className="text-slate-400">
nicht gegen die{" "}
<Marker delay={0.4} color="rgba(148,163,184,0.1)">
Uhr.
</Marker>
</span>
</H3>
</Reveal>
<div className="grid grid-cols-1 gap-8 relative z-20">
<ComparisonRow
negativeLabel="Klassisch"
negativeText="Wochen in Planung, bevor eine einzige Zeile Code geschrieben wird."
positiveLabel="Mein Weg"
positiveText="Schnelle Prototypen. Ergebnisse in Tagen, nicht Monaten."
delay={0.1}
/>
<ComparisonRow
negativeLabel="Klassisch"
negativeText="Unvorhersehbare Kosten durch Stundenabrechnungen."
positiveLabel="Mein Weg"
positiveText="Fixpreise. Sie wissen von Anfang an, was es kostet."
reverse
delay={0.2}
/>
</div>
</div>
</Section>
{/* Section 04: Target Group */}
<Section number="04" title="Für wen" borderTop>
<div className="grid grid-cols-1 md:grid-cols-2 gap-8 relative z-10">
<Reveal>
<Card variant="glass" padding="normal" techBorder className="group">
<div className="space-y-6 relative overflow-hidden">
<div className="w-16 h-16 bg-slate-50 border border-slate-100 rounded-xl flex items-center justify-center">
<ConceptPrice className="w-8 h-8" />
</div>
<H3 className="text-3xl">
Unternehmer & <br />
Geschäftsführer
</H3>
<LeadText className="text-slate-400 text-lg">
Sie wollen eine Website, die funktioniert ohne sich mit
Technik beschäftigen zu müssen.
</LeadText>
</div>
<div className="pt-8 border-t border-slate-50 mt-8">
<Label className="group-hover:text-slate-900 transition-colors">
Perfekt für Sie
</Label>
</div>
</Card>
</Reveal>
<Reveal delay={0.2}>
<Card variant="glass" padding="normal" techBorder className="group">
<div className="space-y-6 relative overflow-hidden">
<H3 className="text-3xl">
Marketing & <br />
Vertrieb
</H3>
<LeadText className="text-slate-400 text-lg">
Sie brauchen Landingpages und Tools, die Ergebnisse liefern.
Schnell und zuverlässig.
</LeadText>
</div>
<div className="pt-8 border-t border-slate-50 mt-8">
<Label className="group-hover:text-slate-900 transition-colors">
Perfekt für Sie
</Label>
</div>
</Card>
</Reveal>
</div>
</Section>
{/* Section 05: Leistungen — Interactive Service Rows */}
<Section number="05" title="Leistungen" variant="gray" borderTop>
<div className="space-y-0 relative z-20">
{[
{
num: "01",
binary: "00000001",
title: "Websites",
text: "High-Performance Websites mit maßgeschneiderter Architektur. Von der Konzeption bis zum Go-Live — individuell, schnell, messbar.",
tags: ["Next.js", "React", "TypeScript", "Performance"],
href: "/websites",
},
{
num: "02",
binary: "00000010",
title: "Systeme",
text: "Web-Applikationen und interne Tools, wenn Standard-Software nicht reicht. Dashboards, Portale, Automatisierungen.",
tags: ["Full-Stack", "APIs", "Datenbanken", "Auth"],
href: "/contact",
},
{
num: "03",
binary: "00000011",
title: "Automatisierung",
text: "Verbindung von Tools, automatische Prozesse, Daten-Synchronisation. Weniger manuelle Arbeit, mehr Effizienz.",
tags: ["CI/CD", "Workflows", "Integrationen", "Monitoring"],
href: "/contact",
},
].map((service, i) => (
<Reveal key={i} delay={0.1 + i * 0.15}>
<div className="group py-12 md:py-16 border-b border-slate-100 last:border-b-0 cursor-pointer transition-all duration-500">
<div className="flex flex-col md:flex-row md:items-start gap-8 md:gap-16">
{/* Number + Binary */}
<div className="md:w-32 shrink-0">
<span className="text-5xl md:text-6xl font-black text-slate-100 group-hover:text-slate-200 transition-colors duration-500 tracking-tighter block leading-none">
{service.num}
</span>
<span
className="text-[8px] font-mono text-slate-200 tracking-[0.3em] mt-2 block select-none group-hover:text-blue-300 transition-colors duration-700"
aria-hidden="true"
>
{service.binary}
</span>
</div>
{/* Content */}
<div className="flex-1 space-y-6">
<H3 className="text-3xl md:text-4xl group-hover:translate-x-2 transition-transform duration-500">
<GlitchText
trigger="inView"
delay={0.2 + i * 0.15}
duration={0.6}
>
{service.title}
</GlitchText>
</H3>
<BodyText className="text-slate-400 max-w-xl group-hover:text-slate-500 transition-colors duration-500">
{service.text}
</BodyText>
{/* Tags */}
<div className="flex flex-wrap gap-2">
{service.tags.map((tag, j) => (
<span
key={j}
className="px-3 py-1 text-[9px] font-mono uppercase tracking-widest text-slate-400 border border-slate-100 rounded-full bg-white/50 group-hover:border-slate-200 group-hover:text-slate-500 transition-all duration-500"
>
{tag}
</span>
))}
</div>
</div>
{/* Arrow */}
<div className="md:self-center shrink-0">
<Button
href={service.href}
variant="ghost"
size="normal"
showArrow
>
Details
</Button>
</div>
</div>
</div>
</Reveal>
))}
</div>
</Section>
{/* Section 06: Contact */}
<Section number="06" title="Kontakt" borderTop>
<div className="relative py-12" id="contact">
<Reveal>
<div className="space-y-16">
<H1 className="text-6xl md:text-8xl">
Lassen Sie uns <br />
<span className="text-slate-400">starten.</span>
</H1>
<div className="flex flex-col md:flex-row gap-16 items-start relative z-10">
<div className="space-y-8 flex-1">
<LeadText className="text-2xl md:text-3xl text-slate-400">
Beschreiben Sie kurz Ihr Vorhaben. Ich melde mich{" "}
<span className="text-slate-900 border-b-2 border-slate-900/10">
<Marker color="rgba(255,235,59,0.5)">zeitnah</Marker>
</span>{" "}
bei Ihnen.
</LeadText>
<div className="pt-4">
<Button href="/contact" size="large">
Projekt anfragen
</Button>
</div>
</div>
<div className="w-full md:w-72 space-y-6 p-6 glass rounded-2xl">
<div className="flex items-center gap-3">
<div className="w-2 h-2 bg-green-500 rounded-full animate-pulse"></div>
<Label className="text-slate-900">Verfügbarkeit</Label>
</div>
<BodyText className="text-base leading-snug">
Aktuell nehme ich Projekte für{" "}
<span className="font-bold text-slate-900">Q2 2026</span>{" "}
an.
</BodyText>
</div>
</div>
</div>
</Reveal>
</div>
</Section>
</div>
);
}