Refactor and redesign law firm demo page with new layout

This commit is contained in:
2025-06-07 22:21:11 +02:00
parent 5e5237ab10
commit eb0dfff3a9
7 changed files with 237 additions and 134 deletions

View File

@@ -1,34 +1,23 @@
import type { Metadata } from "next";
import { Geist, Geist_Mono } from "next/font/google";
import "./globals.css";
import {Inter} from "next/font/google";
import Navbar from "@/components/Navbar";
import Footer from "@/components/Footer";
const geistSans = Geist({
variable: "--font-geist-sans",
subsets: ["latin"],
});
const inter = Inter({subsets: ["latin"]});
const geistMono = Geist_Mono({
variable: "--font-geist-mono",
subsets: ["latin"],
});
export const metadata: Metadata = {
title: "Create Next App",
description: "Generated by create next app",
export const metadata = {
title: "Kanzlei Mustermann",
description: "Kompetente Rechtsberatung in allen Lebenslagen",
};
export default function RootLayout({
children,
}: Readonly<{
children: React.ReactNode;
}>) {
return (
<html lang="en">
<body
className={`${geistSans.variable} ${geistMono.variable} antialiased`}
>
{children}
</body>
</html>
);
export default function RootLayout({children}: { children: React.ReactNode }) {
return (
<html lang="de">
<body className={inter.className}>
<Navbar/>
<main>{children}</main>
<Footer/>
</body>
</html>
);
}

View File

@@ -1,103 +1,128 @@
import Image from "next/image";
// app/page.tsx
'use client';
export default function Home() {
return (
<div className="grid grid-rows-[20px_1fr_20px] items-center justify-items-center min-h-screen p-8 pb-20 gap-16 sm:p-20 font-[family-name:var(--font-geist-sans)]">
<main className="flex flex-col gap-[32px] row-start-2 items-center sm:items-start">
<Image
className="dark:invert"
src="/next.svg"
alt="Next.js logo"
width={180}
height={38}
priority
/>
<ol className="list-inside list-decimal text-sm/6 text-center sm:text-left font-[family-name:var(--font-geist-mono)]">
<li className="mb-2 tracking-[-.01em]">
Get started by editing{" "}
<code className="bg-black/[.05] dark:bg-white/[.06] px-1 py-0.5 rounded font-[family-name:var(--font-geist-mono)] font-semibold">
app/page.tsx
</code>
.
</li>
<li className="tracking-[-.01em]">
Save and see your changes instantly.
</li>
</ol>
import {motion} from 'framer-motion';
import Link from 'next/link';
import Image from 'next/image';
<div className="flex gap-4 items-center flex-col sm:flex-row">
<a
className="rounded-full border border-solid border-transparent transition-colors flex items-center justify-center bg-foreground text-background gap-2 hover:bg-[#383838] dark:hover:bg-[#ccc] font-medium text-sm sm:text-base h-10 sm:h-12 px-4 sm:px-5 sm:w-auto"
href="https://vercel.com/new?utm_source=create-next-app&utm_medium=appdir-template-tw&utm_campaign=create-next-app"
target="_blank"
rel="noopener noreferrer"
>
<Image
className="dark:invert"
src="/vercel.svg"
alt="Vercel logomark"
width={20}
height={20}
/>
Deploy now
</a>
<a
className="rounded-full border border-solid border-black/[.08] dark:border-white/[.145] transition-colors flex items-center justify-center hover:bg-[#f2f2f2] dark:hover:bg-[#1a1a1a] hover:border-transparent font-medium text-sm sm:text-base h-10 sm:h-12 px-4 sm:px-5 w-full sm:w-auto md:w-[158px]"
href="https://nextjs.org/docs?utm_source=create-next-app&utm_medium=appdir-template-tw&utm_campaign=create-next-app"
target="_blank"
rel="noopener noreferrer"
>
Read our docs
</a>
export default function HomePage() {
return (
<div className="flex flex-col min-h-screen">
<motion.div
initial={{opacity: 0, y: 20}}
animate={{opacity: 1, y: 0}}
transition={{duration: 0.6}}
className="space-y-24 pt-32 pb-16 px-4 md:px-12 lg:px-24 bg-[#f9f9f9] text-gray-900"
>
{/* Hero Section mit Hintergrundbild */}
<section className="relative text-center text-white h-[70vh] rounded-xl overflow-hidden shadow-lg">
<Image
src="/images/hero.jpeg"
alt="Anwaltskanzlei Hintergrund"
fill
className="object-cover brightness-[0.4]"
quality={90}
/>
<div className="relative z-10 flex flex-col justify-center items-center h-full px-4">
<h1 className="text-4xl md:text-6xl font-bold mb-6">Ihre Kanzlei für Arbeits-, Familien- und
Vertragsrecht</h1>
<p className="text-lg max-w-2xl text-gray-100">
Persönliche Betreuung. Klare Kommunikation. Effektive Lösungen für Ihr Anliegen.
</p>
<Link href="/kontakt">
<motion.button
whileHover={{scale: 1.05}}
whileTap={{scale: 0.95}}
className="mt-6 px-8 py-3 bg-blue-700 text-white rounded-xl shadow hover:bg-blue-800 transition"
>
Kontakt aufnehmen
</motion.button>
</Link>
</div>
</section>
{/* Divider */}
<div className="w-full h-[2px] bg-gray-300"/>
{/* Leistungen */}
<section>
<h2 className="text-3xl font-bold text-center mb-12">Unsere Schwerpunkte</h2>
<div className="grid md:grid-cols-3 gap-8">
{[
{
title: 'Arbeitsrecht',
desc: 'Kündigung, Abmahnung, Aufhebungsvertrag wir setzen Ihre Rechte durch.'
},
{
title: 'Familienrecht',
desc: 'Trennung, Scheidung, Unterhalt wir stehen Ihnen zur Seite.'
},
{
title: 'Vertragsrecht',
desc: 'Beratung & Gestaltung von Verträgen für Privatpersonen und Unternehmen.'
},
].map(({title, desc}) => (
<motion.div
key={title}
whileInView={{opacity: 1, y: 0}}
initial={{opacity: 0, y: 30}}
transition={{duration: 0.4}}
viewport={{once: true}}
className="bg-white p-6 rounded-xl shadow hover:shadow-md"
>
<h3 className="text-xl font-semibold mb-2">{title}</h3>
<p className="text-gray-600">{desc}</p>
</motion.div>
))}
</div>
</section>
{/* Divider */}
<div className="w-full h-[2px] bg-gray-300"/>
{/* Über die Kanzlei */}
<section className="max-w-4xl mx-auto text-center">
<h2 className="text-3xl font-bold mb-6">Über unsere Kanzlei</h2>
<p className="text-gray-700 text-lg">
Seit über 15 Jahren beraten und vertreten wir Mandantinnen und Mandanten aus ganz Deutschland.
Unsere Kanzlei steht für Kompetenz, Integrität und persönliche Betreuung. Wir nehmen uns Zeit
für Ihre Anliegen und entwickeln individuelle Strategien effizient und zielorientiert.
</p>
</section>
{/* Divider */}
<div className="w-full h-[2px] bg-gray-300"/>
{/* Vorteile */}
<section>
<h2 className="text-3xl font-bold text-center mb-10">Ihre Vorteile mit uns</h2>
<div className="grid md:grid-cols-3 gap-8 text-center">
{[
'Direkte & ehrliche Kommunikation',
'Schnelle Terminvergabe',
'Fachanwälte mit jahrelanger Erfahrung',
].map((vorteil) => (
<div key={vorteil} className="bg-white p-6 rounded-xl shadow">
<p className="text-gray-800 font-medium">{vorteil}</p>
</div>
))}
</div>
</section>
{/* Divider */}
<div className="w-full h-[2px] bg-gray-300"/>
{/* Call to Action */}
<section className="text-center">
<h2 className="text-2xl font-bold mb-4">Vereinbaren Sie jetzt ein unverbindliches Erstgespräch</h2>
<Link href="/kontakt">
<button
className="px-8 py-3 bg-blue-700 text-white rounded-xl hover:bg-blue-800 transition shadow">
Jetzt Termin sichern
</button>
</Link>
</section>
</motion.div>
</div>
</main>
<footer className="row-start-3 flex gap-[24px] flex-wrap items-center justify-center">
<a
className="flex items-center gap-2 hover:underline hover:underline-offset-4"
href="https://nextjs.org/learn?utm_source=create-next-app&utm_medium=appdir-template-tw&utm_campaign=create-next-app"
target="_blank"
rel="noopener noreferrer"
>
<Image
aria-hidden
src="/file.svg"
alt="File icon"
width={16}
height={16}
/>
Learn
</a>
<a
className="flex items-center gap-2 hover:underline hover:underline-offset-4"
href="https://vercel.com/templates?framework=next.js&utm_source=create-next-app&utm_medium=appdir-template-tw&utm_campaign=create-next-app"
target="_blank"
rel="noopener noreferrer"
>
<Image
aria-hidden
src="/window.svg"
alt="Window icon"
width={16}
height={16}
/>
Examples
</a>
<a
className="flex items-center gap-2 hover:underline hover:underline-offset-4"
href="https://nextjs.org?utm_source=create-next-app&utm_medium=appdir-template-tw&utm_campaign=create-next-app"
target="_blank"
rel="noopener noreferrer"
>
<Image
aria-hidden
src="/globe.svg"
alt="Globe icon"
width={16}
height={16}
/>
Go to nextjs.org
</a>
</footer>
</div>
);
}
);
}