Initial commit: Rapport Website (Hugo + Hextra)
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,35 @@
|
||||
---
|
||||
title: Dokumentation
|
||||
linkTitle: Dokumentation
|
||||
weight: 1
|
||||
---
|
||||
|
||||
Vollständige Anleitung zu RAPPORT — von der Installation über den täglichen Arbeitsablauf bis zur Cloud-Variante und Eigen-Builds.
|
||||
|
||||
## Erste Schritte
|
||||
|
||||
{{< cards >}}
|
||||
{{< card link="erste-schritte" title="Quick-Start" subtitle="In sechs Schritten von Null zur ersten Rechnung." >}}
|
||||
{{< card link="installation" title="Installation" subtitle="macOS, Gatekeeper, Signatur, geplante Plattformen." >}}
|
||||
{{< card link="einrichtung" title="Einrichtung" subtitle="Bürodaten, Mitarbeiter, Kunden, Projekte initial anlegen." >}}
|
||||
{{< /cards >}}
|
||||
|
||||
## Im Alltag
|
||||
|
||||
{{< cards >}}
|
||||
{{< card link="arbeitsablauf" title="Typischer Arbeitsablauf" subtitle="Kunde → Offerte → Projekt → Zeit → Rechnung." >}}
|
||||
{{< card link="datenhaltung" title="Datenhaltung & Backup" subtitle="Wo die Daten liegen, wie du sie sicherst und wiederherstellst." >}}
|
||||
{{< card link="troubleshooting" title="Troubleshooting" subtitle="App startet nicht, Daten weg, Update hängt." >}}
|
||||
{{< /cards >}}
|
||||
|
||||
## Für Fortgeschrittene
|
||||
|
||||
{{< cards >}}
|
||||
{{< card link="web-modus" title="Web-Modus (Multi-User)" subtitle="Rapport im Browser via Supabase — für Studios mit mehreren Nutzern." >}}
|
||||
{{< card link="entwicklung" title="Entwicklung & Build" subtitle="Aus dem Quellcode kompilieren, beitragen, eigenes Release." >}}
|
||||
{{< card link="changelog" title="Changelog" subtitle="Versionsgeschichte und Breaking Changes." >}}
|
||||
{{< /cards >}}
|
||||
|
||||
## Hilfe & Support
|
||||
|
||||
Bei Bugs oder weiteren Fragen → [Issue auf Gitea](https://git.kgva.ch/karim/RAPPORT/issues). Siehe auch die [FAQ](../faq) für häufige Fragen.
|
||||
@@ -0,0 +1,129 @@
|
||||
---
|
||||
title: Typischer Arbeitsablauf
|
||||
linkTitle: Arbeitsablauf
|
||||
weight: 4
|
||||
toc: true
|
||||
---
|
||||
|
||||
Vom Erstkontakt mit dem Kunden bis zur Schlussrechnung — der typische Weg eines Projekts durch Rapport.
|
||||
|
||||
## Übersicht
|
||||
|
||||
```text
|
||||
Kunde → Offerte → Projekt → Zeit → Akonto → Schluss
|
||||
anlegen erstellen (aus Offerte) erfassen -Rechnung -Rechnung
|
||||
↓
|
||||
QR-Schein
|
||||
```
|
||||
|
||||
## 1 · Kunde anlegen
|
||||
|
||||
**Kunden → Neu** — siehe [Einrichtung § 3](../einrichtung#3--kunden).
|
||||
|
||||
Falls der Kunde später bestellt, lassen sich alle gesammelten Daten (Adresse, Honorartyp) direkt übernehmen.
|
||||
|
||||
## 2 · Offerte erstellen
|
||||
|
||||
**Offerten → Neu**
|
||||
|
||||
| Feld | Inhalt |
|
||||
|---|---|
|
||||
| **Kunde** | aus Kundendatenbank wählen |
|
||||
| **Bezeichnung** | Projekttitel (z. B. "Einfamilienhaus Müller, Bern") |
|
||||
| **Honorartyp** | Stundensatz / SIA 102 / Pauschal |
|
||||
| **Bauschätzwert** | bei SIA — Bruttowert in CHF |
|
||||
| **Phasen** | bei SIA — anzuklickende Phasen |
|
||||
| **Positionen** | bei Stundensatz/Pauschal — Position, Beschreibung, Betrag |
|
||||
|
||||
Mit *PDF exportieren* — fertige Offerte für den Kunden.
|
||||
|
||||
### Offerten-Status
|
||||
|
||||
| Status | Bedeutung |
|
||||
|---|---|
|
||||
| **Entwurf** | noch nicht versandt |
|
||||
| **Versandt** | beim Kunden, wartet auf Antwort |
|
||||
| **Angenommen** | Kunde hat zugesagt — bereit zur Konvertierung |
|
||||
| **Abgelehnt** | Kunde hat abgelehnt — Archiv |
|
||||
|
||||
## 3 · Offerte → Projekt
|
||||
|
||||
Bei Status **"Angenommen"**: Knopf **"In Projekt konvertieren"**.
|
||||
|
||||
Das erzeugt:
|
||||
|
||||
- Ein neues Projekt mit den Daten der Offerte (Kunde, Bezeichnung, Honorar, Phasen)
|
||||
- Eine Verknüpfung zwischen Offerte und Projekt
|
||||
- Die Offerte selbst bleibt im Archiv erhalten
|
||||
|
||||
Siehe auch [Projekt-Feature](../../features/projekte).
|
||||
|
||||
## 4 · Zeit erfassen
|
||||
|
||||
**Zeit → Mitarbeiter wählen → Woche navigieren**
|
||||
|
||||
- **Klick** auf einen Halbstunden-Slot → Eintrag erstellen
|
||||
- **Drag** über mehrere Slots → längerer Eintrag
|
||||
- **Projekt zuweisen** (Pflichtfeld) — aus aktiven Projekten
|
||||
- **SIA-Phase** zuweisen (optional, für detaillierte Auswertung)
|
||||
|
||||
### Spezialfälle
|
||||
|
||||
- **Ferien** — eigener "Projekt"-Typ "Ferien", in der Auswertung separat
|
||||
- **Krankheit/Absenz** — eigener "Projekt"-Typ, ebenfalls separat
|
||||
- **Interne Stunden** — z. B. Verwaltung, Marketing, IT — eigene interne Projekte
|
||||
|
||||
## 5 · Akonto-Rechnung
|
||||
|
||||
Während der Projektlaufzeit — typisch nach jeder abgeschlossenen SIA-Phase oder monatlich.
|
||||
|
||||
**Rechnungen → Neu → Akonto**
|
||||
|
||||
| Feld | Inhalt |
|
||||
|---|---|
|
||||
| **Projekt** | aus aktiven Projekten |
|
||||
| **Bezug** | "Akonto für Phase 31 — Vorprojekt" |
|
||||
| **Betrag** | Stundensatz × Stunden, oder Phasenanteil × Bausumme |
|
||||
| **Fälligkeit** | i. d. R. 30 Tage |
|
||||
|
||||
Rapport zieht automatisch die geleisteten Stunden aus der Zeiterfassung — die kannst du als Basis nehmen oder überschreiben.
|
||||
|
||||
PDF inkl. **QR-Einzahlungsschein** — siehe [Rechnungen-Feature](../../features/rechnungen).
|
||||
|
||||
## 6 · Schlussrechnung
|
||||
|
||||
Nach Projektabschluss — Differenz aus Gesamthonorar minus aller Akonto-Beträge.
|
||||
|
||||
**Rechnungen → Neu → Schlussrechnung**
|
||||
|
||||
Rapport rechnet die bisherigen Akonto-Rechnungen automatisch ab:
|
||||
|
||||
```text
|
||||
Gesamthonorar (SIA / Pauschal / Stundensatz)
|
||||
− Akonto-Rechnung 1
|
||||
− Akonto-Rechnung 2
|
||||
− Akonto-Rechnung 3
|
||||
= Schlussrechnung
|
||||
```
|
||||
|
||||
## 7 · Projektabschluss
|
||||
|
||||
Im Projekt → Status auf **"Abgeschlossen"**.
|
||||
|
||||
Das Projekt bleibt für historische Auswertungen sichtbar, taucht aber nicht mehr in der Zeiterfassungs-Auswahl auf.
|
||||
|
||||
## Auswertungen
|
||||
|
||||
Wöchentlich / monatlich / am Jahresende:
|
||||
|
||||
- **Zeit → Auswertungen** — Stunden pro Mitarbeiter, pro Projekt, pro Phase
|
||||
- **Rechnungen → Übersicht** — offene Beträge, bezahlt, Mahnungen
|
||||
- **Buchhaltung → Erfolgsrechnung** — Einnahmen vs. Ausgaben
|
||||
- **Mitarbeiter → Lohnabrechnung** — monatlich
|
||||
|
||||
## Tipps aus dem Alltag
|
||||
|
||||
- **Zeit jeden Tag erfassen** statt rückwirkend — sonst gehen Details verloren
|
||||
- **Akonto regelmässig** statt einmal am Schluss — Liquidität
|
||||
- **Backups** vor Jahresabschluss — siehe [Datenhaltung](../datenhaltung)
|
||||
- **Briefbogen-Logo** in hoher Auflösung — sieht im PDF besser aus
|
||||
@@ -0,0 +1,114 @@
|
||||
---
|
||||
title: Changelog
|
||||
linkTitle: Changelog
|
||||
weight: 9
|
||||
toc: true
|
||||
---
|
||||
|
||||
Versionsgeschichte von RAPPORT. Aktuelle Releases: [Gitea](https://git.kgva.ch/karim/RAPPORT/releases).
|
||||
|
||||
## 0.8.3 — Aktuelle Version <span class="rapport-status new">Aktuell</span>
|
||||
|
||||
Veröffentlicht am 2026-05-24.
|
||||
|
||||
**Neu / Verbessert**
|
||||
|
||||
- Diverse Verbesserungen und Bugfixes (Details werden im [Release auf Gitea](https://git.kgva.ch/karim/RAPPORT/releases/tag/0.8.3) gepflegt)
|
||||
|
||||
**Bekannte Einschränkungen**
|
||||
|
||||
- Builds sind Tauri-signiert, aber noch nicht Apple-notarisiert — siehe [Installation § Gatekeeper](../installation#3--erster-start-macos-gatekeeper)
|
||||
- Linux- und Windows-Builds noch nicht verfügbar
|
||||
|
||||
## 0.8.0–0.8.2 — Patch-Releases
|
||||
|
||||
Patch-Reihe mit kleineren Verbesserungen und Bugfixes. Details siehe [Releases auf Gitea](https://git.kgva.ch/karim/RAPPORT/releases).
|
||||
|
||||
## 0.7.0 — Auto-Updater & System-Tray
|
||||
|
||||
**Neu**
|
||||
|
||||
- **Auto-Updater** — Rapport prüft beim Start auf neue Versionen und installiert Updates signiert über Tauri. Einzelne Versionen können übersprungen werden. ([Doku](../../features/auto-updater))
|
||||
- **System-Tray** — Schnellzugriff über die Menüleiste mit Hide-on-Close. Beim Schliessen läuft Rapport im Hintergrund weiter, Cmd+Q beendet die App vollständig. ([Doku](../../features/system-tray))
|
||||
- **Quick-Open** der letzten 5 Projekte direkt aus dem Tray-Menü
|
||||
|
||||
**Verbessert**
|
||||
|
||||
- Schnellerer App-Start durch lazy-geladene Views
|
||||
- Klarere Statusbadges in der Projekt-Übersicht
|
||||
|
||||
## 0.6.x — Spesen & Buchhaltung
|
||||
|
||||
**Neu**
|
||||
|
||||
- Spesenerfassung mit Beleg-Upload (Base64 in localStorage)
|
||||
- Jahresbudget mit Einnahmen-/Ausgaben-Übersicht
|
||||
- Vereinfachte Erfolgsrechnung pro Geschäftsjahr
|
||||
|
||||
**Verbessert**
|
||||
|
||||
- Lohnabrechnung integriert Spesen-Erstattungen
|
||||
- CSV-Export aus der Zeiterfassung
|
||||
|
||||
## 0.5.x — Mitarbeiter & Lohn
|
||||
|
||||
**Neu**
|
||||
|
||||
- Mitarbeiterverwaltung mit Pensum, Stundensatz, Ferienanspruch
|
||||
- Lohnabrechnung mit AHV/IV/EO, ALV, BVG, NBU
|
||||
- Jahresabschluss mit Überstundenausgleich
|
||||
- Ferien-Prorata bei Eintritt unter Jahr
|
||||
|
||||
## 0.4.x — Projekte & SIA 102
|
||||
|
||||
**Neu**
|
||||
|
||||
- Projektverwaltung nach SIA 102
|
||||
- Vorgeschlagene Phasen-Anteile am Gesamthonorar
|
||||
- Bauschätzwert-basiertes Honorar
|
||||
|
||||
**Verbessert**
|
||||
|
||||
- Zeit-Auswertung pro SIA-Phase
|
||||
- Akonto- und Schlussrechnungen mit automatischer Differenzberechnung
|
||||
|
||||
## 0.3.x — Rechnungen & QR
|
||||
|
||||
**Neu**
|
||||
|
||||
- Rechnungsmodul mit QR-Einzahlungsschein (via `swissqrbill`)
|
||||
- Akonto-, Teil- und Schlussrechnungen
|
||||
- PDF-Export mit Bürobriefbogen
|
||||
- Stundensatz-Rechnungen ziehen direkt aus der Zeiterfassung
|
||||
|
||||
## 0.2.x — Zeiterfassung
|
||||
|
||||
**Neu**
|
||||
|
||||
- Wochenraster mit Halbstunden-Slots
|
||||
- Drag & Drop zur Slot-Erfassung
|
||||
- Projekt-Zuweisung pro Eintrag
|
||||
- Auswertungen pro Mitarbeiter und Projekt
|
||||
|
||||
## 0.1.x — Initial
|
||||
|
||||
**Neu**
|
||||
|
||||
- Erste Setup-Routine (Bürodaten, Mitarbeiter, Kunden)
|
||||
- Briefe und Lieferscheine
|
||||
- Tauri-2-Bundle für macOS
|
||||
|
||||
---
|
||||
|
||||
## Roadmap
|
||||
|
||||
Geplant — keine konkreten Termine:
|
||||
|
||||
- **Linux-Build** (Tauri 2 unterstützt es, Bedarf nötig)
|
||||
- **Windows-Build** (analog)
|
||||
- **Cloud-Modus** Stable (Supabase) — derzeit in [Web-Modus](../web-modus) verfügbar, aber experimentell
|
||||
- **Französische / Italienische Übersetzung**
|
||||
- **PostgreSQL-Migration** aus localStorage (Knopf in der App)
|
||||
- **Mobile App** (iOS Companion zur Zeiterfassung) — offen
|
||||
|
||||
Wünsche oder Prioritäten → [Issue auf Gitea](https://git.kgva.ch/karim/RAPPORT/issues).
|
||||
@@ -0,0 +1,148 @@
|
||||
---
|
||||
title: Datenhaltung & Backup
|
||||
linkTitle: Datenhaltung
|
||||
weight: 5
|
||||
toc: true
|
||||
---
|
||||
|
||||
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](../../server/) betreibt, sichert stattdessen die Postgres-Datenbank — siehe [Rapport Server § Backup](../../server/#backup).
|
||||
|
||||
## Speicherort (Desktop-App)
|
||||
|
||||
Die Desktop-App speichert **alles lokal** — keine Cloud, kein Server.
|
||||
|
||||
### macOS
|
||||
|
||||
```text
|
||||
~/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](../../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:
|
||||
|
||||
```bash
|
||||
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)
|
||||
|
||||
```bash
|
||||
# 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:
|
||||
|
||||
```bash
|
||||
# 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):
|
||||
```bash
|
||||
mv "~/Library/Application Support/com.rapport.app" \
|
||||
"~/Library/Application Support/com.rapport.app.bak"
|
||||
```
|
||||
3. Backup-Ordner zurück kopieren:
|
||||
```bash
|
||||
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](https://git.kgva.ch/karim/RAPPORT/src/branch/main/APP/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](../../server/).
|
||||
@@ -0,0 +1,111 @@
|
||||
---
|
||||
title: Einrichtung
|
||||
linkTitle: Einrichtung
|
||||
weight: 3
|
||||
toc: true
|
||||
---
|
||||
|
||||
Nach der [Installation](../installation): Bürodaten, Mitarbeiter, Kunden und Projekte initial anlegen.
|
||||
|
||||
## Reihenfolge
|
||||
|
||||
Die Reihenfolge ist wichtig — jede Stufe baut auf der vorherigen auf:
|
||||
|
||||
```text
|
||||
1. Bürodaten → 2. Mitarbeiter → 3. Kunden → 4. Projekte
|
||||
▼ ▼ ▼ ▼
|
||||
Briefbogen, Zeiterfassung, Adressen, Zeiterfassung,
|
||||
QR-Schein, Lohn Rechnungen Rechnungen
|
||||
Login
|
||||
```
|
||||
|
||||
## 1 · Bürodaten
|
||||
|
||||
**Einstellungen → Bürodaten**
|
||||
|
||||
| Feld | Beschreibung | Verwendung |
|
||||
|---|---|---|
|
||||
| **Name** | Bürobezeichnung | Briefbogen, Login-Screen |
|
||||
| **Adresse** | Strasse, PLZ, Ort | Briefbogen, QR-Rechnung (Empfänger) |
|
||||
| **Telefon, E-Mail** | Kontaktdaten | Briefbogen, Rechnung-Footer |
|
||||
| **IBAN** | CH-IBAN (Format `CH XX XXXX …`) | **QR-Einzahlungsschein** — Pflicht |
|
||||
| **Logo** | PNG/SVG-Upload | Briefbogen, Rechnung, Brief |
|
||||
| **MwSt.-Nr.** | optional | Rechnung-Footer |
|
||||
|
||||
> **Tipp:** Das Logo wird hochauflösend gespeichert (Base64 im localStorage). Bei sehr grossen Dateien (>1 MB) vorher in Vorschau verkleinern.
|
||||
|
||||
## 2 · Mitarbeiter
|
||||
|
||||
**Einstellungen → Mitarbeiter → Neu**
|
||||
|
||||
| Feld | Beschreibung |
|
||||
|---|---|
|
||||
| **Name, Vorname** | wird in Zeiterfassung & Lohn verwendet |
|
||||
| **Initialen** | Kürzel für Auswertungen (z. B. "KGE") |
|
||||
| **Eintrittsdatum** | für **Prorata** der Ferien |
|
||||
| **Pensum (%)** | 100 = Vollzeit |
|
||||
| **Stundensatz (CHF)** | für Stundensatz-Rechnungen |
|
||||
| **Ferienanspruch (Tage/Jahr)** | i. d. R. 25–30 |
|
||||
| **Lohn (brutto, monatlich)** | optional, für Lohnabrechnung |
|
||||
|
||||
Mindestens **ein Mitarbeiter** (z. B. der Inhaber selbst) muss angelegt sein, sonst lässt sich keine Zeit erfassen.
|
||||
|
||||
### Sozialabzüge (optional)
|
||||
|
||||
In Einstellungen → Lohn:
|
||||
|
||||
| Abzug | Standardwert (CH) |
|
||||
|---|---|
|
||||
| AHV / IV / EO | 5,3 % |
|
||||
| ALV | 1,1 % |
|
||||
| BVG (Pensionskasse) | variabel — je Mitarbeiter |
|
||||
| NBU | je nach Versicherung |
|
||||
|
||||
Die Standardsätze sind hinterlegt, können aber überschrieben werden.
|
||||
|
||||
## 3 · Kunden
|
||||
|
||||
**Kunden → Neu**
|
||||
|
||||
| Feld | Beschreibung |
|
||||
|---|---|
|
||||
| **Typ** | Privatperson / Firma |
|
||||
| **Anrede, Name** | für Brief / Rechnung |
|
||||
| **Adresse** | Strasse, PLZ, Ort, Land |
|
||||
| **Ansprechperson** | bei Firmen |
|
||||
| **Telefon, E-Mail** | Kontakt |
|
||||
| **Honorartyp Default** | Stundensatz / SIA / Pauschal |
|
||||
| **Stundensatz** | falls vom Bürostandard abweichend |
|
||||
| **MwSt.-pflichtig** | ja/nein |
|
||||
|
||||
## 4 · Projekte
|
||||
|
||||
**Projekte → Neu**
|
||||
|
||||
| Feld | Beschreibung |
|
||||
|---|---|
|
||||
| **Projekt-Nr.** | freie Form, oder generiert (`2026-001`) |
|
||||
| **Bezeichnung** | Kurztitel |
|
||||
| **Standort** | Adresse |
|
||||
| **Kunde** | aus Kundendatenbank |
|
||||
| **Bauschätzwert** | für SIA-Phasen-Honorar |
|
||||
| **SIA-Phasen** | Vorprojekt / Bauprojekt / … — alle anwählbar |
|
||||
| **Honorartyp** | Stundensatz / SIA 102 / Pauschal |
|
||||
| **Status** | aktiv / pausiert / abgeschlossen |
|
||||
|
||||
### SIA-102-Phasen
|
||||
|
||||
Wenn als Honorartyp **SIA 102** gewählt ist, werden die Phasen-Anteile am Gesamthonorar vorgeschlagen — siehe [Projekt-Feature](../../features/projekte#sia-102).
|
||||
|
||||
## Checkliste
|
||||
|
||||
Nach diesen vier Schritten ist Rapport einsatzbereit:
|
||||
|
||||
- [ ] Bürodaten inkl. IBAN erfasst
|
||||
- [ ] Mindestens ein Mitarbeiter angelegt
|
||||
- [ ] Erster Kunde angelegt
|
||||
- [ ] Erstes Projekt angelegt
|
||||
- [ ] Eine Test-Zeitbuchung erfasst — wird das Projekt korrekt zugewiesen?
|
||||
- [ ] Eine Test-Rechnung erstellt — kommt der QR-Schein sauber raus?
|
||||
|
||||
Wenn alles funktioniert: [Typischer Arbeitsablauf](../arbeitsablauf).
|
||||
@@ -0,0 +1,146 @@
|
||||
---
|
||||
title: Entwicklung & Build
|
||||
linkTitle: Entwicklung
|
||||
weight: 7
|
||||
toc: true
|
||||
---
|
||||
|
||||
Aus dem Quellcode kompilieren, beitragen, eigenes Release erzeugen.
|
||||
|
||||
## Voraussetzungen
|
||||
|
||||
| Tool | Version |
|
||||
|---|---|
|
||||
| **Node.js** | ≥ 20 (für Vite 8) |
|
||||
| **npm** | ≥ 10 |
|
||||
| **Rust toolchain** | ≥ 1.77.2 (via `rustup`) |
|
||||
| **Plattform-Tools** | siehe [Tauri Prerequisites](https://v2.tauri.app/start/prerequisites/) |
|
||||
|
||||
Plattform-spezifisch:
|
||||
|
||||
- **macOS:** Xcode Command Line Tools (`xcode-select --install`)
|
||||
- **Windows:** Microsoft C++ Build Tools + WebView2
|
||||
- **Linux:** `webkit2gtk-4.1`, `librsvg2-dev`, `libayatana-appindicator3-dev`, `build-essential`
|
||||
|
||||
## Setup
|
||||
|
||||
```bash
|
||||
git clone https://git.kgva.ch/karim/RAPPORT.git
|
||||
cd RAPPORT/APP
|
||||
npm install
|
||||
```
|
||||
|
||||
## Entwicklung
|
||||
|
||||
### Web-Modus (HMR, schnellster Loop)
|
||||
|
||||
```bash
|
||||
npm run dev # http://localhost:3000
|
||||
```
|
||||
|
||||
- Hot-Module-Replacement
|
||||
- Schnellster Iteration-Loop für UI-Arbeit
|
||||
- Datenpersistierung: Browser-localStorage
|
||||
|
||||
### Native Window (Tauri-Fenster mit Desktop-Integration)
|
||||
|
||||
```bash
|
||||
npx tauri dev
|
||||
```
|
||||
|
||||
- Echtes Tauri-Fenster
|
||||
- System-Tray, Updater, native APIs verfügbar
|
||||
- Erster Start dauert lange (Rust-Compile)
|
||||
|
||||
## Architektur in einem Absatz
|
||||
|
||||
> RAPPORT ist eine monolithische SPA: ein React-Root in [App.jsx](https://git.kgva.ch/karim/RAPPORT/src/branch/main/APP/src/App.jsx) hält den **gesamten** App-State in einem `useState({...})`, persistiert ihn synchron in `localStorage` unter `studio_data_v1`, und übergibt ihn als Props an lazy-geladene Views. **Kein Routing-Framework**, **kein State-Library**, **kein TypeScript**, **kein CSS-Framework**. Der **Rust-Teil** ist 109 Zeilen und macht nur drei Dinge: System-Tray, Window-Hide-on-Close, Plugin-Registrierung (Updater, Process, Log). **Keine** `#[tauri::command]` — Frontend ↔ Backend kommuniziert nur über das Event `rapport:navigate` (Tray → Frontend).
|
||||
|
||||
Detaillierte Karte: [ARCHITECTURE.md](https://git.kgva.ch/karim/RAPPORT/src/branch/main/APP/ARCHITECTURE.md).
|
||||
|
||||
## Verzeichnis-Karte
|
||||
|
||||
```text
|
||||
APP/
|
||||
├── src/ React 19 (kein TS, nur .jsx)
|
||||
│ ├── App.jsx Root: State, Navigation, Sidebar, Modals
|
||||
│ ├── constants.js STORAGE_KEY, NAV_ITEMS, defaultData, SIA-Phasen
|
||||
│ ├── utils.js Business-Logik: Kalkulation, QR-Bill, CSV, Lohn
|
||||
│ ├── storage/adapter.js LocalStorageAdapter (Phase 1), SupabaseAdapter (Phase 2)
|
||||
│ ├── storage/migrations.js Schema-Migrationen
|
||||
│ ├── views/ 20 Top-Level-Screens, lazy-geladen
|
||||
│ ├── components/UI.jsx StatusBadge, Modal, FormField, …
|
||||
│ ├── components/Update* Auto-Update-UI
|
||||
│ ├── print/ PrintComponents.jsx — alle Druckansichten
|
||||
│ └── utils/updater.js @tauri-apps/plugin-updater Wrapper
|
||||
│
|
||||
├── supabase/migrations/ Postgres-Schema für Cloud-Variante
|
||||
│
|
||||
├── src-tauri/ Rust-Backend (Tauri 2.10.3)
|
||||
│ ├── src/lib.rs ~103 Z. — Tray, Window-Events, Plugins
|
||||
│ ├── tauri.conf.json Updater-URL, Public-Key, CSP, Bundle-Targets
|
||||
│ └── capabilities/ Tauri Permissions
|
||||
│
|
||||
├── scripts/release.sh Build + Sign + latest.json erzeugen
|
||||
├── latest.json Updater-Manifest
|
||||
└── deploy/ Docker-Compose für Web-Modus
|
||||
```
|
||||
|
||||
## Konventionen
|
||||
|
||||
- **JavaScript** statt TypeScript — bewusste Entscheidung für Solo-Dev-Velocity
|
||||
- **Inline-Styles** statt CSS-Framework
|
||||
- **kein Routing-Framework** — `view`-State in App.jsx triggert Komponente
|
||||
- **JSON-Schema implizit** — definiert durch `defaultData` in `constants.js`
|
||||
- **Migrationen** als reine Funktionen in [storage/migrations.js](https://git.kgva.ch/karim/RAPPORT/src/branch/main/APP/src/storage/migrations.js)
|
||||
|
||||
## Build
|
||||
|
||||
### Desktop (Tauri DMG)
|
||||
|
||||
```bash
|
||||
npm run build # erst Vite-Build (dist/)
|
||||
npx tauri build # dann Tauri-Bundle (DMG)
|
||||
```
|
||||
|
||||
Output: `src-tauri/target/release/bundle/dmg/Rapport_<version>_aarch64.dmg`
|
||||
|
||||
### Web (statisches Bundle)
|
||||
|
||||
```bash
|
||||
npm run build # Output: dist/ (~500 KB)
|
||||
```
|
||||
|
||||
Für Hosting auf einem Static-Server (z. B. Nginx, Caddy, GitHub Pages). Siehe [Web-Modus](../web-modus).
|
||||
|
||||
## Release-Workflow
|
||||
|
||||
```bash
|
||||
# 1 · Version bumpen in package.json + Cargo.toml + tauri.conf.json
|
||||
./scripts/release.sh 0.7.1
|
||||
|
||||
# 2 · Build mit Signatur
|
||||
TAURI_SIGNING_PRIVATE_KEY=$(cat ~/.tauri/rapport-key) \
|
||||
TAURI_SIGNING_PRIVATE_KEY_PASSWORD=… \
|
||||
npx tauri build
|
||||
|
||||
# 3 · latest.json aktualisieren mit neuer Signatur
|
||||
|
||||
# 4 · DMG + latest.json auf Gitea Releases hochladen
|
||||
```
|
||||
|
||||
## Beitragen
|
||||
|
||||
[Issues & Pull Requests](https://git.kgva.ch/karim/RAPPORT) sind willkommen. Wertvoll sind:
|
||||
|
||||
- **Bug-Reports** mit Reproduktionsschritten
|
||||
- **Workflow-Verbesserungen** aus dem realen Büroalltag
|
||||
- **Vorlagen** (Briefe, Protokolle, Lieferscheine) für andere Büros
|
||||
- **Übersetzungen / Internationalisierung** (FR, IT)
|
||||
- **Linux-/Windows-Builds** und plattformspezifische Fixes
|
||||
|
||||
Vor grösseren Änderungen → Issue zum Diskutieren.
|
||||
|
||||
## Lizenz
|
||||
|
||||
**GNU AGPL-3.0-or-later** — eigene Builds erlaubt, Modifikationen müssen unter derselben Lizenz veröffentlicht werden, wenn die Software als Service angeboten wird.
|
||||
@@ -0,0 +1,62 @@
|
||||
---
|
||||
title: Erste Schritte
|
||||
linkTitle: Erste Schritte
|
||||
weight: 1
|
||||
toc: true
|
||||
---
|
||||
|
||||
Von der Installation bis zur ersten Rechnung — in sechs Schritten.
|
||||
|
||||
## 01 · Installation
|
||||
|
||||
DMG von [Gitea Releases](https://git.kgva.ch/karim/RAPPORT/releases) herunterladen. Rapport in den **Programme-Ordner** ziehen. Beim ersten Start: *Systemeinstellungen → Datenschutz & Sicherheit* öffnen und Rapport zulassen.
|
||||
|
||||
Die Pre-Release-Builds sind **signiert über Tauri**, aber (noch) nicht über die Apple-Notarisierung gegangen — daher der manuelle Freigabe-Schritt.
|
||||
|
||||
## 02 · Einrichtung
|
||||
|
||||
In den **Einstellungen** hinterlegen:
|
||||
|
||||
- **Bürodaten** — Name, Adresse, IBAN, Logo
|
||||
- **Mitarbeiter** — Namen, Pensum, Stundensatz, Ferienanspruch
|
||||
- **Kunden** — Adresse, Ansprechperson, Honorartyp
|
||||
- **Projekte** — SIA-102-Phasen, Budget, Beteiligte
|
||||
|
||||
Danach ist die Zeiterfassung bereit.
|
||||
|
||||
## 03 · Zeiterfassung
|
||||
|
||||
Im Modul **Zeit**:
|
||||
|
||||
1. Mitarbeiter wählen
|
||||
2. Woche navigieren
|
||||
3. Stunden per **Klick** oder **Drag** erfassen
|
||||
4. Jedem Eintrag ein Projekt zuweisen
|
||||
|
||||
Auswertungen pro Mitarbeiter und pro Projekt sind unter *Zeit → Auswertungen* abrufbar. Halbe Tage und Mehrfacheinträge pro Slot werden unterstützt.
|
||||
|
||||
## 04 · Rechnungen
|
||||
|
||||
Aus einer **Offerte** oder **direkt** erstellen:
|
||||
|
||||
- SIA-Phasen, Stundensatz oder Pauschal wählen
|
||||
- Akonto-, Teil- oder Schlussrechnung
|
||||
- Mit *PDF exportieren* wird die fertige Rechnung inkl. **QR-Einzahlungsschein** generiert
|
||||
|
||||
Offerten lassen sich nahtlos in Projekte und Rechnungen konvertieren.
|
||||
|
||||
## 05 · Backup
|
||||
|
||||
In der Desktop-App liegen alle Daten als **JSON** im Applikationsordner:
|
||||
|
||||
```text
|
||||
~/Library/Application Support/com.rapport.app/
|
||||
```
|
||||
|
||||
Für ein Backup reicht es, diesen Ordner zu kopieren — z. B. auf einen externen Datenträger oder in die Cloud. Empfohlen: regelmässig (wöchentlich oder via Time Machine). Im Server-Modus läuft das Backup über Postgres-Dumps — siehe [Rapport Server § Backup](../../server/#backup).
|
||||
|
||||
## 06 · Probleme melden
|
||||
|
||||
Ein [Issue auf Gitea](https://git.kgva.ch/karim/RAPPORT/issues) erstellen — mit kurzer Beschreibung, was passiert ist. **Screenshots helfen.** Bitte die Rapport-Version (links unten in der App) angeben.
|
||||
|
||||
> **Tipp:** Wenn die App nicht mehr startet, hilft oft, den Cache-Ordner zu sichern und neu zu starten. Die JSON-Daten selbst bleiben unverändert.
|
||||
@@ -0,0 +1,94 @@
|
||||
---
|
||||
title: Installation
|
||||
linkTitle: Installation
|
||||
weight: 2
|
||||
toc: true
|
||||
---
|
||||
|
||||
Schritt-für-Schritt-Anleitung für die Installation der Desktop-App.
|
||||
|
||||
## Voraussetzungen
|
||||
|
||||
| Plattform | Status | Versionen |
|
||||
|---|---|---|
|
||||
| **macOS** Apple Silicon (M1 – M4) | ✅ Unterstützt | macOS 12+ |
|
||||
| **macOS** Intel | ⚠ Build auf Anfrage | macOS 12+ |
|
||||
| **Linux** | 🕐 Geplant | — |
|
||||
| **Windows** | 🕐 Geplant | — |
|
||||
|
||||
Eine Portierung auf Linux und Windows ist mit Tauri 2 möglich. [Issue erstellen](https://git.kgva.ch/karim/RAPPORT/issues/new), wenn du eine Plattform brauchst.
|
||||
|
||||
## 1 · Download
|
||||
|
||||
Aktueller Build: [Downloads-Seite](../../downloads) oder direkt [Releases auf Gitea](https://git.kgva.ch/karim/RAPPORT/releases).
|
||||
|
||||
| Datei | Plattform |
|
||||
|---|---|
|
||||
| `RAPPORT_<version>_aarch64.dmg` | macOS Apple Silicon |
|
||||
| `RAPPORT_<version>_x86_64.dmg` | macOS Intel (auf Anfrage) |
|
||||
|
||||
## 2 · DMG öffnen & installieren
|
||||
|
||||
1. DMG doppelklicken
|
||||
2. Rapport.app in den **Applications**-Ordner ziehen
|
||||
3. DMG auswerfen
|
||||
|
||||
## 3 · Erster Start (macOS Gatekeeper)
|
||||
|
||||
Beim ersten Start verweigert macOS den Start, weil die Pre-Release-Builds **Tauri-signiert**, aber (noch) **nicht Apple-notarisiert** sind.
|
||||
|
||||
### Lösung
|
||||
|
||||
1. **Systemeinstellungen → Datenschutz & Sicherheit** öffnen
|
||||
2. Bis ganz nach unten scrollen — es erscheint:
|
||||
> "Rapport" wurde blockiert, da es nicht von einem identifizierten Entwickler stammt.
|
||||
3. Auf **"Trotzdem öffnen"** klicken
|
||||
4. Bestätigen
|
||||
|
||||
Ab dem zweiten Start läuft Rapport ohne Rückfragen.
|
||||
|
||||
### Alternative (Terminal)
|
||||
|
||||
Falls der GUI-Weg nicht funktioniert:
|
||||
|
||||
```bash
|
||||
xattr -d com.apple.quarantine /Applications/Rapport.app
|
||||
```
|
||||
|
||||
Das entfernt das Quarantäne-Flag und macOS akzeptiert den Start.
|
||||
|
||||
## 4 · Erstes Setup
|
||||
|
||||
Beim ersten Start zeigt Rapport den **Setup-Bildschirm**. Hier werden die Stammdaten erfasst — siehe [Einrichtung](../einrichtung).
|
||||
|
||||
## 5 · Update-Strategie
|
||||
|
||||
Ab Version 0.7.0 prüft Rapport beim Start automatisch auf neue Versionen (siehe [Auto-Updater](../../features/auto-updater)). Updates können in den Einstellungen deaktiviert werden.
|
||||
|
||||
Manuelle Updates: einfach das neuere DMG installieren — die Daten bleiben erhalten, da sie unabhängig von der App liegen (siehe [Datenhaltung](../datenhaltung)).
|
||||
|
||||
## Deinstallation
|
||||
|
||||
```bash
|
||||
# App entfernen
|
||||
rm -rf /Applications/Rapport.app
|
||||
|
||||
# Daten entfernen (optional!)
|
||||
rm -rf "~/Library/Application Support/com.rapport.app"
|
||||
|
||||
# Caches
|
||||
rm -rf "~/Library/Caches/com.rapport.app"
|
||||
rm -rf "~/Library/WebKit/com.rapport.app"
|
||||
```
|
||||
|
||||
> **Achtung:** Schritt 2 löscht **alle Rapport-Daten unwiederbringlich**. Vorher Backup machen — siehe [Datenhaltung](../datenhaltung).
|
||||
|
||||
## Bekannte Probleme
|
||||
|
||||
| Problem | Lösung |
|
||||
|---|---|
|
||||
| App lässt sich nicht öffnen trotz Freigabe | Terminal-Variante mit `xattr` |
|
||||
| "Rapport is damaged" | DMG erneut von Gitea ziehen (Browser-Cache hat evtl. Müll) |
|
||||
| Schwarzer Bildschirm beim Start | `~/Library/WebKit/com.rapport.app` löschen, neu starten |
|
||||
|
||||
Mehr unter [Troubleshooting](../troubleshooting).
|
||||
@@ -0,0 +1,203 @@
|
||||
---
|
||||
title: Troubleshooting
|
||||
linkTitle: Troubleshooting
|
||||
weight: 8
|
||||
toc: true
|
||||
---
|
||||
|
||||
Typische Probleme und Lösungen. Wenn dein Problem nicht dabei ist → [Issue auf Gitea](https://git.kgva.ch/karim/RAPPORT/issues).
|
||||
|
||||
## App startet nicht
|
||||
|
||||
### "Rapport ist beschädigt" beim ersten Start
|
||||
|
||||
**Ursache:** macOS Gatekeeper blockt unsignierte/nicht-notarisierte Apps.
|
||||
|
||||
**Lösung:** siehe [Installation § 3](../installation#3--erster-start-macos-gatekeeper). Kurz:
|
||||
|
||||
```bash
|
||||
xattr -d com.apple.quarantine /Applications/Rapport.app
|
||||
```
|
||||
|
||||
### App startet, zeigt aber schwarzen Bildschirm
|
||||
|
||||
**Ursache:** WebView-Cache korrupt.
|
||||
|
||||
**Lösung:**
|
||||
|
||||
```bash
|
||||
rm -rf "~/Library/Caches/com.rapport.app"
|
||||
rm -rf "~/Library/WebKit/com.rapport.app"
|
||||
```
|
||||
|
||||
App neu starten. Daten gehen dabei **nicht** verloren (liegen in `Application Support`, nicht im Cache).
|
||||
|
||||
### App stürzt sofort beim Start ab
|
||||
|
||||
**Ursache:** wahrscheinlich beschädigte JSON-Daten in `studio_data_v1`.
|
||||
|
||||
**Diagnose:**
|
||||
|
||||
```bash
|
||||
# Daten ansehen (DevTools-Output)
|
||||
open "~/Library/Application Support/com.rapport.app"
|
||||
```
|
||||
|
||||
**Lösung:**
|
||||
|
||||
1. Backup wiederherstellen (siehe [Datenhaltung](../datenhaltung#wiederherstellung))
|
||||
2. **Oder** als letzter Ausweg: Daten zurücksetzen
|
||||
```bash
|
||||
mv "~/Library/Application Support/com.rapport.app" \
|
||||
"~/Library/Application Support/com.rapport.app.bad"
|
||||
```
|
||||
App neu starten → erstellt frische Daten. Anschliessend Setup-Screen.
|
||||
|
||||
## Daten weg
|
||||
|
||||
### Nach einem App-Update fehlen Einträge
|
||||
|
||||
**Ursache:** mögliche fehlgeschlagene Migration.
|
||||
|
||||
**Sofortmassnahme:**
|
||||
|
||||
1. Rapport **beenden** (Cmd+Q, nicht nur Fenster zu)
|
||||
2. **Aktuelles Datenverzeichnis sichern**:
|
||||
```bash
|
||||
cp -R "~/Library/Application Support/com.rapport.app" \
|
||||
"~/Documents/Rapport-Notfall-$(date +%Y%m%d-%H%M)"
|
||||
```
|
||||
3. [Issue erstellen](https://git.kgva.ch/karim/RAPPORT/issues/new) mit:
|
||||
- Version vor dem Update (falls bekannt)
|
||||
- Version nach dem Update
|
||||
- Was fehlt
|
||||
- Optional: gesicherter Datenordner (via Pastebin oder verschlüsselt zugesandt)
|
||||
|
||||
### localStorage voll
|
||||
|
||||
**Symptom:** Rapport schreibt Fehler-Toast "Speicher voll" beim Sichern.
|
||||
|
||||
**Ursache:** macOS WebView limitiert localStorage auf ~10 MB pro Origin.
|
||||
|
||||
**Lösung:**
|
||||
|
||||
- Sehr grosse Logos durch kleinere ersetzen (Bürodaten → Logo)
|
||||
- Belege (Spesen) selektiv löschen oder als externe Datei archivieren
|
||||
- Auf [Web-Modus](../web-modus) wechseln (Postgres ohne praktisches Limit)
|
||||
|
||||
## Updates
|
||||
|
||||
### Auto-Update findet nichts
|
||||
|
||||
**Diagnose:**
|
||||
|
||||
```bash
|
||||
curl -s https://git.kgva.ch/karim/RAPPORT/raw/branch/main/APP/latest.json
|
||||
```
|
||||
|
||||
→ sollte JSON liefern. Wenn nicht: Server-/Netzwerkproblem.
|
||||
|
||||
### Update lädt, lässt sich aber nicht installieren
|
||||
|
||||
**Ursache:** Signaturprüfung scheitert (Public-Key in App ≠ Signatur in `latest.json`).
|
||||
|
||||
**Lösung:** Manuelles Update — DMG direkt von [Releases](https://git.kgva.ch/karim/RAPPORT/releases) laden und installieren. Daten bleiben erhalten.
|
||||
|
||||
### "Diese Version überspringen" rückgängig machen
|
||||
|
||||
In **Einstellungen → Updates** → *Übersprungene Versionen zurücksetzen*. Beim nächsten Start wird die Version wieder angeboten.
|
||||
|
||||
## PDF / QR-Schein
|
||||
|
||||
### QR-Schein hat falsche Daten
|
||||
|
||||
**Diagnose-Checkliste:**
|
||||
|
||||
- [ ] IBAN korrekt? (CH, 21 Zeichen, keine Leerzeichen)
|
||||
- [ ] Empfänger-Adresse vollständig? (PLZ und Ort beide gefüllt)
|
||||
- [ ] Schuldner-Adresse vollständig?
|
||||
- [ ] Betrag > 0?
|
||||
- [ ] Referenz nicht zu lang? (max 27 Zeichen)
|
||||
|
||||
QR-Bibliothek: [`swissqrbill`](https://github.com/schoero/SwissQRBill) — bei merkwürdigen Fehlern dort nachschauen.
|
||||
|
||||
### PDF-Export ist leer / weisses Blatt
|
||||
|
||||
**Ursache:** Print-View hat keine Daten (möglicherweise Race-Condition beim Laden).
|
||||
|
||||
**Lösung:** Rechnung schliessen, erneut öffnen, dann PDF.
|
||||
|
||||
### PDF-Schrift sieht falsch aus
|
||||
|
||||
**Ursache:** Web-Schrift nicht geladen, Fallback greift.
|
||||
|
||||
**Lösung:** Vor dem Drucken warten, bis das Vorschau-Bild komplett geladen ist (3–5 Sek).
|
||||
|
||||
## System-Tray
|
||||
|
||||
### Tray-Icon erscheint nicht
|
||||
|
||||
**Plattform-Hinweis:** Tray-Icons unter macOS sind bei extrem voller Menüleiste oder unter "Bartender"/"Hidden Bar" eventuell unsichtbar.
|
||||
|
||||
**Diagnose:**
|
||||
|
||||
```bash
|
||||
ps aux | grep -i rapport
|
||||
```
|
||||
|
||||
→ wenn Prozess läuft, aber kein Icon: in den Tray-Manager-Apps prüfen.
|
||||
|
||||
**Konfiguration:** Einstellungen → System-Tray → *Tray-Icon ausblenden* (aus → Icon erzwingen).
|
||||
|
||||
### Tray-Menü reagiert nicht / hängt
|
||||
|
||||
**Lösung:** App via *Activity Monitor* hart beenden und neu starten. Daten gehen nicht verloren (alle Schreibungen sind synchron in localStorage).
|
||||
|
||||
## Web-Modus
|
||||
|
||||
### Login-Screen zeigt keine Server-URL
|
||||
|
||||
**Ursache:** `.env.production` enthielt nicht den richtigen `VITE_SUPABASE_URL` zur Build-Zeit.
|
||||
|
||||
**Lösung:** `.env.production` prüfen, dann `npm run build` neu, Container restart.
|
||||
|
||||
### Realtime-Updates kommen nicht an
|
||||
|
||||
**Ursache:** Websocket-Support fehlt im Reverse Proxy.
|
||||
|
||||
**Lösung:** In Nginx Proxy Manager für `api.*` Websocket Support aktivieren.
|
||||
|
||||
Siehe [Web-Modus § Troubleshooting](../web-modus#troubleshooting).
|
||||
|
||||
## Debug-Informationen sammeln
|
||||
|
||||
Bei einem Issue helfen folgende Infos:
|
||||
|
||||
```bash
|
||||
# Rapport-Version
|
||||
defaults read /Applications/Rapport.app/Contents/Info.plist CFBundleShortVersionString
|
||||
|
||||
# macOS-Version
|
||||
sw_vers
|
||||
|
||||
# Architektur
|
||||
uname -m
|
||||
|
||||
# Datenverzeichnis-Grösse
|
||||
du -sh "~/Library/Application Support/com.rapport.app"
|
||||
|
||||
# Cache-Verzeichnis-Grösse
|
||||
du -sh "~/Library/Caches/com.rapport.app"
|
||||
```
|
||||
|
||||
→ Bei Issue mit anhängen.
|
||||
|
||||
## Wenn nichts hilft
|
||||
|
||||
[Neues Issue auf Gitea](https://git.kgva.ch/karim/RAPPORT/issues/new) mit:
|
||||
|
||||
- Was du gemacht hast
|
||||
- Was passiert ist
|
||||
- Was du erwartet hättest
|
||||
- Screenshots (auch von DevTools-Konsole falls möglich)
|
||||
- Rapport-Version und macOS-Version
|
||||
@@ -0,0 +1,53 @@
|
||||
---
|
||||
title: Web-Modus (Multi-User)
|
||||
linkTitle: Web-Modus
|
||||
weight: 6
|
||||
toc: true
|
||||
---
|
||||
|
||||
> **Hinweis:** Der frühere Supabase-basierte Web-Modus wurde durch **[Rapport Server](../../server/)** abgelöst — den vollständigen Selfhost-Stack mit eigenem Postgres, Auth, Realtime und Storage. Keine externe Cloud-Abhängigkeit mehr.
|
||||
>
|
||||
> Diese Seite bleibt als Referenz erhalten, der **empfohlene Weg** für Multi-User-Setups ist **[Rapport Server](../../server/)**.
|
||||
|
||||
## Wann brauchst du das?
|
||||
|
||||
| Anwendungsfall | Empfehlung |
|
||||
|---|---|
|
||||
| **Solo-Büro, ein Mac** | Desktop-App — siehe [Installation](../installation) |
|
||||
| **2–5 Personen, gleicher Standort** | [Rapport Server](../../server/) auf einem Mac Mini im LAN |
|
||||
| **Verteiltes Team / Home-Office** | [Rapport Server](../../server/) mit SSL + Reverse Proxy |
|
||||
| **Hosted Backend (eigener VPS)** | [Rapport Server](../../server/) auf Linux-VPS |
|
||||
|
||||
## Architektur (Kurzfassung)
|
||||
|
||||
```text
|
||||
┌────────────┐ HTTPS ┌──────────────┐ SQL ┌────────────┐
|
||||
│ Browser │ ──────────────│ nginx │ ─────────────│ Postgres │
|
||||
│ / Desktop │ │ (Frontend) │ │ + GoTrue │
|
||||
└────────────┘ └──────────────┘ │ + REST │
|
||||
│ + Realtime │
|
||||
│ + Storage │
|
||||
└────────────┘
|
||||
```
|
||||
|
||||
- **Frontend:** dieselbe React-App, aber Vite-Build statt Tauri (`npm run build`)
|
||||
- **Backend:** Postgres-Stack ([Rapport Server](../../server/))
|
||||
- **Auth:** E-Mail / Passwort über GoTrue
|
||||
- **Storage:** Belege, Logos in Object-Storage
|
||||
|
||||
## Setup
|
||||
|
||||
Alle Setup-Schritte (Repo klonen, `.env` erstellen, Migrations syncen, Docker-Compose starten, Reverse-Proxy konfigurieren) sind in **[Rapport Server](../../server/)** dokumentiert.
|
||||
|
||||
## Migration Desktop → Cloud
|
||||
|
||||
Wer mit der Desktop-App startet und später auf den Web-Modus wechseln möchte:
|
||||
|
||||
- **Aktuell:** manueller Export aus Rapport (CSV/PDF) und manuelles Wiederanlegen im neuen Setup
|
||||
- **Geplant:** *"localStorage → Postgres"*-Import-Knopf direkt in der App
|
||||
|
||||
Status: [Issue auf Gitea](https://git.kgva.ch/karim/RAPPORT/issues).
|
||||
|
||||
## Troubleshooting
|
||||
|
||||
Siehe [Rapport Server § Troubleshooting](../../server/) oder [allgemeine Troubleshooting-Seite](../troubleshooting).
|
||||
Reference in New Issue
Block a user