diff --git a/public/fonts/inter-latin-ext.woff2 b/public/fonts/inter-latin-ext.woff2 new file mode 100644 index 0000000..479d010 Binary files /dev/null and b/public/fonts/inter-latin-ext.woff2 differ diff --git a/public/fonts/inter-latin.woff2 b/public/fonts/inter-latin.woff2 new file mode 100644 index 0000000..d15208d Binary files /dev/null and b/public/fonts/inter-latin.woff2 differ diff --git a/public/fonts/space-grotesk-latin-ext.woff2 b/public/fonts/space-grotesk-latin-ext.woff2 new file mode 100644 index 0000000..db732c2 Binary files /dev/null and b/public/fonts/space-grotesk-latin-ext.woff2 differ diff --git a/public/fonts/space-grotesk-latin.woff2 b/public/fonts/space-grotesk-latin.woff2 new file mode 100644 index 0000000..0f3474e Binary files /dev/null and b/public/fonts/space-grotesk-latin.woff2 differ diff --git a/src/App.tsx b/src/App.tsx index 626c820..86b71b4 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -10,6 +10,8 @@ import ContactPage from "./pages/Contact"; import AGBPage from "./pages/AGB"; import ImpressumPage from "./pages/Impressum"; import AboutPage from "./pages/About"; +import WartungsAboPage from "./pages/WartungsAbo"; +import DatenschutzPage from "./pages/Datenschutz"; import NotFound from "./pages/NotFound"; const queryClient = new QueryClient(); @@ -28,6 +30,8 @@ const App = () => ( } /> } /> } /> + } /> + } /> {/* ADD ALL CUSTOM ROUTES ABOVE THE CATCH-ALL "*" ROUTE */} } /> diff --git a/src/components/Footer.tsx b/src/components/Footer.tsx index a4ddc22..e1da0ca 100644 --- a/src/components/Footer.tsx +++ b/src/components/Footer.tsx @@ -12,6 +12,8 @@ type FooterLink = { to?: string; /** anchor / mailto / tel / external */ href?: string; + /** hervorgehoben (z. B. Kündigungs- und Widerrufsbutton) */ + strong?: boolean; }; const footerLinks: { title: string; links: FooterLink[] }[] = [ @@ -22,6 +24,7 @@ const footerLinks: { title: string; links: FooterLink[] }[] = [ { id: 2, title: "Über uns", to: "/ueber-uns" }, { id: 3, title: "Leistungen", href: "/#services" }, { id: 4, title: "Kontakt", to: "/kontakt" }, + { id: 9, title: "Wartungs-Abo", to: "/wartungs-abo" }, ], }, { @@ -36,6 +39,9 @@ const footerLinks: { title: string; links: FooterLink[] }[] = [ links: [ { id: 7, title: "AGB", to: "/agb" }, { id: 8, title: "Impressum", to: "/impressum" }, + { id: 10, title: "Datenschutz", href: "https://project.webklar.com/datenschutz.html" }, + { id: 11, title: "Verträge hier kündigen", href: "https://project.webklar.com/kuendigen.html", strong: true }, + { id: 12, title: "Vertrag widerrufen", href: "https://project.webklar.com/widerrufen.html", strong: true }, ], }, ]; @@ -84,7 +90,11 @@ const Footer: React.FC = () => { ) : ( {link.title} diff --git a/src/fonts.css b/src/fonts.css new file mode 100644 index 0000000..9d2fb08 --- /dev/null +++ b/src/fonts.css @@ -0,0 +1,37 @@ +/* Selbst gehostete Schriften (vorher per Google Fonts geladen). Lizenz: SIL Open Font License. */ +/* Inter – latin-ext */ +@font-face { + font-family: 'Inter'; + font-style: normal; + font-weight: 300 700; + font-display: swap; + src: url(/fonts/inter-latin-ext.woff2) format('woff2'); + unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF; +} +/* Inter – latin */ +@font-face { + font-family: 'Inter'; + font-style: normal; + font-weight: 300 700; + font-display: swap; + src: url(/fonts/inter-latin.woff2) format('woff2'); + unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; +} +/* Space Grotesk – latin-ext */ +@font-face { + font-family: 'Space Grotesk'; + font-style: normal; + font-weight: 300 700; + font-display: swap; + src: url(/fonts/space-grotesk-latin-ext.woff2) format('woff2'); + unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF; +} +/* Space Grotesk – latin */ +@font-face { + font-family: 'Space Grotesk'; + font-style: normal; + font-weight: 300 700; + font-display: swap; + src: url(/fonts/space-grotesk-latin.woff2) format('woff2'); + unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; +} diff --git a/src/index.css b/src/index.css index 712423b..f9be7b4 100644 --- a/src/index.css +++ b/src/index.css @@ -1,10 +1,4 @@ -/* Fonts first – @import must be at the very top */ -@import url('https://fonts.googleapis.com/css2?family=Space+Grotesk:wght@300;400;500;600;700&display=swap'); -@import url('https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700&display=swap'); -@import url("https://fonts.googleapis.com/css2?family=DM+Sans:wght@400;500;600;700&display=swap"); -@import url("https://fonts.googleapis.com/css2?family=Crimson+Pro:wght@400;500;600;700&display=swap"); -@import url("https://fonts.googleapis.com/css2?family=Lora:wght@400;500;600;700&display=swap"); -@import url("https://fonts.googleapis.com/css2?family=Space+Mono:ital,wght@0,400;0,700;1,400;1,700&display=swap"); +/* Schriften werden selbst gehostet (src/fonts.css), keine Verbindung zu Google Fonts */ @tailwind base; @tailwind components; diff --git a/src/main.tsx b/src/main.tsx index 68176a7..36c22c5 100644 --- a/src/main.tsx +++ b/src/main.tsx @@ -1,5 +1,6 @@ import { createRoot } from "react-dom/client"; import App from "./App.tsx"; +import "./fonts.css"; import "./index.css"; createRoot(document.getElementById("root")!).render(); diff --git a/src/pages/Datenschutz.tsx b/src/pages/Datenschutz.tsx new file mode 100644 index 0000000..96b699f --- /dev/null +++ b/src/pages/Datenschutz.tsx @@ -0,0 +1,20 @@ +import { useEffect } from "react"; + +// Die Datenschutzerklärung gilt für webklar.com und das Kundenportal gemeinsam +// und liegt zentral im Kundenportal. +const URL = "https://project.webklar.com/datenschutz.html"; + +const Datenschutz = () => { + useEffect(() => { + window.location.replace(URL); + }, []); + return ( +
+

+ Weiter zur Datenschutzerklärung … +

+
+ ); +}; + +export default Datenschutz; diff --git a/src/pages/Impressum.tsx b/src/pages/Impressum.tsx index d0d4e3f..1bbdbea 100644 --- a/src/pages/Impressum.tsx +++ b/src/pages/Impressum.tsx @@ -45,7 +45,7 @@ const Impressum = () => { Impressum

- Angaben gemäß § 5 TMG + Angaben gemäß § 5 DDG

@@ -68,8 +68,8 @@ const Impressum = () => { Vertreten durch

- Geschäftsführer:
- Kenso Gri + die Gesellschafter Kenso Grimm und Justin Klein
+ (jeder einzeln vertretungsberechtigt)

{impressumDivider} @@ -100,21 +100,7 @@ const Impressum = () => { Umsatzsteuer

- Gemäß § 19 UStG wird keine Umsatzsteuer erhoben (Kleinunternehmerregelung).
- (Falls das nicht stimmt oder sich ändert, unbedingt sagen.) -

- - {impressumDivider} - -
-

- Verantwortlich für den Inhalt nach § 55 Absatz 2 RStV -

-

- Kenso Gri
- Schliertal 21
- 67468 Frankenstein
- Deutschland + Gemäß § 19 UStG wird keine Umsatzsteuer erhoben (Kleinunternehmerregelung).

{impressumDivider} @@ -124,8 +110,8 @@ const Impressum = () => { Haftung für Inhalte

- Als Diensteanbieter sind wir gemäß § 7 Absatz 1 TMG für eigene Inhalte auf diesen Seiten nach den allgemeinen Gesetzen verantwortlich.
- Nach §§ 8 bis 10 TMG sind wir 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. + Für eigene Inhalte auf diesen Seiten sind wir nach den allgemeinen Gesetzen verantwortlich.
+ Für fremde Informationen, die wir lediglich übermitteln oder speichern, gelten die Haftungsbeschränkungen der Artikel 4 bis 6 der Verordnung (EU) 2022/2065 (Gesetz über digitale Dienste). Wir sind nicht verpflichtet, solche Informationen zu überwachen oder nach Umständen zu forschen, die auf eine rechtswidrige Tätigkeit hinweisen.

{impressumDivider} @@ -155,22 +141,25 @@ const Impressum = () => {

- Online-Streitbeilegung + Verbraucherstreitbeilegung

- Die Europäische Kommission stellt eine Plattform zur Online-Streitbeilegung (OS) bereit:
- - https://ec.europa.eu/consumers/odr - -

Wir sind nicht verpflichtet und nicht bereit, an Streitbeilegungsverfahren vor einer Verbraucherschlichtungsstelle teilzunehmen.

+ {impressumDivider} + +
+

+ Datenschutz +

+

+ Informationen zur Verarbeitung personenbezogener Daten finden Sie in unserer{" "} + + Datenschutzerklärung + . +

+
{/* Back / Contact */} diff --git a/src/pages/WartungsAbo.tsx b/src/pages/WartungsAbo.tsx new file mode 100644 index 0000000..ec066ad --- /dev/null +++ b/src/pages/WartungsAbo.tsx @@ -0,0 +1,146 @@ +import { Link } from "react-router-dom"; +import { Button } from "@/components/ui/button"; +import { ArrowLeft, ShieldCheck } from "lucide-react"; + +const PORTAL = "https://project.webklar.com"; + +const divider =
; + +const leistungen = [ + { + titel: "Betrieb & Pflege Ihrer Website", + text: "Hosting auf unserem Server in Deutschland, Sicherheitsupdates, SSL-Zertifikat, tägliche Datensicherung und Überwachung der Erreichbarkeit.", + }, + { + titel: "1 Domain inklusive", + text: "Registrierung auf Ihren Namen, Verlängerung und DNS-Verwaltung (.de, .com, .eu, .net oder .org).", + }, + { + titel: "1 E-Mail-Postfach", + text: "Mit Ihrer eigenen Domain, 5 GB Speicher, Webmail und Zugriff per Outlook oder Smartphone.", + }, + { + titel: "1 Stunde Arbeitszeit pro Monat", + text: "Für Änderungen und Unterstützung rund um Ihre Website. Nicht genutzte Zeit bleibt 12 Monate verfügbar.", + }, +]; + +const WartungsAbo = () => { + return ( +
+
+
+
+ + Webklar + + + + +
+
+
+ +
+
+
+
+
+ + Leistungen +
+

+ Wartungs-Abo +

+

+ Betrieb, Pflege und Betreuung Ihrer Website: 50 € pro Monat, monatlich kündbar. +

+
+ +
+
+

Das ist enthalten

+
    + {leistungen.map((l) => ( +
  • +

    {l.titel}

    +

    {l.text}

    +
  • + ))} +
+
+ {divider} + +
+

Preis und Laufzeit

+
    +
  • 50,00 € pro Monat, monatlich im Voraus. Gemäß § 19 UStG wird keine Umsatzsteuer berechnet.
  • +
  • Keine Mindestlaufzeit, jederzeit zum Ende des Abrechnungsmonats kündbar.
  • +
  • Zahlung per Kreditkarte oder SEPA-Lastschrift über unseren Zahlungsdienstleister Stripe.
  • +
  • Arbeit über die enthaltene Stunde hinaus nur nach Ihrer Freigabe, 100 € pro Stunde, abgerechnet in 15-Minuten-Schritten.
  • +
+
+ {divider} + +
+

So schließen Sie das Abo ab

+

+ Das Wartungs-Abo schließen Sie in unserem Kundenportal ab. Den Zugang richten wir Ihnen ein, sprechen Sie uns + einfach an. Nach der Anmeldung finden Sie das Angebot auf der Startseite. Dort sehen Sie danach jederzeit Ihr + Stundenkontingent, Ihre Rechnungen und können uns Aufträge schicken. +

+
+ {divider} + +
+

Widerruf und Kündigung

+

+ Verbraucher können den Vertrag innerhalb von 14 Tagen widerrufen. Bereits gezahlte Beträge erstatten wir dann + nach der{" "} + Widerrufsbelehrung. + Kündigen können Sie jederzeit online, ohne Anmeldung, im Kundenportal oder per E-Mail. +

+ +
+ {divider} + +
+

Unterlagen und Kontakt

+

+ Vertragsbedingungen mit Leistungsbeschreibung + {" · "} + Vertragsunterlagen als PDF + {" · "} + Datenschutz +
+ WEBklar GbR, Am Schwimmbad 10, 67722 Winnweiler · Telefon 0176 23726355 · E-Mail kenso.gri@gmail.com +

+
+
+ +
+ + + + + + +
+
+
+
+
+ ); +}; + +export default WartungsAbo;