docs(security): document localStorage privacy + note ID fallback (#8)

- README gains a "Datenschutz & Speicherung" section: local single-user tool,
  unencrypted localStorage, avoid shared devices, export JSON to back up.
- Comments the generateId Math.random fallback as a non-crypto last resort,
  acceptable for local employee ids.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
ferdi2goandClaude Opus 4.8 committed 2026-06-03 12:40:58 +00:00
1 parent e6452fa102
commit 074635c037
2 files changed
+14

No files matched your search

+12
View File
@@ -25,3 +25,15 @@ Die App läuft auf **http://localhost:3001**.
```bash ```bash
npm test npm test
``` ```
## Datenschutz & Speicherung
Diese App ist ein **lokales Single-User-Werkzeug**: Alle Daten (Mitarbeiternamen,
Urlaube, Pläne, Verlauf) werden ausschließlich **im Browser** (`localStorage`)
gespeichert. Es gibt keinen Server und keine Übertragung an Dritte. Die Daten
liegen **unverschlüsselt** vor und sind für jeden zugänglich, der Zugriff auf
dasselbe Browser-Profil hat.
- App **nicht auf geteilten/öffentlichen Geräten** für sensible Daten nutzen.
- Datenstand regelmäßig über **JSON-Export** (Tab „Daten") sichern.
- Beim Leeren der Browserdaten gehen alle nicht exportierten Daten verloren.
+2
View File
@@ -10,6 +10,8 @@ function generateId() {
const h = [...b].map(x => x.toString(16).padStart(2, '0')); const h = [...b].map(x => x.toString(16).padStart(2, '0'));
return `${h.slice(0,4).join('')}-${h.slice(4,6).join('')}-${h.slice(6,8).join('')}-${h.slice(8,10).join('')}-${h.slice(10,16).join('')}`; return `${h.slice(0,4).join('')}-${h.slice(4,6).join('')}-${h.slice(6,8).join('')}-${h.slice(8,10).join('')}-${h.slice(10,16).join('')}`;
} }
// Last-resort fallback for environments without Web Crypto. Not cryptographically
// strong, but adequate for local, non-security-sensitive employee ids.
return Date.now().toString(36) + Math.random().toString(36).slice(2, 10); return Date.now().toString(36) + Math.random().toString(36).slice(2, 10);
} }