Initial commit: Rapport Website (Hugo + Hextra)
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,107 @@
|
||||
---
|
||||
title: RAPPORT
|
||||
layout: hextra-home
|
||||
toc: false
|
||||
---
|
||||
|
||||
{{< hextra/hero-badge >}}
|
||||
<div class="hx:w-2 hx:h-2 hx:rounded-full" style="background: #b07848; box-shadow: 0 0 8px rgba(176,120,72,0.55);"></div>
|
||||
<span>Pre-Release 0.8.3 · Aktiv in Entwicklung</span>
|
||||
{{< /hextra/hero-badge >}}
|
||||
|
||||
<div class="hx:mt-8 hx:mb-6">
|
||||
<div class="rapport-logo-card">
|
||||
<div class="rapport-logo-text">RAPPORT</div>
|
||||
<div class="rapport-logo-sub">Studio Administration</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="hx:mb-12">
|
||||
{{< hextra/hero-subtitle >}}
|
||||
Die Studio Management Software für Architekturbüros mit offenem Quellcode — Zeiterfassung, Rechnungen, Offerten, Projekte, Mitarbeiter und QR-Einzahlungsscheine in einer App.
|
||||
{{< /hextra/hero-subtitle >}}
|
||||
</div>
|
||||
|
||||
<div class="rapport-hero-actions">
|
||||
<a href="https://git.kgva.ch/karim/RAPPORT/releases/download/0.8.3/RAPPORT%20PRE-RELEASE_0.8.3_aarch64.dmg" target="_blank" rel="noreferrer" class="rapport-btn rapport-btn-primary">Download · 0.8.3 (macOS)</a>
|
||||
<a href="https://git.kgva.ch/karim/RAPPORT" class="rapport-btn rapport-btn-secondary">Quellcode ↗</a>
|
||||
</div>
|
||||
|
||||
<div class="rapport-meta hx:mb-12">
|
||||
<span class="rapport-meta-item">AGPL-3.0</span>
|
||||
<span class="rapport-meta-item">Tauri + React</span>
|
||||
<span class="rapport-meta-item">macOS (später Linux & Windows)</span>
|
||||
<span class="rapport-meta-item">Lokal / Selfhosting</span>
|
||||
</div>
|
||||
|
||||
<div class="hx:mt-12 hx:mb-8 hx:text-center">
|
||||
<p style="font-size: 10px; letter-spacing: 0.2em; text-transform: uppercase; color: var(--rapport-accent); margin-bottom: 12px;">ZIEL</p>
|
||||
<h2 style="font-family: 'Playfair Display', serif; font-size: clamp(26px, 3.5vw, 40px); font-weight: 700; line-height: 1.2; margin: 0 auto 16px; max-width: 580px;">Freie Studio Managementsoftware</h2>
|
||||
<p style="font-size: 13px; line-height: 1.8; color: var(--rapport-text-3); max-width: 620px; margin: 0 auto;">Rapport wurde für eigene Zwecke konzipiert — aus dem Drang heraus, möglichst viel Open-Source-Software in einem Architekturbüro zu verwenden. Die Strukturen folgen der SIA 102 (Phasen, Honorar), die Daten bleiben lokal.</p>
|
||||
</div>
|
||||
|
||||
{{< hextra/feature-grid >}}
|
||||
|
||||
{{< hextra/feature-card
|
||||
title="Zeiterfassung"
|
||||
subtitle="Tages- und Wochenraster mit Drag & Drop. Auswertungen pro Mitarbeiter und Projekt. Ferienverwaltung mit Prorata und Jahresabschluss."
|
||||
style="background: radial-gradient(ellipse at 50% 80%,rgba(176,120,72,0.10),hsla(0,0%,100%,0));"
|
||||
>}}
|
||||
|
||||
{{< hextra/feature-card
|
||||
title="Rechnungen & Offerten"
|
||||
subtitle="QR-Einzahlungsscheine, SIA-Phasen, Akonto-, Teil- und Schlussrechnungen. Offerten sind in Projekte und Rechnungen konvertierbar. PDF-Export."
|
||||
style="background: radial-gradient(ellipse at 50% 80%,rgba(176,120,72,0.08),hsla(0,0%,100%,0));"
|
||||
>}}
|
||||
|
||||
{{< hextra/feature-card
|
||||
title="Projekt- & Kundenverwaltung"
|
||||
subtitle="Projekte nach SIA 102 mit Budget, Phasen und Beteiligten. Erstellung aus einer Offerte mit Verknüpfung zu Zeiterfassung und Rechnungen."
|
||||
style="background: radial-gradient(ellipse at 50% 80%,rgba(176,120,72,0.12),hsla(0,0%,100%,0));"
|
||||
>}}
|
||||
|
||||
{{< hextra/feature-card
|
||||
title="Mitarbeiter"
|
||||
subtitle="Ferienverwaltung, interne Stunden / Absenzen und Lohnabrechnung. Jahresabschluss mit Überstundenausgleich."
|
||||
>}}
|
||||
|
||||
{{< hextra/feature-card
|
||||
title="Spesen & Bürobudget"
|
||||
subtitle="Spesenerfassung mit Belegupload. Jahresbudget mit Einnahmen und Ausgaben. Internes Rechnungswesen."
|
||||
>}}
|
||||
|
||||
{{< hextra/feature-card
|
||||
title="Protokolle & Lieferscheine"
|
||||
subtitle="Einfache Erstellung von Sitzungsprotokollen mit Beschlüssen und Aufgaben. Briefe und Lieferscheine im gleichen Erscheinungsbild."
|
||||
>}}
|
||||
|
||||
{{< hextra/feature-card
|
||||
title="Auto-Updater"
|
||||
subtitle="Rapport prüft beim Start automatisch auf neue Versionen und installiert Updates signiert über Tauri. Einzelne Versionen können übersprungen werden."
|
||||
>}}
|
||||
|
||||
{{< hextra/feature-card
|
||||
title="System-Tray"
|
||||
subtitle="Schnellzugriff über die Menüleiste mit Hide-on-Close. Beim Schliessen läuft Rapport im Hintergrund weiter, Cmd+Q beendet die App vollständig."
|
||||
>}}
|
||||
|
||||
{{< hextra/feature-card
|
||||
title="Rapport Server"
|
||||
subtitle="Selfhost-Stack für Studios mit mehreren Personen — Postgres, Auth, Realtime-Sync, Storage. Alles in einem Docker-Compose. Eigene Daten, eigene Domain, eigene Kontrolle."
|
||||
icon="sparkles"
|
||||
link="/server/"
|
||||
style="background: radial-gradient(ellipse at 50% 80%,rgba(176,120,72,0.10),hsla(0,0%,100%,0));"
|
||||
>}}
|
||||
|
||||
{{< /hextra/feature-grid >}}
|
||||
|
||||
<div class="rapport-stack-bar">
|
||||
<span class="rapport-stack-label">Aufgebaut auf</span>
|
||||
<div class="rapport-stack-items">
|
||||
<span class="rapport-stack-item">Tauri 2</span>
|
||||
<span class="rapport-stack-item">React 19</span>
|
||||
<span class="rapport-stack-item">Vite</span>
|
||||
<span class="rapport-stack-item">SIA 102</span>
|
||||
<span class="rapport-stack-item">AGPL-3.0</span>
|
||||
</div>
|
||||
</div>
|
||||
@@ -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).
|
||||
@@ -0,0 +1,99 @@
|
||||
---
|
||||
title: Downloads
|
||||
linkTitle: Downloads
|
||||
weight: 3
|
||||
toc: true
|
||||
---
|
||||
|
||||
Aktuelle Builds von Rapport. Quellcode und ältere Versionen auf [Gitea](https://git.kgva.ch/karim/RAPPORT/releases).
|
||||
|
||||
Rapport besteht aus zwei Komponenten:
|
||||
|
||||
| Komponente | Für wen | Aktuelle Version |
|
||||
|---|---|---|
|
||||
| **Desktop-App** | Solo-Büro, lokale Datenhaltung | 0.8.3 |
|
||||
| **Rapport Server** | Team / Multi-User / Selfhost | 0.1.0 |
|
||||
|
||||
---
|
||||
|
||||
## Desktop-App — Pre-Release 0.8.3
|
||||
|
||||
<span class="rapport-status new">Aktuelle Version</span>
|
||||
|
||||
**Neuerungen** — siehe [Changelog](../docs/changelog#083) für Details.
|
||||
|
||||
### macOS
|
||||
|
||||
| Architektur | Download |
|
||||
|---|---|
|
||||
| **Apple Silicon (M1–M4)** | [RAPPORT_0.8.3_aarch64.dmg](https://git.kgva.ch/karim/RAPPORT/releases/download/0.8.3/RAPPORT%20PRE-RELEASE_0.8.3_aarch64.dmg) |
|
||||
| **Intel (x86_64)** | [auf Anfrage](https://git.kgva.ch/karim/RAPPORT/issues/new) |
|
||||
|
||||
> **Erstinstallation:** *Systemeinstellungen → Datenschutz & Sicherheit* öffnen und Rapport zulassen. Die Builds sind über Tauri signiert, aber (noch) nicht Apple-notarisiert.
|
||||
|
||||
### Linux & Windows
|
||||
|
||||
**Geplant.** Rapport basiert auf Tauri 2 — eine Portierung ist möglich, sobald der Bedarf besteht. [Issue erstellen](https://git.kgva.ch/karim/RAPPORT/issues/new), wenn du eine Plattform brauchst.
|
||||
|
||||
---
|
||||
|
||||
## Rapport Server — 0.1.0
|
||||
|
||||
<span class="rapport-status new">Erstes Release</span>
|
||||
|
||||
Selfhost-Backend für Multi-User-Setups — Postgres, Auth, Realtime-Sync, Storage. Details und Setup-Anleitung auf der [Server-Seite](../server).
|
||||
|
||||
### Server-App (macOS)
|
||||
|
||||
GUI zum Starten, Stoppen und Verwalten der Server-Instanz auf einem Mac (Mac Mini, Studio-Rechner). Bündelt den Docker-Compose-Stack.
|
||||
|
||||
| Architektur | Download |
|
||||
|---|---|
|
||||
| **Apple Silicon (M1–M4)** | [RAPPORT_SERVER_0.1.0_aarch64.dmg](https://git.kgva.ch/karim/rapport-server/releases/download/0.1.0/RAPPORT%20SERVER_0.1.0_aarch64.dmg) |
|
||||
| **Intel (x86_64)** | [auf Anfrage](https://git.kgva.ch/karim/rapport-server/issues/new) |
|
||||
|
||||
> **Voraussetzung:** [Colima](https://github.com/abiosoft/colima) oder Docker Desktop muss installiert sein. Die App verwaltet den Container-Stack darüber.
|
||||
|
||||
### Docker (Linux / VPS / Headless)
|
||||
|
||||
Für Linux-Server, NAS oder VPS — der reine Docker-Compose-Stack ohne GUI.
|
||||
|
||||
```bash
|
||||
git clone https://git.kgva.ch/karim/rapport-server.git
|
||||
cd rapport-server
|
||||
git checkout 0.1.0
|
||||
cp .env.example .env
|
||||
# .env editieren (POSTGRES_PASSWORD, JWT_SECRET, SITE_URL)
|
||||
docker compose up -d
|
||||
```
|
||||
|
||||
Vollständige Anleitung mit `.env`-Variablen, Reverse-Proxy und Backup → [Server-Seite](../server).
|
||||
|
||||
Container-Images werden von Docker Hub / Gitea-Registry gezogen — `docker compose pull` aktualisiert auf die neuesten Tags.
|
||||
|
||||
---
|
||||
|
||||
## Quellcode
|
||||
|
||||
**Desktop-App** — Tauri / React:
|
||||
|
||||
```bash
|
||||
git clone https://git.kgva.ch/karim/RAPPORT.git
|
||||
cd RAPPORT/APP
|
||||
npm install
|
||||
npm run tauri dev
|
||||
```
|
||||
|
||||
Voraussetzungen: Node 20+, Rust (stable), Xcode-CLI (macOS).
|
||||
|
||||
**Rapport Server**:
|
||||
|
||||
```bash
|
||||
git clone https://git.kgva.ch/karim/rapport-server.git
|
||||
```
|
||||
|
||||
Beide Repos auf [Gitea](https://git.kgva.ch/karim) — Issues und PRs willkommen.
|
||||
|
||||
## Auto-Update
|
||||
|
||||
Seit 0.7.0 prüft die Desktop-App beim Start automatisch auf neue Versionen — siehe [Auto-Updater](../features/auto-updater). Für Rapport Server: `git pull && docker compose pull && docker compose up -d`.
|
||||
@@ -0,0 +1,65 @@
|
||||
---
|
||||
title: FAQ
|
||||
linkTitle: FAQ
|
||||
weight: 4
|
||||
toc: true
|
||||
---
|
||||
|
||||
Häufige Fragen zu RAPPORT. Bei Bugs oder weiteren Fragen → [Issue auf Gitea](https://git.kgva.ch/karim/RAPPORT/issues).
|
||||
|
||||
## Für wen ist Rapport gedacht?
|
||||
|
||||
Für **kleine Architekturbüros in der Schweiz**. Die Strukturen folgen der SIA 102 (Phasen, Honorar). Rapport wurde für den internen Gebrauch entwickelt und wird mit diesem Projekt öffentlich geteilt.
|
||||
|
||||
## Ist Rapport kostenlos?
|
||||
|
||||
**Ja, vollständig.** Quellcode unter GNU AGPL-3.0-or-later. Keine versteckten Kosten, keine Telemetrie. Die Daten bleiben lokal auf deinem Computer bzw. in deiner Instanz. Du hast die komplette Kontrolle über deine Daten.
|
||||
|
||||
## Welche Systeme werden unterstützt?
|
||||
|
||||
Aktuell nur **macOS** (Intel & Apple Silicon). Rapport basiert auf Tauri — eine Portierung auf **Linux** und **Windows** ist möglich, sobald der Bedarf seitens Community besteht.
|
||||
|
||||
## Wo werden die Daten gespeichert?
|
||||
|
||||
Rapport unterstützt **zwei Modi**, beide selbst-gehostet:
|
||||
|
||||
- **Desktop-App (Single-User)** — alle Daten liegen lokal auf deinem Mac (`localStorage` im Applikationsordner). Kein Server nötig, kein Cloud-Account, keine Telemetrie.
|
||||
- **Server-Modus (Multi-User)** — Daten in einer eigenen PostgreSQL-Datenbank über [Rapport Server](../server). Mehrere Personen, Realtime-Sync, eigene Domain. Wechsel direkt im Login-Bildschirm der App.
|
||||
|
||||
In beiden Fällen bleibt die Kontrolle über die Daten bei dir.
|
||||
|
||||
## Ist die Software stabil genug für den Betrieb?
|
||||
|
||||
**Noch nicht.** Aktuell befindet sich Rapport in aktiver Entwicklung (Pre-Release **0.8.3**). Funktionen können sich ändern, Bugs sind möglich. Regelmässige Backups sind empfohlen. Testen und Feedback geben ist erwünscht.
|
||||
|
||||
## Was ist mit dem QR-Einzahlungsschein?
|
||||
|
||||
Rapport erzeugt **Schweizer QR-Rechnungen** nach Norm — direkt eingebettet in das PDF der Rechnung. IBAN, Bürodaten und Empfänger werden aus den Einstellungen bzw. den Kundendaten gezogen. Akonto-, Teil- und Schlussrechnungen werden unterstützt.
|
||||
|
||||
## Wie funktioniert die Zeiterfassung?
|
||||
|
||||
Tages- und Wochenraster mit **Drag & Drop**. Jeder Eintrag wird einem Projekt zugewiesen. Auswertungen pro Mitarbeiter und Projekt sind unter *Zeit* abrufbar. Ferienverwaltung mit Prorata und Jahresabschluss mit Überstundenausgleich.
|
||||
|
||||
## Kann ich zum Projekt beitragen?
|
||||
|
||||
**Ja.** Issues und Pull Requests sind willkommen auf [Gitea](https://git.kgva.ch/karim/RAPPORT). Rapport ist kein Framework — konkrete Verbesserungen für den **Büroalltag** sind am wertvollsten:
|
||||
|
||||
- Bug-Reports mit Reproduktionsschritten
|
||||
- Workflow-Verbesserungen aus dem realen Büroalltag
|
||||
- Vorlagen (Briefe, Protokolle, Lieferscheine) für andere Büros
|
||||
- Übersetzungen / Internationalisierung
|
||||
|
||||
## Wie erhalte ich Hilfe bei einem Problem?
|
||||
|
||||
Ein [Issue auf Gitea](https://git.kgva.ch/karim/RAPPORT/issues) ist der beste Weg. Bitte beschreibe, was du gemacht hast und was passiert ist. Screenshots helfen. Die Rapport-Version (links unten in der App) bitte angeben.
|
||||
|
||||
| Kanal | Verwendung |
|
||||
|--------------------|-------------------------------------------|
|
||||
| **Gitea Issues** | Bugs, Feature-Wünsche, allgemeine Fragen |
|
||||
| **gabrielevarano.ch** | Entwickler-Kontakt |
|
||||
|
||||
## Warum Open Source?
|
||||
|
||||
Bürowissen sollte nicht in proprietären Tools eingesperrt sein. Studio-Management-Workflows sind in der Branche gut etabliert — ein Tool, das die Schweizer Konventionen (SIA 102, QR-Rechnung) sauber umsetzt, gehört allen.
|
||||
|
||||
**AGPL-3.0** stellt sicher, dass Verbesserungen wieder ins Projekt fliessen.
|
||||
@@ -0,0 +1,20 @@
|
||||
---
|
||||
title: Features
|
||||
linkTitle: Features
|
||||
weight: 2
|
||||
---
|
||||
|
||||
Die Bausteine von RAPPORT — Studio-Management für Schweizer Architekturbüros.
|
||||
|
||||
## Module
|
||||
|
||||
{{< cards >}}
|
||||
{{< card link="zeiterfassung" title="Zeiterfassung" subtitle="Tages- & Wochenraster mit Drag & Drop." >}}
|
||||
{{< card link="rechnungen" title="Rechnungen & Offerten" subtitle="QR-Einzahlungsscheine, SIA-Phasen, Akonto." >}}
|
||||
{{< card link="projekte" title="Projekt- & Kundenverwaltung" subtitle="SIA 102, Budget, Phasen, Beteiligte." >}}
|
||||
{{< card link="mitarbeiter" title="Mitarbeiter" subtitle="Ferien, Absenzen, Lohnabrechnung." >}}
|
||||
{{< card link="spesen" title="Spesen & Bürobudget" subtitle="Belegupload, Jahresbudget, Internes." >}}
|
||||
{{< card link="protokolle" title="Protokolle & Lieferscheine" subtitle="Sitzungsprotokolle, Briefe, Lieferscheine." >}}
|
||||
{{< card link="auto-updater" title="Auto-Updater" subtitle="Signierte Updates via Tauri." >}}
|
||||
{{< card link="system-tray" title="System-Tray" subtitle="Hide-on-Close, Quick-Open." >}}
|
||||
{{< /cards >}}
|
||||
@@ -0,0 +1,49 @@
|
||||
---
|
||||
title: Auto-Updater
|
||||
linkTitle: Auto-Updater
|
||||
weight: 7
|
||||
toc: true
|
||||
---
|
||||
|
||||
<span class="rapport-status new">Neu in 0.7.0</span>
|
||||
|
||||
**Rapport prüft beim Start automatisch auf neue Versionen** und installiert Updates signiert über Tauri. Einzelne Versionen können übersprungen werden.
|
||||
|
||||
## Funktionsweise
|
||||
|
||||
Beim App-Start:
|
||||
|
||||
1. Abfrage gegen `https://git.kgva.ch/karim/RAPPORT/releases/latest.json`
|
||||
2. Versionsvergleich mit lokaler `version` im Tauri-Bundle
|
||||
3. Bei neuer Version → Update-Dialog
|
||||
4. Bei Bestätigung → Download + Signaturprüfung + Installation + Neustart
|
||||
|
||||
## Sicherheit
|
||||
|
||||
- Updates werden mit dem **Tauri-Updater-Schlüssel** signiert
|
||||
- Manipulierte Downloads werden abgelehnt
|
||||
- Quellcode und Build sind reproduzierbar (Gitea CI, geplant)
|
||||
|
||||
## Optionen
|
||||
|
||||
- **Update installieren** — Download & Neustart
|
||||
- **Diese Version überspringen** — überspringt nur diese eine Version
|
||||
- **Später erinnern** — beim nächsten Start erneut fragen
|
||||
|
||||
Updates können in den Einstellungen komplett deaktiviert werden.
|
||||
|
||||
## Latest-Endpoint
|
||||
|
||||
```json
|
||||
{
|
||||
"version": "0.8.3",
|
||||
"notes": "Rapport 0.8.3",
|
||||
"pub_date": "2026-05-24T00:00:00Z",
|
||||
"platforms": {
|
||||
"darwin-aarch64": {
|
||||
"signature": "…",
|
||||
"url": "https://git.kgva.ch/karim/RAPPORT/releases/download/0.8.3/RAPPORT%20PRE-RELEASE.app.tar.gz"
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
@@ -0,0 +1,52 @@
|
||||
---
|
||||
title: Mitarbeiter
|
||||
linkTitle: Mitarbeiter
|
||||
weight: 4
|
||||
toc: true
|
||||
---
|
||||
|
||||
<span class="rapport-status active">In Arbeit</span>
|
||||
|
||||
**Ferienverwaltung, interne Stunden / Absenzen und Lohnabrechnung.** Jahresabschluss mit Überstundenausgleich.
|
||||
|
||||
## Stammdaten
|
||||
|
||||
Pro Mitarbeiter:
|
||||
|
||||
- Name, Eintrittsdatum, Pensum (%)
|
||||
- Stundensatz (intern, für Rechnungen)
|
||||
- Ferienanspruch (Tage / Jahr)
|
||||
- Lohn (monatlich, brutto)
|
||||
|
||||
## Ferienverwaltung
|
||||
|
||||
- **Prorata-Berechnung** bei Eintritt unter Jahr
|
||||
- **Ferien-Saldo** in Tagen (live)
|
||||
- **Halbtage** unterstützt
|
||||
- **Übertrag** ins Folgejahr oder Auszahlung
|
||||
|
||||
## Absenzen
|
||||
|
||||
Krankheit, Militär, Mutterschaft, unbezahlter Urlaub — getrennt erfasst, mit Auswertung pro Mitarbeiter.
|
||||
|
||||
## Lohnabrechnung
|
||||
|
||||
Monatliche Abrechnung mit:
|
||||
|
||||
- Grundlohn (basierend auf Pensum)
|
||||
- Überstunden-Vergütung
|
||||
- Spesen-Erstattung
|
||||
- Sozialabzüge (AHV, ALV, Pensionskasse)
|
||||
|
||||
PDF-Export pro Mitarbeiter.
|
||||
|
||||
## Jahresabschluss
|
||||
|
||||
- Ferien-Restguthaben übertragen oder auszahlen
|
||||
- Überstunden ausgleichen oder vergüten
|
||||
- Lohnausweis vorbereiten (Export)
|
||||
|
||||
## Verwandte Module
|
||||
|
||||
- [Zeiterfassung](../zeiterfassung) — Pensum-Soll vs. Stunden-Ist
|
||||
- [Spesen](../spesen) — Spesen-Erstattung in der Lohnabrechnung
|
||||
@@ -0,0 +1,53 @@
|
||||
---
|
||||
title: Projekt- & Kundenverwaltung
|
||||
linkTitle: Projekte
|
||||
weight: 3
|
||||
toc: true
|
||||
---
|
||||
|
||||
<span class="rapport-status active">In Arbeit</span>
|
||||
|
||||
**Projekte nach SIA 102** mit Budget, Phasen und Beteiligten. Erstellung aus einer Offerte mit Verknüpfung zu Zeiterfassung und Rechnungen.
|
||||
|
||||
## Projektstruktur
|
||||
|
||||
Jedes Projekt besitzt:
|
||||
|
||||
- **Stammdaten** — Nummer, Bezeichnung, Standort, Bauschätzwert
|
||||
- **Kunde** — verknüpft mit Kundendatenbank
|
||||
- **Beteiligte** — Bauleitung, Fachplaner, Behörden
|
||||
- **Phasen** — SIA 102 (Vorprojekt, Bauprojekt, Ausschreibung, …)
|
||||
- **Budget** — Gesamthonorar, pro Phase aufgeteilt
|
||||
|
||||
## SIA 102
|
||||
|
||||
Standard-Phasenverteilung wird vorgeschlagen, kann pro Projekt überschrieben werden.
|
||||
|
||||
| Phase | Anteil (Standard) |
|
||||
|---|---|
|
||||
| 31 — Vorprojekt | 9 % |
|
||||
| 32 — Bauprojekt | 21 % |
|
||||
| 33 — Bewilligung | 3 % |
|
||||
| 41 — Ausschreibung | 18 % |
|
||||
| 51 — Ausführung | 38 % |
|
||||
| 52 — Inbetriebnahme | 6 % |
|
||||
| 53 — Abschluss | 5 % |
|
||||
|
||||
## Kundendatenbank
|
||||
|
||||
- Adresse, Ansprechperson, Telefon, E-Mail
|
||||
- Honorartyp (Stundensatz / SIA / Pauschal)
|
||||
- Verknüpfung zu allen Projekten und Rechnungen des Kunden
|
||||
|
||||
## Auswertung
|
||||
|
||||
Pro Projekt:
|
||||
|
||||
- Geleistete Stunden vs. Budget
|
||||
- Honorar-Saldo (verrechnet / Akonto / offen)
|
||||
- Phasen-Fortschritt
|
||||
|
||||
## Verwandte Module
|
||||
|
||||
- [Rechnungen](../rechnungen) — Offerte → Projekt
|
||||
- [Zeiterfassung](../zeiterfassung) — Stunden-Auswertung pro Phase
|
||||
@@ -0,0 +1,44 @@
|
||||
---
|
||||
title: Protokolle & Lieferscheine
|
||||
linkTitle: Protokolle
|
||||
weight: 6
|
||||
toc: true
|
||||
---
|
||||
|
||||
<span class="rapport-status active">In Arbeit</span>
|
||||
|
||||
**Einfache Erstellung von Sitzungsprotokollen** mit Beschlüssen und Aufgaben. Briefe und Lieferscheine im gleichen Erscheinungsbild.
|
||||
|
||||
## Sitzungsprotokolle
|
||||
|
||||
Pro Sitzung:
|
||||
|
||||
- Datum, Ort, Teilnehmer (aus Beteiligten-Liste)
|
||||
- **Traktanden** als nummerierte Liste
|
||||
- Pro Traktandum: Beschluss, Aufgabe, Verantwortlich, Frist
|
||||
- Anhänge
|
||||
|
||||
PDF-Export mit Bürobriefbogen.
|
||||
|
||||
## Briefe
|
||||
|
||||
Brief-Editor mit:
|
||||
|
||||
- Empfänger aus Kundendatenbank
|
||||
- Bezugszeile, Anrede, Text, Grussformel
|
||||
- Briefbogen-Vorlage mit Logo
|
||||
- PDF-Export
|
||||
|
||||
## Lieferscheine
|
||||
|
||||
Pro Lieferung:
|
||||
|
||||
- Empfänger, Datum, Bezug
|
||||
- Positionen (Plan-Nummer, Bezeichnung, Anzahl, Massstab)
|
||||
- Unterschriftenfeld
|
||||
|
||||
Konsistentes Erscheinungsbild über alle Dokumenttypen — eine Briefbogen-Vorlage, mehrere Verwendungen.
|
||||
|
||||
## Verwandte Module
|
||||
|
||||
- [Projekte](../projekte) — Beteiligte als Empfänger
|
||||
@@ -0,0 +1,44 @@
|
||||
---
|
||||
title: Rechnungen & Offerten
|
||||
linkTitle: Rechnungen
|
||||
weight: 2
|
||||
toc: true
|
||||
---
|
||||
|
||||
<span class="rapport-status active">In Arbeit</span>
|
||||
|
||||
**QR-Einzahlungsscheine, SIA-Phasen, Akonto-, Teil- und Schlussrechnungen.** Offerten sind in Projekte und Rechnungen konvertierbar. PDF-Export.
|
||||
|
||||
## Workflow
|
||||
|
||||
1. **Offerte** erstellen — auf Basis SIA 102 oder pauschal
|
||||
2. Kunde nimmt an → **konvertieren in Projekt + Rechnung**
|
||||
3. **Akonto-Rechnungen** während der Projektlaufzeit
|
||||
4. **Schlussrechnung** mit Differenz zum bisher Akonto-bezahlten
|
||||
|
||||
## QR-Einzahlungsschein
|
||||
|
||||
Schweizer **QR-Rechnung** nach Norm — direkt eingebettet in die PDF.
|
||||
|
||||
Ausgelesen aus:
|
||||
|
||||
- **Bürodaten** — IBAN, Empfänger-Adresse
|
||||
- **Kundendaten** — Schuldner-Adresse
|
||||
- **Rechnungs-Daten** — Betrag, Referenz, Zusatzinformation
|
||||
|
||||
## Honorarmodelle
|
||||
|
||||
| Modell | Berechnung | Verwendung |
|
||||
|---|---|---|
|
||||
| **Stundensatz** | Aus Zeiterfassung × Mitarbeiter-Stundensatz | Kleinaufträge, Beratung |
|
||||
| **SIA-Phasen** | Bauschätzwert × Honorarsatz × Phasenanteil | Reguläre Architektur-Aufträge |
|
||||
| **Pauschal** | Fester Betrag | Auf Wunsch des Kunden |
|
||||
|
||||
## PDF-Export
|
||||
|
||||
Druckfertige Rechnung inkl. QR-Schein. Layout aus dem Büro-Briefbogen (mit Logo). Mehrsprachig DE/FR/IT (geplant).
|
||||
|
||||
## Verwandte Module
|
||||
|
||||
- [Projekte](../projekte) — Honorarstruktur stammt aus dem Projekt
|
||||
- [Zeiterfassung](../zeiterfassung) — Stundensatz-Rechnungen
|
||||
@@ -0,0 +1,40 @@
|
||||
---
|
||||
title: Spesen & Bürobudget
|
||||
linkTitle: Spesen
|
||||
weight: 5
|
||||
toc: true
|
||||
---
|
||||
|
||||
<span class="rapport-status active">In Arbeit</span>
|
||||
|
||||
**Spesenerfassung mit Belegupload.** Jahresbudget mit Einnahmen und Ausgaben. Internes Rechnungswesen.
|
||||
|
||||
## Spesenerfassung
|
||||
|
||||
Pro Mitarbeiter:
|
||||
|
||||
- Datum, Betrag, Kategorie
|
||||
- **Beleg-Upload** (PDF, JPG, PNG)
|
||||
- Projekt-Zuordnung (optional)
|
||||
- Status (offen / erstattet)
|
||||
|
||||
Kategorien: Reise, Verpflegung, Material, Telefon, Sonstiges.
|
||||
|
||||
## Jahresbudget
|
||||
|
||||
Übersicht über:
|
||||
|
||||
- **Einnahmen** — Rechnungsbeträge, sortiert nach Eingang
|
||||
- **Ausgaben** — Spesen, Bürokosten, Löhne, Sozialabzüge
|
||||
- **Saldo** pro Monat / Quartal / Jahr
|
||||
|
||||
## Auswertung
|
||||
|
||||
- Einnahmen pro Kunde / Projekt
|
||||
- Ausgaben pro Kategorie / Mitarbeiter
|
||||
- Erfolgsrechnung pro Geschäftsjahr (vereinfacht)
|
||||
|
||||
## Verwandte Module
|
||||
|
||||
- [Mitarbeiter](../mitarbeiter) — Spesen-Erstattung in der Lohnabrechnung
|
||||
- [Rechnungen](../rechnungen) — Einnahmen-Quelle
|
||||
@@ -0,0 +1,40 @@
|
||||
---
|
||||
title: System-Tray
|
||||
linkTitle: System-Tray
|
||||
weight: 8
|
||||
toc: true
|
||||
---
|
||||
|
||||
<span class="rapport-status new">Neu in 0.7.0</span>
|
||||
|
||||
**Schnellzugriff über die Menüleiste mit Hide-on-Close.** Beim Schliessen läuft Rapport im Hintergrund weiter — Cmd+Q beendet die App vollständig.
|
||||
|
||||
## Verhalten
|
||||
|
||||
| Aktion | Verhalten |
|
||||
|---|---|
|
||||
| **Fenster schliessen** (⌘W oder rotes X) | App läuft im Tray weiter |
|
||||
| **Cmd+Q** | App wird vollständig beendet |
|
||||
| **Klick auf Tray-Icon** | Fenster nach vorne, oder zeigen |
|
||||
| **Rechtsklick auf Tray-Icon** | Menü mit Schnellzugriffen |
|
||||
|
||||
## Tray-Menü
|
||||
|
||||
- **Rapport zeigen** — Fenster nach vorne
|
||||
- **Neue Zeiterfassung** — direkt im Zeit-Modul
|
||||
- **Neue Rechnung** — direkt im Rechnungs-Modul
|
||||
- **Letzte Projekte** — Quick-Open der letzten 5 Projekte
|
||||
- **Einstellungen**
|
||||
- **Rapport beenden**
|
||||
|
||||
## Konfiguration
|
||||
|
||||
In den Einstellungen:
|
||||
|
||||
- **Beim Systemstart starten** (Login-Item) — Standard: aus
|
||||
- **Beim Schliessen beenden** statt ins Tray — Standard: aus
|
||||
- **Tray-Icon ausblenden** — App läuft, aber kein Menüleisten-Icon
|
||||
|
||||
## Verwandte Module
|
||||
|
||||
- [Auto-Updater](../auto-updater) — prüft Updates im Hintergrund
|
||||
@@ -0,0 +1,45 @@
|
||||
---
|
||||
title: Zeiterfassung
|
||||
linkTitle: Zeiterfassung
|
||||
weight: 1
|
||||
toc: true
|
||||
---
|
||||
|
||||
<span class="rapport-status active">In Arbeit</span>
|
||||
|
||||
**Tages- und Wochenraster** mit Drag & Drop. Auswertungen pro Mitarbeiter und Projekt. Ferienverwaltung mit Prorata und Jahresabschluss.
|
||||
|
||||
## Konzept
|
||||
|
||||
Die Zeiterfassung ist das **Kernmodul** von RAPPORT — alle anderen Module (Rechnungen, Auswertungen, Lohnabrechnung) greifen auf die hier erfassten Stunden zu.
|
||||
|
||||
## Eingabe
|
||||
|
||||
- **Wochenraster** mit den 5 (oder 7) Arbeitstagen
|
||||
- **Halbstunden-Slots** von 06:00 bis 22:00
|
||||
- **Klick** oder **Drag** über mehrere Slots
|
||||
- Jeder Eintrag wird einem **Projekt** zugewiesen (Pflichtfeld)
|
||||
- Mehrfacheinträge pro Slot möglich (z. B. parallele Telefonate)
|
||||
|
||||
## Auswertungen
|
||||
|
||||
Pro Mitarbeiter und pro Projekt:
|
||||
|
||||
- Geleistete Stunden vs. Soll-Pensum
|
||||
- Ferienanspruch / -saldo (mit Prorata bei Eintritt unter Jahr)
|
||||
- Überstunden-Saldo
|
||||
- Stundenaufschlüsselung nach SIA-Phase pro Projekt
|
||||
|
||||
## Jahresabschluss
|
||||
|
||||
Am Jahresende:
|
||||
|
||||
- Ferien-Restguthaben übertragen oder auszahlen
|
||||
- Überstunden ausgleichen oder vergüten
|
||||
- Neues Jahr automatisch initialisieren
|
||||
|
||||
## Verwandte Module
|
||||
|
||||
- [Rechnungen](../rechnungen) — Stundensatz-Rechnungen ziehen direkt aus der Zeiterfassung
|
||||
- [Projekte](../projekte) — Stunden-Auswertung pro SIA-Phase
|
||||
- [Mitarbeiter](../mitarbeiter) — Pensum, Ferienanspruch
|
||||
@@ -0,0 +1,104 @@
|
||||
---
|
||||
title: Lizenz & Mitwirkende
|
||||
linkTitle: Lizenz
|
||||
weight: 99
|
||||
toc: true
|
||||
---
|
||||
|
||||
Lizenz von RAPPORT, Zugehörigkeit zu OpenBureau und Attribution der verwendeten Open-Source-Software.
|
||||
|
||||
## RAPPORT
|
||||
|
||||
**RAPPORT** — Studio Management Software für Architekturbüros.
|
||||
|
||||
Quellcode: [git.kgva.ch/karim/RAPPORT](https://git.kgva.ch/karim/RAPPORT)
|
||||
Autor: [Karim Gabriele Varano](https://gabrielevarano.ch)
|
||||
|
||||
### Lizenz
|
||||
|
||||
Lizenziert unter **GNU Affero General Public License v3.0 oder höher** ([AGPL-3.0-or-later](https://www.gnu.org/licenses/agpl-3.0.html)).
|
||||
|
||||
> Dies bedeutet im Kern:
|
||||
>
|
||||
> - **Freie Nutzung** für jeden Zweck (privat, kommerziell, behördlich)
|
||||
> - **Freier Zugang** zum Quellcode
|
||||
> - **Freie Modifikation** und Weitergabe — unter derselben Lizenz
|
||||
> - **Netzwerk-Nutzung gilt als Weitergabe** — wer eine modifizierte Version als Service anbietet, muss den Quellcode offenlegen
|
||||
|
||||
Eigene Builds, eigene Forks, eigene Anpassungen — alles erlaubt, solange Modifikationen wieder unter AGPL-3.0 veröffentlicht werden.
|
||||
|
||||
## OpenBureau
|
||||
|
||||
RAPPORT ist Teil der **OpenBureau**-Initiative — einer Sammlung freier Software-Werkzeuge für den Architektur-Büro-Alltag.
|
||||
|
||||
Die Idee: Bürowissen — Workflows, Konventionen, Vorlagen — sollte nicht in proprietären Tools eingesperrt sein. OpenBureau-Tools setzen die in der Branche etablierten Konventionen (SIA-Normen, QR-Rechnung, Plan-Verwaltung) sauber um und stehen unter freien Lizenzen zur Verfügung.
|
||||
|
||||
| Tool | Zweck | Status |
|
||||
|---|---|---|
|
||||
| **RAPPORT** | Studio-Management Desktop-App (Zeit, Rechnungen, Projekte) | Pre-Release |
|
||||
| **Rapport Server** | Selfhost-Stack (Postgres + Auth + Realtime + Storage) | Pre-Release |
|
||||
| **DOSSIER** | Rhino-8-Plugin für Plan- und Dokumentationsausgabe | Pre-Release |
|
||||
|
||||
Mehr unter [gabrielevarano.ch](https://gabrielevarano.ch).
|
||||
|
||||
## Verwendete Open-Source-Software
|
||||
|
||||
RAPPORT baut auf freier Software auf. Diese Liste nennt die wichtigsten Komponenten und ihre jeweiligen Lizenzen.
|
||||
|
||||
### Frontend
|
||||
|
||||
| Software | Verwendung | Lizenz |
|
||||
|---|---|---|
|
||||
| [React 19](https://react.dev/) | UI-Bibliothek | MIT |
|
||||
| [Vite](https://vite.dev/) | Build-Tool, Dev-Server | MIT |
|
||||
| [swissqrbill](https://github.com/schoero/SwissQRBill) | QR-Einzahlungsscheine | MIT |
|
||||
|
||||
### Desktop-Wrapper
|
||||
|
||||
| Software | Verwendung | Lizenz |
|
||||
|---|---|---|
|
||||
| [Tauri 2](https://v2.tauri.app/) | Cross-Platform Desktop-Wrapper | MIT / Apache-2.0 |
|
||||
| [WebKit](https://webkit.org/) | WebView-Engine (macOS) | LGPL-2.1 / BSD |
|
||||
|
||||
### Rapport Server (Selfhost-Stack)
|
||||
|
||||
| Software | Verwendung | Lizenz |
|
||||
|---|---|---|
|
||||
| [PostgreSQL](https://www.postgresql.org/) | Datenbank | PostgreSQL-Lizenz |
|
||||
| [GoTrue](https://github.com/supabase/gotrue) | Authentication-Service | MIT |
|
||||
| [PostgREST](https://postgrest.org/) | REST-API über Postgres-Schema | MIT |
|
||||
| [Realtime](https://github.com/supabase/realtime) | WebSocket-Sync | Apache-2.0 |
|
||||
| [Storage](https://github.com/supabase/storage-api) | Object-Storage für Belege & Logos | Apache-2.0 |
|
||||
| [Kong](https://konghq.com/) | API-Gateway | Apache-2.0 |
|
||||
| [nginx](https://nginx.org/) | Frontend-Webserver | BSD-2-Clause |
|
||||
| [Docker Compose](https://docs.docker.com/compose/) | Orchestrierung | Apache-2.0 |
|
||||
|
||||
### Diese Website
|
||||
|
||||
| Software | Verwendung | Lizenz |
|
||||
|---|---|---|
|
||||
| [Hugo](https://gohugo.io/) | Static-Site-Generator | Apache-2.0 |
|
||||
| [Hextra](https://imfing.github.io/hextra/) | Hugo-Theme (von Xin) | MIT |
|
||||
| [Inter](https://rsms.me/inter/) | UI-Schrift (Rasmus Andersson) | SIL OFL 1.1 |
|
||||
| [Playfair Display](https://fonts.google.com/specimen/Playfair+Display) | Headings | SIL OFL 1.1 |
|
||||
|
||||
Alle Logos und Marken-Namen gehören ihren jeweiligen Eigentümern.
|
||||
|
||||
## Lizenz-Volltexte
|
||||
|
||||
Die vollständigen Lizenztexte:
|
||||
|
||||
- [AGPL-3.0](https://www.gnu.org/licenses/agpl-3.0.html) — RAPPORT
|
||||
- [MIT](https://opensource.org/licenses/MIT) — React, Vite, Tauri, Hextra, swissqrbill
|
||||
- [Apache-2.0](https://opensource.org/licenses/Apache-2.0) — Tauri, Hugo, Supabase
|
||||
- [SIL OFL 1.1](https://scripts.sil.org/cms/scripts/page.php?site_id=nrsi&id=OFL) — Inter, Playfair Display
|
||||
|
||||
## Mitwirkende
|
||||
|
||||
RAPPORT wird derzeit als Ein-Personen-Projekt von [Karim Gabriele Varano](https://gabrielevarano.ch) entwickelt. Beiträge — Code, Issues, Übersetzungen, Vorlagen — sind willkommen.
|
||||
|
||||
Wer beitragen möchte → [Gitea Issues](https://git.kgva.ch/karim/RAPPORT/issues).
|
||||
|
||||
## Kontakt
|
||||
|
||||
Fragen zur Lizenz, kommerzieller Einsatz, Spezialfälle: [Issue auf Gitea](https://git.kgva.ch/karim/RAPPORT/issues) oder via [gabrielevarano.ch](https://gabrielevarano.ch).
|
||||
@@ -0,0 +1,227 @@
|
||||
---
|
||||
title: Rapport Server
|
||||
linkTitle: Server
|
||||
weight: 4
|
||||
toc: true
|
||||
---
|
||||
|
||||
<span class="rapport-status new">Self-Hosting</span>
|
||||
|
||||
**Rapport Server** — der vollständige Selfhost-Stack für Rapport. Eigene Daten, eigene Domain, eigener Server. Komplett Open-Source, Docker-Compose, AGPL-3.0.
|
||||
|
||||
## Wann brauchst du Rapport Server?
|
||||
|
||||
| Szenario | Lösung |
|
||||
|---|---|
|
||||
| **Ein Mensch, ein Mac** | Desktop-App reicht — [Installation](../docs/installation) |
|
||||
| **Mehrere Personen im Studio** | Rapport Server auf einem Mac Mini oder Linux-Server |
|
||||
| **Verteiltes Team, Home-Office, Mobile-Zugriff** | Rapport Server mit Reverse-Proxy + SSL |
|
||||
| **Cloud-Hosting bei einem Anbieter** | Rapport Server auf VPS/Hetzner/etc. |
|
||||
|
||||
> Die Desktop-App speichert lokal als JSON. Rapport Server bringt **Postgres + Multi-User + Realtime-Sync** — für alle, die zu zweit oder im Team arbeiten.
|
||||
|
||||
## Architektur
|
||||
|
||||
Rapport Server bündelt sechs Open-Source-Komponenten zu einem stimmigen Stack:
|
||||
|
||||
```text
|
||||
┌──────────────────────────────────────────────────────┐
|
||||
│ Browser / Desktop-App │
|
||||
└──────────────┬───────────────────────┬───────────────┘
|
||||
│ │
|
||||
▼ ▼
|
||||
┌──────────┐ ┌──────────┐
|
||||
│ nginx │ │ Kong │ ← API-Gateway
|
||||
│ (app) │ │ │
|
||||
└──────────┘ └──────────┘
|
||||
│
|
||||
┌───────────────────┼─────────────────────┐
|
||||
▼ ▼ ▼
|
||||
┌────────┐ ┌──────────┐ ┌─────────┐
|
||||
│ GoTrue │ │PostgREST │ │ Realtime│
|
||||
│ (Auth) │ │ (API) │ │ (WS) │
|
||||
└────────┘ └──────────┘ └─────────┘
|
||||
│ │ │
|
||||
└───────────────────┼─────────────────────┘
|
||||
▼
|
||||
┌─────────────────┐
|
||||
│ PostgreSQL │
|
||||
└─────────────────┘
|
||||
│
|
||||
▼
|
||||
┌─────────────────┐
|
||||
│ Storage │ ← Belege, Logos
|
||||
└─────────────────┘
|
||||
```
|
||||
|
||||
| Komponente | Funktion |
|
||||
|---|---|
|
||||
| **PostgreSQL** | Datenbank — alle Rapport-Daten |
|
||||
| **GoTrue** | Authentication — Email/Passwort, JWT-Tokens |
|
||||
| **PostgREST** | REST-API direkt aus dem Postgres-Schema |
|
||||
| **Realtime** | WebSocket-Sync für Live-Updates |
|
||||
| **Storage** | Object-Storage für Belege & Logos |
|
||||
| **Kong** | API-Gateway, routet alle Calls |
|
||||
| **app** (nginx) | Liefert das Rapport-Frontend (React-Build) |
|
||||
|
||||
Alles in **einem Docker-Compose**. Keine Cloud-Abhängigkeit, keine Telemetrie.
|
||||
|
||||
## Voraussetzungen
|
||||
|
||||
| OS | Container-Runtime |
|
||||
|---|---|
|
||||
| **Linux** (Ubuntu 22.04+, Debian 12+, …) | Docker Engine + Compose v2 |
|
||||
| **macOS** (Mac Mini etc.) | [Colima](https://github.com/abiosoft/colima) + Docker CLI — voll OSS |
|
||||
|
||||
> Auf macOS funktionieren auch OrbStack oder Docker Desktop, beide sind aber proprietär. **Colima** ist die OSS-Alternative und für Selfhost vollkommen ausreichend.
|
||||
|
||||
**Plus:** ein DNS-Name für TLS (z. B. `rapport.studio.ch`), und optional ein Reverse-Proxy wie [Nginx Proxy Manager](https://nginxproxymanager.com/) oder [Caddy](https://caddyserver.com/).
|
||||
|
||||
## Setup in 5 Schritten
|
||||
|
||||
### 1 · Repo klonen
|
||||
|
||||
```bash
|
||||
git clone https://git.kgva.ch/karim/rapport-server.git
|
||||
cd rapport-server
|
||||
```
|
||||
|
||||
### 2 · `.env` erstellen
|
||||
|
||||
```bash
|
||||
cp .env.example .env
|
||||
```
|
||||
|
||||
In `.env` müssen mindestens diese Werte ersetzt werden:
|
||||
|
||||
| Variable | Was |
|
||||
|---|---|
|
||||
| `POSTGRES_PASSWORD` | DB-Passwort (≥ 32 Zeichen, zufällig) |
|
||||
| `JWT_SECRET` | JWT-Signatur (≥ 32 Zeichen, zufällig) |
|
||||
| `ANON_KEY` / `SERVICE_ROLE_KEY` | aus JWT-Secret abgeleitet |
|
||||
| `SITE_URL` | Public-URL der Instanz (z. B. `https://app.rapport.studio.ch`) |
|
||||
|
||||
Zufallswerte generieren:
|
||||
|
||||
```bash
|
||||
openssl rand -hex 32 # für POSTGRES_PASSWORD und JWT_SECRET
|
||||
node scripts/generate-keys.mjs # ANON_KEY + SERVICE_ROLE_KEY aus JWT_SECRET
|
||||
```
|
||||
|
||||
### 3 · Migrations holen
|
||||
|
||||
Die SQL-Migrations stammen aus dem App-Repo. Einmal initial holen:
|
||||
|
||||
```bash
|
||||
./scripts/sync-migrations.sh
|
||||
```
|
||||
|
||||
Bei späteren Rapport-Updates erneut ausführen, dann `docker compose down && docker compose up -d`.
|
||||
|
||||
### 4 · Stack starten
|
||||
|
||||
```bash
|
||||
docker compose up -d
|
||||
```
|
||||
|
||||
Erststart dauert ~1 Minute (Postgres initialisiert sich, Migrations laufen, Container starten).
|
||||
|
||||
### 5 · Health-Check
|
||||
|
||||
```bash
|
||||
docker compose ps
|
||||
```
|
||||
|
||||
Alle Container sollten `healthy` zeigen. Frontend ist dann erreichbar unter `http://localhost:8080`.
|
||||
|
||||
## Reverse-Proxy + HTTPS
|
||||
|
||||
Für Production-Setups mit eigener Domain — **Caddy** ist die einfachste Variante (config-as-code, Let's-Encrypt automatisch):
|
||||
|
||||
```caddy
|
||||
app.rapport.studio.ch {
|
||||
reverse_proxy localhost:8080
|
||||
}
|
||||
|
||||
api.rapport.studio.ch {
|
||||
reverse_proxy localhost:8000
|
||||
}
|
||||
```
|
||||
|
||||
In `.env` dann:
|
||||
|
||||
```env
|
||||
SITE_URL=https://app.rapport.studio.ch
|
||||
API_EXTERNAL_URL=https://api.rapport.studio.ch
|
||||
```
|
||||
|
||||
Alternativ über **Nginx Proxy Manager** mit Web-UI — siehe [Troubleshooting](../docs/troubleshooting).
|
||||
|
||||
## Updates
|
||||
|
||||
```bash
|
||||
git pull
|
||||
./scripts/sync-migrations.sh # falls neue SQL-Migrationen
|
||||
docker compose pull # neueste Container-Versionen
|
||||
docker compose up -d # neu starten
|
||||
```
|
||||
|
||||
Daten bleiben erhalten — das Volume `postgres-data` wird nicht angetastet.
|
||||
|
||||
## Backup
|
||||
|
||||
### Postgres-Dump
|
||||
|
||||
```bash
|
||||
docker compose exec -T db pg_dumpall -U postgres > backup-$(date +%Y%m%d).sql
|
||||
```
|
||||
|
||||
Empfohlen: per `cron` täglich + auf externe Disk / S3 / Backblaze sichern.
|
||||
|
||||
### Storage (Belege, Logos)
|
||||
|
||||
```bash
|
||||
docker compose exec storage tar -czf - /var/lib/storage > storage-$(date +%Y%m%d).tar.gz
|
||||
```
|
||||
|
||||
### Restore
|
||||
|
||||
```bash
|
||||
docker compose down
|
||||
docker volume rm rapport-server_postgres-data
|
||||
docker compose up -d db
|
||||
sleep 10
|
||||
cat backup-YYYYMMDD.sql | docker compose exec -T db psql -U postgres
|
||||
docker compose up -d
|
||||
```
|
||||
|
||||
## Bezug Rapport ↔ Rapport Server
|
||||
|
||||
| Komponente | Wo | Lizenz |
|
||||
|---|---|---|
|
||||
| **Rapport Desktop-App** | [git.kgva.ch/karim/RAPPORT](https://git.kgva.ch/karim/RAPPORT) | AGPL-3.0 |
|
||||
| **Rapport Server** | [git.kgva.ch/karim/rapport-server](https://git.kgva.ch/karim/rapport-server) | AGPL-3.0 |
|
||||
|
||||
Die Desktop-App kann **wahlweise** im Lokal-Modus (JSON, kein Server nötig) oder im Cloud-Modus (gegen Rapport Server) betrieben werden. Wechsel erfolgt im Login-Bildschirm der App.
|
||||
|
||||
## Häufige Fragen
|
||||
|
||||
### Brauche ich Supabase Cloud?
|
||||
|
||||
**Nein.** Rapport Server ist die Selfhost-Variante derselben Komponenten (Postgres + GoTrue + PostgREST + Realtime + Storage), aber komplett auf eigener Infrastruktur. Kein Supabase-Account, keine externe Abhängigkeit.
|
||||
|
||||
### Kann ich von der Desktop-App auf Rapport Server migrieren?
|
||||
|
||||
Im Login der Desktop-App auf **Cloud** wechseln, Server-URL eingeben, Account erstellen, Daten manuell wieder anlegen (Bürodaten, Mitarbeiter, Kunden). Ein direkter localStorage → Postgres-Import ist [geplant](https://git.kgva.ch/karim/RAPPORT/issues).
|
||||
|
||||
### Was kostet das?
|
||||
|
||||
Nichts — Rapport Server ist Open-Source (AGPL-3.0). Du brauchst nur einen Server (Mac Mini, NAS, VPS) und ggf. eine Domain.
|
||||
|
||||
### Wieviel Server-Resourcen?
|
||||
|
||||
Ein Mac Mini M1 (8 GB RAM) reicht problemlos für ein 5-Personen-Studio. Linux-VPS mit 2 GB RAM + 2 CPU reicht auch.
|
||||
|
||||
## Quellcode
|
||||
|
||||
[git.kgva.ch/karim/rapport-server](https://git.kgva.ch/karim/rapport-server) — Issues, Pull Requests und Forks willkommen.
|
||||
Reference in New Issue
Block a user