feat: add impressum and datenschutz pages

Add legal pages required by German law (TMG §5, DSGVO).
Impressum includes operator identity, contact, and liability notices.
Datenschutz covers all data processing: registration, OAuth, sessions,
cookies, geolocation, map tiles, and user rights.
This commit is contained in:
2026-02-22 11:32:22 +01:00
parent bf1ba11de2
commit cd29b49b0e
2 changed files with 282 additions and 0 deletions

View File

@@ -0,0 +1,219 @@
<svelte:head>
<title>Datenschutzerklärung - Marktvogt</title>
<meta name="description" content="Datenschutzerklärung für Marktvogt Informationen zur Verarbeitung personenbezogener Daten." />
</svelte:head>
<div class="mx-auto max-w-3xl px-4 py-8 sm:px-6 lg:px-8">
<h1 class="text-3xl font-bold text-stone-900 dark:text-stone-100">Datenschutzerklärung</h1>
<section class="mt-8">
<h2 class="text-lg font-semibold text-stone-900 dark:text-stone-100">1. Verantwortlicher</h2>
<p class="mt-2 text-stone-700 dark:text-stone-300">
Christian Nachtigall<br />
Karwendelstr. 21<br />
82061 Neuried<br />
E-Mail: <a href="mailto:christian@nachtigall.dev" class="text-primary-600 hover:text-primary-700 dark:text-primary-400 dark:hover:text-primary-300">christian@nachtigall.dev</a>
</p>
</section>
<section class="mt-8">
<h2 class="text-lg font-semibold text-stone-900 dark:text-stone-100">2. Überblick der Verarbeitungen</h2>
<p class="mt-2 text-stone-700 dark:text-stone-300">
Marktvogt ist ein Verzeichnis für Mittelaltermärkte und historische Feste. Wir verarbeiten personenbezogene Daten nur, soweit dies zur Bereitstellung der Funktionen unserer Website erforderlich ist. Die Verarbeitung erfolgt auf Grundlage der DSGVO (Datenschutz-Grundverordnung).
</p>
</section>
<section class="mt-8">
<h2 class="text-lg font-semibold text-stone-900 dark:text-stone-100">3. Hosting</h2>
<p class="mt-2 text-stone-700 dark:text-stone-300">
Diese Website wird auf Infrastruktur von <strong>itsh.dev</strong> gehostet. Beim Aufruf unserer Website werden durch den Hostinganbieter automatisch Informationen in sogenannten Server-Logfiles erfasst. Dazu gehören:
</p>
<ul class="mt-2 list-inside list-disc space-y-1 text-stone-700 dark:text-stone-300">
<li>IP-Adresse des zugreifenden Geräts</li>
<li>Datum und Uhrzeit der Anfrage</li>
<li>HTTP-Methode und aufgerufene URL</li>
<li>HTTP-Statuscode</li>
<li>Antwortzeit des Servers</li>
</ul>
<p class="mt-2 text-stone-700 dark:text-stone-300">
Diese Daten werden zur Sicherstellung eines störungsfreien Betriebs erhoben und zur Erkennung von Missbrauch ausgewertet. Rechtsgrundlage ist Art. 6 Abs. 1 lit. f DSGVO (berechtigtes Interesse).
</p>
</section>
<section class="mt-8">
<h2 class="text-lg font-semibold text-stone-900 dark:text-stone-100">4. Registrierung und Benutzerkonto</h2>
<p class="mt-2 text-stone-700 dark:text-stone-300">
Sie können auf unserer Website ein Benutzerkonto erstellen. Dabei werden folgende Daten verarbeitet:
</p>
<ul class="mt-2 list-inside list-disc space-y-1 text-stone-700 dark:text-stone-300">
<li><strong>E-Mail-Adresse</strong> zur Identifikation und Kommunikation</li>
<li><strong>Passwort</strong> wird ausschließlich als bcrypt-Hash gespeichert; das Klartext-Passwort wird nicht gespeichert</li>
<li><strong>Anzeigename</strong> frei wählbarer Name zur Darstellung im Profil</li>
<li><strong>Profilbild-URL</strong> sofern über einen OAuth-Anbieter bereitgestellt</li>
</ul>
<p class="mt-2 text-stone-700 dark:text-stone-300">
Die Verarbeitung erfolgt auf Grundlage Ihrer Einwilligung (Art. 6 Abs. 1 lit. a DSGVO) sowie zur Vertragserfüllung (Art. 6 Abs. 1 lit. b DSGVO). Ihr Konto kann jederzeit gelöscht werden.
</p>
</section>
<section class="mt-8">
<h2 class="text-lg font-semibold text-stone-900 dark:text-stone-100">5. Anmeldung über Drittanbieter (OAuth)</h2>
<p class="mt-2 text-stone-700 dark:text-stone-300">
Sie können sich mit einem bestehenden Konto bei folgenden Anbietern anmelden:
</p>
<ul class="mt-2 list-inside list-disc space-y-1 text-stone-700 dark:text-stone-300">
<li><strong>Google</strong> Abgerufene Daten: E-Mail-Adresse, Name, Profilbild, E-Mail-Verifizierungsstatus</li>
<li><strong>GitHub</strong> Abgerufene Daten: E-Mail-Adresse (primäre, verifizierte E-Mail)</li>
<li><strong>Facebook</strong> Abgerufene Daten: E-Mail-Adresse, Name, Profilbild</li>
</ul>
<p class="mt-2 text-stone-700 dark:text-stone-300">
Wir speichern die vom Anbieter übermittelten Daten (Anbieter-ID, Name, E-Mail) sowie ein Zugriffstoken zur Verifizierung der Verknüpfung. Die OAuth-Anmeldung erfolgt auf Grundlage Ihrer Einwilligung (Art. 6 Abs. 1 lit. a DSGVO). Sie können die Verknüpfung jederzeit in Ihren Profileinstellungen aufheben. Bitte beachten Sie die Datenschutzerklärungen der jeweiligen Anbieter:
</p>
<ul class="mt-2 list-inside list-disc space-y-1 text-stone-700 dark:text-stone-300">
<li><a href="https://policies.google.com/privacy" target="_blank" rel="noopener noreferrer" class="text-primary-600 hover:text-primary-700 dark:text-primary-400 dark:hover:text-primary-300">Google Datenschutzerklärung</a></li>
<li><a href="https://docs.github.com/en/site-policy/privacy-policies/github-general-privacy-statement" target="_blank" rel="noopener noreferrer" class="text-primary-600 hover:text-primary-700 dark:text-primary-400 dark:hover:text-primary-300">GitHub Datenschutzerklärung</a></li>
<li><a href="https://www.facebook.com/privacy/policy" target="_blank" rel="noopener noreferrer" class="text-primary-600 hover:text-primary-700 dark:text-primary-400 dark:hover:text-primary-300">Facebook Datenschutzerklärung</a></li>
</ul>
</section>
<section class="mt-8">
<h2 class="text-lg font-semibold text-stone-900 dark:text-stone-100">6. Magic-Link-Anmeldung</h2>
<p class="mt-2 text-stone-700 dark:text-stone-300">
Sie können sich über einen per E-Mail versendeten Einmal-Link (Magic Link) anmelden. Dabei wird Ihre E-Mail-Adresse verarbeitet und ein einmalig gültiger, zeitlich begrenzter Token (15 Minuten) erzeugt. Der Token wird als SHA-256-Hash gespeichert und nach Verwendung ungültig. Rechtsgrundlage ist Art. 6 Abs. 1 lit. b DSGVO (Vertragserfüllung).
</p>
</section>
<section class="mt-8">
<h2 class="text-lg font-semibold text-stone-900 dark:text-stone-100">7. Sitzungsverwaltung (Sessions)</h2>
<p class="mt-2 text-stone-700 dark:text-stone-300">
Nach der Anmeldung wird eine Sitzung erstellt. Dabei werden folgende Daten gespeichert:
</p>
<ul class="mt-2 list-inside list-disc space-y-1 text-stone-700 dark:text-stone-300">
<li><strong>IP-Adresse</strong> zum Zeitpunkt der Sitzungserstellung</li>
<li><strong>User-Agent</strong> Browserkennung zum Zeitpunkt der Anmeldung</li>
<li><strong>Sitzungstoken</strong> als SHA-256-Hash gespeichert</li>
</ul>
<p class="mt-2 text-stone-700 dark:text-stone-300">
Sitzungen laufen nach 30 Tagen automatisch ab. Die Speicherung dient der Sicherheit Ihres Kontos (Erkennung ungewöhnlicher Anmeldeaktivitäten). Rechtsgrundlage ist Art. 6 Abs. 1 lit. f DSGVO (berechtigtes Interesse an der Kontosicherheit).
</p>
</section>
<section class="mt-8">
<h2 class="text-lg font-semibold text-stone-900 dark:text-stone-100">8. Zwei-Faktor-Authentifizierung (2FA)</h2>
<p class="mt-2 text-stone-700 dark:text-stone-300">
Optional können Sie die Zwei-Faktor-Authentifizierung über ein TOTP-Verfahren (z.&nbsp;B. Google Authenticator) aktivieren. Dabei wird ein kryptografisches Geheimnis (TOTP-Secret) mit Ihrem Konto verknüpft gespeichert. Dieses wird bei Deaktivierung der 2FA oder Löschung des Kontos gelöscht.
</p>
</section>
<section class="mt-8">
<h2 class="text-lg font-semibold text-stone-900 dark:text-stone-100">9. Cookies und lokale Speicherung</h2>
<p class="mt-2 text-stone-700 dark:text-stone-300">
Wir verwenden ausschließlich technisch notwendige Cookies:
</p>
<div class="mt-4 overflow-x-auto">
<table class="w-full text-sm">
<thead>
<tr class="border-b border-stone-200 dark:border-stone-700">
<th class="py-2 pr-4 text-left font-semibold text-stone-900 dark:text-stone-100">Name</th>
<th class="py-2 pr-4 text-left font-semibold text-stone-900 dark:text-stone-100">Zweck</th>
<th class="py-2 pr-4 text-left font-semibold text-stone-900 dark:text-stone-100">Dauer</th>
</tr>
</thead>
<tbody>
<tr class="border-b border-stone-100 dark:border-stone-700">
<td class="py-2 pr-4 font-mono text-stone-700 dark:text-stone-300">access_token</td>
<td class="py-2 pr-4 text-stone-700 dark:text-stone-300">JWT-Zugriffstoken für authentifizierte Anfragen</td>
<td class="py-2 pr-4 text-stone-700 dark:text-stone-300">15 Minuten</td>
</tr>
<tr class="border-b border-stone-100 dark:border-stone-700">
<td class="py-2 pr-4 font-mono text-stone-700 dark:text-stone-300">session_token</td>
<td class="py-2 pr-4 text-stone-700 dark:text-stone-300">Sitzungstoken zur Erneuerung des Zugriffstokens</td>
<td class="py-2 pr-4 text-stone-700 dark:text-stone-300">30 Tage</td>
</tr>
</tbody>
</table>
</div>
<p class="mt-4 text-stone-700 dark:text-stone-300">
Zusätzlich wird im <strong>localStorage</strong> des Browsers die Einstellung für das Farbschema (<code class="rounded bg-stone-100 px-1 dark:bg-stone-800">marktvogt-theme</code>) gespeichert. Dies enthält keine personenbezogenen Daten.
</p>
<p class="mt-2 text-stone-700 dark:text-stone-300">
Es werden keine Tracking-, Analyse- oder Werbe-Cookies eingesetzt.
</p>
</section>
<section class="mt-8">
<h2 class="text-lg font-semibold text-stone-900 dark:text-stone-100">10. Standortdaten</h2>
<p class="mt-2 text-stone-700 dark:text-stone-300">
Für die Umkreissuche nach Märkten können Sie optional Ihren Standort freigeben. Dabei kommen zwei Verfahren zum Einsatz:
</p>
<ul class="mt-2 list-inside list-disc space-y-1 text-stone-700 dark:text-stone-300">
<li><strong>Browser-Geolokalisierung</strong> Ihr Browser fragt Ihre Erlaubnis, bevor Standortdaten bereitgestellt werden. Die Koordinaten werden nicht auf unserem Server gespeichert, sondern nur zur einmaligen Berechnung der Entfernung zu Märkten verwendet.</li>
<li><strong>IP-basierte Geolokalisierung (Fallback)</strong> Falls die Browser-Geolokalisierung nicht verfügbar ist, wird der Dienst <a href="https://www.geojs.io/" target="_blank" rel="noopener noreferrer" class="text-primary-600 hover:text-primary-700 dark:text-primary-400 dark:hover:text-primary-300">geojs.io</a> zur ungefähren Standortbestimmung genutzt. Dabei wird Ihre IP-Adresse an geojs.io übermittelt. Bitte beachten Sie die <a href="https://www.geojs.io/privacy/" target="_blank" rel="noopener noreferrer" class="text-primary-600 hover:text-primary-700 dark:text-primary-400 dark:hover:text-primary-300">Datenschutzerklärung von geojs.io</a>.</li>
</ul>
</section>
<section class="mt-8">
<h2 class="text-lg font-semibold text-stone-900 dark:text-stone-100">11. Kartendarstellung</h2>
<p class="mt-2 text-stone-700 dark:text-stone-300">
Zur Darstellung von Karten verwenden wir <strong>Leaflet</strong> mit Kartenkacheln von <strong>OpenStreetMap</strong>. Beim Laden der Karte werden Kartendaten von den Servern der OpenStreetMap Foundation (<code class="rounded bg-stone-100 px-1 dark:bg-stone-800">tile.openstreetmap.org</code>) abgerufen. Dabei wird Ihre IP-Adresse an die OpenStreetMap Foundation übermittelt. Weitere Informationen finden Sie in der <a href="https://wiki.osmfoundation.org/wiki/Privacy_Policy" target="_blank" rel="noopener noreferrer" class="text-primary-600 hover:text-primary-700 dark:text-primary-400 dark:hover:text-primary-300">Datenschutzerklärung der OpenStreetMap Foundation</a>.
</p>
<p class="mt-2 text-stone-700 dark:text-stone-300">
Die Leaflet-Bibliothek wird über <code class="rounded bg-stone-100 px-1 dark:bg-stone-800">unpkg.com</code> (CDN) geladen. Dabei kann Ihre IP-Adresse an den CDN-Betreiber übermittelt werden.
</p>
</section>
<section class="mt-8">
<h2 class="text-lg font-semibold text-stone-900 dark:text-stone-100">12. Ihre Rechte</h2>
<p class="mt-2 text-stone-700 dark:text-stone-300">
Sie haben gemäß DSGVO folgende Rechte bezüglich Ihrer personenbezogenen Daten:
</p>
<ul class="mt-2 list-inside list-disc space-y-1 text-stone-700 dark:text-stone-300">
<li><strong>Auskunft</strong> (Art. 15 DSGVO) Sie können Auskunft über Ihre gespeicherten Daten verlangen.</li>
<li><strong>Berichtigung</strong> (Art. 16 DSGVO) Sie können die Berichtigung unrichtiger Daten verlangen.</li>
<li><strong>Löschung</strong> (Art. 17 DSGVO) Sie können die Löschung Ihrer Daten verlangen.</li>
<li><strong>Einschränkung</strong> (Art. 18 DSGVO) Sie können die Einschränkung der Verarbeitung verlangen.</li>
<li><strong>Datenübertragbarkeit</strong> (Art. 20 DSGVO) Sie können Ihre Daten in einem maschinenlesbaren Format erhalten.</li>
<li><strong>Widerspruch</strong> (Art. 21 DSGVO) Sie können der Verarbeitung auf Basis berechtigter Interessen widersprechen.</li>
<li><strong>Widerruf der Einwilligung</strong> (Art. 7 Abs. 3 DSGVO) Erteilte Einwilligungen können jederzeit widerrufen werden.</li>
</ul>
<p class="mt-2 text-stone-700 dark:text-stone-300">
Zur Ausübung Ihrer Rechte wenden Sie sich an: <a href="mailto:christian@nachtigall.dev" class="text-primary-600 hover:text-primary-700 dark:text-primary-400 dark:hover:text-primary-300">christian@nachtigall.dev</a>
</p>
</section>
<section class="mt-8">
<h2 class="text-lg font-semibold text-stone-900 dark:text-stone-100">13. Beschwerderecht</h2>
<p class="mt-2 text-stone-700 dark:text-stone-300">
Sie haben das Recht, sich bei einer Datenschutz-Aufsichtsbehörde über die Verarbeitung Ihrer personenbezogenen Daten zu beschweren. Die für uns zuständige Aufsichtsbehörde ist:
</p>
<p class="mt-2 text-stone-700 dark:text-stone-300">
Bayerisches Landesamt für Datenschutzaufsicht (BayLDA)<br />
Promenade 18<br />
91522 Ansbach<br />
<a href="https://www.lda.bayern.de" target="_blank" rel="noopener noreferrer" class="text-primary-600 hover:text-primary-700 dark:text-primary-400 dark:hover:text-primary-300">www.lda.bayern.de</a>
</p>
</section>
<section class="mt-8">
<h2 class="text-lg font-semibold text-stone-900 dark:text-stone-100">14. Datenlöschung und Speicherdauer</h2>
<p class="mt-2 text-stone-700 dark:text-stone-300">
Personenbezogene Daten werden gelöscht, sobald der Zweck der Speicherung entfällt:
</p>
<ul class="mt-2 list-inside list-disc space-y-1 text-stone-700 dark:text-stone-300">
<li><strong>Benutzerkonto</strong> Bei Löschung Ihres Kontos werden Ihre Daten zunächst für 30 Tage zur möglichen Wiederherstellung aufbewahrt und anschließend endgültig gelöscht.</li>
<li><strong>Sitzungsdaten</strong> Automatische Löschung nach Ablauf (30 Tage).</li>
<li><strong>Magic-Link-Tokens</strong> Laufen nach 15 Minuten ab.</li>
<li><strong>Server-Logfiles</strong> Werden nach den beim Hostinganbieter üblichen Fristen gelöscht.</li>
</ul>
</section>
<section class="mt-8 mb-4">
<h2 class="text-lg font-semibold text-stone-900 dark:text-stone-100">15. Änderungen dieser Datenschutzerklärung</h2>
<p class="mt-2 text-stone-700 dark:text-stone-300">
Wir behalten uns vor, diese Datenschutzerklärung anzupassen, um sie an geänderte Rechtslagen oder Änderungen des Dienstes anzupassen. Die aktuelle Version finden Sie stets auf dieser Seite.
</p>
<p class="mt-4 text-sm text-stone-500 dark:text-stone-400">
Stand: Februar 2026
</p>
</section>
</div>

View File

@@ -0,0 +1,63 @@
<svelte:head>
<title>Impressum - Marktvogt</title>
<meta name="description" content="Impressum und Angaben gemäß § 5 TMG für Marktvogt." />
</svelte:head>
<div class="mx-auto max-w-3xl px-4 py-8 sm:px-6 lg:px-8">
<h1 class="text-3xl font-bold text-stone-900 dark:text-stone-100">Impressum</h1>
<section class="mt-8">
<h2 class="text-lg font-semibold text-stone-900 dark:text-stone-100">Angaben gemäß § 5 TMG</h2>
<p class="mt-2 text-stone-700 dark:text-stone-300">
Christian Nachtigall<br />
Karwendelstr. 21<br />
82061 Neuried
</p>
</section>
<section class="mt-8">
<h2 class="text-lg font-semibold text-stone-900 dark:text-stone-100">Kontakt</h2>
<p class="mt-2 text-stone-700 dark:text-stone-300">
E-Mail: <a href="mailto:christian@nachtigall.dev" class="text-primary-600 hover:text-primary-700 dark:text-primary-400 dark:hover:text-primary-300">christian@nachtigall.dev</a>
</p>
</section>
<section class="mt-8">
<h2 class="text-lg font-semibold text-stone-900 dark:text-stone-100">Verantwortlich für den Inhalt nach § 18 Abs. 2 MStV</h2>
<p class="mt-2 text-stone-700 dark:text-stone-300">
Christian Nachtigall<br />
Karwendelstr. 21<br />
82061 Neuried
</p>
</section>
<section class="mt-8">
<h2 class="text-lg font-semibold text-stone-900 dark:text-stone-100">Haftung für Inhalte</h2>
<p class="mt-2 text-stone-700 dark:text-stone-300">
Als Diensteanbieter sind wir gemäß § 7 Abs. 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.
</p>
<p class="mt-2 text-stone-700 dark:text-stone-300">
Verpflichtungen zur Entfernung oder Sperrung der Nutzung von Informationen nach den allgemeinen Gesetzen bleiben hiervon unberührt. Eine diesbezügliche Haftung ist jedoch erst ab dem Zeitpunkt der Kenntnis einer konkreten Rechtsverletzung möglich. Bei Bekanntwerden von entsprechenden Rechtsverletzungen werden wir diese Inhalte umgehend entfernen.
</p>
</section>
<section class="mt-8">
<h2 class="text-lg font-semibold text-stone-900 dark:text-stone-100">Haftung für Links</h2>
<p class="mt-2 text-stone-700 dark:text-stone-300">
Unser Angebot enthält Links zu externen Websites Dritter, auf deren Inhalte wir keinen Einfluss haben. Deshalb können wir für diese fremden Inhalte auch keine Gewähr übernehmen. Für die Inhalte der verlinkten Seiten ist stets der jeweilige Anbieter oder Betreiber der Seiten verantwortlich. Die verlinkten Seiten wurden zum Zeitpunkt der Verlinkung auf mögliche Rechtsverstöße überprüft. Rechtswidrige Inhalte waren zum Zeitpunkt der Verlinkung nicht erkennbar.
</p>
<p class="mt-2 text-stone-700 dark:text-stone-300">
Eine permanente inhaltliche Kontrolle der verlinkten Seiten ist jedoch ohne konkrete Anhaltspunkte einer Rechtsverletzung nicht zumutbar. Bei Bekanntwerden von Rechtsverletzungen werden wir derartige Links umgehend entfernen.
</p>
</section>
<section class="mt-8">
<h2 class="text-lg font-semibold text-stone-900 dark:text-stone-100">Urheberrecht</h2>
<p class="mt-2 text-stone-700 dark:text-stone-300">
Die durch die Seitenbetreiber erstellten Inhalte und Werke auf diesen Seiten unterliegen dem deutschen Urheberrecht. Die Vervielfältigung, Bearbeitung, Verbreitung und jede Art der Verwertung außerhalb der Grenzen des Urheberrechtes bedürfen der schriftlichen Zustimmung des jeweiligen Autors bzw. Erstellers. Downloads und Kopien dieser Seite sind nur für den privaten, nicht kommerziellen Gebrauch gestattet.
</p>
<p class="mt-2 text-stone-700 dark:text-stone-300">
Soweit die Inhalte auf dieser Seite nicht vom Betreiber erstellt wurden, werden die Urheberrechte Dritter beachtet. Insbesondere werden Inhalte Dritter als solche gekennzeichnet. Sollten Sie trotzdem auf eine Urheberrechtsverletzung aufmerksam werden, bitten wir um einen entsprechenden Hinweis. Bei Bekanntwerden von Rechtsverletzungen werden wir derartige Inhalte umgehend entfernen.
</p>
</section>
</div>