summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/components/BlogPost.astro14
-rw-r--r--src/components/Footer.astro4
-rw-r--r--src/components/Navbar.astro20
-rw-r--r--src/components/ProjectCard.astro14
-rw-r--r--src/components/sections/AboutMe.astro11
-rw-r--r--src/components/sections/Additional.astro20
-rw-r--r--src/components/sections/Hero.astro18
-rw-r--r--src/components/sections/TechStack.astro19
-rw-r--r--src/layouts/Layout.astro31
-rw-r--r--src/pages/blog.astro14
-rw-r--r--src/pages/datenschutz.astro398
-rw-r--r--src/pages/impressum.astro25
-rw-r--r--src/pages/index.astro14
-rw-r--r--src/pages/projects.astro51
-rw-r--r--src/styles/global.css38
-rw-r--r--src/types.ts14
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;
+}