From 11e836fc30214aa924fca7b599d26842434f5009 Mon Sep 17 00:00:00 2001 From: DanielS Date: Sat, 18 Jul 2026 04:37:41 +0200 Subject: [PATCH] feat: add template marquee and fix gdpr google fonts request --- package-lock.json | 20 ++ package.json | 2 + src/components/TemplateMarquee.astro | 145 ++++++++++ src/layouts/Layout.astro | 15 +- src/pages/index.astro | 4 + src/pages/templates.astro | 405 ++++++++++++--------------- 6 files changed, 366 insertions(+), 225 deletions(-) create mode 100644 src/components/TemplateMarquee.astro diff --git a/package-lock.json b/package-lock.json index d8e39b6..dd8b499 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10,6 +10,8 @@ "dependencies": { "@astrojs/react": "^3.6.3", "@astrojs/tailwind": "^5.1.4", + "@fontsource/inter": "^5.2.8", + "@fontsource/space-grotesk": "^5.2.10", "@types/react": "^19.2.17", "@types/react-dom": "^19.2.3", "astro": "^4.16.0", @@ -575,6 +577,24 @@ "node": ">=12" } }, + "node_modules/@fontsource/inter": { + "version": "5.2.8", + "resolved": "https://registry.npmjs.org/@fontsource/inter/-/inter-5.2.8.tgz", + "integrity": "sha512-P6r5WnJoKiNVV+zvW2xM13gNdFhAEpQ9dQJHt3naLvfg+LkF2ldgSLiF4T41lf1SQCM9QmkqPTn4TH568IRagg==", + "license": "OFL-1.1", + "funding": { + "url": "https://github.com/sponsors/ayuhito" + } + }, + "node_modules/@fontsource/space-grotesk": { + "version": "5.2.10", + "resolved": "https://registry.npmjs.org/@fontsource/space-grotesk/-/space-grotesk-5.2.10.tgz", + "integrity": "sha512-XNXEbT74OIITPqw2H6HXwPDp85fy43uxfBwFR5PU+9sLnjuLj12KlhVM9nZVN6q6dlKjkuN8JisW/OBxwxgUew==", + "license": "OFL-1.1", + "funding": { + "url": "https://github.com/sponsors/ayuhito" + } + }, "node_modules/@img/sharp-darwin-arm64": { "version": "0.33.5", "resolved": "https://registry.npmjs.org/@img/sharp-darwin-arm64/-/sharp-darwin-arm64-0.33.5.tgz", diff --git a/package.json b/package.json index cd69c00..41bdc96 100644 --- a/package.json +++ b/package.json @@ -14,6 +14,8 @@ "dependencies": { "@astrojs/react": "^3.6.3", "@astrojs/tailwind": "^5.1.4", + "@fontsource/inter": "^5.2.8", + "@fontsource/space-grotesk": "^5.2.10", "@types/react": "^19.2.17", "@types/react-dom": "^19.2.3", "astro": "^4.16.0", diff --git a/src/components/TemplateMarquee.astro b/src/components/TemplateMarquee.astro new file mode 100644 index 0000000..38dce7b --- /dev/null +++ b/src/components/TemplateMarquee.astro @@ -0,0 +1,145 @@ +--- +// src/components/TemplateMarquee.astro + +const templates = [ + { id: "01", name: "Der Handwerker-Klassiker", style: "Einfach & Bodenständig", layout: "boxed", design: "Brutalismus", colors: "from-[#FDFBF7] to-[#FAF7F2] text-[#2C1A11]" }, + { id: "02", name: "Dachdecker Meister", style: "Elegant & Professionell", layout: "split", design: "Glassmorphismus", colors: "from-zinc-900 to-zinc-950 text-white border-yellow-500/20" }, + { id: "03", name: "Solar & Photovoltaik", style: "Tech & Zukunft", layout: "bento", design: "SaaS-Minimalismus", colors: "from-zinc-900 to-black text-zinc-100 border-orange-500/20" }, + { id: "04", name: "Die Kanzlei", style: "Seriös & Clean", layout: "asymmetric", design: "Glassmorphismus", colors: "from-[#0B0F19] to-[#070A13] text-white border-emerald-500/20" }, + { id: "05", name: "Bio-Hofladen", style: "Rustikal & Natur", layout: "single", design: "Neomorphismus", colors: "from-[#FAF7F2] to-[#E8DCC4] text-[#4A3B32]" }, + { id: "06", name: "Sanitär & Heizung", style: "Klar & Zuverlässig", layout: "bento", design: "SaaS-Minimalismus", colors: "from-white to-slate-50 text-slate-800 border-slate-200" }, + { id: "07", name: "KFZ Schnellservice", style: "Dynamisch & Direkt", layout: "split", design: "Brutalismus", colors: "from-zinc-800 to-zinc-900 text-white border-zinc-700" }, + { id: "08", name: "Schreinerei Holzart", style: "Handwerk & Präzision", layout: "boxed", design: "SaaS-Minimalismus", colors: "from-[#F5F2EB] to-[#D9D2C5] text-[#3D3A36]" } +]; + +// Double list for infinite wrap animation +const rowData = [...templates, ...templates]; +--- + +
+ +
+ +
+
+

+ Unsere Design-Vorlagen +

+

+ Entdecken Sie vorkonfigurierte Layouts. Vollständig anpassbar und optimiert. +

+
+
+ + +
+
+
+ {rowData.map((item, index) => ( +
+ +
+ TEMPLATE {item.id} +
+ + + +
+
+ + +
+ {item.layout === "bento" && ( +
+
+
+
+
+
+ )} + {item.layout === "split" && ( +
+
+
+
+ )} + {item.layout === "boxed" && ( +
+
+
+
+ )} + {item.layout === "asymmetric" && ( +
+
+
+
+ )} + {item.layout === "single" && ( +
+
+
+
+
+ )} +
+ + +
+
+

{item.name}

+ {item.style} +
+ {item.design} +
+ + + +
+ ))} +
+
+
+
+ + diff --git a/src/layouts/Layout.astro b/src/layouts/Layout.astro index 053c8b6..1a5e31a 100644 --- a/src/layouts/Layout.astro +++ b/src/layouts/Layout.astro @@ -1,4 +1,14 @@ --- +import '@fontsource/inter/300.css'; +import '@fontsource/inter/400.css'; +import '@fontsource/inter/500.css'; +import '@fontsource/inter/600.css'; +import '@fontsource/inter/700.css'; +import '@fontsource/space-grotesk/400.css'; +import '@fontsource/space-grotesk/500.css'; +import '@fontsource/space-grotesk/600.css'; +import '@fontsource/space-grotesk/700.css'; + interface Props { title: string; description?: string; @@ -16,11 +26,6 @@ const { title, description = "Professionelles Webdesign & moderne Websites für {title} - - - - -