diff --git a/app/blog/[slug]/page.tsx b/app/blog/[slug]/page.tsx index 5584bbd..5db5e7d 100644 --- a/app/blog/[slug]/page.tsx +++ b/app/blog/[slug]/page.tsx @@ -1,4 +1,4 @@ -import React from 'react'; +import * as React from 'react'; import { notFound } from 'next/navigation'; import { blogPosts } from '../../../src/data/blogPosts'; import { Tag } from '../../../src/components/Tag'; @@ -9,6 +9,9 @@ import { UL, LI } from '../../../src/components/ArticleList'; import { FileExamplesList } from '../../../src/components/FileExamplesList'; import { FileExampleManager } from '../../../src/data/fileExamples'; import { BlogPostClient } from '../../../src/components/BlogPostClient'; +import { PageHeader } from '../../../src/components/PageHeader'; +import { Section } from '../../../src/components/Section'; +import { Reveal } from '../../../src/components/Reveal'; export async function generateStaticParams() { return blogPosts.map((post) => ({ @@ -53,52 +56,33 @@ export default async function BlogPostPage({ params }: { params: Promise<{ slug: } return ( -
+
-
-
-
-
-

- {post.title} -

- -
- - - - - - - {readingTime} min - -
+ -

- {post.description} -

- - {post.tags && post.tags.length > 0 && ( -
- {post.tags.map((tag, index) => ( - - ))} -
- )} -
-
-
- -
+
+
-

{post.description}

- +
+ + + {readingTime} min read +
+ + {post.tags && post.tags.length > 0 && ( +
+ {post.tags.map((tag, index) => ( + + ))} +
+ )} + {slug === 'first-note' && ( <> @@ -208,7 +192,7 @@ export default async function BlogPostPage({ params }: { params: Promise<{ slug: )}
-
+
); diff --git a/app/blog/page.tsx b/app/blog/page.tsx index 8b55412..ef0824e 100644 --- a/app/blog/page.tsx +++ b/app/blog/page.tsx @@ -6,6 +6,8 @@ import { MediumCard } from '../../src/components/MediumCard'; import { SearchBar } from '../../src/components/SearchBar'; import { Tag } from '../../src/components/Tag'; import { blogPosts } from '../../src/data/blogPosts'; +import { PageHeader } from '../../src/components/PageHeader'; +import { Reveal } from '../../src/components/Reveal'; export default function BlogPage() { const [searchQuery, setSearchQuery] = useState(''); @@ -41,152 +43,64 @@ export default function BlogPage() { }; return ( -
- {/* Clean Hero Section */} -
- {/* Animated Background */} -
+
+ Blog
& Notes.} + description="A public notebook of things I figured out, mistakes I made, and tools I tested." + backgroundSymbol="B" + /> - {/* Morphing Blob */} -
-
-
+
+
+ {/* Sidebar / Filter area */} +
+
+ +
+

Suchen

+ +
+
- {/* Animated Drawing Paths */} - - - - - + {allTags.length > 0 && ( + +
+

Themen

+
+ {allTags.map((tag, index) => ( + + ))} +
+
+
+ )} +
+
- {/* Floating Shapes */} -
-
-
-
- -
-
-

- Marc Mintel -

-

- "A public notebook of things I figured out, mistakes I made, and tools I tested." -

-
- - - Vulkaneifel, Germany - - - Digital problem solver + {/* Posts area */} +
+
+ {filteredPosts.length === 0 ? ( +
+

No posts found matching your criteria.

+
+ ) : ( + filteredPosts.map((post, i) => ( + + + + )) + )}
- - {/* Search */} -
-
- -
-
- - {/* Topics */} - {allTags.length > 0 && ( -
-

Topics

-
- {allTags.map((tag, index) => ( - - ))} -
-
- )} - - {/* All Posts */} -
-
- {filteredPosts.length === 0 ? ( -
-

No posts found matching your criteria.

-
- ) : ( - filteredPosts.map(post => ( - - )) - )} -
-
- -
); } diff --git a/app/contact/page.tsx b/app/contact/page.tsx index 209230b..42739ac 100644 --- a/app/contact/page.tsx +++ b/app/contact/page.tsx @@ -1,38 +1,22 @@ import * as React from 'react'; -import { ArrowLeft } from 'lucide-react'; -import Link from 'next/link'; import { Reveal } from '../../src/components/Reveal'; +import { PageHeader } from '../../src/components/PageHeader'; +import { Section } from '../../src/components/Section'; export default function ContactPage() { return ( -
-
-
@
- - Zurück - - -
- -

- Kontakt
- & Anfrage. -

-
+
+ Kontakt
& Anfrage.} + description="Haben Sie ein Projekt im Kopf? Schreiben Sie mir einfach. Ich antworte meistens innerhalb von 24 Stunden." + backLink={{ href: '/', label: 'Zurück' }} + backgroundSymbol="@" + /> - -

- Haben Sie ein Projekt im Kopf? Schreiben Sie mir einfach. Ich antworte meistens innerhalb von 24 Stunden. -

-
-
-
- -
+
-

Direkt

-
+
); } diff --git a/app/globals.css b/app/globals.css index 6feee0d..36bdb30 100644 --- a/app/globals.css +++ b/app/globals.css @@ -53,7 +53,7 @@ } a { - @apply text-slate-900 hover:text-slate-700 transition-colors underline underline-offset-4; + @apply text-slate-900 hover:text-slate-700 transition-colors no-underline; } ul, ol { diff --git a/app/page.tsx b/app/page.tsx index f5dc7b5..f25f033 100644 --- a/app/page.tsx +++ b/app/page.tsx @@ -1,7 +1,8 @@ import * as React from 'react'; import Link from 'next/link'; -import { ArrowRight, Minus, Zap, Shield, Clock } from 'lucide-react'; +import { ArrowRight, Zap, Shield } from 'lucide-react'; import { Reveal } from '../src/components/Reveal'; +import { Section } from '../src/components/Section'; export default function LandingPage() { return ( @@ -48,12 +49,10 @@ export default function LandingPage() {
{/* Was ich mache - Designed Grid */} -
-
01
+
-

Das Versprechen

Direkt.
Sauber.
@@ -87,13 +86,10 @@ export default function LandingPage() {

- + {/* Comparison - Visual Path */} -
-
02
-

Der Unterschied

- +
{/* Row 1 */} @@ -132,15 +128,13 @@ export default function LandingPage() {
- + {/* Für wen - Designed Box */} -
-
03
+
-

Zielgruppe

Für Unternehmen, die
Ergebnisse wollen. @@ -160,12 +154,10 @@ export default function LandingPage() {

-
+
{/* Leistungen - Visual Cards */} -
-
04
-

Leistungen

+
@@ -198,8 +190,7 @@ export default function LandingPage() {
-
- +
); } diff --git a/app/websites/page.tsx b/app/websites/page.tsx index 822855c..c875762 100644 --- a/app/websites/page.tsx +++ b/app/websites/page.tsx @@ -1,37 +1,24 @@ import * as React from 'react'; -import { Info, ArrowLeft, Minus } from 'lucide-react'; -import Link from 'next/link'; +import { Info, Minus } from 'lucide-react'; import { Reveal } from '../../src/components/Reveal'; +import { PageHeader } from '../../src/components/PageHeader'; +import { Section } from '../../src/components/Section'; export default function WebsitesPage() { return ( -
- {/* Header - Designed */} -
-
- - Zurück - - -

- Websites
- & Preise. -

-
- -

- Ich baue digitale Systeme mit klaren Preisen und Ergebnissen – keine Stunden, keine Überraschungen. -

-
-
+
+ Websites
& Preise.} + description="Ich baue digitale Systeme mit klaren Preisen und Ergebnissen – keine Stunden, keine Überraschungen." + backLink={{ href: '/', label: 'Zurück' }} + backgroundSymbol="€" + /> {/* 1. Website - Designed Pricing */} -
-
01
+
-

Die Basis

6.000 €
einmalig
@@ -66,12 +53,10 @@ export default function WebsitesPage() {
-
+
{/* 2. Entwicklung - Designed Grid */} -
-
02
-

Produktion

+
{/* Seite */} @@ -128,15 +113,13 @@ export default function WebsitesPage() {
- + {/* 5. Betrieb - Designed Box */} -
-
03
+
B
-

Betrieb

120 €
/ Monat
@@ -160,8 +143,7 @@ export default function WebsitesPage() {
-
- +
); } diff --git a/src/components/BlogPostClient.tsx b/src/components/BlogPostClient.tsx index 6fc9504..9f4799f 100644 --- a/src/components/BlogPostClient.tsx +++ b/src/components/BlogPostClient.tsx @@ -95,19 +95,19 @@ export const BlogPostClient: React.FC = ({ readingTime, tit - Back + Zurück
- + {readingTime} min read @@ -115,15 +115,15 @@ export const BlogPostClient: React.FC = ({ readingTime, tit
-
+
diff --git a/src/components/Footer.tsx b/src/components/Footer.tsx index 80deae8..03a0634 100644 --- a/src/components/Footer.tsx +++ b/src/components/Footer.tsx @@ -1,35 +1,32 @@ -import React from 'react'; +import * as React from 'react'; export const Footer: React.FC = () => { const currentYear = new Date().getFullYear(); return ( -