Zum Inhalt springen
`CTRL K`

Dokumentation
Datenhaltung

# Datenhaltung & Backup

Wo Rapport seine Daten speichert, wie du sie sicherst und wiederherstellst.

> Diese Seite beschreibt die Desktop-App (Single-User). Wer im Team arbeitet und Rapport gegen einen Rapport Server betreibt, sichert stattdessen die Postgres-Datenbank — siehe Rapport Server § Backup.

## Speicherort (Desktop-App)

Die Desktop-App speichert alles lokal — keine Cloud, kein Server.

### macOS

    ~/Library/Application Support/com.rapport.app/

Dort liegt eine einzelne `localStorage`-Datenbank des WebView, in der alle Rapport-Daten als JSON unter dem Key `studio_data_v1` gespeichert sind:

- Bürodaten, Logo, IBAN
- Mitarbeiter, Kunden, Projekte, Offerten
- Zeit-Einträge, Rechnungen
- Spesen, Lohnabrechnungen, Protokolle
- App-Einstellungen

> Konsequenz: Wer den Application-Support-Ordner kopiert, hat ein vollständiges Backup. Wer ihn löscht, verliert alle Daten.

### Warum localStorage?

In der Desktop-App ist Rapport eine Single-User-Anwendung. localStorage ist dafür:

- Schnell — keine Datenbank-Roundtrips
- Einfach — keine Migration nötig, JSON-Schema im Code
- Portabel — eine Datei → ein Backup

Für Multi-User-Betrieb existiert Rapport Server — Postgres + Auth + Realtime in einem Docker-Compose. Wechsel zwischen Desktop- und Server-Modus erfolgt im Login-Bildschirm der App.

## Backup-Strategien

### A · Einfach (manuell)

Den ganzen Ordner kopieren:

    cp -R "~/Library/Application Support/com.rapport.app" \
          "~/Documents/Rapport-Backup-$(date +%Y%m%d)"

→ Auf USB-Stick, externen Datenträger oder in die Cloud.

### B · Time Machine

Wenn Time Machine läuft, ist der Ordner automatisch dabei. Versionierung inbegriffen.

> Einschränkung: Time Machine sichert nur lokal/USB. Für off-site-Backup separat sorgen.

### C · Cron-Job (täglich automatisch)

    # In ~/Library/LaunchAgents/com.rapport.backup.plist hinterlegen
    # oder als crontab-Eintrag:
    0 22 * * * rsync -a "$HOME/Library/Application Support/com.rapport.app/" \
                        "$HOME/Backups/rapport/$(date +\%Y\%m\%d)/"

### D · iCloud Drive (off-site)

Application-Support liegt nicht automatisch in iCloud. Wer das will:

    # Symlink anlegen
    mkdir -p "~/iCloud Drive/Rapport"
    ln -s "~/Library/Application Support/com.rapport.app" "~/iCloud Drive/Rapport/data"

> Achtung: iCloud-Sync mit aktiver App kann zu Race-Conditions führen. Besser den Sync zeitversetzt (z. B. nachts via Cron).

## Wiederherstellung

### Vollständig (Rapport komplett tot)

1. Rapport beenden (Cmd+Q, nicht nur Fenster zu)
2. Aktuellen Ordner umbenennen (falls noch da):

       mv "~/Library/Application Support/com.rapport.app" \
          "~/Library/Application Support/com.rapport.app.bak"

3. Backup-Ordner zurück kopieren:

       cp -R "~/Documents/Rapport-Backup-20260523" \
             "~/Library/Application Support/com.rapport.app"

4. Rapport starten

### Selektiv (nur einzelne Daten)

Da alle Daten in einem JSON unter `studio_data_v1` liegen, ist selektive Wiederherstellung manuell:

1. Backup-`localStorage`-Datei öffnen (WebKit-Format → mit Tool wie [WebKit Storage Inspector] lesen, oder via Rapport DevTools)
2. Gewünschte Felder in die aktuelle Instanz übertragen

In der Praxis: meistens lohnt sich die vollständige Wiederherstellung mehr.

## Export-Funktionen (in der App)

Aus Rapport selbst:

Was | Wo | Format
--- | --- | ---
Zeit-Auswertung | Zeit → Export | CSV
Rechnung | Rechnung → PDF | PDF (inkl. QR)
Offerte | Offerte → PDF | PDF
Lohnabrechnung | Mitarbeiter → PDF | PDF
Jahres-Buchhaltung | Buchhaltung → Export | CSV

Die Exports sind für externe Verwendung (Buchhalter, Treuhänder, Archiv) gedacht — kein Full-Backup.

## Schema-Migrationen

Bei Updates kann sich das Datenformat ändern. Rapport hat einen Migrations-Mechanismus: beim Start prüft die App, ob das gespeicherte Format dem aktuellen entspricht, und migriert es automatisch.

Code: src/storage/migrations.js
.

> Empfehlung: Vor jedem grösseren Update ein Backup machen — Migrationen sind getestet, aber 100%-Sicherheit gibt es nicht.

## Was wird nicht gespeichert?

- WebView-Cache — `~/Library/Caches/com.rapport.app/` und `~/Library/WebKit/com.rapport.app/` sind sicher zu löschen (UI-Caches, regenerieren sich)
- App-Updates — werden bei Bedarf erneut runtergeladen
- Logs — `~/Library/Logs/com.rapport.app/` (geplant, derzeit nicht geschrieben)

## Datenmenge

Typische Grössen pro Bürojahr:

Inhalt | Grösse
--- | ---
Logo (PNG/SVG) | 50 KB – 1 MB
1 Jahr Zeiterfassung (1 MA) | ~ 80 KB
1 Jahr Zeiterfassung (5 MA) | ~ 400 KB
50 Projekte mit je 5 Rechnungen | ~ 800 KB
Total typisches Solo-Büro / Jahr | ~ 1–2 MB

localStorage hat Limits (i. d. R. ~10 MB pro Origin). Für Solo-Büros reicht das problemlos für viele Jahre. Wer das Limit erreicht oder im Team arbeitet → Rapport Server.

Arbeitsablauf Web-Modus