15 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
29b2b38490 Update src/app/page.tsx 2026-03-04 14:44:56 +00:00
49402cd23f Update src/app/layout.tsx 2026-03-04 14:44:55 +00:00
4181addd02 Merge version_6 into main
Merge version_6 into main
2026-03-04 14:43:56 +00:00
642be3112c Merge version_6 into main
Merge version_6 into main
2026-03-04 14:01:35 +00:00
2 changed files with 270 additions and 86 deletions

View File

@@ -6,7 +6,7 @@ import "./globals.css";
const inter = Inter({ subsets: ["latin"] });
export const metadata: Metadata = {
title: "Peter Friis - Web Designer", description: "Professional web designer creating stunning digital experiences. Deploy your site easily with Next.js, Vercel, or any Node.js hosting platform."
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({
@@ -15,7 +15,7 @@ export default function RootLayout({
children: React.ReactNode;
}) {
return (
<html lang="en">
<html lang="de">
<head>
<script>
{`
@@ -24,44 +24,44 @@ export default function RootLayout({
{
name: 'Vercel',
steps: [
'1. Push your code to GitHub',
'2. Go to vercel.com and sign up',
'3. Click "New Project" and select your repository',
'4. Vercel auto-detects Next.js and deploys automatically',
'5. Your site is live at vercel.app domain'
'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 unter der Vercel.app-Domain'
]
},
{
name: 'Netlify',
steps: [
'1. Push your code to GitHub',
'2. Go to netlify.com and sign up',
'3. Click "New site from Git" and select your repository',
'4. Set build command: npm run build',
'5. Set publish directory: .next/standalone',
'6. Deploy and get your live domain'
'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. 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. Get a server (Digital Ocean, AWS, etc)',
'2. Clone your repository on the server',
'3. Run: npm install && npm run build',
'4. Set NODE_ENV=production',
'5. Start with: npm start or use PM2',
'6. Set up nginx/Apache as reverse proxy',
'7. Configure your domain DNS'
'1. Rufen Sie einen Server ab (Digital Ocean, AWS, usw.)',
'2. Klonen Sie Ihr Repository auf dem Server',
'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 Ihr Domain-DNS'
]
},
{
name: 'Docker Deployment',
name: 'Docker-Bereitstellung',
steps: [
'1. Create a Dockerfile in your project root',
'2. Build image: docker build -t myapp .',
'3. Run container: docker run -p 3000:3000 myapp',
'4. Push to Docker Hub or container registry',
'5. Deploy to cloud platforms (AWS ECS, GCP, etc)'
'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 verschieben',
'5. In Cloud-Plattformen bereitstellen (AWS ECS, GCP usw.)'
]
}
],
@@ -71,14 +71,14 @@ export default function RootLayout({
'DATABASE_URL=your-database-url'
],
postDeploymentChecklist: [
'Test all navigation links',
'Verify responsive design on mobile',
'Check email forms work correctly',
'Confirm images load properly',
'Test contact forms submission',
'Verify SEO meta tags',
'Check page load performance',
'Set up SSL certificate (HTTPS)'
'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 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"
@@ -27,47 +46,47 @@ export default function LandingPage() {
<NavbarStyleFullscreen
brandName="Peter Friis"
navItems={[
{ name: "Work", id: "portfolio" },
{ name: "Services", id: "services" },
{ name: "Deployment", id: "deployment" },
{ name: "Contact", id: "contact" }
{ name: "Arbeiten", id: "portfolio" },
{ name: "Dienstleistungen", id: "services" },
{ name: "Bereitstellung", id: "deployment" },
{ name: "Kontakt", id: "contact" }
]}
bottomLeftText="Web Designer"
bottomRightText="friisp@gmail.com"
bottomLeftText="Webdesigner"
bottomRightText="peteralexanderfriis696@gmail.com"
/>
</div>
<div id="hero" data-section="hero">
<HeroBillboardRotatedCarousel
title="Web Design That Captivates"
description="I create stunning, user-centric websites that blend beautiful design with seamless functionality. Let's transform your vision into a digital experience that converts."
tag="Professional Designer"
title="Webdesign, das fesselt"
description="Ich erstelle atemberaubende, benutzerorientierte Websites, die schönes Design mit nahtloser Funktionalität verbinden. Lassen Sie uns Ihre Vision in ein digitales Erlebnis umwandeln, das konvertiert."
tag="Professioneller Designer"
tagIcon={Sparkles}
tagAnimation="slide-up"
background={{ variant: "animated-grid" }}
buttons={[
{ text: "View My Work", href: "#portfolio" },
{ text: "Get Started", href: "#contact" }
{ text: "Meine Arbeiten ansehen", onClick: handleScrollToPortfolio },
{ text: "Erste Schritte", onClick: handleScrollToContact }
]}
buttonAnimation="slide-up"
carouselItems={[
{
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: "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: "Creative agency 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 platform design"
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"
},
{
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: "Fashion brand website"
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: "Consulting 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}
@@ -77,8 +96,8 @@ export default function LandingPage() {
<div id="portfolio" data-section="portfolio">
<ProductCardOne
title="Featured Work"
description="A selection of my recent web design projects showcasing diverse industries and design approaches."
title="Ausgewählte Arbeiten"
description="Eine Auswahl meiner neuesten Webdesign-Projekte, die verschiedene Branchen und Design-Ansätze zeigen."
tag="Portfolio"
tagIcon={Briefcase}
tagAnimation="slide-up"
@@ -88,22 +107,22 @@ export default function LandingPage() {
animationType="slide-up"
products={[
{
id: "1", name: "E-Commerce Platform", 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 platform design"
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: "Creative Agency Site", 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: "Creative agency 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 Platform", 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 platform design"
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"
},
{
id: "5", name: "Fashion Brand", 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: "Fashion brand website"
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: "Consulting Firm", 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"
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"
}
]}
/>
@@ -111,24 +130,24 @@ export default function LandingPage() {
<div id="services" data-section="services">
<FeatureCardNineteen
title="My Services"
description="End-to-end web design solutions tailored to your business goals and brand identity."
tag="What I Offer"
title="Meine Dienstleistungen"
description="End-to-End-Webdesign-Lösungen, zugeschnitten auf Ihre Geschäftsziele und Markenidentität."
tag="Was ich anbiete"
tagAnimation="slide-up"
textboxLayout="default"
useInvertedBackground={false}
features={[
{
id: 1,
tag: "Design", title: "Web Design", subtitle: "Beautiful, intuitive interfaces that engage users.", description: "I create custom web designs that reflect your brand identity and captivate your audience. From concept to execution, every pixel is carefully crafted for optimal user experience and visual impact.", 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: "Web design workspace"
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: "Development", title: "Responsive Development", subtitle: "Websites that work seamlessly across all devices.", description: "Responsive design ensures your website looks and functions flawlessly on desktop, tablet, and mobile. I use modern technologies and best practices to deliver fast, secure, and SEO-optimized websites.", 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 development"
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: "Optimization", title: "Performance & SEO", subtitle: "Optimized for search engines and user engagement.", description: "I optimize websites for speed, accessibility, and search engine visibility. Strategic SEO implementation ensures your site reaches the right audience and ranks well on search results."
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."
}
]}
/>
@@ -136,9 +155,9 @@ export default function LandingPage() {
<div id="deployment" data-section="deployment">
<FeatureCardNineteen
title="How to Deploy Your Site"
description="Multiple deployment options to get your website live quickly and reliably."
tag="Deployment Guide"
title="So stellen Sie Ihre Website bereit"
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: "Recommended", title: "Deploy on Vercel", subtitle: "Fastest way to deploy Next.js projects.", description: "1. Push your code to GitHub\n2. Sign up at vercel.com\n3. Connect your repository\n4. Vercel auto-detects Next.js and deploys automatically\n5. Your site is live instantly with automatic SSL and 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 deployment"
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: "Deploy on Netlify", subtitle: "Great alternative with easy GitHub integration.", description: "1. Push code to GitHub\n2. Sign up at netlify.com\n3. Select 'New site from Git'\n4. Build command: npm run build\n5. Publish directory: .next/standalone\n6. Deploy and get your 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 deployment"
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: "Self-Hosted", title: "Deploy with Docker", subtitle: "Deploy anywhere with containerization.", description: "1. Create Dockerfile in project root\n2. Build image: docker build -t myapp .\n3. Run: docker run -p 3000:3000 myapp\n4. Push to Docker Hub\n5. Deploy to AWS ECS, Google Cloud, or DigitalOcean"
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"
}
]}
/>
@@ -162,14 +181,14 @@ export default function LandingPage() {
<div id="contact" data-section="contact">
<ContactCTA
tag="Let's Work Together"
tag="Lassen Sie uns zusammenarbeiten"
tagIcon={Mail}
tagAnimation="slide-up"
title="Ready to Elevate Your Online Presence?"
description="Let's collaborate to create a website that not only looks stunning but also drives results. I'm excited to bring your vision to life."
title="Bereit, Ihre Online-Präsenz zu verbessern?"
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: "Contact Me", href: "mailto:friisp@gmail.com" },
{ text: "Call: +49 179 2355413", href: "tel:+49176611696541" }
{ text: "Kontaktieren Sie mich", href: "mailto:peteralexanderfriis696@gmail.com" },
{ text: "Anrufen: +49 179 2355413", href: "tel:+49176611696541" }
]}
buttonAnimation="slide-up"
background={{ variant: "animated-grid" }}
@@ -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: "Work", href: "#portfolio" },
{ label: "Services", href: "#services" },
{ label: "Deployment", href: "#deployment" }
{ label: "Arbeiten", href: "portfolio" },
{ label: "Dienstleistungen", href: "services" },
{ label: "Bereitstellung", href: "deployment" }
]
},
{
items: [
{ label: "Email", href: "mailto:friisp@gmail.com" },
{ label: "Phone", href: "tel:+49176611696541" },
{ label: "LinkedIn", href: "#" }
{ label: "E-Mail", href: "mailto:peteralexanderfriis696@gmail.com" },
{ label: "Telefon", href: "tel:+49176611696541" }
]
},
{
items: [
{ label: "Privacy Policy", href: "#" },
{ label: "Terms of Service", href: "#" },
{ label: "Impressum", href: "#" }
{ label: "Datenschutzrichtlinie", href: "#" },
{ label: "Nutzungsbedingungen", 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>
);
}