Bis jetzt gab es Code und Betriebsdokumentation, aber nichts, was einem beim Arbeiten hilft. Die Anleitung ist kein Handbuch zum Durchlesen, sondern die zwoelf Handgriffe, die im Alltag vorkommen - vom Behoerdenschreiben aufnehmen bis zum Vertrag kuendigen. Dazu der Jahresrhythmus, die Berichte, was am Handy anders ist, und ein Abschnitt "wenn etwas schiefgeht" mit den Faellen, die wirklich passieren: Handy verloren, Code wird nicht angenommen, Frist stimmt nicht, Bericht zeigt eine Differenz. Ein eigener Abschnitt sagt, was die Anwendung NICHT tut. Wer sich auf etwas verlaesst, das sie nicht leistet, faellt sonst genau dann darauf herein, wenn es darauf ankommt. Sie ist unter /anleitung auch in der Anwendung lesbar - dieselbe Datei, kein zweiter Text, der auseinanderlaeuft. Wer im Heim steht und nicht weiterweiss, hat sie auf dem Telefon dabei, und der Druckknopf legt sie zu den Betreuungsunterlagen. Dafuer ein schlichter Markdown-Baustein statt einer Bibliothek: die Anwendung zeigt genau zwei solche Dokumente, beide schreibe ich selbst. Rohes HTML wird nicht durchgereicht. Die Datenschutzseite benutzt ihn jetzt ebenfalls, statt eine zweite Umsetzung zu pflegen. Beide Dateien werden ueber outputFileTracingIncludes in den Standalone-Build gezogen - der Pfad entsteht erst zur Laufzeit, die Dateiverfolgung von Next.js kann ihn nicht erkennen. Ohne den Eintrag waeren beide Seiten im Behaelter leer. Die Roadmap sortiert die 44 Schema-Wuensche der Etappen nach einer einzigen Frage zuerst: Kann daraus ein falscher Wert in einem Bericht ans Gericht werden? Was das kann, steht in 1.1. Dazu ein Abschnitt "bewusst nicht geplant" mit Begruendung - damit klar ist, worauf niemand wartet. Etappe: 8 Phase: Haertung
50 lines
1.5 KiB
TypeScript
50 lines
1.5 KiB
TypeScript
import type { Metadata } from 'next'
|
|
import Link from 'next/link'
|
|
import { readFile } from 'node:fs/promises'
|
|
import path from 'node:path'
|
|
import { MarkdownSeite } from '@/components/markdown-seite'
|
|
|
|
export const metadata: Metadata = { title: 'Datenschutz' }
|
|
|
|
/**
|
|
* Datenschutzhinweise.
|
|
*
|
|
* Der Text kommt aus docs/datenschutzhinweise.md - dieselbe Datei, die man
|
|
* auch ausdrucken und der betreuten Person aushaendigen kann. Zwei Quellen
|
|
* fuer denselben Text waeren zwei Quellen fuer Fehler.
|
|
*/
|
|
export default async function DatenschutzSeite() {
|
|
const pfad = path.join(process.cwd(), 'docs', 'datenschutzhinweise.md')
|
|
let inhalt: string
|
|
|
|
try {
|
|
inhalt = await readFile(pfad, 'utf8')
|
|
} catch {
|
|
inhalt = ''
|
|
}
|
|
|
|
return (
|
|
<div className="mx-auto max-w-3xl px-4 py-10 sm:px-6">
|
|
<h1 className="text-2xl font-semibold">Datenschutzhinweise</h1>
|
|
<p className="mt-1 text-sm text-muted-foreground">nach Art. 13 und 14 DSGVO</p>
|
|
|
|
<div className="mt-8">
|
|
{inhalt === '' ? (
|
|
<p className="text-muted-foreground">
|
|
Der Text konnte nicht geladen werden. Er liegt im Projekt unter{' '}
|
|
<code className="rounded bg-muted px-1.5 py-0.5">docs/datenschutzhinweise.md</code>.
|
|
</p>
|
|
) : (
|
|
<MarkdownSeite inhalt={inhalt} />
|
|
)}
|
|
</div>
|
|
|
|
<p className="mt-10 border-t pt-6 text-sm text-muted-foreground">
|
|
<Link href="/anmelden" className="underline hover:no-underline">
|
|
Zurück zur Anmeldung
|
|
</Link>
|
|
</p>
|
|
</div>
|
|
)
|
|
}
|