diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/components/BlogPost.astro | 14 | ||||
| -rw-r--r-- | src/components/Footer.astro | 4 | ||||
| -rw-r--r-- | src/components/Navbar.astro | 20 | ||||
| -rw-r--r-- | src/components/ProjectCard.astro | 14 | ||||
| -rw-r--r-- | src/components/sections/AboutMe.astro | 11 | ||||
| -rw-r--r-- | src/components/sections/Additional.astro | 20 | ||||
| -rw-r--r-- | src/components/sections/Hero.astro | 18 | ||||
| -rw-r--r-- | src/components/sections/TechStack.astro | 19 | ||||
| -rw-r--r-- | src/layouts/Layout.astro | 31 | ||||
| -rw-r--r-- | src/pages/blog.astro | 14 | ||||
| -rw-r--r-- | src/pages/datenschutz.astro | 398 | ||||
| -rw-r--r-- | src/pages/impressum.astro | 25 | ||||
| -rw-r--r-- | src/pages/index.astro | 14 | ||||
| -rw-r--r-- | src/pages/projects.astro | 51 | ||||
| -rw-r--r-- | src/styles/global.css | 38 | ||||
| -rw-r--r-- | src/types.ts | 14 |
16 files changed, 705 insertions, 0 deletions
diff --git a/src/components/BlogPost.astro b/src/components/BlogPost.astro new file mode 100644 index 0000000..0070f2b --- /dev/null +++ b/src/components/BlogPost.astro @@ -0,0 +1,14 @@ +--- +const { post } = Astro.props; +const date: Date = new Date(post.frontmatter.date); +--- + +<a class="block" href={post.url}> + <h2> + {post.frontmatter.title}<span class="text-xs no-underline"> + {date.toLocaleDateString("de-DE")}</span + > + </h2> + <p>{post.frontmatter.description}</p> + <p class="text-xs">Tags: {post.frontmatter.tags.join(", ")}</p> +</a> diff --git a/src/components/Footer.astro b/src/components/Footer.astro new file mode 100644 index 0000000..f2f265f --- /dev/null +++ b/src/components/Footer.astro @@ -0,0 +1,4 @@ +<footer class="flex justify-center gap-5"> + <a href="/impressum">Impressum</a> + <a href="/datenschutz">Datenschutz</a> +</footer> diff --git a/src/components/Navbar.astro b/src/components/Navbar.astro new file mode 100644 index 0000000..ec561bb --- /dev/null +++ b/src/components/Navbar.astro @@ -0,0 +1,20 @@ +--- +import { Image } from "astro:assets"; +import logo from "../../public/logo.png"; +--- + +<header class="flex justify-between items-center my-2"> + <a href="/" + ><Image + loading="eager" + src={logo} + alt="GTZ Logo" + width={50} + height={50} + /></a + > + <nav class="flex gap-5"> + <a href="/projects" class="hover:underline">Projekte</a> + <a href="/blog" class="hover:underline">Blog</a> + </nav> +</header> diff --git a/src/components/ProjectCard.astro b/src/components/ProjectCard.astro new file mode 100644 index 0000000..a4fa4f7 --- /dev/null +++ b/src/components/ProjectCard.astro @@ -0,0 +1,14 @@ +--- +const { projects } = Astro.props; +--- + +{ + projects.map((project: Project) => ( + <div> + <a class="block" href={project.url}> + <h2 class="underline underline-offset-2">{project.name}</h2> + </a> + <p>{project.description}</p> + </div> + )) +} diff --git a/src/components/sections/AboutMe.astro b/src/components/sections/AboutMe.astro new file mode 100644 index 0000000..234bee2 --- /dev/null +++ b/src/components/sections/AboutMe.astro @@ -0,0 +1,11 @@ +--- + +--- + +<div> + <h2 class="underline underline-offset-3 mb-2">Über mich</h2> + <p> + Ich bin Leo, 18 Jahre alt und programmiere gerne in Javascript/Typescript. + Meine Hobbys sind Schach spielen, Lesen und Chalistenics + </p> +</div> diff --git a/src/components/sections/Additional.astro b/src/components/sections/Additional.astro new file mode 100644 index 0000000..6fa8b4a --- /dev/null +++ b/src/components/sections/Additional.astro @@ -0,0 +1,20 @@ +--- + +--- + +<div class="mb-5"> + <p> + -> Meine <a href="/projects" class="underline">Projekte</a> + </p> + <p> + -> Mein <a href="/blog" class="underline">Blog</a> + </p> + <p> + -> Git: <a href="https://git.leogtz.de" class="underline" + >git.leogtz.de</a + > + </p> + <p> + -> Email: <span class="underline">me [at] leogtz.de</span> + </p> +</div> diff --git a/src/components/sections/Hero.astro b/src/components/sections/Hero.astro new file mode 100644 index 0000000..76f8011 --- /dev/null +++ b/src/components/sections/Hero.astro @@ -0,0 +1,18 @@ +--- +import pfp from "../../../public/leo.png"; +import { Image } from "astro:assets"; +--- + +<div class="flex flex-col sm:flex-row items-center mt-2 gap-5"> + <Image + src={pfp} + alt="leos profilbild (ein pixel charakter)" + } + class="rounded-full" + loading="eager" + /> + <div class="text-center sm:text-start"> + <h1 class="text-2xl">Leo Götz</h1> + <p>Webentwickler</p> + </div> +</div> diff --git a/src/components/sections/TechStack.astro b/src/components/sections/TechStack.astro new file mode 100644 index 0000000..0b536e1 --- /dev/null +++ b/src/components/sections/TechStack.astro @@ -0,0 +1,19 @@ +--- + +--- + +<div> + <h2 class="underline underline-offset-3 mb-2">Technologien</h2> + <p> + <a href="https://justfuckingusehtml.com/" class="underline">HTML</a> | <a + href="https://justfuckingusecss.com/" + class="underline">CSS</a + > | JS / TS | Nodejs | + <a href="https://justfuckingusereact.com/" class="underline">React</a> | <a + href="https://justfuckinguseastro.com/" + class="underline">Astro</a + > | <a href="https://justfuckingusetailwind.com/" class="underline" + >Tailwind</a + > | Nix/NixOS + </p> +</div> diff --git a/src/layouts/Layout.astro b/src/layouts/Layout.astro new file mode 100644 index 0000000..0e795dd --- /dev/null +++ b/src/layouts/Layout.astro @@ -0,0 +1,31 @@ +--- +import "../styles/global.css"; +import Navbar from "../components/Navbar.astro"; +import Footer from "../components/Footer.astro"; + +import "@fontsource/maple-mono/100.css"; +import "@fontsource/maple-mono/200.css"; +import "@fontsource/maple-mono/300.css"; +import "@fontsource/maple-mono/400.css"; +import "@fontsource/maple-mono/500.css"; +import "@fontsource/maple-mono/600.css"; +import "@fontsource/maple-mono/700.css"; +import "@fontsource/maple-mono/800.css"; +--- + +<html lang="de"> + <head> + <meta charset="utf-8" /> + <link rel="icon" type="image/svg+xml" href="/favicon.svg" /> + <meta name="viewport" content="width=device-width" /> + <meta name="generator" content={Astro.generator} /> + <title>Leo Götz</title> + </head> + <body> + <Navbar /> + <main class="flex flex-col gap-5"> + <slot /> + </main> + <Footer /> + </body> +</html> diff --git a/src/pages/blog.astro b/src/pages/blog.astro new file mode 100644 index 0000000..4df4e5c --- /dev/null +++ b/src/pages/blog.astro @@ -0,0 +1,14 @@ +--- +import Layout from "../layouts/Layout.astro"; +import BlogPost from "../components/BlogPost.astro"; +const allPosts = Object.values( + import.meta.glob("./posts/*.md", { eager: true }), +); +const sortedPosts = allPosts.toSorted((a: any, b: any) => { + return Date.parse(b.frontmatter.date) - Date.parse(a.frontmatter.date); +}); +--- + +<Layout> + <p>Derzeit keine Posts, schau vielleicht später vorbei :)</p> +</Layout> diff --git a/src/pages/datenschutz.astro b/src/pages/datenschutz.astro new file mode 100644 index 0000000..6acf90a --- /dev/null +++ b/src/pages/datenschutz.astro @@ -0,0 +1,398 @@ +--- +import Layout from "../layouts/Layout.astro"; +--- + +<Layout> + <div> + <div class="flex flex-col gap-5"> + <h1 class="font-bold text-center mt-10">Datenschutzerklärung</h1> + + <section> + <h2 class="font-semibold mb-4"> + 1. Verantwortlicher für die Datenverarbeitung + </h2> + <p> + <strong>Leo Götz</strong> + </p> + <p>c/o IP-Management #9337</p> + <p>Ludwig-Erhard-Straße 18</p> + <p>20459 Hamburg</p> + <p>E-Mail: me [at] leogtz.de</p> + </section> + <p> + Ein gesetzlicher Datenschutzbeauftragter ist nicht erforderlich, + da die gesetzlichen Voraussetzungen gemäß Art. 37 DSGVO nicht + erfüllt sind. Bei Fragen zum Datenschutz können Sie sich jedoch + jederzeit an den oben genannten Verantwortlichen wenden. + </p> + + <section> + <h2 class="font-semibold mb-4"> + 2. Allgemeine Informationen zur Datenverarbeitung + </h2> + + <h3 class="font-semibold mb-2"> + Umfang der Verarbeitung personenbezogener Daten + </h3> + <p> + Ich verarbeite personenbezogene Daten der Nutzer + grundsätzlich nur, soweit dies zur Bereitstellung einer + funktionsfähigen Website sowie meiner Inhalte und Leistungen + erforderlich ist. Die Verarbeitung personenbezogener Daten + erfolgt regelmäßig nur nach Einwilligung des Nutzers oder + wenn die Verarbeitung durch gesetzliche Vorschriften + gestattet ist. + </p> + + <h3 class="font-semibold mt-4 mb-2"> + Rechtsgrundlagen der Datenverarbeitung + </h3> + <p> + Die Verarbeitung personenbezogener Daten erfolgt auf Basis + der folgenden Rechtsgrundlagen: + </p> + <ul class="list-disc ml-6"> + <li> + <strong>Art. 6 Abs. 1 lit. f DSGVO</strong> – Verarbeitung + erfolgt aufgrund meines berechtigten Interesses an der Sicherheit + und Stabilität der Website sowie zur Fehleranalyse und Optimierung. + </li> + </ul> + + <h2 class="font-semibold mt-6 mb-4"> + Hosting und Server-Logfiles + </h2> + <p>Diese Website wird gehostet bei:</p> + <p> + <strong>IP-Projects GmbH & Co. KG</strong> + <br /> + </p> + Am Vogelherd 14<br /> + D - 97295 Waldbrunn + <p> + <a + href="https://www.ip-projects.de" + target="_blank" + rel="noopener noreferrer" + class="link" + > + ip-projects.de + </a> + </p> + </section> + + <p> + Beim Aufruf meiner Website werden durch den Webserver + automatisch Informationen in sogenannten Server-Logfiles erfasst + und gespeichert. Diese Daten werden von Ihrem Browser + automatisch übermittelt und umfassen: + </p> + <ul class="list-disc ml-6"> + <li>IP-Adresse des anfragenden Geräts</li> + <li>Datum und Uhrzeit des Zugriffs</li> + <li>Aufgerufene URL (Seite oder Datei)</li> + <li>HTTP-Methode (z. B. GET, POST)</li> + <li>HTTP-Statuscode der Antwort</li> + <li>Übertragene Datenmenge in Bytes</li> + <li>Referrer-URL (zuvor besuchte Seite, sofern übermittelt)</li> + <li> + Browser-Kennung (User-Agent), einschließlich verwendetem + Browser, Betriebssystem und Spracheinstellungen + </li> + </ul> + + <p> + Die Verarbeitung dieser Daten ist technisch notwendig, um die + Website korrekt ausliefern zu können, die Systemsicherheit und + -stabilität zu gewährleisten sowie Fehler zu diagnostizieren. + Eine Zusammenführung dieser Daten mit anderen Datenquellen + findet nicht statt. + </p> + <p> + Speicherdauer: Die Logfiles werden nach spätestens 7 Tagen + automatisch gelöscht, sofern keine sicherheitsrelevanten + Vorfälle eine längere Aufbewahrung erfordern + </p> + + <section class="mb-8"> + <h2 class="font-semibold mb-4"> + 3. Erhebung und Speicherung personenbezogener Daten sowie + Art und Zweck der Verwendung + </h2> + <p> + Beim Besuch meiner Website werden grundsätzlich keine + personenbezogenen Daten aktiv erhoben oder gespeichert. Ich + betreibe kein Kontaktformular, kein Newsletter-System und + keine Benutzerkonten. Eine darüber hinausgehende + Verarbeitung personenbezogener Daten findet nicht statt. + </p> + <p> + Die einzigen Daten, die im Rahmen der technischen + Bereitstellung meiner Website erfasst werden, sind in den + Server-Logfiles gespeichert (siehe Abschnitt 2:{" "} + <a href="#section-2" class="link"> + Allgemeine Informationen zur Datenverarbeitung + </a> + ). Diese Daten dienen ausschließlich der Sicherstellung des störungsfreien + Betriebs der Website sowie zur Fehleranalyse und werden nicht + mit anderen Datenquellen zusammengeführt. + </p> + </section> + + <section class="mb-8"> + <h2 class="font-semibold mb-4"> + 4. Weitergabe von Daten an Dritte + </h2> + <p>Ich übermittle keine personenbezogenen Daten an Dritte.</p> + <p> + Es erfolgt weder eine Verarbeitung durch externe + Dienstleister noch eine Weitergabe der Daten an Drittländer. + Mein Server befindet sich in Deutschland, und es werden + keine externen Tracking- oder Analyse-Dienste wie Google + Analytics verwendet. + </p> + </section> + + <section class="mb-8"> + <h2 class="font-semibold mb-4"> + 5. Rechte der betroffenen Personen + </h2> + <p> + Als betroffene Person haben Sie nach der + Datenschutz-Grundverordnung (DSGVO) folgende Rechte in Bezug + auf die Verarbeitung Ihrer personenbezogenen Daten: + </p> + + <h3 class="font-semibold mt-4 mb-2"> + Recht auf Auskunft (Art. 15 DSGVO) + </h3> + <p> + Sie haben das Recht, eine Bestätigung darüber zu verlangen, + ob personenbezogene Daten über Sie verarbeitet werden. Ist + dies der Fall, können Sie Auskunft über diese Daten sowie + weitere Informationen zur Verarbeitung erhalten. + </p> + + <h3 class="font-semibold mt-4 mb-2"> + Recht auf Berichtigung (Art. 16 DSGVO) + </h3> + <p> + Falls Ihre personenbezogenen Daten unrichtig oder + unvollständig sind, haben Sie das Recht, die unverzügliche + Berichtigung oder Vervollständigung dieser Daten zu + verlangen. + </p> + + <h3 class="font-semibold mt-4 mb-2"> + Recht auf Löschung („Recht auf Vergessenwerden“) (Art. 17 + DSGVO) + </h3> + <p> + Sie können verlangen, dass Ihre personenbezogenen Daten + gelöscht werden, sofern einer der folgenden Gründe zutrifft: + </p> + <ul class="list-disc ml-6"> + <li> + Die Daten sind für die Zwecke, für die sie erhoben + wurden, nicht mehr erforderlich. + </li> + <li> + Sie widerrufen Ihre Einwilligung und es gibt keine + andere Rechtsgrundlage für die Verarbeitung. + </li> + <li> + Sie legen Widerspruch gegen die Verarbeitung ein (siehe + Art. 21 DSGVO). + </li> + <li>Die Daten wurden unrechtmäßig verarbeitet.</li> + <li> + Die Löschung ist zur Erfüllung einer rechtlichen + Verpflichtung erforderlich. + </li> + </ul> + + <h3 class="font-semibold mt-4 mb-2"> + Recht auf Einschränkung der Verarbeitung (Art. 18 DSGVO) + </h3> + <p> + Unter bestimmten Voraussetzungen können Sie die + Einschränkung der Verarbeitung Ihrer personenbezogenen Daten + verlangen, z. B. wenn die Richtigkeit der Daten bestritten + wird oder die Verarbeitung unrechtmäßig ist, Sie aber keine + Löschung wünschen. + </p> + + <h3 class="font-semibold mt-4 mb-2"> + Recht auf Datenübertragbarkeit (Art. 20 DSGVO) + </h3> + <p> + Falls die Verarbeitung auf Ihrer Einwilligung oder einem + Vertrag beruht und automatisiert erfolgt, haben Sie das + Recht, Ihre personenbezogenen Daten in einem strukturierten, + gängigen und maschinenlesbaren Format zu erhalten oder diese + an einen anderen Verantwortlichen übertragen zu lassen. + </p> + + <h3 class="font-semibold mt-4 mb-2"> + Widerspruchsrecht gegen die Verarbeitung (Art. 21 DSGVO) + </h3> + <p> + Sie haben das Recht, aus Gründen, die sich aus Ihrer + besonderen Situation ergeben, jederzeit Widerspruch gegen + die Verarbeitung Ihrer personenbezogenen Daten einzulegen, + sofern die Verarbeitung auf einem berechtigten Interesse + (Art. 6 Abs. 1 lit. f DSGVO) beruht. Ich werde Ihre Daten + dann nicht mehr verarbeiten, es sei denn, es liegen + zwingende schutzwürdige Gründe für die Verarbeitung vor. + </p> + + <h3 class="font-semibold mt-4 mb-2"> + Recht auf Beschwerde bei einer Aufsichtsbehörde (Art. 77 + DSGVO) + </h3> + <p> + Falls Sie der Ansicht sind, dass die Verarbeitung Ihrer + personenbezogenen Daten gegen die DSGVO verstößt, haben Sie + das Recht, sich bei einer Datenschutzaufsichtsbehörde zu + beschweren. + </p> + <br /> + <p> + <strong + >Bayerisches Landesamt für Datenschutzaufsicht (BayLDA)</strong + > + <br /> + Promenade 18<br /> + </p> + 91522 Ansbach<br /> + Deutschland + + <p> + Telefon: +49 (0) 981 180093-0<br /> + </p> + E-Mail:{" "} + <a href="mailto:poststelle@lda.bayern.de" class="link"> + poststelle@lda.bayern.de + </a> + <br /> + Website:{" "} + <a + href="https://www.lda.bayern.de" + target="_blank" + rel="noopener noreferrer" + class="link" + > + https://www.lda.bayern.de + </a> + + <p> + Eine Liste aller Datenschutzaufsichtsbehörden in Deutschland + finden Sie hier:<br /> + </p> + <a + href="https://www.bfdi.bund.de/DE/Infothek/Anschriften_Links/anschriften_links-node.html" + target="_blank" + rel="noopener noreferrer" + class="link wrap-anywhere" + > + https://www.bfdi.bund.de/DE/Infothek/Anschriften_Links/anschriften_links-node.html + </a> + </section> + + <section> + <h2 class="font-semibold mb-4"> + 6. Verwendung von Cookies und Tracking-Technologien + </h2> + <p> + Meine Website verwendet keine Cookies und setzt keine + Tracking-Technologien ein, die personenbezogene Daten + speichern oder an Dritte weitergeben. + </p> + </section> + + <section> + <h2 class="font-semibold mb-4"> + 7. Einsatz von Drittanbietern und Tools + </h2> + <p> + Ich verwende keine externen Drittanbieter oder Cloud-Dienste + zur Verarbeitung personenbezogener Daten. + </p> + </section> + + <section> + <h2 class="font-semibold">8. Datensicherheit</h2> + <p> + Ich treffe geeignete technische und organisatorische + Maßnahmen, um die Sicherheit Ihrer personenbezogenen Daten + zu gewährleisten und sie vor unbefugtem Zugriff, Verlust + oder Manipulation zu schützen. + </p> + <p> + Zu den von mir eingesetzten Sicherheitsmaßnahmen gehören + unter anderem: + </p> + <ul class="list-disc ml-6"> + <li> + <strong>Regelmäßige Aktualisierung des Servers:</strong> Mein + VPS wird kontinuierlich mit Sicherheitsupdates versorgt, um + bekannte Sicherheitslücken zu schließen. + </li> + <li> + <strong>SSL/TLS-Verschlüsselung:</strong> Die Übertragung + von Daten zwischen Ihrem Browser und meiner Website erfolgt + verschlüsselt über das SSL/TLS-Protokoll. Dadurch werden Ihre + Daten während der Übertragung vor unbefugtem Zugriff geschützt. + </li> + <li> + <strong>Firewall-Schutz:</strong> Zum Schutz gegen unbefugte + Zugriffe und Angriffe setze ich Firewalls ein, die den Datenverkehr + überwachen und verdächtige Aktivitäten blockieren. + </li> + <li> + <strong>DDoS-Schutz:</strong> Maßnahmen zum Schutz gegen Distributed-Denial-of-Service + (DDoS)-Angriffe sorgen dafür, dass meine Website auch bei + unerwartet hohem Datenverkehr erreichbar bleibt. + </li> + </ul> + <p> + Trotz aller Sicherheitsmaßnahmen weise ich darauf hin, dass + die Übertragung von Daten im Internet (z. B. bei der + Kommunikation per E-Mail) Sicherheitslücken aufweisen kann. + Ein vollständiger Schutz der Daten vor dem Zugriff durch + Dritte ist nicht möglich. + </p> + <p> + Falls Sie Fragen zur Sicherheit meiner Website haben, können + Sie mich jederzeit unter{" "} + <a href="mailto:info@leogtz.de" class="link"> + info@leogtz.de + </a>{" "} + kontaktieren. + </p> + </section> + + <section> + <h2 class="font-semibold"> + 9. Änderungen der Datenschutzerklärung + </h2> + <p> + Ich behalte mir vor, diese Datenschutzerklärung jederzeit zu + ändern, um sie an rechtliche Anforderungen oder Änderungen + meines Angebots anzupassen. Die jeweils aktuelle Version der + Datenschutzerklärung ist jederzeit auf dieser Website + abrufbar. + </p> + <p> + Falls durch eine Änderung der Datenschutzerklärung eine + Mitwirkung Ihrerseits erforderlich wird (z. B. eine erneute + Einwilligung), werde ich Sie rechtzeitig darüber + informieren. + </p> + <p> + <strong>Letzte Aktualisierung:</strong> 21. März 2026 + </p> + </section> + </div> + </div></Layout +> diff --git a/src/pages/impressum.astro b/src/pages/impressum.astro new file mode 100644 index 0000000..db64e17 --- /dev/null +++ b/src/pages/impressum.astro @@ -0,0 +1,25 @@ +--- +import Layout from "../layouts/Layout.astro"; +--- + +<Layout> + <h1>Impressum</h1> + <div> + <h2>Inhalte gemäß §5 DDG</h2> + <p>Leo Götz</p> + <p>c/o IP-Management #9337</p> + <p>Ludwig-Erhard-Straße 18</p> + <p>20459 Hamburg</p> + </div> + <div> + <h2>Kontaktdaten</h2> + <p>E-mail: me [at] leogtz.de</p> + </div> + <div> + <h2>Redaktionell verantwortlich</h2> + <p>Leo Götz</p> + <p>c/o IP-Management #9337</p> + <p>Ludwig-Erhard-Straße 18</p> + <p>20459 Hamburg</p> + </div> +</Layout> diff --git a/src/pages/index.astro b/src/pages/index.astro new file mode 100644 index 0000000..f343653 --- /dev/null +++ b/src/pages/index.astro @@ -0,0 +1,14 @@ +--- +import Layout from "../layouts/Layout.astro"; +import AboutMe from "../components/sections/AboutMe.astro"; +import TechStack from "../components/sections/TechStack.astro"; +import Additional from "../components/sections/Additional.astro"; +import Hero from "../components/sections/Hero.astro"; +--- + +<Layout> + <Hero /> + <AboutMe /> + <TechStack /> + <Additional /> +</Layout> diff --git a/src/pages/projects.astro b/src/pages/projects.astro new file mode 100644 index 0000000..2a388a7 --- /dev/null +++ b/src/pages/projects.astro @@ -0,0 +1,51 @@ +--- +import Layout from "../layouts/Layout.astro"; +import ProjectCard from "../components/ProjectCard.astro"; + +const projects: Project[] = [ + { + name: "TennisRecords", + description: "Digitaler Tennis Match Tracker mit hilfe von QR-Codes.", + image: "src", + alt: "TennisRecords Logo", + url: "https://tennisrecords.de", + }, + { + name: "Götz Maler Homepage", + description: "Homepage eines Malerfachbetriebs.", + image: "src", + alt: "alttag", + url: "https://goetz-maler.de", + }, + { + name: "Bürgerliste Mantel", + description: "Webseite der Bürgerliste Mantel", + image: "src", + alt: "alttag", + url: "https://buergerliste-mantel.de", + }, + { + name: "VCard Generator", + description: "Generator für das erstellen von VCards als QR-Code.", + image: "src", + alt: "alttag", + url: "https://vcard.leogtz.de", + }, + { + name: "BestKabu (contribution)", + description: "Browser extension um DigiKabu der BSZ Wiesau zu verbessern.", + image: "src", + alt: "alttag", + url: "https://github.com/Random-user420/bestKabu", + }, +]; +--- + +<Layout> + <p class="text-center"> + Status Page: <a href="https://status.leogtz.de/" class="underline" + >https://status.leogtz.de/</a + > + </p> + <ProjectCard projects={projects} /> +</Layout> diff --git a/src/styles/global.css b/src/styles/global.css new file mode 100644 index 0000000..0277298 --- /dev/null +++ b/src/styles/global.css @@ -0,0 +1,38 @@ +@import "tailwindcss"; + +@layer base { + h1 { + @apply text-2xl; + } + h2 { + @apply text-xl; + } + h3 { + @apply text-lg; + } +} + +html, +body { + margin: auto; + padding: 0; + height: 100%; + width: 50vw; + min-width: 300px; + max-width: 700px; + display: flex; + flex-direction: column; +} + +main { + flex: 1; +} + +.footer { + flex: 0; + background-color: green; +} + +body { + font-family: "Maple Mono", monospace; +} diff --git a/src/types.ts b/src/types.ts new file mode 100644 index 0000000..5866007 --- /dev/null +++ b/src/types.ts @@ -0,0 +1,14 @@ +interface Project { + name: string; + description: string; + image: string; + alt: string; + url: string; +} + +interface BlogPost { + title: string; + tags: string[]; + date: string; + description: string; +} |
