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:
2026-04-21 16:14:40 +02:00
parent 6a8ee43c07
commit f42b535073
11 changed files with 141 additions and 133 deletions

BIN
public/about.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 325 KiB

View File

@@ -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: Whats the goal? Whos 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>

View File

@@ -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>

View File

@@ -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>

View File

@@ -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&apos;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">

View File

@@ -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",
}, },
]; ];

View File

@@ -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>

View File

@@ -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&apos;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>

View File

@@ -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">

View File

@@ -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>

View File

@@ -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"