11 Commits

Author SHA1 Message Date
d23fd69106 Merge version_11 into main
Merge version_11 into main
2026-03-05 17:47:28 +00:00
0100df9da6 Update src/app/page.tsx 2026-03-05 17:47:23 +00:00
0d835c480e Update src/app/layout.tsx 2026-03-05 17:47:23 +00:00
f10f27f042 Merge version_10 into main
Merge version_10 into main
2026-03-05 13:20:17 +00:00
12a8b1d93f Update src/app/page.tsx 2026-03-05 13:20:12 +00:00
f2ace83a6a Update src/app/layout.tsx 2026-03-05 13:20:12 +00:00
606494433c Merge version_9 into main
Merge version_9 into main
2026-03-04 15:53:24 +00:00
83cea9dabe Update src/app/page.tsx 2026-03-04 15:53:19 +00:00
62802ac436 Update src/app/page.tsx 2026-03-04 14:46:50 +00:00
20cfa42656 Update src/app/layout.tsx 2026-03-04 14:46:49 +00:00
8cf962bd46 Merge version_7 into main
Merge version_7 into main
2026-03-04 14:45:00 +00:00
2 changed files with 237 additions and 53 deletions

View File

@@ -6,7 +6,7 @@ import "./globals.css";
const inter = Inter({ subsets: ["latin"] });
export const metadata: Metadata = {
title: "Peter Friis - Webdesigner", description: "Professioneller Webdesigner, der atemberaubende digitale Erlebnisse schafft. Stellen Sie Ihre Website mit Next.js, Vercel oder einer beliebigen Node.js-Hosting-Plattform bereit."
title: "Peter Friis - Webdesigner", description: "Professioneller Webdesigner, der atemberaubende digitale Erlebnisse schafft. Stellen Sie Ihre Website einfach mit Next.js, Vercel oder einer beliebigen Node.js-Hosting-Plattform bereit."
};
export default function RootLayout({
@@ -24,44 +24,44 @@ export default function RootLayout({
{
name: 'Vercel',
steps: [
'1. Schieben Sie Ihren Code zu GitHub',
'2. Gehen Sie zu vercel.com und registrieren Sie sich',
'1. Verschieben Sie Ihren Code zu GitHub',
'2. Gehen Sie zu vercel.com und melden Sie sich an',
'3. Klicken Sie auf "Neues Projekt" und wählen Sie Ihr Repository',
'4. Vercel erkennt Next.js automatisch und stellt bereit',
'5. Ihre Website ist live auf der vercel.app-Domain'
'5. Ihre Website ist live unter der Vercel.app-Domain'
]
},
{
name: 'Netlify',
steps: [
'1. Schieben Sie Ihren Code zu GitHub',
'2. Gehen Sie zu netlify.com und registrieren Sie sich',
'1. Verschieben Sie Ihren Code zu GitHub',
'2. Gehen Sie zu netlify.com und melden Sie sich an',
'3. Klicken Sie auf "Neue Website aus Git" und wählen Sie Ihr Repository',
'4. Build-Befehl festlegen: npm run build',
'5. Veröffentlichungsverzeichnis festlegen: .next/standalone',
'6. Stellen Sie bereit und erhalten Sie Ihre Live-Domain'
'4. Setzen Sie Build-Befehl: npm run build',
'5. Setzen Sie Veröffentlichungsverzeichnis: .next/standalone',
'6. Bereitstellen und erhalten Sie Ihre Live-Domain'
]
},
{
name: 'Self-Hosted (Node.js)',
steps: [
'1. Holen Sie sich einen Server (Digital Ocean, AWS, etc)',
'1. Rufen Sie einen Server ab (Digital Ocean, AWS, usw.)',
'2. Klonen Sie Ihr Repository auf dem Server',
'3. Ausführen: npm install && npm run build',
'4. NODE_ENV=production festlegen',
'3. Führen Sie aus: npm install && npm run build',
'4. Setzen Sie NODE_ENV=production',
'5. Starten Sie mit: npm start oder verwenden Sie PM2',
'6. Richten Sie nginx/Apache als Reverse-Proxy ein',
'7. Konfigurieren Sie Ihre Domain-DNS'
'6. Richten Sie nginx/Apache als Reverse Proxy ein',
'7. Konfigurieren Sie Ihr Domain-DNS'
]
},
{
name: 'Docker-Bereitstellung',
steps: [
'1. Erstellen Sie ein Dockerfile im Projektstammverzeichnis',
'2. Image erstellen: docker build -t myapp .',
'1. Erstellen Sie eine Dockerfile im Projektstammverzeichnis',
'2. Build-Image: docker build -t myapp .',
'3. Container ausführen: docker run -p 3000:3000 myapp',
'4. Zu Docker Hub oder Container-Registry pushen',
'5. Auf Cloud-Plattformen bereitstellen (AWS ECS, GCP, etc)'
'4. Zu Docker Hub oder Container-Registry verschieben',
'5. In Cloud-Plattformen bereitstellen (AWS ECS, GCP usw.)'
]
}
],
@@ -71,13 +71,13 @@ export default function RootLayout({
'DATABASE_URL=your-database-url'
],
postDeploymentChecklist: [
'Alle Navigationslinks testen',
'Responsives Design auf Mobilgeräten überprüfen',
'Testen Sie alle Navigationslinks',
'Überprüfen Sie das responsive Design auf dem Mobilgerät',
'Überprüfen Sie, ob E-Mail-Formulare ordnungsgemäß funktionieren',
'Bestätigen Sie, dass Bilder ordnungsgemäß geladen werden',
'Kontaktformulare-Übermittlung testen',
'SEO-Meta-Tags überprüfen',
'Seitenladegeschwindigkeit überprüfen',
'Bestätigen Sie, dass Bilder korrekt geladen werden',
'Testen Sie die Übermittlung von Kontaktformularen',
'Überprüfen Sie SEO-Meta-Tags',
'Überprüfen Sie die Seitenladeleistung',
'SSL-Zertifikat einrichten (HTTPS)'
]
};

View File

@@ -7,9 +7,28 @@ import ProductCardOne from '@/components/sections/product/ProductCardOne';
import FeatureCardNineteen from '@/components/sections/feature/FeatureCardNineteen';
import ContactCTA from '@/components/sections/contact/ContactCTA';
import FooterLogoEmphasis from '@/components/sections/footer/FooterLogoEmphasis';
import { Sparkles, Briefcase, Zap, Mail, Code, Rocket, CheckCircle } from 'lucide-react';
import LegalSection from '@/components/legal/LegalSection';
import { Sparkles, Briefcase, Zap, Mail, Code, Rocket, CheckCircle, Mail as MailIcon, Phone as PhoneIcon } from 'lucide-react';
import { useState } from 'react';
export default function LandingPage() {
const [showEmailModal, setShowEmailModal] = useState(false);
const [showPhoneModal, setShowPhoneModal] = useState(false);
const handleScrollToPortfolio = () => {
const element = document.getElementById('portfolio');
if (element) {
element.scrollIntoView({ behavior: 'smooth' });
}
};
const handleScrollToContact = () => {
const element = document.getElementById('contact');
if (element) {
element.scrollIntoView({ behavior: 'smooth' });
}
};
return (
<ThemeProvider
defaultButtonVariant="expand-hover"
@@ -33,7 +52,7 @@ export default function LandingPage() {
{ name: "Kontakt", id: "contact" }
]}
bottomLeftText="Webdesigner"
bottomRightText="friisp@gmail.com"
bottomRightText="peteralexanderfriis696@gmail.com"
/>
</div>
@@ -46,8 +65,8 @@ export default function LandingPage() {
tagAnimation="slide-up"
background={{ variant: "animated-grid" }}
buttons={[
{ text: "Meine Arbeiten ansehen", href: "#portfolio" },
{ text: "Erste Schritte", href: "#contact" }
{ text: "Meine Arbeiten ansehen", onClick: handleScrollToPortfolio },
{ text: "Erste Schritte", onClick: handleScrollToContact }
]}
buttonAnimation="slide-up"
carouselItems={[
@@ -55,10 +74,10 @@ export default function LandingPage() {
id: "1", imageSrc: "https://webuild-dev.s3.eu-north-1.amazonaws.com/users/user_3ARjvloGcZpCaedVgrm6Muh5Upq/a-stunning-modern-e-commerce-website-des-1772566668134-fb1e4245.png?_wi=1", imageAlt: "E-Commerce-Website-Design"
},
{
id: "2", imageSrc: "https://webuild-dev.s3.eu-north-1.amazonaws.com/users/user_3ARjvloGcZpCaedVgrm6Muh5Upq/a-sleek-corporate-website-design-for-a-t-1772566668876-f9cb2e3c.png?_wi=1", imageAlt: "Corporate-Website-Design"
id: "2", imageSrc: "https://webuild-dev.s3.eu-north-1.amazonaws.com/users/user_3ARjvloGcZpCaedVgrm6Muh5Upq/a-sleek-corporate-website-design-for-a-t-1772566668876-f9cb2e3c.png?_wi=1", imageAlt: "Unternehmenswebsite-Design"
},
{
id: "3", imageSrc: "https://webuild-dev.s3.eu-north-1.amazonaws.com/users/user_3ARjvloGcZpCaedVgrm6Muh5Upq/a-creative-agency-website-design-with-bo-1772566669671-c480d904.png?_wi=1", imageAlt: "Kreative Agentur-Website"
id: "3", imageSrc: "https://webuild-dev.s3.eu-north-1.amazonaws.com/users/user_3ARjvloGcZpCaedVgrm6Muh5Upq/a-creative-agency-website-design-with-bo-1772566669671-c480d904.png?_wi=1", imageAlt: "Website der Kreativagentur"
},
{
id: "4", imageSrc: "https://webuild-dev.s3.eu-north-1.amazonaws.com/users/user_3ARjvloGcZpCaedVgrm6Muh5Upq/a-sophisticated-saas-platform-landing-pa-1772566668752-9737873c.png?_wi=1", imageAlt: "SaaS-Plattform-Design"
@@ -67,7 +86,7 @@ export default function LandingPage() {
id: "5", imageSrc: "https://webuild-dev.s3.eu-north-1.amazonaws.com/users/user_3ARjvloGcZpCaedVgrm6Muh5Upq/a-vibrant-fashion-brand-website-design-w-1772566668475-3b90a44d.png?_wi=1", imageAlt: "Modemarken-Website"
},
{
id: "6", imageSrc: "https://webuild-dev.s3.eu-north-1.amazonaws.com/users/user_3ARjvloGcZpCaedVgrm6Muh5Upq/a-professional-consulting-firm-website-d-1772566668764-39fb77be.png?_wi=1", imageAlt: "Beratungsfirmen-Website-Design"
id: "6", imageSrc: "https://webuild-dev.s3.eu-north-1.amazonaws.com/users/user_3ARjvloGcZpCaedVgrm6Muh5Upq/a-professional-consulting-firm-website-d-1772566668764-39fb77be.png?_wi=1", imageAlt: "Consulting-Website-Design"
}
]}
autoPlay={true}
@@ -78,7 +97,7 @@ export default function LandingPage() {
<div id="portfolio" data-section="portfolio">
<ProductCardOne
title="Ausgewählte Arbeiten"
description="Eine Auswahl meiner jüngsten Webdesign-Projekte, die verschiedene Branchen und Designansätze zeigen."
description="Eine Auswahl meiner neuesten Webdesign-Projekte, die verschiedene Branchen und Design-Ansätze zeigen."
tag="Portfolio"
tagIcon={Briefcase}
tagAnimation="slide-up"
@@ -91,10 +110,10 @@ export default function LandingPage() {
id: "1", name: "E-Commerce-Plattform", price: "2023", imageSrc: "https://webuild-dev.s3.eu-north-1.amazonaws.com/users/user_3ARjvloGcZpCaedVgrm6Muh5Upq/a-stunning-modern-e-commerce-website-des-1772566668134-fb1e4245.png?_wi=2", imageAlt: "E-Commerce-Plattform-Design"
},
{
id: "2", name: "Corporate-Website", price: "2023", imageSrc: "https://webuild-dev.s3.eu-north-1.amazonaws.com/users/user_3ARjvloGcZpCaedVgrm6Muh5Upq/a-sleek-corporate-website-design-for-a-t-1772566668876-f9cb2e3c.png?_wi=2", imageAlt: "Corporate-Website-Design"
id: "2", name: "Unternehmenswebsite", price: "2023", imageSrc: "https://webuild-dev.s3.eu-north-1.amazonaws.com/users/user_3ARjvloGcZpCaedVgrm6Muh5Upq/a-sleek-corporate-website-design-for-a-t-1772566668876-f9cb2e3c.png?_wi=2", imageAlt: "Unternehmenswebsite-Design"
},
{
id: "3", name: "Kreative Agentur-Website", price: "2024", imageSrc: "https://webuild-dev.s3.eu-north-1.amazonaws.com/users/user_3ARjvloGcZpCaedVgrm6Muh5Upq/a-creative-agency-website-design-with-bo-1772566669671-c480d904.png?_wi=2", imageAlt: "Kreative Agentur-Website"
id: "3", name: "Website einer Kreativagentur", price: "2024", imageSrc: "https://webuild-dev.s3.eu-north-1.amazonaws.com/users/user_3ARjvloGcZpCaedVgrm6Muh5Upq/a-creative-agency-website-design-with-bo-1772566669671-c480d904.png?_wi=2", imageAlt: "Website einer Kreativagentur"
},
{
id: "4", name: "SaaS-Plattform", price: "2024", imageSrc: "https://webuild-dev.s3.eu-north-1.amazonaws.com/users/user_3ARjvloGcZpCaedVgrm6Muh5Upq/a-sophisticated-saas-platform-landing-pa-1772566668752-9737873c.png?_wi=2", imageAlt: "SaaS-Plattform-Design"
@@ -103,7 +122,7 @@ export default function LandingPage() {
id: "5", name: "Modemarke", price: "2023", imageSrc: "https://webuild-dev.s3.eu-north-1.amazonaws.com/users/user_3ARjvloGcZpCaedVgrm6Muh5Upq/a-vibrant-fashion-brand-website-design-w-1772566668475-3b90a44d.png?_wi=2", imageAlt: "Modemarken-Website"
},
{
id: "6", name: "Beratungsfirma", price: "2024", imageSrc: "https://webuild-dev.s3.eu-north-1.amazonaws.com/users/user_3ARjvloGcZpCaedVgrm6Muh5Upq/a-professional-consulting-firm-website-d-1772566668764-39fb77be.png?_wi=2", imageAlt: "Beratungsfirmen-Website-Design"
id: "6", name: "Unternehmensberatung", price: "2024", imageSrc: "https://webuild-dev.s3.eu-north-1.amazonaws.com/users/user_3ARjvloGcZpCaedVgrm6Muh5Upq/a-professional-consulting-firm-website-d-1772566668764-39fb77be.png?_wi=2", imageAlt: "Consulting-Website-Design"
}
]}
/>
@@ -120,15 +139,15 @@ export default function LandingPage() {
features={[
{
id: 1,
tag: "Design", title: "Webdesign", subtitle: "Schöne, intuitive Schnittstellen, die Benutzer ansprechen.", description: "Ich erstelle benutzerdefinierte Webdesigns, die Ihre Markenidentität widerspiegeln und Ihr Publikum fesseln. Von der Konzeption bis zur Ausführung ist jedes Pixel sorgfältig für optimale Benutzererfahrung und visuellen Effekt gestaltet.", imageSrc: "https://webuild-dev.s3.eu-north-1.amazonaws.com/users/user_3ARjvloGcZpCaedVgrm6Muh5Upq/a-modern-designer-s-workspace-with-a-cle-1772566667699-d70c5a04.png?_wi=1", imageAlt: "Webdesign-Arbeitsbereich"
tag: "Design", title: "Webdesign", subtitle: "Schöne, intuitive Schnittstellen, die Benutzer einbeziehen.", description: "Ich erstelle maßgeschneiderte Webdesigns, die Ihre Markenidentität widerspiegeln und Ihr Publikum fesseln. Von Konzept bis Ausführung wird jedes Pixel sorgfältig für optimale Benutzererfahrung und visuellen Einfluss gestaltet.", imageSrc: "https://webuild-dev.s3.eu-north-1.amazonaws.com/users/user_3ARjvloGcZpCaedVgrm6Muh5Upq/a-modern-designer-s-workspace-with-a-cle-1772566667699-d70c5a04.png?_wi=1", imageAlt: "Webdesign-Arbeitsplatz"
},
{
id: 2,
tag: "Entwicklung", title: "Responsive-Entwicklung", subtitle: "Websites, die auf allen Geräten nahtlos funktionieren.", description: "Responsives Design stellt sicher, dass Ihre Website auf Desktop, Tablet und Mobilgeräten fehlerfrei aussieht und funktioniert. Ich verwende moderne Technologien und Best Practices, um schnelle, sichere und SEO-optimierte Websites bereitzustellen.", imageSrc: "https://webuild-dev.s3.eu-north-1.amazonaws.com/users/user_3ARjvloGcZpCaedVgrm6Muh5Upq/a-sleek-corporate-website-design-for-a-t-1772566668876-f9cb2e3c.png?_wi=3", imageAlt: "Responsive-Entwicklung"
tag: "Entwicklung", title: "Responsive Entwicklung", subtitle: "Websites, die auf allen Geräten nahtlos funktionieren.", description: "Responsive Design stellt sicher, dass Ihre Website auf Desktop, Tablet und Mobilgerät perfekt aussieht und funktioniert. Ich verwende moderne Technologien und bewährte Verfahren, um schnelle, sichere und SEO-optimierte Websites bereitzustellen.", imageSrc: "https://webuild-dev.s3.eu-north-1.amazonaws.com/users/user_3ARjvloGcZpCaedVgrm6Muh5Upq/a-sleek-corporate-website-design-for-a-t-1772566668876-f9cb2e3c.png?_wi=3", imageAlt: "Responsive Entwicklung"
},
{
id: 3,
tag: "Optimierung", title: "Leistung & SEO", subtitle: "Optimiert für Suchmaschinen und Benutzereinbindung.", description: "Ich optimiere Websites auf Geschwindigkeit, Barrierefreiheit und Sichtbarkeit in Suchmaschinen. Die strategische SEO-Implementierung stellt sicher, dass Ihre Website die richtige Zielgruppe erreicht und bei Suchergebnissen gut rangiert."
tag: "Optimierung", title: "Leistung & SEO", subtitle: "Optimiert für Suchmaschinen und Benutzerengagement.", description: "Ich optimiere Websites für Geschwindigkeit, Zugänglichkeit und Sichtbarkeit in Suchmaschinen. Die strategische SEO-Implementierung stellt sicher, dass Ihre Website die richtige Zielgruppe erreicht und in Suchergebnissen gut abschneidet."
}
]}
/>
@@ -137,8 +156,8 @@ export default function LandingPage() {
<div id="deployment" data-section="deployment">
<FeatureCardNineteen
title="So stellen Sie Ihre Website bereit"
description="Mehrere Bereitstellungsoptionen, um Ihre Website schnell und zuverlässig online zu bringen."
tag="Bereitstellungsanleitung"
description="Mehrere Bereitstellungsoptionen, um Ihre Website schnell und zuverlässig online zu stellen."
tag="Bereitstellungsleitfaden"
tagIcon={Rocket}
tagAnimation="slide-up"
textboxLayout="default"
@@ -146,15 +165,15 @@ export default function LandingPage() {
features={[
{
id: 1,
tag: "Empfohlen", title: "Auf Vercel bereitstellen", subtitle: "Der schnellste Weg, Next.js-Projekte bereitzustellen.", description: "1. Schieben Sie Ihren Code zu GitHub\n2. Registrieren Sie sich auf vercel.com\n3. Verbinden Sie Ihr Repository\n4. Vercel erkennt Next.js automatisch und stellt bereit\n5. Ihre Website ist sofort online mit automatischem SSL und CDN", imageSrc: "https://webuild-dev.s3.eu-north-1.amazonaws.com/users/user_3ARjvloGcZpCaedVgrm6Muh5Upq/a-modern-designer-s-workspace-with-a-cle-1772566667699-d70c5a04.png?_wi=2", imageAlt: "Vercel-Bereitstellung"
tag: "Empfohlen", title: "Auf Vercel bereitstellen", subtitle: "Schnellste Möglichkeit, Next.js-Projekte bereitzustellen.", description: "1. Verschieben Sie Ihren Code zu GitHub\n2. Melden Sie sich auf vercel.com an\n3. Verbinden Sie Ihr Repository\n4. Vercel erkennt Next.js automatisch und stellt bereit\n5. Ihre Website ist sofort live mit automatischem SSL und CDN", imageSrc: "https://webuild-dev.s3.eu-north-1.amazonaws.com/users/user_3ARjvloGcZpCaedVgrm6Muh5Upq/a-modern-designer-s-workspace-with-a-cle-1772566667699-d70c5a04.png?_wi=2", imageAlt: "Vercel-Bereitstellung"
},
{
id: 2,
tag: "Alternative", title: "Auf Netlify bereitstellen", subtitle: "Großartige Alternative mit einfacher GitHub-Integration.", description: "1. Schieben Sie Code zu GitHub\n2. Registrieren Sie sich auf netlify.com\n3. Wählen Sie 'Neue Website aus Git'\n4. Build-Befehl: npm run build\n5. Veröffentlichungsverzeichnis: .next/standalone\n6. Stellen Sie bereit und erhalten Sie Ihre Domain", imageSrc: "https://webuild-dev.s3.eu-north-1.amazonaws.com/users/user_3ARjvloGcZpCaedVgrm6Muh5Upq/a-sleek-corporate-website-design-for-a-t-1772566668876-f9cb2e3c.png?_wi=3", imageAlt: "Netlify-Bereitstellung"
tag: "Alternative", title: "Auf Netlify bereitstellen", subtitle: "Großartige Alternative mit einfacher GitHub-Integration.", description: "1. Verschieben Sie Code zu GitHub\n2. Melden Sie sich auf netlify.com an\n3. Wählen Sie 'Neue Website aus Git'\n4. Build-Befehl: npm run build\n5. Veröffentlichungsverzeichnis: .next/standalone\n6. Bereitstellen und Domäne erhalten", imageSrc: "https://webuild-dev.s3.eu-north-1.amazonaws.com/users/user_3ARjvloGcZpCaedVgrm6Muh5Upq/a-sleek-corporate-website-design-for-a-t-1772566668876-f9cb2e3c.png?_wi=3", imageAlt: "Netlify-Bereitstellung"
},
{
id: 3,
tag: "Selbst gehostet", title: "Mit Docker bereitstellen", subtitle: "Überall mit Containerisierung bereitstellen.", description: "1. Erstellen Sie ein Dockerfile im Projektstammverzeichnis\n2. Image erstellen: docker build -t myapp .\n3. Ausführen: docker run -p 3000:3000 myapp\n4. Zu Docker Hub pushen\n5. Auf AWS ECS, Google Cloud oder DigitalOcean bereitstellen"
tag: "Self-Hosted", title: "Mit Docker bereitstellen", subtitle: "Stellen Sie überall mit Containerisierung bereit.", description: "1. Erstellen Sie eine Dockerfile im Projektstammverzeichnis\n2. Build-Image: docker build -t myapp .\n3. Führen Sie aus: docker run -p 3000:3000 myapp\n4. Verschieben Sie zu Docker Hub\n5. Stellen Sie auf AWS ECS, Google Cloud oder DigitalOcean bereit"
}
]}
/>
@@ -166,9 +185,9 @@ export default function LandingPage() {
tagIcon={Mail}
tagAnimation="slide-up"
title="Bereit, Ihre Online-Präsenz zu verbessern?"
description="Lassen Sie uns zusammenarbeiten, um eine Website zu erstellen, die nicht nur atemberaubend aussieht, sondern auch Ergebnisse bringt. Ich freue mich, Ihre Vision zum Leben zu erwecken."
description="Lassen Sie uns zusammenarbeiten, um eine Website zu schaffen, die nicht nur atemberaubend aussieht, sondern auch Ergebnisse liefert. Ich freue mich darauf, Ihre Vision zum Leben zu erwecken."
buttons={[
{ text: "Kontaktieren Sie mich", href: "mailto:friisp@gmail.com" },
{ text: "Kontaktieren Sie mich", href: "mailto:peteralexanderfriis696@gmail.com" },
{ text: "Anrufen: +49 179 2355413", href: "tel:+49176611696541" }
]}
buttonAnimation="slide-up"
@@ -177,34 +196,199 @@ export default function LandingPage() {
/>
</div>
<div id="impressum" data-section="impressum">
<LegalSection
layout="section"
title="Impressum"
subtitle="Rechtliche Informationen und Kontaktdaten"
sections={[
{
heading: "Inhaltlich Verantwortlicher (Gemäß TMG §7 Abs. 1)", content: [
{
type: "paragraph", text: "Peter Friis\nFreelance Webdesigner\nE-Mail: peteralexanderfriis696@gmail.com\nTelefon: +49 179 2355413"
}
]
},
{
heading: "Angaben gemäß § 5 TMG", content: [
{
type: "paragraph", text: "Name: Peter Friis\nBeruf: Freelancer Webdesigner\nStatus: Unternehmer gemäß USt-IdNr. (siehe Umsatzsteuer-Identifikationsnummer)"
}
]
},
{
heading: "Kontaktinformation", content: [
{
type: "paragraph", text: "Telefonische Erreichbarkeit und weitere Informationen:"
},
{
type: "list", items: [
"E-Mail: peteralexanderfriis696@gmail.com", "Telefon: +49 179 2355413", "Geschäftstätigkeit: Webdesign und digitale Beratung"
]
}
]
},
{
heading: "Haftung für Inhalte", content: [
{
type: "paragraph", text: "Die Inhalte unserer Seiten wurden mit großer Sorgfalt erstellt. Für die Richtigkeit, Vollständigkeit und Aktualität der Inhalte kann ich jedoch keine Gewähr übernehmen. Als Diensteanbieter bin ich gemäß § 7 Abs. 1 TMG für eigene Inhalte auf diesen Seiten nach den allgemeinen Gesetzen verantwortlich. Nach §§ 8 bis 10 TMG bin ich als Diensteanbieter jedoch nicht verpflichtet, übermittelte oder gespeicherte fremde Informationen zu überwachen oder nach Umständen zu forschen, die auf eine rechtswidrige Tätigkeit hinweisen."
}
]
},
{
heading: "Haftung für Links", content: [
{
type: "paragraph", text: "Meine Website enthält Links zu externen Websites Dritter. Auf die Inhalte dieser extern verlinkten Seiten habe ich keinen Einfluss. Daher kann ich für diese fremden Inhalte auch keine Gewähr übernehmen. Für die Inhalte der verlinkten Seiten ist der jeweilige Anbieter oder Betreiber der Seite verantwortlich. Die verlinkten Seiten wurden zum Zeitpunkt der Verlinkung auf mögliche Rechtsverstöße überprüft. Illegale Inhalte waren zum Zeitpunkt der Verlinkung nicht erkennbar. Eine ständige inhaltliche Kontrolle der verlinkten Seiten ist jedoch ohne konkrete Anhaltspunkte einer Rechtsverletzung nicht zumutbar."
}
]
},
{
heading: "Urheberrecht", content: [
{
type: "paragraph", text: "Die auf dieser Website präsentierten Inhalte und Werke unterliegen dem deutschen Urheberrecht. Die Vervielfältigung, Bearbeitung, Verbreitung und jede Art der Verwertung außerhalb der Grenzen des Urheberrechtes bedürfen der vorherigen schriftlichen Zustimmung des Autors oder Urhebers. Downloads und Kopien dieser Seite sind nur für den privaten, nicht kommerziellen Gebrauch gestattet."
}
]
},
{
heading: "Datenschutz", content: [
{
type: "paragraph", text: "Die Nutzung dieser Website ist in der Regel ohne Angabe personenbezogener Daten möglich. Soweit auf meiner Website personenbezogene Daten (beispielsweise Name, Anschrift oder E-Mail-Adressen) erhoben werden, erfolgt dies, soweit möglich, stets auf freiwilliger Basis. Diese Daten werden ohne Ihre ausdrückliche Zustimmung nicht an Dritte weitergegeben."
},
{
type: "paragraph", text: "Beachten Sie, dass die Datenübertragung im Internet Sicherheitslücken aufweisen kann. Ein vollständiger Schutz vor dem Zugriff durch Dritte ist nicht möglich."
}
]
},
{
heading: "Verwendung von Cookies", content: [
{
type: "paragraph", text: "Diese Website nutzt Cookies, um die Benutzererfahrung zu optimieren. Sie können die Cookie-Einstellungen in Ihrem Browser jederzeit deaktivieren. Beachten Sie jedoch, dass dies zu Einschränkungen bei der Nutzbarkeit dieser Website führen kann."
}
]
},
{
heading: "Rechtswirksamkeit dieses Impressums", content: [
{
type: "paragraph", text: "Dieses Impressum gilt für alle Domains und Subdomains dieser Website. Es unterliegt deutschem Recht und wird nach deutschem Recht ausgelegt."
}
]
},
{
heading: "Streitbeilegung", content: [
{
type: "paragraph", text: "Die Europäische Kommission stellt eine Plattform zur Online-Streitbeilegung (OS) bereit: https://ec.europa.eu/consumers/odr/. Meine E-Mail-Adresse finden Sie in diesem Impressum. Wir sind nicht bereit oder verpflichtet, an Streitbeilegungsverfahren vor einer Verbraucherschlichtungsstelle teilzunehmen."
}
]
}
]}
/>
</div>
<div id="footer" data-section="footer">
<FooterLogoEmphasis
logoText="Peter Friis"
columns={[
{
items: [
{ label: "Arbeiten", href: "#portfolio" },
{ label: "Dienstleistungen", href: "#services" },
{ label: "Bereitstellung", href: "#deployment" }
{ label: "Arbeiten", href: "portfolio" },
{ label: "Dienstleistungen", href: "services" },
{ label: "Bereitstellung", href: "deployment" }
]
},
{
items: [
{ label: "E-Mail", href: "mailto:friisp@gmail.com" },
{ label: "Telefon", href: "tel:+49176611696541" },
{ label: "LinkedIn", href: "#" }
{ label: "E-Mail", href: "mailto:peteralexanderfriis696@gmail.com" },
{ label: "Telefon", href: "tel:+49176611696541" }
]
},
{
items: [
{ label: "Datenschutzerklärung", href: "#" },
{ label: "Datenschutzrichtlinie", href: "#" },
{ label: "Nutzungsbedingungen", href: "#" },
{ label: "Impressum", href: "#" }
{ label: "Impressum", href: "impressum" }
]
}
]}
/>
</div>
{/* Email Modal */}
{showEmailModal && (
<div className="fixed inset-0 z-50 flex items-end justify-end p-4 sm:p-6 md:p-8">
<div
className="absolute inset-0 bg-black/50 cursor-pointer"
onClick={() => setShowEmailModal(false)}
/>
<div className="relative bg-[var(--card)] rounded-lg shadow-lg p-6 max-w-sm w-full animate-in slide-in-from-bottom-5">
<button
onClick={() => setShowEmailModal(false)}
className="absolute top-4 right-4 text-[var(--foreground)] opacity-60 hover:opacity-100 transition-opacity"
>
</button>
<div className="flex items-center gap-3 mb-4">
<MailIcon size={24} className="text-[var(--primary-cta)]" />
<h3 className="text-lg font-semibold text-[var(--foreground)]">E-Mail Adresse</h3>
</div>
<p className="text-[var(--foreground)] opacity-80 mb-4">peteralexanderfriis696@gmail.com</p>
<a
href="mailto:peteralexanderfriis696@gmail.com"
className="inline-block w-full text-center bg-[var(--primary-cta)] hover:opacity-90 text-white font-semibold py-2 px-4 rounded-lg transition-opacity"
>
E-Mail öffnen
</a>
</div>
</div>
)}
{/* Phone Modal */}
{showPhoneModal && (
<div className="fixed inset-0 z-50 flex items-end justify-end p-4 sm:p-6 md:p-8">
<div
className="absolute inset-0 bg-black/50 cursor-pointer"
onClick={() => setShowPhoneModal(false)}
/>
<div className="relative bg-[var(--card)] rounded-lg shadow-lg p-6 max-w-sm w-full animate-in slide-in-from-bottom-5">
<button
onClick={() => setShowPhoneModal(false)}
className="absolute top-4 right-4 text-[var(--foreground)] opacity-60 hover:opacity-100 transition-opacity"
>
</button>
<div className="flex items-center gap-3 mb-4">
<PhoneIcon size={24} className="text-[var(--primary-cta)]" />
<h3 className="text-lg font-semibold text-[var(--foreground)]">Telefonnummer</h3>
</div>
<p className="text-[var(--foreground)] opacity-80 mb-4">+49 179 2355413</p>
<a
href="tel:+49179235541"
className="inline-block w-full text-center bg-[var(--primary-cta)] hover:opacity-90 text-white font-semibold py-2 px-4 rounded-lg transition-opacity"
>
Anrufen
</a>
</div>
</div>
)}
{/* Floating Contact Buttons */}
<div className="fixed bottom-6 right-6 flex gap-3 z-40">
<button
onClick={() => setShowEmailModal(true)}
className="w-14 h-14 rounded-full bg-[var(--primary-cta)] text-white flex items-center justify-center shadow-lg hover:shadow-xl hover:scale-110 transition-all"
title="E-Mail"
aria-label="E-Mail öffnen"
>
<MailIcon size={24} />
</button>
<button
onClick={() => setShowPhoneModal(true)}
className="w-14 h-14 rounded-full bg-[var(--primary-cta)] text-white flex items-center justify-center shadow-lg hover:shadow-xl hover:scale-110 transition-all"
title="Telefon"
aria-label="Telefonnummer öffnen"
>
<PhoneIcon size={24} />
</button>
</div>
</ThemeProvider>
);
}