chore: stabilize apps/web (lint, build, typecheck fixes)
Some checks failed
Build & Deploy / 🔍 Prepare (push) Successful in 6s
Build & Deploy / 🧪 QA (push) Failing after 1m27s
Build & Deploy / 🏗️ Build (push) Failing after 1m31s
Build & Deploy / 🚀 Deploy (push) Has been skipped
Build & Deploy / 🩺 Health Check (push) Has been skipped
Build & Deploy / 🔔 Notify (push) Successful in 2s

This commit is contained in:
2026-02-11 11:56:13 +01:00
parent 8ba81809b0
commit ecea90dc91
50 changed files with 5596 additions and 3456 deletions

View File

@@ -1,23 +1,28 @@
import * as React from 'react';
import Image from 'next/image';
import { PageHeader } from '../../src/components/PageHeader';
import { Section } from '../../src/components/Section';
import { Reveal } from '../../src/components/Reveal';
import {
ExperienceIllustration,
ResponsibilityIllustration,
import Image from "next/image";
import { PageHeader } from "../../src/components/PageHeader";
import { Section } from "../../src/components/Section";
import { Reveal } from "../../src/components/Reveal";
import {
ExperienceIllustration,
ResponsibilityIllustration,
ResultIllustration,
ConceptSystem,
ConceptTarget,
ContactIllustration,
HeroLines,
ParticleNetwork,
GridLines
} from '../../src/components/Landing';
import { Check } from 'lucide-react';
import { H3, H4, LeadText, BodyText, Label, MonoLabel } from '../../src/components/Typography';
import { BackgroundGrid, Card, Container } from '../../src/components/Layout';
import { Button } from '../../src/components/Button';
GridLines,
} from "../../src/components/Landing";
import { Check } from "lucide-react";
import {
H3,
H4,
LeadText,
BodyText,
Label,
MonoLabel,
} from "../../src/components/Typography";
import { BackgroundGrid, Card, Container } from "../../src/components/Layout";
import { Button } from "../../src/components/Button";
export default function AboutPage() {
return (
@@ -29,12 +34,12 @@ export default function AboutPage() {
{/* Hero Section */}
<section className="relative pt-32 pb-24 overflow-hidden border-b border-slate-50">
<div className="absolute top-0 left-1/2 -translate-x-1/2 w-full h-full opacity-10 pointer-events-none">
<HeroLines className="w-full h-full" />
<HeroLines className="w-full h-full" />
</div>
<div className="absolute right-0 top-0 w-96 h-96 opacity-5 pointer-events-none">
<GridLines />
<GridLines />
</div>
<Container variant="narrow" className="relative z-10">
<div className="flex flex-col items-center text-center space-y-12">
<Reveal>
@@ -42,12 +47,14 @@ export default function AboutPage() {
{/* Structural rings around avatar */}
<div className="absolute inset-0 -m-8 border border-slate-100 rounded-full animate-[spin_30s_linear_infinite] opacity-50" />
<div className="absolute inset-0 -m-4 border border-slate-200 rounded-full animate-[spin_20s_linear_infinite_reverse] opacity-30" />
<div className="relative w-32 h-32 md:w-40 md:h-40 rounded-full overflow-hidden border border-slate-200 shadow-xl bg-white p-1 group">
<div className="w-full h-full rounded-full overflow-hidden">
<img
<Image
src="/header.webp"
alt="Marc Mintel"
width={160}
height={160}
className="w-full h-full object-cover grayscale transition-all duration-1000 ease-in-out scale-110 group-hover:scale-100 group-hover:grayscale-0"
/>
</div>
@@ -58,13 +65,19 @@ export default function AboutPage() {
<div className="space-y-6 max-w-3xl">
<Reveal delay={0.1}>
<div className="flex items-center justify-center gap-4 mb-4">
<div className="h-px w-8 bg-slate-900"></div>
<MonoLabel className="text-slate-900">Digital Architect</MonoLabel>
<div className="h-px w-8 bg-slate-900"></div>
<div className="h-px w-8 bg-slate-900"></div>
<MonoLabel className="text-slate-900">
Digital Architect
</MonoLabel>
<div className="h-px w-8 bg-slate-900"></div>
</div>
</Reveal>
<PageHeader
title={<>Über <span className="text-slate-200">mich.</span></>}
<PageHeader
title={
<>
Über <span className="text-slate-200">mich.</span>
</>
}
description="Warum ich tue, was ich tue und wie Sie davon profitieren."
className="pt-0 md:pt-0"
/>
@@ -87,7 +100,9 @@ export default function AboutPage() {
<Reveal>
<H3 className="text-3xl md:text-5xl leading-tight max-w-3xl">
15 Jahre Web-Entwicklung. <br />
<span className="text-slate-200">Vom Designer zum Architekten.</span>
<span className="text-slate-200">
Vom Designer zum Architekten.
</span>
</H3>
</Reveal>
@@ -95,13 +110,17 @@ export default function AboutPage() {
<Reveal delay={0.1}>
<div className="space-y-8">
<LeadText className="text-xl md:text-2xl text-slate-400">
Ich habe Agenturen, Konzerne und Startups von innen gesehen. Dabei habe ich gelernt, what really counts: <span className="text-slate-900">Ergebnisse, nicht Prozesse.</span>
Ich habe Agenturen, Konzerne und Startups von innen gesehen.
Dabei habe ich gelernt, what really counts:{" "}
<span className="text-slate-900">
Ergebnisse, nicht Prozesse.
</span>
</LeadText>
<ul className="space-y-4">
{[
'Komplexe Systeme vereinfacht',
'Performance-Probleme gelöst',
'Nachhaltige Software-Architekturen gebaut'
"Komplexe Systeme vereinfacht",
"Performance-Probleme gelöst",
"Nachhaltige Software-Architekturen gebaut",
].map((item, i) => (
<li key={i} className="flex items-center gap-4 group">
<div className="w-1.5 h-1.5 bg-slate-900 rounded-full group-hover:scale-150 transition-transform" />
@@ -112,11 +131,22 @@ export default function AboutPage() {
</div>
</Reveal>
<Reveal delay={0.2}>
<Card variant="gray" hover={false} padding="normal" className="group">
<H4 className="text-2xl mb-6">Mein Fokus heute: Direkte Zusammenarbeit ohne Reibungsverluste.</H4>
<Card
variant="gray"
hover={false}
padding="normal"
className="group"
>
<H4 className="text-2xl mb-6">
Mein Fokus heute: Direkte Zusammenarbeit ohne
Reibungsverluste.
</H4>
<div className="flex flex-wrap gap-3">
{['Effizient', 'Pragmatisch', 'Verlässlich'].map((tag, i) => (
<span key={i} className="px-4 py-2 bg-white border border-slate-200 rounded-full shadow-sm">
{["Effizient", "Pragmatisch", "Verlässlich"].map((tag, i) => (
<span
key={i}
className="px-4 py-2 bg-white border border-slate-200 rounded-full shadow-sm"
>
<Label className="text-slate-900">{tag}</Label>
</span>
))}
@@ -147,14 +177,24 @@ export default function AboutPage() {
<div className="md:col-span-8 space-y-8">
<Reveal delay={0.1}>
<LeadText className="text-xl md:text-2xl text-slate-400">
In der klassischen Agenturwelt verschwindet Verantwortung oft hinter Hierarchien. Bei mir gibt es nur <span className="text-slate-900">einen Ansprechpartner:</span> Mich.
In der klassischen Agenturwelt verschwindet Verantwortung oft
hinter Hierarchien. Bei mir gibt es nur{" "}
<span className="text-slate-900">einen Ansprechpartner:</span>{" "}
Mich.
</LeadText>
</Reveal>
<Reveal delay={0.2}>
<Card variant="white" padding="normal" className="flex flex-row items-start gap-6 group">
<div className="w-12 h-12 bg-slate-900 text-white rounded-xl flex items-center justify-center shrink-0 font-bold text-xl group-hover:rotate-12 transition-transform duration-500">!</div>
<Card
variant="white"
padding="normal"
className="flex flex-row items-start gap-6 group"
>
<div className="w-12 h-12 bg-slate-900 text-white rounded-xl flex items-center justify-center shrink-0 font-bold text-xl group-hover:rotate-12 transition-transform duration-500">
!
</div>
<BodyText className="text-slate-900 font-medium text-lg md:text-xl leading-relaxed">
Ich übernehme die volle Verantwortung für die technische Umsetzung und Qualität Ihres Projekts. Ohne Ausreden.
Ich übernehme die volle Verantwortung für die technische
Umsetzung und Qualität Ihres Projekts. Ohne Ausreden.
</BodyText>
</Card>
</Reveal>
@@ -182,11 +222,20 @@ export default function AboutPage() {
<div className="space-y-8">
<Reveal delay={0.1}>
<LeadText className="text-xl text-slate-400">
Ich baue keine Wegwerf-Produkte. Meine Systeme sind so konzipiert, dass sie mit Ihrem Unternehmen <span className="text-slate-900">wachsen können.</span>
Ich baue keine Wegwerf-Produkte. Meine Systeme sind so
konzipiert, dass sie mit Ihrem Unternehmen{" "}
<span className="text-slate-900">wachsen können.</span>
</LeadText>
</Reveal>
<div className="grid grid-cols-2 gap-4">
{['Skalierbar', 'Wartbar', 'Performant', 'Sicher', 'Unabhängig', 'Zukunftssicher'].map((item, i) => (
{[
"Skalierbar",
"Wartbar",
"Performant",
"Sicher",
"Unabhängig",
"Zukunftssicher",
].map((item, i) => (
<Reveal key={i} delay={0.2 + i * 0.05}>
<div className="flex items-center gap-3 group">
<div className="w-5 h-5 rounded-full bg-slate-50 flex items-center justify-center group-hover:bg-slate-900 transition-colors duration-500">
@@ -199,11 +248,18 @@ export default function AboutPage() {
</div>
</div>
<Reveal delay={0.3}>
<Card variant="dark" padding="normal" className="relative rounded-2xl overflow-hidden group">
<Card
variant="dark"
padding="normal"
className="relative rounded-2xl overflow-hidden group"
>
<div className="absolute top-0 right-0 w-48 h-48 bg-white/5 -translate-y-24 translate-x-24 rounded-full blur-3xl group-hover:bg-white/10 transition-colors duration-1000" />
<H4 className="text-white text-2xl mb-6 relative z-10">Kein Vendor Lock-in.</H4>
<H4 className="text-white text-2xl mb-6 relative z-10">
Kein Vendor Lock-in.
</H4>
<LeadText className="text-slate-400 text-lg relative z-10 leading-relaxed">
Sie behalten die volle Kontrolle über Ihren Code und Ihre Daten. Keine Abhängigkeit von proprietären Systemen.
Sie behalten die volle Kontrolle über Ihren Code und Ihre
Daten. Keine Abhängigkeit von proprietären Systemen.
</LeadText>
</Card>
</Reveal>
@@ -231,9 +287,19 @@ export default function AboutPage() {
<div className="space-y-6">
<Label>Kein:</Label>
<div className="flex flex-wrap gap-3">
{['Agentur-Zirkus', 'Meeting-Marathon', 'Ticket-Wahnsinn', 'CMS-Frust'].map((item, i) => (
<span key={i} className="px-4 py-2 border border-slate-100 rounded-full bg-slate-50/50">
<BodyText className="text-slate-400 line-through text-base mb-0">{item}</BodyText>
{[
"Agentur-Zirkus",
"Meeting-Marathon",
"Ticket-Wahnsinn",
"CMS-Frust",
].map((item, i) => (
<span
key={i}
className="px-4 py-2 border border-slate-100 rounded-full bg-slate-50/50"
>
<BodyText className="text-slate-400 line-through text-base mb-0">
{item}
</BodyText>
</span>
))}
</div>
@@ -244,9 +310,18 @@ export default function AboutPage() {
<Label className="text-slate-900">Sondern:</Label>
<div className="space-y-8">
{[
{ label: 'Direkte Kommunikation', desc: 'Kurze Wege, schnelle Entscheidungen.' },
{ label: 'Echte Expertise', desc: 'Fundiertes Wissen aus 15 Jahren Praxis.' },
{ label: 'Messbare Qualität', desc: 'Code, der hält, was er verspricht.' }
{
label: "Direkte Kommunikation",
desc: "Kurze Wege, schnelle Entscheidungen.",
},
{
label: "Echte Expertise",
desc: "Fundiertes Wissen aus 15 Jahren Praxis.",
},
{
label: "Messbare Qualität",
desc: "Code, der hält, was er verspricht.",
},
].map((item, i) => (
<Reveal key={i} delay={0.2 + i * 0.1}>
<div className="flex gap-6 items-start group">
@@ -255,7 +330,9 @@ export default function AboutPage() {
</div>
<div className="space-y-1">
<H4 className="text-xl">{item.label}</H4>
<BodyText className="text-base text-slate-400">{item.desc}</BodyText>
<BodyText className="text-base text-slate-400">
{item.desc}
</BodyText>
</div>
</div>
</Reveal>
@@ -283,18 +360,22 @@ export default function AboutPage() {
</H3>
</Reveal>
<Card variant="white" hover={false} padding="large" className="rounded-3xl shadow-xl relative overflow-hidden group">
<Card
variant="white"
hover={false}
padding="large"
className="rounded-3xl shadow-xl relative overflow-hidden group"
>
<div className="absolute top-0 right-0 w-96 h-96 bg-slate-50 -translate-y-1/2 translate-x-1/2 rounded-full blur-[80px] group-hover:bg-slate-100 transition-colors duration-1000" />
<div className="relative z-10 space-y-8">
<LeadText className="text-2xl md:text-4xl leading-tight max-w-2xl text-slate-400">
Lassen Sie uns gemeinsam etwas bauen, das <span className="text-slate-900">wirklich funktioniert.</span>
Lassen Sie uns gemeinsam etwas bauen, das{" "}
<span className="text-slate-900">wirklich funktioniert.</span>
</LeadText>
<div className="pt-4">
<Button href="/contact">
Projekt anfragen
</Button>
<Button href="/contact">Projekt anfragen</Button>
</div>
</div>
</Card>