Update components with German translations and localized content; modify About19, Contact21, CTA, FAQ, Feature, Footer, Hero, Pricing, and Stats sections for improved clarity and user engagement.
This commit is contained in:
BIN
public/about.jpg
Normal file
BIN
public/about.jpg
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 325 KiB |
@@ -12,7 +12,7 @@ const About19 = ({ className }: About19Props) => {
|
|||||||
<div className="grid grid-cols-1 gap-15 lg:grid-cols-7 lg:gap-1">
|
<div className="grid grid-cols-1 gap-15 lg:grid-cols-7 lg:gap-1">
|
||||||
<div className="col-span-4 h-120">
|
<div className="col-span-4 h-120">
|
||||||
<img
|
<img
|
||||||
src="https://deifkwefumgah.cloudfront.net/shadcnblocks/block/guri4/img2.png"
|
src="/about.jpg"
|
||||||
alt=""
|
alt=""
|
||||||
className="h-full w-full object-cover rounded-xl shadow-md"
|
className="h-full w-full object-cover rounded-xl shadow-md"
|
||||||
/>
|
/>
|
||||||
@@ -20,19 +20,19 @@ const About19 = ({ className }: About19Props) => {
|
|||||||
|
|
||||||
<div className="col-span-3 ml-auto max-w-4xl space-y-15 lg:pl-15">
|
<div className="col-span-3 ml-auto max-w-4xl space-y-15 lg:pl-15">
|
||||||
<h1 className="text-2xl font-medium tracking-tight">
|
<h1 className="text-2xl font-medium tracking-tight">
|
||||||
We are a team of creators, thinkers, and builders who believe in
|
Ich bin Matthias Meister und begleite KMU auf dem Weg zu einem
|
||||||
crafting experiences that truly connect. Our story is built on
|
professionellen Online-Auftritt, der klar kommuniziert und
|
||||||
passion, innovation, and the drive to bring meaningful ideas to
|
Vertrauen aufbaut.
|
||||||
life.
|
|
||||||
</h1>
|
</h1>
|
||||||
<p className="text-base text-foreground/40 lg:text-lg">
|
<p className="text-base text-foreground/40 lg:text-lg">
|
||||||
We ask: What’s the goal? Who’s it for? How do we make it
|
Mein Fokus liegt auf Websites, die nicht ueberladen wirken,
|
||||||
effortless? we begin with why, who, and how to make it better.
|
sondern Orientierung geben und den naechsten Kontakt einfach
|
||||||
|
machen.
|
||||||
</p>
|
</p>
|
||||||
<div className="flex flex-col justify-between gap-4 lg:flex-row lg:items-center">
|
<div className="flex flex-col justify-between gap-4 lg:flex-row lg:items-center">
|
||||||
<p className="flex-1 text-sm text-foreground/40">
|
<p className="flex-1 text-sm text-foreground/40">
|
||||||
We aim to bring diverse minds together, turning ideas into
|
Sie erhalten direkte Abstimmung, klare Schritte und eine
|
||||||
experiences that matter.
|
Umsetzung, die zu Ihrem Geschaeft passt.
|
||||||
</p>
|
</p>
|
||||||
<div className="flex w-fit items-center gap-2">
|
<div className="flex w-fit items-center gap-2">
|
||||||
<img
|
<img
|
||||||
@@ -41,9 +41,9 @@ const About19 = ({ className }: About19Props) => {
|
|||||||
alt="avatr"
|
alt="avatr"
|
||||||
/>
|
/>
|
||||||
<div>
|
<div>
|
||||||
<h3 className="font-medium tracking-tight">John Doe</h3>
|
<h3 className="font-medium tracking-tight">Matthias Meister</h3>
|
||||||
<p className="text-sm text-foreground/40">
|
<p className="text-sm text-foreground/40">
|
||||||
Creative Director
|
Freelance Webdesigner
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -17,12 +17,12 @@ import { Input } from "@/components/ui/input";
|
|||||||
import { cn } from "@/lib/utils";
|
import { cn } from "@/lib/utils";
|
||||||
|
|
||||||
const contactFormSchema = z.object({
|
const contactFormSchema = z.object({
|
||||||
name: z.string().min(1, "Name is required"),
|
name: z.string().min(1, "Bitte geben Sie Ihren Namen ein"),
|
||||||
email: z
|
email: z
|
||||||
.string()
|
.string()
|
||||||
.min(1, "Email is required")
|
.min(1, "Bitte geben Sie Ihre E-Mail ein")
|
||||||
.email("Please enter a valid email"),
|
.email("Bitte geben Sie eine gueltige E-Mail ein"),
|
||||||
message: z.string().min(1, "Message is required"),
|
message: z.string().min(1, "Bitte beschreiben Sie kurz Ihr Anliegen"),
|
||||||
});
|
});
|
||||||
|
|
||||||
type ContactFormData = z.infer<typeof contactFormSchema>;
|
type ContactFormData = z.infer<typeof contactFormSchema>;
|
||||||
@@ -62,7 +62,7 @@ const Contact21 = ({ className, onSubmit }: Contact21Props) => {
|
|||||||
setTimeout(() => setIsSubmitted(false), 5000);
|
setTimeout(() => setIsSubmitted(false), 5000);
|
||||||
} catch {
|
} catch {
|
||||||
form.setError("root", {
|
form.setError("root", {
|
||||||
message: "Something went wrong. Please try again.",
|
message: "Beim Senden ist etwas schiefgelaufen. Bitte versuchen Sie es erneut.",
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
@@ -73,9 +73,9 @@ const Contact21 = ({ className, onSubmit }: Contact21Props) => {
|
|||||||
<div className="mt-20 flex flex-col justify-between gap-15 md:gap-10 lg:flex-row">
|
<div className="mt-20 flex flex-col justify-between gap-15 md:gap-10 lg:flex-row">
|
||||||
<div className="flex w-full max-w-lg flex-col justify-between gap-10">
|
<div className="flex w-full max-w-lg flex-col justify-between gap-10">
|
||||||
<p className="indent-[22%] text-3xl font-medium tracking-tight text-muted-foreground/50 lg:text-4xl">
|
<p className="indent-[22%] text-3xl font-medium tracking-tight text-muted-foreground/50 lg:text-4xl">
|
||||||
We are a team of creators, thinkers, and builders who believe in
|
Ich unterstuetze Unternehmen dabei, online professionell
|
||||||
crafting experiences that truly connect.{" "}
|
aufzutreten. Schreiben Sie mir kurz, worum es geht.{" "}
|
||||||
<span className="text-foreground">We're here to help</span>
|
<span className="text-foreground">Ich melde mich zeitnah</span>
|
||||||
</p>
|
</p>
|
||||||
<div className="mt-5 flex items-center gap-4 lg:mt-20">
|
<div className="mt-5 flex items-center gap-4 lg:mt-20">
|
||||||
<img
|
<img
|
||||||
@@ -84,14 +84,18 @@ const Contact21 = ({ className, onSubmit }: Contact21Props) => {
|
|||||||
alt="avatar"
|
alt="avatar"
|
||||||
/>
|
/>
|
||||||
<div>
|
<div>
|
||||||
<h3 className="text-lg font-medium tracking-tight">John Doe</h3>
|
<h3 className="text-lg font-medium tracking-tight">
|
||||||
<p className="text-sm text-foreground/40">Creative Director</p>
|
Matthias Meister
|
||||||
|
</h3>
|
||||||
|
<p className="text-sm text-foreground/40">
|
||||||
|
Freelance Webdesigner
|
||||||
|
</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div className="col-span-4 flex w-full flex-col gap-2 lg:pl-10">
|
<div className="col-span-4 flex w-full flex-col gap-2 lg:pl-10">
|
||||||
<h1 className="mb-7 text-6xl font-semibold tracking-tight lg:text-5xl">
|
<h1 className="mb-7 text-6xl font-semibold tracking-tight lg:text-5xl">
|
||||||
Get in Touch
|
Projekt anfragen
|
||||||
</h1>
|
</h1>
|
||||||
|
|
||||||
{isSubmitted && (
|
{isSubmitted && (
|
||||||
@@ -102,7 +106,7 @@ const Contact21 = ({ className, onSubmit }: Contact21Props) => {
|
|||||||
)}
|
)}
|
||||||
>
|
>
|
||||||
<p className="text-sm font-medium text-green-600 dark:text-green-400">
|
<p className="text-sm font-medium text-green-600 dark:text-green-400">
|
||||||
Thank you! We'll be in touch soon.
|
Vielen Dank! Ich melde mich in Kuerze bei Ihnen.
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
)}
|
)}
|
||||||
@@ -137,14 +141,14 @@ const Contact21 = ({ className, onSubmit }: Contact21Props) => {
|
|||||||
render={({ field, fieldState }) => (
|
render={({ field, fieldState }) => (
|
||||||
<Field data-invalid={fieldState.invalid}>
|
<Field data-invalid={fieldState.invalid}>
|
||||||
<FieldLabel htmlFor={field.name} className="sr-only">
|
<FieldLabel htmlFor={field.name} className="sr-only">
|
||||||
Email
|
E-Mail
|
||||||
</FieldLabel>
|
</FieldLabel>
|
||||||
<Input
|
<Input
|
||||||
{...field}
|
{...field}
|
||||||
id={field.name}
|
id={field.name}
|
||||||
type="email"
|
type="email"
|
||||||
aria-invalid={fieldState.invalid}
|
aria-invalid={fieldState.invalid}
|
||||||
placeholder="Email*"
|
placeholder="E-Mail*"
|
||||||
className="h-15 rounded-none border-0 border-b border-b-foreground/25 bg-transparent! shadow-none placeholder:text-foreground/20 focus-visible:ring-0 lg:text-base"
|
className="h-15 rounded-none border-0 border-b border-b-foreground/25 bg-transparent! shadow-none placeholder:text-foreground/20 focus-visible:ring-0 lg:text-base"
|
||||||
/>
|
/>
|
||||||
{fieldState.invalid && (
|
{fieldState.invalid && (
|
||||||
@@ -160,13 +164,13 @@ const Contact21 = ({ className, onSubmit }: Contact21Props) => {
|
|||||||
render={({ field, fieldState }) => (
|
render={({ field, fieldState }) => (
|
||||||
<Field data-invalid={fieldState.invalid}>
|
<Field data-invalid={fieldState.invalid}>
|
||||||
<FieldLabel htmlFor={field.name} className="sr-only">
|
<FieldLabel htmlFor={field.name} className="sr-only">
|
||||||
Message
|
Nachricht
|
||||||
</FieldLabel>
|
</FieldLabel>
|
||||||
<Input
|
<Input
|
||||||
{...field}
|
{...field}
|
||||||
id={field.name}
|
id={field.name}
|
||||||
aria-invalid={fieldState.invalid}
|
aria-invalid={fieldState.invalid}
|
||||||
placeholder="Message (Tell us about your project)"
|
placeholder="Nachricht (Worum geht es bei Ihrem Projekt?)"
|
||||||
className="h-15 rounded-none border-0 border-b border-b-foreground/25 bg-transparent! shadow-none placeholder:text-foreground/20 focus-visible:ring-0 lg:text-base"
|
className="h-15 rounded-none border-0 border-b border-b-foreground/25 bg-transparent! shadow-none placeholder:text-foreground/20 focus-visible:ring-0 lg:text-base"
|
||||||
/>
|
/>
|
||||||
{fieldState.invalid && (
|
{fieldState.invalid && (
|
||||||
@@ -189,12 +193,12 @@ const Contact21 = ({ className, onSubmit }: Contact21Props) => {
|
|||||||
{form.formState.isSubmitting ? (
|
{form.formState.isSubmitting ? (
|
||||||
<>
|
<>
|
||||||
<LoaderIcon className="size-5 animate-spin" />
|
<LoaderIcon className="size-5 animate-spin" />
|
||||||
Sending...
|
Wird gesendet...
|
||||||
</>
|
</>
|
||||||
) : (
|
) : (
|
||||||
<>
|
<>
|
||||||
<CornerDownRight className="size-5" />
|
<CornerDownRight className="size-5" />
|
||||||
Get in touch
|
Unverbindlich anfragen
|
||||||
</>
|
</>
|
||||||
)}
|
)}
|
||||||
</Button>
|
</Button>
|
||||||
|
|||||||
@@ -7,18 +7,19 @@ export default function CTASection() {
|
|||||||
<div className="rounded-2xl bg-linear-to-r bg-[url('https://images.unsplash.com/photo-1739785890803-7a2191a37ef5?q=80&w=2940&auto=format&fit=crop&ixlib=rb-4.1.0&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D')] bg-cover bg-bottom px-8 py-10 md:px-16 md:py-20">
|
<div className="rounded-2xl bg-linear-to-r bg-[url('https://images.unsplash.com/photo-1739785890803-7a2191a37ef5?q=80&w=2940&auto=format&fit=crop&ixlib=rb-4.1.0&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D')] bg-cover bg-bottom px-8 py-10 md:px-16 md:py-20">
|
||||||
<header className="mb-8 max-w-2xl space-y-4">
|
<header className="mb-8 max-w-2xl space-y-4">
|
||||||
<h2 className="font-heading text-4xl leading-10 text-black lg:text-4xl">
|
<h2 className="font-heading text-4xl leading-10 text-black lg:text-4xl">
|
||||||
Benefit up to 33% when connecting to Sentium for 4 months or more
|
Lassen Sie uns ueber Ihre neue Website sprechen
|
||||||
</h2>
|
</h2>
|
||||||
<p className="text-lg text-black/60">
|
<p className="text-lg text-black/60">
|
||||||
Register and start using our cloud solutions today
|
Ob Neuprojekt oder Redesign: Sie erhalten eine klare Empfehlung
|
||||||
|
und einen realistischen naechsten Schritt.
|
||||||
</p>
|
</p>
|
||||||
</header>
|
</header>
|
||||||
|
|
||||||
{/* CTA Buttons */}
|
{/* CTA Buttons */}
|
||||||
<div className="flex flex-wrap gap-4">
|
<div className="flex flex-wrap gap-4">
|
||||||
<Button size="lg">Get Started</Button>
|
<Button size="lg">Unverbindlich anfragen</Button>
|
||||||
<Button size="lg" variant="secondary">
|
<Button size="lg" variant="secondary">
|
||||||
Contact
|
Erstgespraech vereinbaren
|
||||||
</Button>
|
</Button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -9,29 +9,29 @@ import { cn } from "@/lib/utils";
|
|||||||
|
|
||||||
const faqs = [
|
const faqs = [
|
||||||
{
|
{
|
||||||
question: "What is a FAQ and why is it important?",
|
question: "Wie lange dauert die Umsetzung einer neuen Website?",
|
||||||
answer:
|
answer:
|
||||||
"FAQ stands for Frequently Asked Questions. It is a list that provides answers to common questions people may have about a specific product, service, or topic.",
|
"Das haengt vom Umfang ab. Nach einem kurzen Erstgespraech erhalten Sie einen klaren Ablauf mit realistischem Zeitrahmen.",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
question: "Why should I use a FAQ on my website or app?",
|
question: "Unterstuetzen Sie auch bei Struktur und Texten?",
|
||||||
answer:
|
answer:
|
||||||
"Utilizing a FAQ section on your website or app is a practical way to offer instant assistance to your users or customers. Instead of waiting for customer support responses, they can find quick answers to commonly asked questions. ",
|
"Ja. Ich helfe Ihnen dabei, Inhalte sinnvoll zu ordnen und Texte klar zu formulieren, damit Besucher schnell verstehen, was Sie anbieten.",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
question: "How do I effectively create a FAQ section?",
|
question: "Ist die Website auch auf dem Smartphone optimiert?",
|
||||||
answer:
|
answer:
|
||||||
"Creating a FAQ section starts with gathering the most frequent questions you receive from your users or customers. Once you have a list, you need to write clear, detailed, and helpful answers to each question.",
|
"Ja. Jede Website wird responsive umgesetzt und auf gaengigen Bildschirmgroessen sauber dargestellt.",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
question: "What are the benefits of having a well-maintained FAQ section?",
|
question: "Wie laufen Korrekturen und Abstimmungen ab?",
|
||||||
answer:
|
answer:
|
||||||
"There are numerous advantages to maintaining a robust FAQ section. Firstly, it provides immediate answers to common queries, which improves the user experience.",
|
"Wir stimmen zentrale Punkte frueh ab und arbeiten mit klaren Feedbackrunden, damit der Prozess planbar und effizient bleibt.",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
question: "How do I effectively create a FAQ section?",
|
question: "Was kostet eine Website fuer mein Unternehmen?",
|
||||||
answer:
|
answer:
|
||||||
"Creating a FAQ section starts with gathering the most frequent questions you receive from your users or customers. Once you have a list, you need to write clear, detailed, and helpful answers to each question.",
|
"Die Kosten richten sich nach Ziel, Seitenumfang und gewuenschten Funktionen. Sie erhalten ein transparentes Angebot statt pauschaler Standardpreise.",
|
||||||
},
|
},
|
||||||
];
|
];
|
||||||
|
|
||||||
@@ -46,21 +46,21 @@ const Faq7 = ({ className }: Faq7Props) => {
|
|||||||
<div className="mx-auto grid max-w-7xl gap-10 md:grid-cols-2">
|
<div className="mx-auto grid max-w-7xl gap-10 md:grid-cols-2">
|
||||||
<div className="flex flex-col gap-6">
|
<div className="flex flex-col gap-6">
|
||||||
<h2 className="text-4xl font-semibold">
|
<h2 className="text-4xl font-semibold">
|
||||||
Need Help?
|
Fragen vor dem Start?
|
||||||
<br />
|
<br />
|
||||||
<span className="text-muted-foreground/70">
|
<span className="text-muted-foreground/70">
|
||||||
We're here to assist.
|
Hier finden Sie schnelle Antworten.
|
||||||
</span>
|
</span>
|
||||||
</h2>
|
</h2>
|
||||||
<p className="text-lg text-muted-foreground md:text-xl">
|
<p className="text-lg text-muted-foreground md:text-xl">
|
||||||
Still have questions? Feel free to contact our friendly
|
Falls noch etwas offen ist, schreiben Sie mir gern ueber das
|
||||||
<a href="#" className="mx-1 whitespace-nowrap underline">
|
<a href="#" className="mx-1 whitespace-nowrap underline">
|
||||||
support team
|
Kontaktformular
|
||||||
</a>
|
</a>
|
||||||
specialists.
|
.
|
||||||
</p>
|
</p>
|
||||||
<Button size="lg" variant="outline" className="w-fit">
|
<Button size="lg" variant="outline" className="w-fit">
|
||||||
View all FAQs
|
Alle Fragen ansehen
|
||||||
</Button>
|
</Button>
|
||||||
</div>
|
</div>
|
||||||
<Accordion type="multiple">
|
<Accordion type="multiple">
|
||||||
|
|||||||
@@ -6,38 +6,38 @@ import { cn } from "@/lib/utils";
|
|||||||
|
|
||||||
const featureData = [
|
const featureData = [
|
||||||
{
|
{
|
||||||
desc: "Lorem ipsum dolor sit amet consec adipisicing elit. Quisquam, quos.",
|
desc: "Ihre Website erklaert in wenigen Sekunden, fuer wen Sie arbeiten und was Sie konkret anbieten.",
|
||||||
img: "https://deifkwefumgah.cloudfront.net/shadcnblocks/block/guri3/img1.jpeg",
|
img: "https://deifkwefumgah.cloudfront.net/shadcnblocks/block/guri3/img1.jpeg",
|
||||||
title: "Quality",
|
title: "Klare Positionierung",
|
||||||
badgeTitle: "#1 Block",
|
badgeTitle: "Vorteil 01",
|
||||||
gridClass: "md:col-span-1",
|
gridClass: "md:col-span-1",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
desc: "Consectetur adipiscing elit sed do eiusmod tempor incididunt ut labore. Lorem ipsum dolor sit amet consec adipisicing elit.",
|
desc: "Ein zeitgemaesses Design sorgt fuer einen starken ersten Eindruck und passt zu Ihrem Unternehmen.",
|
||||||
img: "https://deifkwefumgah.cloudfront.net/shadcnblocks/block/guri3/img7.jpeg",
|
img: "https://deifkwefumgah.cloudfront.net/shadcnblocks/block/guri3/img7.jpeg",
|
||||||
title: "Innovation",
|
title: "Modernes Erscheinungsbild",
|
||||||
badgeTitle: "#2 Block",
|
badgeTitle: "Vorteil 02",
|
||||||
gridClass: "lg:col-span-2",
|
gridClass: "lg:col-span-2",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
desc: "Ut enim ad minim veniam quis nostrud exercitation ullamco laboris.",
|
desc: "Ihre Inhalte funktionieren sauber auf Smartphone, Tablet und Desktop - ohne Umwege fuer Besucher.",
|
||||||
img: "https://deifkwefumgah.cloudfront.net/shadcnblocks/block/guri3/img11.jpeg",
|
img: "https://deifkwefumgah.cloudfront.net/shadcnblocks/block/guri3/img11.jpeg",
|
||||||
title: "Performance",
|
title: "Mobil optimiert",
|
||||||
badgeTitle: "#3 Block",
|
badgeTitle: "Vorteil 03",
|
||||||
gridClass: "md:col-span-1 lg:row-span-2 ",
|
gridClass: "md:col-span-1 lg:row-span-2 ",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
desc: "Consectetur adipiscing elit sed do eiusmod tempor incididunt ut labore. Lorem ipsum dolor sit amet consec adipisicing elit.",
|
desc: "Klare Kontaktwege mit gut sichtbaren Handlungsaufforderungen machen den naechsten Schritt leicht.",
|
||||||
img: "https://deifkwefumgah.cloudfront.net/shadcnblocks/block/guri3/img2.jpeg",
|
img: "https://deifkwefumgah.cloudfront.net/shadcnblocks/block/guri3/img2.jpeg",
|
||||||
title: "Innovation",
|
title: "Anfragen ohne Huerden",
|
||||||
badgeTitle: "#2 Block",
|
badgeTitle: "Vorteil 04",
|
||||||
gridClass: "lg:col-span-2",
|
gridClass: "lg:col-span-2",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
desc: "Duis aute irure dolor in reprehenderit in voluptate velit esse.",
|
desc: "Die Seite bleibt wartbar aufgebaut, damit Inhalte spaeter schnell angepasst oder erweitert werden koennen.",
|
||||||
img: "https://deifkwefumgah.cloudfront.net/shadcnblocks/block/guri3/img4.jpeg",
|
img: "https://deifkwefumgah.cloudfront.net/shadcnblocks/block/guri3/img4.jpeg",
|
||||||
title: "Reliability",
|
title: "Pflegeleicht aufgebaut",
|
||||||
badgeTitle: "#4 Block",
|
badgeTitle: "Vorteil 05",
|
||||||
gridClass: "md:col-span-1",
|
gridClass: "md:col-span-1",
|
||||||
},
|
},
|
||||||
];
|
];
|
||||||
|
|||||||
@@ -13,8 +13,8 @@ interface Footer27Props {
|
|||||||
|
|
||||||
const Footer27 = ({ className }: Footer27Props) => {
|
const Footer27 = ({ className }: Footer27Props) => {
|
||||||
const socialLinks = [
|
const socialLinks = [
|
||||||
{ name: "Instagram", href: "#" },
|
{ name: "E-Mail", href: "#" },
|
||||||
{ name: "X (Twitter)", href: "#" },
|
{ name: "LinkedIn", href: "#" },
|
||||||
];
|
];
|
||||||
|
|
||||||
const containerVariants = {
|
const containerVariants = {
|
||||||
@@ -52,15 +52,15 @@ const Footer27 = ({ className }: Footer27Props) => {
|
|||||||
<div className="space-y-8">
|
<div className="space-y-8">
|
||||||
<motion.div variants={itemVariants} className="space-y-6">
|
<motion.div variants={itemVariants} className="space-y-6">
|
||||||
<h2 className="text-4xl leading-tight font-bold text-foreground lg:text-5xl">
|
<h2 className="text-4xl leading-tight font-bold text-foreground lg:text-5xl">
|
||||||
Connect with Me
|
Bereit fuer einen professionellen Webauftritt?
|
||||||
</h2>
|
</h2>
|
||||||
<p className="max-w-md text-lg leading-relaxed text-muted-foreground">
|
<p className="max-w-md text-lg leading-relaxed text-muted-foreground">
|
||||||
No commitments. Just a quick chat to see if we click.
|
Unverbindlich, klar und ohne Verkaufsdruck.
|
||||||
</p>
|
</p>
|
||||||
</motion.div>
|
</motion.div>
|
||||||
|
|
||||||
<motion.div variants={itemVariants}>
|
<motion.div variants={itemVariants}>
|
||||||
<Button size="lg">Get in Touch</Button>
|
<Button size="lg">Erstgespraech vereinbaren</Button>
|
||||||
</motion.div>
|
</motion.div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@@ -110,14 +110,14 @@ const Footer27 = ({ className }: Footer27Props) => {
|
|||||||
className="flex flex-col items-start justify-between gap-4 sm:flex-row sm:items-center"
|
className="flex flex-col items-start justify-between gap-4 sm:flex-row sm:items-center"
|
||||||
>
|
>
|
||||||
<p className="text-sm text-muted-foreground">
|
<p className="text-sm text-muted-foreground">
|
||||||
© Copyright 2025. All rights Reserved.
|
© 2025 Matthias Meister. Alle Rechte vorbehalten.
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<div className="flex items-center gap-6 text-sm">
|
<div className="flex items-center gap-6 text-sm">
|
||||||
<span className="text-muted-foreground">
|
<span className="text-muted-foreground">
|
||||||
Made by{" "}
|
Website von{" "}
|
||||||
<motion.a
|
<motion.a
|
||||||
href="https://x.com/shadcnblocks"
|
href="#"
|
||||||
className="underline underline-offset-4 transition-colors hover:text-foreground"
|
className="underline underline-offset-4 transition-colors hover:text-foreground"
|
||||||
whileHover={{ scale: 1.05 }}
|
whileHover={{ scale: 1.05 }}
|
||||||
transition={{
|
transition={{
|
||||||
@@ -126,7 +126,7 @@ const Footer27 = ({ className }: Footer27Props) => {
|
|||||||
damping: 20,
|
damping: 20,
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
shadcnblocks
|
Matthias Meister
|
||||||
</motion.a>
|
</motion.a>
|
||||||
</span>
|
</span>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -10,21 +10,21 @@ interface Hero235Props {
|
|||||||
const SERVICES = [
|
const SERVICES = [
|
||||||
{
|
{
|
||||||
icon: Sparkles,
|
icon: Sparkles,
|
||||||
title: "Visual Identity",
|
title: "Webdesign mit Klarheit",
|
||||||
description:
|
description:
|
||||||
"We shape visual systems that blend craft and clarity to spark recognition and connection.",
|
"Ein moderner Auftritt, der Ihr Unternehmen auf den ersten Blick professionell wirken laesst.",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
icon: LayoutGrid,
|
icon: LayoutGrid,
|
||||||
title: "Interactive Experiences",
|
title: "Struktur und Texte",
|
||||||
description:
|
description:
|
||||||
"Experiences that tie design and technology together to tell your story in motion.",
|
"Ich unterstuetze bei Seitenstruktur und Inhalten, damit Besucher schnell verstehen, was Sie anbieten.",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
icon: BookOpen,
|
icon: BookOpen,
|
||||||
title: "Workshops",
|
title: "Pflege und Weiterentwicklung",
|
||||||
description:
|
description:
|
||||||
"Hands-on sessions that adapt to your goals and help you grow with practical guidance.",
|
"Auf Wunsch betreue ich Ihre Website weiter, halte Inhalte aktuell und passe Details laufend an.",
|
||||||
},
|
},
|
||||||
];
|
];
|
||||||
|
|
||||||
@@ -58,17 +58,17 @@ const Hero235 = ({ className }: Hero235Props) => {
|
|||||||
</div>
|
</div>
|
||||||
<div className="relative container flex h-full flex-col justify-between">
|
<div className="relative container flex h-full flex-col justify-between">
|
||||||
<div className="flex flex-1 items-center justify-center">
|
<div className="flex flex-1 items-center justify-center">
|
||||||
<div className="mx-auto flex max-w-2xl flex-col items-center text-center">
|
<div className="mx-auto flex max-w-4xl flex-col items-center text-center">
|
||||||
<h1 className="text-4xl font-semibold tracking-tight text-balance text-foreground md:text-5xl lg:text-6xl">
|
<h1 className="text-4xl font-semibold tracking-tight text-balance text-foreground md:text-5xl lg:text-8xl">
|
||||||
Shadcnblocks. Digital craft with an eye for detail
|
Eine moderne Webseite kostet kein Vermögen.
|
||||||
</h1>
|
</h1>
|
||||||
<p className="mt-8 max-w-xl text-pretty text-muted-foreground md:text-lg">
|
<p className="mt-8 max-w-xl text-pretty text-muted-foreground md:text-lg">
|
||||||
We build clear, thoughtful interfaces that work as well as they
|
Ich gestalte klare Unternehmenswebsites, die Vertrauen aufbauen,
|
||||||
look. If you want a partner who turns your vision into something
|
Ihre Leistungen verständlich zeigen und Anfragen einfacher
|
||||||
real, you're in the right place.
|
machen.
|
||||||
</p>
|
</p>
|
||||||
<Button size="lg" className="mt-10">
|
<Button size="lg" className="mt-10">
|
||||||
Explore our work
|
Projekt anfragen
|
||||||
<ArrowDown className="shrink-0" aria-hidden />
|
<ArrowDown className="shrink-0" aria-hidden />
|
||||||
</Button>
|
</Button>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -27,46 +27,48 @@ interface Pricing4Props {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const Pricing4 = ({
|
const Pricing4 = ({
|
||||||
title = "Pricing",
|
title = "Pakete für Ihre Unternehmenswebsite",
|
||||||
description = "Check out our affordable pricing plans.",
|
description =
|
||||||
|
"Sie wählen den passenden Leistungsumfang. Preise nenne ich transparent im Angebot - abgestimmt auf Ziele, Inhalte und Umfang.",
|
||||||
plans = [
|
plans = [
|
||||||
{
|
{
|
||||||
name: "Free",
|
name: "Basis",
|
||||||
badge: "Free",
|
badge: "Basis",
|
||||||
monthlyPrice: "$0",
|
monthlyPrice: "auf Anfrage",
|
||||||
yearlyPrice: "$0",
|
yearlyPrice: "auf Anfrage",
|
||||||
features: [
|
features: [
|
||||||
"Unlimited Integrations",
|
"Bis zu 5 Inhaltsseiten",
|
||||||
"Windows, Linux, Mac support",
|
"Individuelles Design auf Basis Ihres Unternehmensauftritts",
|
||||||
"24/7 Support",
|
"Kontaktformular und rechtliche Standardseiten",
|
||||||
"Free updates",
|
"Responsive Umsetzung für alle geraetetypischen Ansichten",
|
||||||
],
|
],
|
||||||
buttonText: "Get Started",
|
buttonText: "Paket anfragen",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "Pro",
|
name: "Plus",
|
||||||
badge: "Pro",
|
badge: "Plus",
|
||||||
monthlyPrice: "$29",
|
monthlyPrice: "auf Anfrage",
|
||||||
yearlyPrice: "$249",
|
yearlyPrice: "auf Anfrage",
|
||||||
features: [
|
features: [
|
||||||
"Everything in FREE",
|
"Alles aus Basis plus mehr Seitenumfang",
|
||||||
"Live call support every month",
|
"Unterstuetzung bei Struktur und Textfeinschliff",
|
||||||
"Unlimited Storage",
|
"Grundlagen für SEO und schnelle Ladezeiten",
|
||||||
|
"Korrekturschleifen mit klarer Abstimmung",
|
||||||
],
|
],
|
||||||
buttonText: "Purchase",
|
buttonText: "Paket anfragen",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "Elite",
|
name: "Komplett",
|
||||||
badge: "Elite",
|
badge: "Komplett",
|
||||||
monthlyPrice: "$59",
|
monthlyPrice: "auf Anfrage",
|
||||||
yearlyPrice: "$549",
|
yearlyPrice: "auf Anfrage",
|
||||||
features: [
|
features: [
|
||||||
"Everything in PRO",
|
"Alles aus Plus plus erweiterte Inhaltsstruktur",
|
||||||
"Advanced analytics",
|
"Priorisierte Abstimmung waehrend der Umsetzung",
|
||||||
"Custom branding",
|
"Optionales Pflegepaket für Updates und laufende Anpassungen",
|
||||||
"Unlimited users",
|
"Technische Basis fuer eine langfristig wartbare Website",
|
||||||
],
|
],
|
||||||
buttonText: "Purchase",
|
buttonText: "Paket anfragen",
|
||||||
isPopular: true,
|
isPopular: true,
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
@@ -90,20 +92,20 @@ const Pricing4 = ({
|
|||||||
setIsAnnually(value === "annually")
|
setIsAnnually(value === "annually")
|
||||||
}
|
}
|
||||||
className="w-fit shrink-0"
|
className="w-fit shrink-0"
|
||||||
aria-label="Billing period"
|
aria-label="Leistungsvariante"
|
||||||
>
|
>
|
||||||
<TabsList className="grid h-11 w-max grid-cols-2 gap-0 rounded-md p-1 text-lg">
|
<TabsList className="grid h-11 w-max grid-cols-2 gap-0 rounded-md p-1 text-lg">
|
||||||
<TabsTrigger
|
<TabsTrigger
|
||||||
value="monthly"
|
value="monthly"
|
||||||
className="h-full min-h-0 px-7 py-0 font-semibold text-muted-foreground data-active:text-foreground"
|
className="h-full min-h-0 px-7 py-0 font-semibold text-muted-foreground data-active:text-foreground"
|
||||||
>
|
>
|
||||||
Monthly
|
Projekt
|
||||||
</TabsTrigger>
|
</TabsTrigger>
|
||||||
<TabsTrigger
|
<TabsTrigger
|
||||||
value="annually"
|
value="annually"
|
||||||
className="h-full min-h-0 px-7 py-0 font-semibold text-muted-foreground data-active:text-foreground"
|
className="h-full min-h-0 px-7 py-0 font-semibold text-muted-foreground data-active:text-foreground"
|
||||||
>
|
>
|
||||||
Yearly
|
Projekt + Pflege
|
||||||
</TabsTrigger>
|
</TabsTrigger>
|
||||||
</TabsList>
|
</TabsList>
|
||||||
</Tabs>
|
</Tabs>
|
||||||
@@ -122,10 +124,10 @@ const Pricing4 = ({
|
|||||||
<h3 className="font-mono text-4xl lg:text-5xl">
|
<h3 className="font-mono text-4xl lg:text-5xl">
|
||||||
{isAnnually ? plan.yearlyPrice : plan.monthlyPrice}
|
{isAnnually ? plan.yearlyPrice : plan.monthlyPrice}
|
||||||
</h3>
|
</h3>
|
||||||
<p
|
<p className="text-muted-foreground">
|
||||||
className={`text-muted-foreground ${plan.monthlyPrice === "$0" ? "invisible" : ""}`}
|
{isAnnually
|
||||||
>
|
? "Variante: Projekt + Pflege"
|
||||||
{isAnnually ? "Per year" : "Per month"}
|
: "Variante: Projekt"}
|
||||||
</p>
|
</p>
|
||||||
<Separator className="my-6" />
|
<Separator className="my-6" />
|
||||||
<div className="flex h-full flex-col justify-between gap-20">
|
<div className="flex h-full flex-col justify-between gap-20">
|
||||||
|
|||||||
@@ -13,11 +13,12 @@ const Stats11 = ({ className }: Stats11Props) => {
|
|||||||
|
|
||||||
<div>
|
<div>
|
||||||
<h2 className="mb-16 max-w-3xl text-3xl leading-10 font-semibold sm:mb-24 md:mx-10">
|
<h2 className="mb-16 max-w-3xl text-3xl leading-10 font-semibold sm:mb-24 md:mx-10">
|
||||||
Revolutionizing healthcare with AI technology.
|
Eine gute Unternehmenswebsite braucht keinen Hype, sondern einen
|
||||||
|
klaren Ablauf.
|
||||||
<span className="font-medium text-primary/50">
|
<span className="font-medium text-primary/50">
|
||||||
{" "}
|
{" "}
|
||||||
Our advanced diagnostic platform helps doctors make accurate
|
Von der Struktur bis zur Veroeffentlichung arbeite ich
|
||||||
diagnoses in seconds.
|
transparent und nachvollziehbar.
|
||||||
</span>
|
</span>
|
||||||
</h2>
|
</h2>
|
||||||
<div className="relative grid max-w-2xl gap-4 border-x border-border pb-32 sm:grid-cols-2 sm:gap-10 sm:pb-44 md:ml-10 md:border-0">
|
<div className="relative grid max-w-2xl gap-4 border-x border-border pb-32 sm:grid-cols-2 sm:gap-10 sm:pb-44 md:ml-10 md:border-0">
|
||||||
@@ -25,37 +26,37 @@ const Stats11 = ({ className }: Stats11Props) => {
|
|||||||
<div className="flex flex-col gap-2">
|
<div className="flex flex-col gap-2">
|
||||||
<span className="flex gap-5 text-3xl font-semibold">
|
<span className="flex gap-5 text-3xl font-semibold">
|
||||||
<span className="relative -left-px w-px bg-primary/50"></span>
|
<span className="relative -left-px w-px bg-primary/50"></span>
|
||||||
1,000,000+
|
1
|
||||||
</span>
|
</span>
|
||||||
<p className="pl-5 font-medium text-muted-foreground/80">
|
<p className="pl-5 font-medium text-muted-foreground/80">
|
||||||
Diagnoses Made
|
Ansprechpartner
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
<div className="flex flex-col gap-2">
|
<div className="flex flex-col gap-2">
|
||||||
<span className="flex gap-5 text-3xl font-semibold">
|
<span className="flex gap-5 text-3xl font-semibold">
|
||||||
<span className="relative -left-px w-px bg-primary/50"></span>
|
<span className="relative -left-px w-px bg-primary/50"></span>
|
||||||
95%
|
3
|
||||||
</span>
|
</span>
|
||||||
<p className="pl-5 font-medium text-muted-foreground/80">
|
<p className="pl-5 font-medium text-muted-foreground/80">
|
||||||
Diagnostic Accuracy
|
Klare Schritte
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
<div className="flex flex-col gap-2">
|
<div className="flex flex-col gap-2">
|
||||||
<span className="flex gap-5 text-3xl font-semibold">
|
<span className="flex gap-5 text-3xl font-semibold">
|
||||||
<span className="relative -left-px w-px bg-primary/50"></span>
|
<span className="relative -left-px w-px bg-primary/50"></span>
|
||||||
3,000+
|
100 %
|
||||||
</span>
|
</span>
|
||||||
<p className="pl-5 font-medium text-muted-foreground/80">
|
<p className="pl-5 font-medium text-muted-foreground/80">
|
||||||
Healthcare Providers
|
Responsive
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
<div className="flex flex-col gap-2">
|
<div className="flex flex-col gap-2">
|
||||||
<span className="flex gap-5 text-3xl font-semibold">
|
<span className="flex gap-5 text-3xl font-semibold">
|
||||||
<span className="relative -left-px w-px bg-primary/50"></span>
|
<span className="relative -left-px w-px bg-primary/50"></span>
|
||||||
2.5s
|
Klar
|
||||||
</span>
|
</span>
|
||||||
<p className="pl-5 font-medium text-muted-foreground/80">
|
<p className="pl-5 font-medium text-muted-foreground/80">
|
||||||
Latency
|
Angebot und Umfang
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -18,7 +18,7 @@ import "@/styles/global.css";
|
|||||||
<link rel="icon" href="/favicon.ico" />
|
<link rel="icon" href="/favicon.ico" />
|
||||||
<meta name="viewport" content="width=device-width" />
|
<meta name="viewport" content="width=device-width" />
|
||||||
<meta name="generator" content={Astro.generator} />
|
<meta name="generator" content={Astro.generator} />
|
||||||
<title>Matthias Meister Webdesign</title>
|
<title>Webdesign für KMU | Matthias Meister Webdesign</title>
|
||||||
<script
|
<script
|
||||||
src="https://rybbit.matthias.lol/api/script.js"
|
src="https://rybbit.matthias.lol/api/script.js"
|
||||||
data-site-id="60abc81e438a"
|
data-site-id="60abc81e438a"
|
||||||
|
|||||||
Reference in New Issue
Block a user