feat(web): /privacy + /help Stubs für App-Store-Submission
Some checks are pending
CI / validate (push) Waiting to run

Apple verlangt für jede App-Store-Submission verlinkte Privacy-Policy
und Support-Page. Beide jetzt als SvelteKit-Routes mit Verein-Content.

/privacy:
- Was wir speichern (Account/Inhalte/Reviews/Server-Logs)
- Was wir NICHT machen (kein Ad-Tracking, kein SaaS-Crashreporter)
- Welche Dienste (Cloudflare-Tunnel, Eigenhosting)
- DSGVO-Rechte (Export, Löschung)
- Native-App-Spezifika (SwiftData-Cache, Keychain)

/help:
- Kontakt kontakt@mana-ev.ch
- FAQ (FSRS, Anki-Import, Offline, Marketplace, Mitmachen)
- Bug-Report-Anleitung

Beide nutzen die 12-Token-CSS-Vars (--color-foreground etc.) für
Theme-Konsistenz.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
Till JS 2026-05-13 14:10:45 +02:00
parent abf493aeec
commit c6488c0b83
2 changed files with 232 additions and 0 deletions

View file

@ -0,0 +1,99 @@
<svelte:head>
<title>Hilfe — Cardecky</title>
<meta name="description" content="Hilfe und Support für Cardecky." />
</svelte:head>
<main class="page">
<h1>Hilfe &amp; Support</h1>
<p class="lead">
Cardecky wird vom Verein <strong>mana e.V.</strong> (i.&nbsp;G.) betrieben.
Bei Fragen oder Problemen melde dich direkt bei uns — wir antworten meist innerhalb
eines Tages.
</p>
<h2>Kontakt</h2>
<p>
Email: <a href="mailto:kontakt@mana-ev.ch">kontakt@mana-ev.ch</a><br />
Verein: <a href="https://mana-ev.ch">mana-ev.ch</a>
</p>
<h2>Häufige Fragen</h2>
<h3>Wie funktioniert das Lern-Schema?</h3>
<p>
Cardecky nutzt <a href="https://github.com/open-spaced-repetition/fsrs4anki">FSRS</a>
(Free Spaced Repetition Scheduler), den genauesten offenen Algorithmus für
Karteikarten. Karten kommen wieder, wenn deine Erinnerung sie braucht — und nicht
nach starren Intervallen.
</p>
<h3>Kann ich Anki-Decks importieren?</h3>
<p>
Ja. Im Web unter <a href="/import">Import</a>: .apkg-Datei hochladen, alle
Notes werden konvertiert, Tags bleiben erhalten, Bilder + Audio werden mitgenommen.
</p>
<h3>Funktioniert das offline?</h3>
<p>
Die Web-App braucht eine Verbindung. Die native iOS-App <strong>Cards</strong>
cached deine Karten lokal und lässt dich offline lernen — die Reviews werden gequeued
und beim nächsten Online-Moment synchronisiert.
</p>
<h3>Was ist mit dem Marketplace (Cardecky)?</h3>
<p>
Der Marketplace unter <a href="/explore">Entdecken</a> ist die offene
Sammlung freigegebener Decks. Subscriben heißt: das Deck wird in deine eigene
Bibliothek geforkt, du kannst es nach Belieben anpassen.
</p>
<h3>Wie kann ich helfen?</h3>
<p>
Mit einem öffentlichen Deck zur Community, einer Spende
(<a href="https://mana-ev.ch/spende">mana-ev.ch/spende</a>) oder einem Pull-Request
gegen unseren Code-Stand (<a href="https://git.mana.how">git.mana.how</a>).
</p>
<h2>Bug melden</h2>
<p>
Beschreibe so genau wie möglich was passiert ist, auf welchem Gerät, welcher Browser
oder iOS-Version. Screenshots helfen. Email an
<a href="mailto:kontakt@mana-ev.ch">kontakt@mana-ev.ch</a> mit Betreff "Cards Bug:".
</p>
<p>
<a href="/">← Zurück zur Startseite</a>
</p>
</main>
<style>
.page {
max-width: 720px;
margin: 0 auto;
padding: 2rem 1.5rem 4rem;
color: hsl(var(--color-foreground));
line-height: 1.55;
}
h1 {
font-size: 2rem;
margin-bottom: 0.5rem;
}
h2 {
font-size: 1.25rem;
margin-top: 2rem;
margin-bottom: 0.5rem;
}
h3 {
font-size: 1rem;
margin-top: 1.5rem;
margin-bottom: 0.4rem;
}
.lead {
font-size: 1.05rem;
color: hsl(var(--color-muted-foreground));
}
a {
color: hsl(var(--color-primary));
}
</style>

View file

@ -0,0 +1,133 @@
<svelte:head>
<title>Datenschutz — Cardecky</title>
<meta name="description" content="Datenschutzerklärung für Cardecky, die Karteikarten-App des Vereins mana e.V." />
</svelte:head>
<main class="page">
<h1>Datenschutz</h1>
<p class="lead">
Cardecky ist die Karteikarten-App des Vereins <strong>mana e.V.</strong> (in Gründung,
Sitz Schweiz). Wir hosten die Daten selbst, sammeln nur was wir für den Betrieb brauchen, und
geben nichts an Dritte weiter, die nicht in dieser Erklärung genannt sind.
</p>
<h2>Verantwortlich</h2>
<p>
mana e.V. (i.&nbsp;G.), Kontakt: <a href="mailto:kontakt@mana-ev.ch">kontakt@mana-ev.ch</a><br />
Postanschrift folgt nach Eintragung — siehe <a href="https://mana-ev.ch">mana-ev.ch</a>.
</p>
<h2>Welche Daten wir speichern</h2>
<ul>
<li>
<strong>Account</strong>: Email-Adresse (Login), Passwort (gehasht via Argon2id),
Login-Zeitpunkte. Über <code>auth.mana.how</code> (mana-auth-Service).
</li>
<li>
<strong>Inhalte</strong>: Decks, Karten, Tags, Hashtags, Bilder/Audio, die du selbst
erstellst.
</li>
<li>
<strong>Lernfortschritt</strong>: FSRS-Zustand pro Karte (next-due, stability,
difficulty, lapses, reps). Wir nutzen das für den Spaced-Repetition-Scheduler.
</li>
<li>
<strong>Server-Logs</strong>: HTTP-Methode, Pfad, Statuscode, anonymisierte
IP-Präfixe für 7 Tage. Keine Cookies-für-Werbung, kein Cross-Site-Tracking.
</li>
</ul>
<h2>Was wir NICHT machen</h2>
<ul>
<li>Kein Werbe-Tracking, kein Re-Targeting, keine Google/Facebook/Meta-Pixels.</li>
<li>Kein Crash-Reporting-SaaS (Sentry/Firebase/Crashlytics).</li>
<li>Keine Weitergabe an Dritte zu Marketing- oder Analyse-Zwecken.</li>
</ul>
<h2>Welche Dienste wir nutzen</h2>
<ul>
<li>
<strong>Cloudflare</strong> als Tunnel + CDN für <code>cardecky.mana.how</code> und
<code>cardecky-api.mana.how</code>. Cloudflare kann Verbindungs-Metadaten sehen, die
Inhalte sind HTTPS-verschlüsselt.
</li>
<li>
<strong>mana e.V.-Eigenhosting</strong> (Mac Mini in der Schweiz) für Application-
Server, Postgres-DB und MinIO-Object-Storage. Niemand außer dem Vorstand hat Zugang.
</li>
</ul>
<h2>Deine Rechte (Art. 15 ff. DSGVO)</h2>
<ul>
<li>
<strong>Auskunft + Export</strong>: Im Account-Bereich →
<em>Daten exportieren</em>. Du bekommst alle deine Daten als JSON.
</li>
<li>
<strong>Löschung</strong>: Im Account-Bereich → <em>Account löschen</em>.
Alles wird sofort entfernt (Decks, Karten, Reviews, Auth-Eintrag).
</li>
<li>
<strong>Widerruf</strong>: Email an
<a href="mailto:kontakt@mana-ev.ch">kontakt@mana-ev.ch</a>.
</li>
</ul>
<h2>Native Apps</h2>
<p>
Die iOS-App <strong>Cards</strong> (Bundle <code>ev.mana.cardecky</code>) speichert
zusätzlich lokal auf deinem Gerät: gecachte Decks (SwiftData),
Offline-Grade-Queue, Auth-Token im iOS-Keychain. Beim Logout werden alle lokalen Daten
gelöscht. Keine Telemetrie an uns oder Apple, keine Push-Server.
</p>
<h2>Änderungen</h2>
<p>
Wir aktualisieren diese Erklärung wenn sich Praxis oder Dienste ändern. Größere
Änderungen kündigen wir per Email an. Stand: 2026-05-13.
</p>
<p>
<a href="/">← Zurück zur Startseite</a>
</p>
</main>
<style>
.page {
max-width: 720px;
margin: 0 auto;
padding: 2rem 1.5rem 4rem;
color: hsl(var(--color-foreground));
line-height: 1.55;
}
h1 {
font-size: 2rem;
margin-bottom: 0.5rem;
}
h2 {
font-size: 1.25rem;
margin-top: 2rem;
margin-bottom: 0.5rem;
}
.lead {
font-size: 1.05rem;
color: hsl(var(--color-muted-foreground));
}
ul {
padding-left: 1.25rem;
}
li {
margin-bottom: 0.4rem;
}
a {
color: hsl(var(--color-primary));
}
code {
font-family: ui-monospace, SFMono-Regular, monospace;
font-size: 0.9em;
background: hsl(var(--color-muted));
padding: 0.1em 0.3em;
border-radius: 3px;
}
</style>