From 6beaf3c0aaed1980204b8ad00e733a3c5b07a46c Mon Sep 17 00:00:00 2001 From: Marc Mintel Date: Fri, 30 Jan 2026 22:33:29 +0100 Subject: [PATCH] websites --- app/websites/page.tsx | 53 +-- .../Illustrations/WebsitesDescriptive.tsx | 333 ++++++++++++++++++ 2 files changed, 360 insertions(+), 26 deletions(-) create mode 100644 src/components/Landing/Illustrations/WebsitesDescriptive.tsx diff --git a/app/websites/page.tsx b/app/websites/page.tsx index 777c20b..b228d37 100644 --- a/app/websites/page.tsx +++ b/app/websites/page.tsx @@ -5,14 +5,14 @@ import { PageHeader } from '../../src/components/PageHeader'; import { Reveal } from '../../src/components/Reveal'; import { Section } from '../../src/components/Section'; import { - ConceptSystem, - ConceptCode, - ConceptWebsite, - ConceptAutomation, - ConceptCommunication, - ConceptMessy, - ConceptTarget -} from '../../src/components/Landing/Illustrations'; + SystemArchitecture, + SpeedPerformance, + SolidFoundation, + LayerSeparation, + DirectService, + AgencyChaos, + TaskDone +} from '../../src/components/Landing/Illustrations/WebsitesDescriptive'; import { motion } from 'framer-motion'; export default function WebsitesPage() { @@ -24,7 +24,7 @@ export default function WebsitesPage() { backgroundSize: '80px 80px' }} /> - Websites, die
einfach funktionieren.} description="Die meisten Websites funktionieren. Bis jemand sie anfasst. Ich baue Websites so, dass das alles egal ist." backLink={{ href: '/', label: 'Zurück' }} @@ -36,13 +36,13 @@ export default function WebsitesPage() { number="01" title="Der Ansatz" borderTop - illustration={} + illustration={} >

Ich baue Websites wie Systeme –
- nicht wie Broschüren. + nicht wie Broschüren.

@@ -74,13 +74,13 @@ export default function WebsitesPage() { number="02" title="Performance" borderTop - illustration={} + illustration={} >

Geschwindigkeit ist
- kein Extra. Sie ist Standard. + kein Extra. Sie ist Standard.

@@ -119,13 +119,13 @@ export default function WebsitesPage() { number="03" title="Wartungsfrei" borderTop - illustration={} + illustration={} >

Keine Plugins.
- Keine Wartungshölle. + Keine Wartungshölle.

@@ -154,13 +154,13 @@ export default function WebsitesPage() { number="04" title="Inhalte" borderTop - illustration={} + illustration={} >

Inhalte & Technik
- sind getrennt. Absichtlich. + sind getrennt. Absichtlich.

@@ -196,13 +196,13 @@ export default function WebsitesPage() { number="05" title="Service" borderTop - illustration={} + illustration={} >

Änderungen sind
- einfach. Wirklich. + einfach. Wirklich.

@@ -233,13 +233,13 @@ export default function WebsitesPage() { number="06" title="Warum" borderTop - illustration={} + illustration={} >

15 Jahre Agenturen
- waren genug. + waren genug.

@@ -252,17 +252,18 @@ export default function WebsitesPage() { {/* Result */} -
} >
-

+

Eine Website, die sich wie eine
- erledigte Aufgabe anfühlt. + erledigte Aufgabe anfühlt.

@@ -282,7 +283,7 @@ export default function WebsitesPage() {
-
+
Technik

diff --git a/src/components/Landing/Illustrations/WebsitesDescriptive.tsx b/src/components/Landing/Illustrations/WebsitesDescriptive.tsx new file mode 100644 index 0000000..26dabd2 --- /dev/null +++ b/src/components/Landing/Illustrations/WebsitesDescriptive.tsx @@ -0,0 +1,333 @@ +'use client'; + +import * as React from 'react'; +import { motion } from 'framer-motion'; +import { IllustrationProps } from './types'; + +export const SystemArchitecture: React.FC = ({ className = "", delay = 0 }) => ( + + {/* Central Core */} + + + {/* Orbiting Elements */} + {[0, 90, 180, 270].map((angle, i) => { + const rad = (angle * Math.PI) / 180; + const x = 100 + Math.cos(rad) * 60 - 15; + const y = 100 + Math.sin(rad) * 60 - 15; + return ( + + ); + })} + + {/* Connection Lines */} + + +); + +export const SpeedPerformance: React.FC = ({ className = "", delay = 0 }) => ( + + {/* The "Built" Foundation */} + + + {/* Bricks forming a structure */} + {[ + { x: 50, y: 130, w: 30 }, + { x: 85, y: 130, w: 30 }, + { x: 120, y: 130, w: 30 }, + { x: 65, y: 105, w: 30 }, + { x: 105, y: 105, w: 30 }, + ].map((brick, i) => ( + + ))} + + {/* Lightning Bolt emerging from the "Built" structure */} + + + {/* Speed Lines */} + {[0, 1, 2].map((i) => ( + + ))} + +); + +export const SolidFoundation: React.FC = ({ className = "", delay = 0 }) => ( + + {/* Stacked Blocks */} + + + + + {/* Shield Icon Overlay */} + + +); + +export const LayerSeparation: React.FC = ({ className = "", delay = 0 }) => ( + + {/* Top Layer (Content) */} + + + + + + + {/* Gap with Arrows */} + + + {/* Bottom Layer (Code/Logic) */} + + + + + +); + +export const DirectService: React.FC = ({ className = "", delay = 0 }) => ( + + {/* Two Nodes */} + + + + {/* Direct Connection */} + + + {/* Pulse moving between */} + + + + +); + +export const AgencyChaos: React.FC = ({ className = "", delay = 0 }) => ( + + {/* Messy Path */} + + + {/* Intersecting Circles (Meetings) */} + {[0, 1, 2].map((i) => ( + + ))} + + {/* Slate "X" or Stop signs - NO COLOR */} + + +); + +export const TaskDone: React.FC = ({ className = "", delay = 0 }) => ( + + {/* Checkmark Circle */} + + + {/* Checkmark */} + + + {/* Confetti/Sparkles */} + {[0, 45, 90, 135, 180, 225, 270, 315].map((angle, i) => { + const rad = (angle * Math.PI) / 180; + const x1 = 100 + Math.cos(rad) * 70; + const y1 = 100 + Math.sin(rad) * 70; + const x2 = 100 + Math.cos(rad) * 85; + const y2 = 100 + Math.sin(rad) * 85; + return ( + + ); + })} + +);