{"/docs/":{"data":{"":"Vollständige Anleitung zu RAPPORT — von der Installation über den täglichen Arbeitsablauf bis zur Cloud-Variante und Eigen-Builds.","erste-schritte#Erste Schritte":"Quick-StartIn sechs Schritten von Null zur ersten Rechnung. InstallationmacOS, Gatekeeper, Signatur, geplante Plattformen. EinrichtungBürodaten, Mitarbeiter, Kunden, Projekte initial anlegen.","für-fortgeschrittene#Für Fortgeschrittene":"Web-Modus (Multi-User)Rapport im Browser via Supabase — für Studios mit mehreren Nutzern. Entwicklung \u0026 BuildAus dem Quellcode kompilieren, beitragen, eigenes Release. ChangelogVersionsgeschichte und Breaking Changes.","hilfe--support#Hilfe \u0026amp; Support":"Bei Bugs oder weiteren Fragen → Issue auf Gitea . Siehe auch die FAQ für häufige Fragen.","im-alltag#Im Alltag":"Typischer ArbeitsablaufKunde → Offerte → Projekt → Zeit → Rechnung. Datenhaltung \u0026 BackupWo die Daten liegen, wie du sie sicherst und wiederherstellst. TroubleshootingApp startet nicht, Daten weg, Update hängt."},"title":"Dokumentation"},"/docs/arbeitsablauf/":{"data":{"":"Vom Erstkontakt mit dem Kunden bis zur Schlussrechnung — der typische Weg eines Projekts durch Rapport.","1--kunde-anlegen#1 · Kunde anlegen":"Kunden → Neu — siehe Einrichtung § 3.\nFalls der Kunde später bestellt, lassen sich alle gesammelten Daten (Adresse, Honorartyp) direkt übernehmen.","2--offerte-erstellen#2 · Offerte erstellen":"Offerten → Neu\nFeld 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.","3--offerte--projekt#3 · Offerte → Projekt":"Bei Status “Angenommen”: Knopf “In Projekt konvertieren”.\nDas erzeugt:\nEin 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.","4--zeit-erfassen#4 · Zeit erfassen":"Zeit → Mitarbeiter wählen → Woche navigieren\nKlick 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)","5--akonto-rechnung#5 · Akonto-Rechnung":"Während der Projektlaufzeit — typisch nach jeder abgeschlossenen SIA-Phase oder monatlich.\nRechnungen → Neu → Akonto\nFeld 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.\nPDF inkl. QR-Einzahlungsschein — siehe Rechnungen-Feature.","6--schlussrechnung#6 · Schlussrechnung":"Nach Projektabschluss — Differenz aus Gesamthonorar minus aller Akonto-Beträge.\nRechnungen → Neu → Schlussrechnung\nRapport rechnet die bisherigen Akonto-Rechnungen automatisch ab:\nGesamthonorar (SIA / Pauschal / Stundensatz) − Akonto-Rechnung 1 − Akonto-Rechnung 2 − Akonto-Rechnung 3 = Schlussrechnung","7--projektabschluss#7 · Projektabschluss":"Im Projekt → Status auf “Abgeschlossen”.\nDas Projekt bleibt für historische Auswertungen sichtbar, taucht aber nicht mehr in der Zeiterfassungs-Auswahl auf.","auswertungen#Auswertungen":"Wöchentlich / monatlich / am Jahresende:\nZeit → Auswertungen — Stunden pro Mitarbeiter, pro Projekt, pro Phase Rechnungen → Übersicht — offene Beträge, bezahlt, Mahnungen Buchhaltung → Erfolgsrechnung — Einnahmen vs. Ausgaben Mitarbeiter → Lohnabrechnung — monatlich","offerten-status#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","spezialfälle#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","tipps-aus-dem-alltag#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 Briefbogen-Logo in hoher Auflösung — sieht im PDF besser aus","übersicht#Übersicht":"Kunde → Offerte → Projekt → Zeit → Akonto → Schluss anlegen erstellen (aus Offerte) erfassen -Rechnung -Rechnung ↓ QR-Schein"},"title":"Arbeitsablauf"},"/docs/changelog/":{"data":{"":"Versionsgeschichte von RAPPORT. Aktuelle Releases: Gitea .","01x--initial#0.1.x — Initial":"Neu\nErste Setup-Routine (Bürodaten, Mitarbeiter, Kunden) Briefe und Lieferscheine Tauri-2-Bundle für macOS","02x--zeiterfassung#0.2.x — Zeiterfassung":"Neu\nWochenraster mit Halbstunden-Slots Drag \u0026 Drop zur Slot-Erfassung Projekt-Zuweisung pro Eintrag Auswertungen pro Mitarbeiter und Projekt","03x--rechnungen--qr#0.3.x — Rechnungen \u0026amp; QR":"Neu\nRechnungsmodul mit QR-Einzahlungsschein (via swissqrbill) Akonto-, Teil- und Schlussrechnungen PDF-Export mit Bürobriefbogen Stundensatz-Rechnungen ziehen direkt aus der Zeiterfassung","04x--projekte--sia-102#0.4.x — Projekte \u0026amp; SIA 102":"Neu\nProjektverwaltung nach SIA 102 Vorgeschlagene Phasen-Anteile am Gesamthonorar Bauschätzwert-basiertes Honorar Verbessert\nZeit-Auswertung pro SIA-Phase Akonto- und Schlussrechnungen mit automatischer Differenzberechnung","05x--mitarbeiter--lohn#0.5.x — Mitarbeiter \u0026amp; Lohn":"Neu\nMitarbeiterverwaltung mit Pensum, Stundensatz, Ferienanspruch Lohnabrechnung mit AHV/IV/EO, ALV, BVG, NBU Jahresabschluss mit Überstundenausgleich Ferien-Prorata bei Eintritt unter Jahr","06x--spesen--buchhaltung#0.6.x — Spesen \u0026amp; Buchhaltung":"Neu\nSpesenerfassung mit Beleg-Upload (Base64 in localStorage) Jahresbudget mit Einnahmen-/Ausgaben-Übersicht Vereinfachte Erfolgsrechnung pro Geschäftsjahr Verbessert\nLohnabrechnung integriert Spesen-Erstattungen CSV-Export aus der Zeiterfassung","070--auto-updater--system-tray#0.7.0 — Auto-Updater \u0026amp; System-Tray":"Neu\nAuto-Updater — Rapport prüft beim Start auf neue Versionen und installiert Updates signiert über Tauri. Einzelne Versionen können übersprungen werden. (Doku) 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) Quick-Open der letzten 5 Projekte direkt aus dem Tray-Menü Verbessert\nSchnellerer App-Start durch lazy-geladene Views Klarere Statusbadges in der Projekt-Übersicht","080081--patch-releases#0.8.0–0.8.1 — Patch-Releases":"Patch-Reihe mit kleineren Verbesserungen und Bugfixes. Details siehe Releases auf Gitea .","082--aktuelle-version-aktuell#0.8.2 — Aktuelle Version \u003cspan class=\"rapport-status new\"\u003eAktuell\u003c/span\u003e":"Veröffentlicht am 2026-05-24.\nNeu / Verbessert\nDiverse Verbesserungen und Bugfixes (Details werden im Release auf Gitea gepflegt) Bekannte Einschränkungen\nBuilds sind Tauri-signiert, aber noch nicht Apple-notarisiert — siehe Installation § Gatekeeper Linux- und Windows-Builds noch nicht verfügbar","roadmap#Roadmap":"Geplant — keine konkreten Termine:\nLinux-Build (Tauri 2 unterstützt es, Bedarf nötig) Windows-Build (analog) Cloud-Modus Stable (Supabase) — derzeit in 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 ."},"title":"Changelog"},"/docs/datenhaltung/":{"data":{"":"Wo Rapport seine Daten speichert, wie du sie sicherst und wiederherstellst.\nDiese Seite beschreibt die Desktop-App (Single-User). Wer im Team arbeitet und Rapport gegen einen Rapport Server betreibt, sichert stattdessen die Postgres-Datenbank — siehe Rapport Server § Backup.","a--einfach-manuell#A · Einfach (manuell)":"Den ganzen Ordner kopieren:\ncp -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#B · Time Machine":"Wenn Time Machine läuft, ist der Ordner automatisch dabei. Versionierung inbegriffen.\nEinschränkung: Time Machine sichert nur lokal/USB. Für off-site-Backup separat sorgen.","backup-strategien#Backup-Strategien":"","c--cron-job-täglich-automatisch#C · Cron-Job (täglich automatisch)":"# In ~/Library/LaunchAgents/com.rapport.backup.plist hinterlegen # oder als crontab-Eintrag: 0 22 * * * rsync -a \"$HOME/Library/Application Support/com.rapport.app/\" \\ \"$HOME/Backups/rapport/$(date +\\%Y\\%m\\%d)/\"","d--icloud-drive-off-site#D · iCloud Drive (off-site)":"Application-Support liegt nicht automatisch in iCloud. Wer das will:\n# 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).","datenmenge#Datenmenge":"Typische Grössen pro Bürojahr:\nInhalt 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.","export-funktionen-in-der-app#Export-Funktionen (in der App)":"Aus Rapport selbst:\nWas 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.","macos#macOS":"~/Library/Application Support/com.rapport.app/ Dort liegt eine einzelne localStorage-Datenbank des WebView, in der alle Rapport-Daten als JSON unter dem Key studio_data_v1 gespeichert sind:\nBü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.","schema-migrationen#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.\nCode: src/storage/migrations.js .\nEmpfehlung: Vor jedem grösseren Update ein Backup machen — Migrationen sind getestet, aber 100%-Sicherheit gibt es nicht.","selektiv-nur-einzelne-daten#Selektiv (nur einzelne Daten)":"Da alle Daten in einem JSON unter studio_data_v1 liegen, ist selektive Wiederherstellung manuell:\nBackup-localStorage-Datei öffnen (WebKit-Format → mit Tool wie [WebKit Storage Inspector] lesen, oder via Rapport DevTools) Gewünschte Felder in die aktuelle Instanz übertragen In der Praxis: meistens lohnt sich die vollständige Wiederherstellung mehr.","speicherort-desktop-app#Speicherort (Desktop-App)":"Die Desktop-App speichert alles lokal — keine Cloud, kein Server.","vollständig-rapport-komplett-tot#Vollständig (Rapport komplett tot)":"Rapport beenden (Cmd+Q, nicht nur Fenster zu) Aktuellen Ordner umbenennen (falls noch da): mv \"~/Library/Application Support/com.rapport.app\" \\ \"~/Library/Application Support/com.rapport.app.bak\" Backup-Ordner zurück kopieren: cp -R \"~/Documents/Rapport-Backup-20260523\" \\ \"~/Library/Application Support/com.rapport.app\" Rapport starten","warum-localstorage#Warum localStorage?":"In der Desktop-App ist Rapport eine Single-User-Anwendung. localStorage ist dafür:\nSchnell — keine Datenbank-Roundtrips Einfach — keine Migration nötig, JSON-Schema im Code Portabel — eine Datei → ein Backup Für Multi-User-Betrieb existiert Rapport Server — Postgres + Auth + Realtime in einem Docker-Compose. Wechsel zwischen Desktop- und Server-Modus erfolgt im Login-Bildschirm der App.","was-wird-nicht-gespeichert#Was wird \u003cstrong\u003enicht\u003c/strong\u003e 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)","wiederherstellung#Wiederherstellung":""},"title":"Datenhaltung"},"/docs/einrichtung/":{"data":{"":"Nach der Installation: Bürodaten, Mitarbeiter, Kunden und Projekte initial anlegen.","1--bürodaten#1 · Bürodaten":"Einstellungen → Bürodaten\nFeld 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 (\u003e1 MB) vorher in Vorschau verkleinern.","2--mitarbeiter#2 · Mitarbeiter":"Einstellungen → Mitarbeiter → Neu\nFeld Beschreibung Name, Vorname wird in Zeiterfassung \u0026 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.","3--kunden#3 · Kunden":"Kunden → Neu\nFeld 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#4 · Projekte":"Projekte → Neu\nFeld 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","checkliste#Checkliste":"Nach diesen vier Schritten ist Rapport einsatzbereit:\nBü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.","reihenfolge#Reihenfolge":"Die Reihenfolge ist wichtig — jede Stufe baut auf der vorherigen auf:\n1. Bürodaten → 2. Mitarbeiter → 3. Kunden → 4. Projekte ▼ ▼ ▼ ▼ Briefbogen, Zeiterfassung, Adressen, Zeiterfassung, QR-Schein, Lohn Rechnungen Rechnungen Login","sia-102-phasen#SIA-102-Phasen":"Wenn als Honorartyp SIA 102 gewählt ist, werden die Phasen-Anteile am Gesamthonorar vorgeschlagen — siehe Projekt-Feature.","sozialabzüge-optional#Sozialabzüge (optional)":"In Einstellungen → Lohn:\nAbzug 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."},"title":"Einrichtung"},"/docs/entwicklung/":{"data":{"":"Aus dem Quellcode kompilieren, beitragen, eigenes Release erzeugen.","architektur-in-einem-absatz#Architektur in einem Absatz":"RAPPORT ist eine monolithische SPA: ein React-Root in 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).\nDetaillierte Karte: ARCHITECTURE.md .","beitragen#Beitragen":"Issues \u0026 Pull Requests sind willkommen. Wertvoll sind:\nBug-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.","build#Build":"","desktop-tauri-dmg#Desktop (Tauri DMG)":"npm run build # erst Vite-Build (dist/) npx tauri build # dann Tauri-Bundle (DMG) Output: src-tauri/target/release/bundle/dmg/Rapport__aarch64.dmg","entwicklung#Entwicklung":"","konventionen#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","lizenz#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.","native-window-tauri-fenster-mit-desktop-integration#Native Window (Tauri-Fenster mit Desktop-Integration)":"npx tauri dev Echtes Tauri-Fenster System-Tray, Updater, native APIs verfügbar Erster Start dauert lange (Rust-Compile)","release-workflow#Release-Workflow":"# 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","setup#Setup":"git clone https://git.kgva.ch/karim/RAPPORT.git cd RAPPORT/APP npm install","verzeichnis-karte#Verzeichnis-Karte":"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","voraussetzungen#Voraussetzungen":"Tool Version Node.js ≥ 20 (für Vite 8) npm ≥ 10 Rust toolchain ≥ 1.77.2 (via rustup) Plattform-Tools siehe Tauri Prerequisites Plattform-spezifisch:\nmacOS: Xcode Command Line Tools (xcode-select --install) Windows: Microsoft C++ Build Tools + WebView2 Linux: webkit2gtk-4.1, librsvg2-dev, libayatana-appindicator3-dev, build-essential","web-modus-hmr-schnellster-loop#Web-Modus (HMR, schnellster Loop)":"npm run dev # http://localhost:3000 Hot-Module-Replacement Schnellster Iteration-Loop für UI-Arbeit Datenpersistierung: Browser-localStorage","web-statisches-bundle#Web (statisches Bundle)":"npm run build # Output: dist/ (~500 KB) Für Hosting auf einem Static-Server (z. B. Nginx, Caddy, GitHub Pages). Siehe Web-Modus."},"title":"Entwicklung"},"/docs/erste-schritte/":{"data":{"":"Von der Installation bis zur ersten Rechnung — in sechs Schritten.","01--installation#01 · Installation":"DMG von Gitea Releases herunterladen. Rapport in den Programme-Ordner ziehen. Beim ersten Start: Systemeinstellungen → Datenschutz \u0026 Sicherheit öffnen und Rapport zulassen.\nDie Pre-Release-Builds sind signiert über Tauri, aber (noch) nicht über die Apple-Notarisierung gegangen — daher der manuelle Freigabe-Schritt.","02--einrichtung#02 · Einrichtung":"In den Einstellungen hinterlegen:\nBü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#03 · Zeiterfassung":"Im Modul Zeit:\nMitarbeiter wählen Woche navigieren Stunden per Klick oder Drag erfassen 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#04 · Rechnungen":"Aus einer Offerte oder direkt erstellen:\nSIA-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#05 · Backup":"In der Desktop-App liegen alle Daten als JSON im Applikationsordner:\n~/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.","06--probleme-melden#06 · Probleme melden":"Ein Issue auf Gitea erstellen — mit kurzer Beschreibung, was passiert ist. Screenshots helfen. Bitte die Rapport-Version (links unten in der App) angeben.\nTipp: Wenn die App nicht mehr startet, hilft oft, den Cache-Ordner zu sichern und neu zu starten. Die JSON-Daten selbst bleiben unverändert."},"title":"Erste Schritte"},"/docs/installation/":{"data":{"":"Schritt-für-Schritt-Anleitung für die Installation der Desktop-App.","1--download#1 · Download":"Aktueller Build: Downloads-Seite oder direkt Releases auf Gitea .\nDatei Plattform RAPPORT__aarch64.dmg macOS Apple Silicon RAPPORT__x86_64.dmg macOS Intel (auf Anfrage)","2--dmg-öffnen--installieren#2 · DMG öffnen \u0026amp; installieren":"DMG doppelklicken Rapport.app in den Applications-Ordner ziehen DMG auswerfen","3--erster-start-macos-gatekeeper#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.","4--erstes-setup#4 · Erstes Setup":"Beim ersten Start zeigt Rapport den Setup-Bildschirm. Hier werden die Stammdaten erfasst — siehe Einrichtung.","5--update-strategie#5 · Update-Strategie":"Ab Version 0.7.0 prüft Rapport beim Start automatisch auf neue Versionen (siehe Auto-Updater). Updates können in den Einstellungen deaktiviert werden.\nManuelle Updates: einfach das neuere DMG installieren — die Daten bleiben erhalten, da sie unabhängig von der App liegen (siehe Datenhaltung).","alternative-terminal#Alternative (Terminal)":"Falls der GUI-Weg nicht funktioniert:\nxattr -d com.apple.quarantine /Applications/Rapport.app Das entfernt das Quarantäne-Flag und macOS akzeptiert den Start.","bekannte-probleme#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.","deinstallation#Deinstallation":"# 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.","lösung#Lösung":"Systemeinstellungen → Datenschutz \u0026 Sicherheit öffnen Bis ganz nach unten scrollen — es erscheint: “Rapport” wurde blockiert, da es nicht von einem identifizierten Entwickler stammt.\nAuf “Trotzdem öffnen” klicken Bestätigen Ab dem zweiten Start läuft Rapport ohne Rückfragen.","voraussetzungen#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 , wenn du eine Plattform brauchst."},"title":"Installation"},"/docs/troubleshooting/":{"data":{"":"Typische Probleme und Lösungen. Wenn dein Problem nicht dabei ist → Issue auf Gitea .","app-startet-nicht#App startet nicht":"","app-startet-zeigt-aber-schwarzen-bildschirm#App startet, zeigt aber schwarzen Bildschirm":"Ursache: WebView-Cache korrupt.\nLösung:\nrm -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#App stürzt sofort beim Start ab":"Ursache: wahrscheinlich beschädigte JSON-Daten in studio_data_v1.\nDiagnose:\n# Daten ansehen (DevTools-Output) open \"~/Library/Application Support/com.rapport.app\" Lösung:\nBackup wiederherstellen (siehe Datenhaltung) Oder als letzter Ausweg: Daten zurücksetzen mv \"~/Library/Application Support/com.rapport.app\" \\ \"~/Library/Application Support/com.rapport.app.bad\" App neu starten → erstellt frische Daten. Anschliessend Setup-Screen.","auto-update-findet-nichts#Auto-Update findet nichts":"Diagnose:\ncurl -s https://git.kgva.ch/karim/RAPPORT/raw/branch/main/APP/latest.json → sollte JSON liefern. Wenn nicht: Server-/Netzwerkproblem.","daten-weg#Daten weg":"","debug-informationen-sammeln#Debug-Informationen sammeln":"Bei einem Issue helfen folgende Infos:\n# 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.","diese-version-überspringen-rückgängig-machen#\u0026ldquo;Diese Version überspringen\u0026rdquo; rückgängig machen":"In Einstellungen → Updates → Übersprungene Versionen zurücksetzen. Beim nächsten Start wird die Version wieder angeboten.","localstorage-voll#localStorage voll":"Symptom: Rapport schreibt Fehler-Toast “Speicher voll” beim Sichern.\nUrsache: macOS WebView limitiert localStorage auf ~10 MB pro Origin.\nLösung:\nSehr grosse Logos durch kleinere ersetzen (Bürodaten → Logo) Belege (Spesen) selektiv löschen oder als externe Datei archivieren Auf Web-Modus wechseln (Postgres ohne praktisches Limit)","login-screen-zeigt-keine-server-url#Login-Screen zeigt keine Server-URL":"Ursache: .env.production enthielt nicht den richtigen VITE_SUPABASE_URL zur Build-Zeit.\nLösung: .env.production prüfen, dann npm run build neu, Container restart.","nach-einem-app-update-fehlen-einträge#Nach einem App-Update fehlen Einträge":"Ursache: mögliche fehlgeschlagene Migration.\nSofortmassnahme:\nRapport beenden (Cmd+Q, nicht nur Fenster zu) Aktuelles Datenverzeichnis sichern: cp -R \"~/Library/Application Support/com.rapport.app\" \\ \"~/Documents/Rapport-Notfall-$(date +%Y%m%d-%H%M)\" Issue erstellen mit: Version vor dem Update (falls bekannt) Version nach dem Update Was fehlt Optional: gesicherter Datenordner (via Pastebin oder verschlüsselt zugesandt)","pdf--qr-schein#PDF / QR-Schein":"","pdf-export-ist-leer--weisses-blatt#PDF-Export ist leer / weisses Blatt":"Ursache: Print-View hat keine Daten (möglicherweise Race-Condition beim Laden).\nLösung: Rechnung schliessen, erneut öffnen, dann PDF.","pdf-schrift-sieht-falsch-aus#PDF-Schrift sieht falsch aus":"Ursache: Web-Schrift nicht geladen, Fallback greift.\nLösung: Vor dem Drucken warten, bis das Vorschau-Bild komplett geladen ist (3–5 Sek).","qr-schein-hat-falsche-daten#QR-Schein hat falsche Daten":"Diagnose-Checkliste:\nIBAN korrekt? (CH, 21 Zeichen, keine Leerzeichen) Empfänger-Adresse vollständig? (PLZ und Ort beide gefüllt) Schuldner-Adresse vollständig? Betrag \u003e 0? Referenz nicht zu lang? (max 27 Zeichen) QR-Bibliothek: swissqrbill — bei merkwürdigen Fehlern dort nachschauen.","rapport-ist-beschädigt-beim-ersten-start#\u0026ldquo;Rapport ist beschädigt\u0026rdquo; beim ersten Start":"Ursache: macOS Gatekeeper blockt unsignierte/nicht-notarisierte Apps.\nLösung: siehe Installation § 3. Kurz:\nxattr -d com.apple.quarantine /Applications/Rapport.app","realtime-updates-kommen-nicht-an#Realtime-Updates kommen nicht an":"Ursache: Websocket-Support fehlt im Reverse Proxy.\nLösung: In Nginx Proxy Manager für api.* Websocket Support aktivieren.\nSiehe Web-Modus § Troubleshooting.","system-tray#System-Tray":"","tray-icon-erscheint-nicht#Tray-Icon erscheint nicht":"Plattform-Hinweis: Tray-Icons unter macOS sind bei extrem voller Menüleiste oder unter “Bartender”/“Hidden Bar” eventuell unsichtbar.\nDiagnose:\nps aux | grep -i rapport → wenn Prozess läuft, aber kein Icon: in den Tray-Manager-Apps prüfen.\nKonfiguration: Einstellungen → System-Tray → Tray-Icon ausblenden (aus → Icon erzwingen).","tray-menü-reagiert-nicht--hängt#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).","update-lädt-lässt-sich-aber-nicht-installieren#Update lädt, lässt sich aber nicht installieren":"Ursache: Signaturprüfung scheitert (Public-Key in App ≠ Signatur in latest.json).\nLösung: Manuelles Update — DMG direkt von Releases laden und installieren. Daten bleiben erhalten.","updates#Updates":"","web-modus#Web-Modus":"","wenn-nichts-hilft#Wenn nichts hilft":"Neues Issue auf Gitea mit:\nWas du gemacht hast Was passiert ist Was du erwartet hättest Screenshots (auch von DevTools-Konsole falls möglich) Rapport-Version und macOS-Version"},"title":"Troubleshooting"},"/docs/web-modus/":{"data":{"":"Hinweis: Der frühere Supabase-basierte Web-Modus wurde durch Rapport Server abgelöst — den vollständigen Selfhost-Stack mit eigenem Postgres, Auth, Realtime und Storage. Keine externe Cloud-Abhängigkeit mehr.\nDiese Seite bleibt als Referenz erhalten, der empfohlene Weg für Multi-User-Setups ist Rapport Server.","architektur-kurzfassung#Architektur (Kurzfassung)":"┌────────────┐ 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) Auth: E-Mail / Passwort über GoTrue Storage: Belege, Logos in Object-Storage","migration-desktop--cloud#Migration Desktop → Cloud":"Wer mit der Desktop-App startet und später auf den Web-Modus wechseln möchte:\nAktuell: 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 .","setup#Setup":"Alle Setup-Schritte (Repo klonen, .env erstellen, Migrations syncen, Docker-Compose starten, Reverse-Proxy konfigurieren) sind in Rapport Server dokumentiert.","troubleshooting#Troubleshooting":"Siehe Rapport Server § Troubleshooting oder allgemeine Troubleshooting-Seite.","wann-brauchst-du-das#Wann brauchst du das?":"Anwendungsfall Empfehlung Solo-Büro, ein Mac Desktop-App — siehe Installation 2–5 Personen, gleicher Standort Rapport Server auf einem Mac Mini im LAN Verteiltes Team / Home-Office Rapport Server mit SSL + Reverse Proxy Hosted Backend (eigener VPS) Rapport Server auf Linux-VPS"},"title":"Web-Modus"},"/downloads/":{"data":{"":"Aktuelle Builds von Rapport. Quellcode und ältere Versionen auf Gitea .\nRapport besteht aus zwei Komponenten:\nKomponente Für wen Aktuelle Version Desktop-App Solo-Büro, lokale Datenhaltung 0.8.2 Rapport Server Team / Multi-User / Selfhost 0.1.0","auto-update#Auto-Update":"Seit 0.7.0 prüft die Desktop-App beim Start automatisch auf neue Versionen — siehe Auto-Updater. Für Rapport Server: git pull \u0026\u0026 docker compose pull \u0026\u0026 docker compose up -d.","desktop-app--pre-release-082#Desktop-App — Pre-Release 0.8.2":"Aktuelle Version\nNeuerungen — siehe Changelog für Details.","docker-linux--vps--headless#Docker (Linux / VPS / Headless)":"Für Linux-Server, NAS oder VPS — der reine Docker-Compose-Stack ohne GUI.\ngit 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.\nContainer-Images werden von Docker Hub / Gitea-Registry gezogen — docker compose pull aktualisiert auf die neuesten Tags.","linux--windows#Linux \u0026amp; Windows":"Geplant. Rapport basiert auf Tauri 2 — eine Portierung ist möglich, sobald der Bedarf besteht. Issue erstellen , wenn du eine Plattform brauchst.","macos#macOS":"Architektur Download Apple Silicon (M1–M4) RAPPORT_0.8.2_aarch64.dmg Intel (x86_64) auf Anfrage Erstinstallation: Systemeinstellungen → Datenschutz \u0026 Sicherheit öffnen und Rapport zulassen. Die Builds sind über Tauri signiert, aber (noch) nicht Apple-notarisiert.","quellcode#Quellcode":"Desktop-App — Tauri / React:\ngit 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).\nRapport Server:\ngit clone https://git.kgva.ch/karim/rapport-server.git Beide Repos auf Gitea — Issues und PRs willkommen.","rapport-server--010#Rapport Server — 0.1.0":"Erstes Release\nSelfhost-Backend für Multi-User-Setups — Postgres, Auth, Realtime-Sync, Storage. Details und Setup-Anleitung auf der Server-Seite.","server-app-macos#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.\nArchitektur Download Apple Silicon (M1–M4) RAPPORT_SERVER_0.1.0_aarch64.dmg Intel (x86_64) auf Anfrage Voraussetzung: Colima oder Docker Desktop muss installiert sein. Die App verwaltet den Container-Stack darüber."},"title":"Downloads"},"/faq/":{"data":{"":"Häufige Fragen zu RAPPORT. Bei Bugs oder weiteren Fragen → Issue auf Gitea .","für-wen-ist-rapport-gedacht#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-die-software-stabil-genug-für-den-betrieb#Ist die Software stabil genug für den Betrieb?":"Noch nicht. Aktuell befindet sich Rapport in aktiver Entwicklung (Pre-Release 0.8.2). Funktionen können sich ändern, Bugs sind möglich. Regelmässige Backups sind empfohlen. Testen und Feedback geben ist erwünscht.","ist-rapport-kostenlos#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.","kann-ich-zum-projekt-beitragen#Kann ich zum Projekt beitragen?":"Ja. Issues und Pull Requests sind willkommen auf Gitea . Rapport ist kein Framework — konkrete Verbesserungen für den Büroalltag sind am wertvollsten:\nBug-Reports mit Reproduktionsschritten Workflow-Verbesserungen aus dem realen Büroalltag Vorlagen (Briefe, Protokolle, Lieferscheine) für andere Büros Übersetzungen / Internationalisierung","warum-open-source#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.\nAGPL-3.0 stellt sicher, dass Verbesserungen wieder ins Projekt fliessen.","was-ist-mit-dem-qr-einzahlungsschein#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.","welche-systeme-werden-unterstützt#Welche Systeme werden unterstützt?":"Aktuell nur macOS (Intel \u0026 Apple Silicon). Rapport basiert auf Tauri — eine Portierung auf Linux und Windows ist möglich, sobald der Bedarf seitens Community besteht.","wie-erhalte-ich-hilfe-bei-einem-problem#Wie erhalte ich Hilfe bei einem Problem?":"Ein Issue auf Gitea 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.\nKanal Verwendung Gitea Issues Bugs, Feature-Wünsche, allgemeine Fragen gabrielevarano.ch Entwickler-Kontakt","wie-funktioniert-die-zeiterfassung#Wie funktioniert die Zeiterfassung?":"Tages- und Wochenraster mit Drag \u0026 Drop. Jeder Eintrag wird einem Projekt zugewiesen. Auswertungen pro Mitarbeiter und Projekt sind unter Zeit abrufbar. Ferienverwaltung mit Prorata und Jahresabschluss mit Überstundenausgleich.","wo-werden-die-daten-gespeichert#Wo werden die Daten gespeichert?":"Rapport unterstützt zwei Modi, beide selbst-gehostet:\nDesktop-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. 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."},"title":"FAQ"},"/features/":{"data":{"":"Die Bausteine von RAPPORT — Studio-Management für Schweizer Architekturbüros.","module#Module":"ZeiterfassungTages- \u0026 Wochenraster mit Drag \u0026 Drop. Rechnungen \u0026 OffertenQR-Einzahlungsscheine, SIA-Phasen, Akonto. Projekt- \u0026 KundenverwaltungSIA 102, Budget, Phasen, Beteiligte. MitarbeiterFerien, Absenzen, Lohnabrechnung. Spesen \u0026 BürobudgetBelegupload, Jahresbudget, Internes. Protokolle \u0026 LieferscheineSitzungsprotokolle, Briefe, Lieferscheine. Auto-UpdaterSignierte Updates via Tauri. System-TrayHide-on-Close, Quick-Open."},"title":"Features"},"/features/auto-updater/":{"data":{"":"Neu in 0.7.0\nRapport prüft beim Start automatisch auf neue Versionen und installiert Updates signiert über Tauri. Einzelne Versionen können übersprungen werden.","funktionsweise#Funktionsweise":"Beim App-Start:\nAbfrage gegen https://git.kgva.ch/karim/RAPPORT/releases/latest.json Versionsvergleich mit lokaler version im Tauri-Bundle Bei neuer Version → Update-Dialog Bei Bestätigung → Download + Signaturprüfung + Installation + Neustart","latest-endpoint#Latest-Endpoint":"{ \"version\": \"0.8.2\", \"notes\": \"Rapport 0.8.2\", \"pub_date\": \"2026-05-24T00:00:00Z\", \"platforms\": { \"darwin-aarch64\": { \"signature\": \"…\", \"url\": \"https://git.kgva.ch/karim/RAPPORT/releases/download/0.8.2/RAPPORT%20PRE-RELEASE.app.tar.gz\" } } }","optionen#Optionen":"Update installieren — Download \u0026 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.","sicherheit#Sicherheit":"Updates werden mit dem Tauri-Updater-Schlüssel signiert Manipulierte Downloads werden abgelehnt Quellcode und Build sind reproduzierbar (Gitea CI, geplant)"},"title":"Auto-Updater"},"/features/mitarbeiter/":{"data":{"":"In Arbeit\nFerienverwaltung, interne Stunden / Absenzen und Lohnabrechnung. Jahresabschluss mit Überstundenausgleich.","absenzen#Absenzen":"Krankheit, Militär, Mutterschaft, unbezahlter Urlaub — getrennt erfasst, mit Auswertung pro Mitarbeiter.","ferienverwaltung#Ferienverwaltung":"Prorata-Berechnung bei Eintritt unter Jahr Ferien-Saldo in Tagen (live) Halbtage unterstützt Übertrag ins Folgejahr oder Auszahlung","jahresabschluss#Jahresabschluss":"Ferien-Restguthaben übertragen oder auszahlen Überstunden ausgleichen oder vergüten Lohnausweis vorbereiten (Export)","lohnabrechnung#Lohnabrechnung":"Monatliche Abrechnung mit:\nGrundlohn (basierend auf Pensum) Überstunden-Vergütung Spesen-Erstattung Sozialabzüge (AHV, ALV, Pensionskasse) PDF-Export pro Mitarbeiter.","stammdaten#Stammdaten":"Pro Mitarbeiter:\nName, Eintrittsdatum, Pensum (%) Stundensatz (intern, für Rechnungen) Ferienanspruch (Tage / Jahr) Lohn (monatlich, brutto)","verwandte-module#Verwandte Module":"Zeiterfassung — Pensum-Soll vs. Stunden-Ist Spesen — Spesen-Erstattung in der Lohnabrechnung"},"title":"Mitarbeiter"},"/features/projekte/":{"data":{"":"In Arbeit\nProjekte nach SIA 102 mit Budget, Phasen und Beteiligten. Erstellung aus einer Offerte mit Verknüpfung zu Zeiterfassung und Rechnungen.","auswertung#Auswertung":"Pro Projekt:\nGeleistete Stunden vs. Budget Honorar-Saldo (verrechnet / Akonto / offen) Phasen-Fortschritt","kundendatenbank#Kundendatenbank":"Adresse, Ansprechperson, Telefon, E-Mail Honorartyp (Stundensatz / SIA / Pauschal) Verknüpfung zu allen Projekten und Rechnungen des Kunden","projektstruktur#Projektstruktur":"Jedes Projekt besitzt:\nStammdaten — 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#SIA 102":"Standard-Phasenverteilung wird vorgeschlagen, kann pro Projekt überschrieben werden.\nPhase Anteil (Standard) 31 — Vorprojekt 9 % 32 — Bauprojekt 21 % 33 — Bewilligung 3 % 41 — Ausschreibung 18 % 51 — Ausführung 38 % 52 — Inbetriebnahme 6 % 53 — Abschluss 5 %","verwandte-module#Verwandte Module":"Rechnungen — Offerte → Projekt Zeiterfassung — Stunden-Auswertung pro Phase"},"title":"Projekte"},"/features/protokolle/":{"data":{"":"In Arbeit\nEinfache Erstellung von Sitzungsprotokollen mit Beschlüssen und Aufgaben. Briefe und Lieferscheine im gleichen Erscheinungsbild.","briefe#Briefe":"Brief-Editor mit:\nEmpfänger aus Kundendatenbank Bezugszeile, Anrede, Text, Grussformel Briefbogen-Vorlage mit Logo PDF-Export","lieferscheine#Lieferscheine":"Pro Lieferung:\nEmpfänger, Datum, Bezug Positionen (Plan-Nummer, Bezeichnung, Anzahl, Massstab) Unterschriftenfeld Konsistentes Erscheinungsbild über alle Dokumenttypen — eine Briefbogen-Vorlage, mehrere Verwendungen.","sitzungsprotokolle#Sitzungsprotokolle":"Pro Sitzung:\nDatum, Ort, Teilnehmer (aus Beteiligten-Liste) Traktanden als nummerierte Liste Pro Traktandum: Beschluss, Aufgabe, Verantwortlich, Frist Anhänge PDF-Export mit Bürobriefbogen.","verwandte-module#Verwandte Module":"Projekte — Beteiligte als Empfänger"},"title":"Protokolle"},"/features/rechnungen/":{"data":{"":"In Arbeit\nQR-Einzahlungsscheine, SIA-Phasen, Akonto-, Teil- und Schlussrechnungen. Offerten sind in Projekte und Rechnungen konvertierbar. PDF-Export.","honorarmodelle#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#PDF-Export":"Druckfertige Rechnung inkl. QR-Schein. Layout aus dem Büro-Briefbogen (mit Logo). Mehrsprachig DE/FR/IT (geplant).","qr-einzahlungsschein#QR-Einzahlungsschein":"Schweizer QR-Rechnung nach Norm — direkt eingebettet in die PDF.\nAusgelesen aus:\nBürodaten — IBAN, Empfänger-Adresse Kundendaten — Schuldner-Adresse Rechnungs-Daten — Betrag, Referenz, Zusatzinformation","verwandte-module#Verwandte Module":"Projekte — Honorarstruktur stammt aus dem Projekt Zeiterfassung — Stundensatz-Rechnungen","workflow#Workflow":"Offerte erstellen — auf Basis SIA 102 oder pauschal Kunde nimmt an → konvertieren in Projekt + Rechnung Akonto-Rechnungen während der Projektlaufzeit Schlussrechnung mit Differenz zum bisher Akonto-bezahlten"},"title":"Rechnungen"},"/features/spesen/":{"data":{"":"In Arbeit\nSpesenerfassung mit Belegupload. Jahresbudget mit Einnahmen und Ausgaben. Internes Rechnungswesen.","auswertung#Auswertung":"Einnahmen pro Kunde / Projekt Ausgaben pro Kategorie / Mitarbeiter Erfolgsrechnung pro Geschäftsjahr (vereinfacht)","jahresbudget#Jahresbudget":"Übersicht über:\nEinnahmen — Rechnungsbeträge, sortiert nach Eingang Ausgaben — Spesen, Bürokosten, Löhne, Sozialabzüge Saldo pro Monat / Quartal / Jahr","spesenerfassung#Spesenerfassung":"Pro Mitarbeiter:\nDatum, Betrag, Kategorie Beleg-Upload (PDF, JPG, PNG) Projekt-Zuordnung (optional) Status (offen / erstattet) Kategorien: Reise, Verpflegung, Material, Telefon, Sonstiges.","verwandte-module#Verwandte Module":"Mitarbeiter — Spesen-Erstattung in der Lohnabrechnung Rechnungen — Einnahmen-Quelle"},"title":"Spesen"},"/features/system-tray/":{"data":{"":"Neu in 0.7.0\nSchnellzugriff über die Menüleiste mit Hide-on-Close. Beim Schliessen läuft Rapport im Hintergrund weiter — Cmd+Q beendet die App vollständig.","konfiguration#Konfiguration":"In den Einstellungen:\nBeim 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","tray-menü#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","verhalten#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","verwandte-module#Verwandte Module":"Auto-Updater — prüft Updates im Hintergrund"},"title":"System-Tray"},"/features/zeiterfassung/":{"data":{"":"In Arbeit\nTages- und Wochenraster mit Drag \u0026 Drop. Auswertungen pro Mitarbeiter und Projekt. Ferienverwaltung mit Prorata und Jahresabschluss.","auswertungen#Auswertungen":"Pro Mitarbeiter und pro Projekt:\nGeleistete Stunden vs. Soll-Pensum Ferienanspruch / -saldo (mit Prorata bei Eintritt unter Jahr) Überstunden-Saldo Stundenaufschlüsselung nach SIA-Phase pro Projekt","eingabe#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)","jahresabschluss#Jahresabschluss":"Am Jahresende:\nFerien-Restguthaben übertragen oder auszahlen Überstunden ausgleichen oder vergüten Neues Jahr automatisch initialisieren","konzept#Konzept":"Die Zeiterfassung ist das Kernmodul von RAPPORT — alle anderen Module (Rechnungen, Auswertungen, Lohnabrechnung) greifen auf die hier erfassten Stunden zu.","verwandte-module#Verwandte Module":"Rechnungen — Stundensatz-Rechnungen ziehen direkt aus der Zeiterfassung Projekte — Stunden-Auswertung pro SIA-Phase Mitarbeiter — Pensum, Ferienanspruch"},"title":"Zeiterfassung"},"/glossary":{"data":{},"title":"Glossary"},"/hosting/":{"data":{"":"Gehostet in der Schweiz · Ohne eigenen Server RAPPORT Hosting Ihre eigene Rapport-Instanz — in Minuten startklar. Studio-Management für Architekturbüros, gehostet, gewartet und gesichert. Sie arbeiten, wir kümmern uns um den Rest. Jetzt starten Preise ansehen ↗ Schweizer Hosting Tägliche Backups Jederzeit kündbar Keine Installation SO EINFACH\nRegistrieren, Abo wählen, loslegen Keine Server-Administration, keine Updates, keine Sorgen um Backups. Sie bekommen eine fertige Rapport-Instanz mit eigener Adresse — wir betreiben sie für Sie in der Schweiz.\nIn Minuten startklar Konto erstellen, Abo wählen, fertig. Ihre Instanz wird automatisch eingerichtet — keine Installation, keine Technik.\nSchweizer Hosting Ihre Daten bleiben in der Schweiz. Tägliche Backups, sichere Infrastruktur — ohne dass Sie sich darum kümmern müssen.\nVoller Funktionsumfang Zeiterfassung, Rechnungen mit QR-Einzahlungsschein, Offerten, Projekte nach SIA 102, Mitarbeiter — alles in einer App.\nImmer aktuell Updates und Wartung übernehmen wir. Sie arbeiten immer mit der neuesten Version, ganz ohne Aufwand.\nFaire Preise Transparente Abos ab CHF 19/Monat. Monatlich kündbar, keine versteckten Kosten, keine Einrichtungsgebühr.\nKein Lock-in Rapport ist Open Source (AGPL). Hosting nimmt Ihnen nur die Technik ab — Sie können jederzeit zum Selbstbetrieb wechseln.\nKostenlos registrieren"},"title":"Hosting"},"/lizenz/":{"data":{"":"Lizenz von RAPPORT, Zugehörigkeit zu OpenBureau und Attribution der verwendeten Open-Source-Software.","desktop-wrapper#Desktop-Wrapper":"Software Verwendung Lizenz Tauri 2 Cross-Platform Desktop-Wrapper MIT / Apache-2.0 WebKit WebView-Engine (macOS) LGPL-2.1 / BSD","diese-website#Diese Website":"Software Verwendung Lizenz Hugo Static-Site-Generator Apache-2.0 Hextra Hugo-Theme (von Xin) MIT Inter UI-Schrift (Rasmus Andersson) SIL OFL 1.1 Playfair Display Headings SIL OFL 1.1 Alle Logos und Marken-Namen gehören ihren jeweiligen Eigentümern.","frontend#Frontend":"Software Verwendung Lizenz React 19 UI-Bibliothek MIT Vite Build-Tool, Dev-Server MIT swissqrbill QR-Einzahlungsscheine MIT","kontakt#Kontakt":"Fragen zur Lizenz, kommerzieller Einsatz, Spezialfälle: Issue auf Gitea oder via gabrielevarano.ch .","lizenz#Lizenz":"Lizenziert unter GNU Affero General Public License v3.0 oder höher (AGPL-3.0-or-later ).\nDies bedeutet im Kern:\nFreie 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.","lizenz-volltexte#Lizenz-Volltexte":"Die vollständigen Lizenztexte:\nAGPL-3.0 — RAPPORT MIT — React, Vite, Tauri, Hextra, swissqrbill Apache-2.0 — Tauri, Hugo, Supabase SIL OFL 1.1 — Inter, Playfair Display","mitwirkende#Mitwirkende":"RAPPORT wird derzeit als Ein-Personen-Projekt von Karim Gabriele Varano entwickelt. Beiträge — Code, Issues, Übersetzungen, Vorlagen — sind willkommen.\nWer beitragen möchte → Gitea Issues .","openbureau#OpenBureau":"RAPPORT ist Teil der OpenBureau-Initiative — einer Sammlung freier Software-Werkzeuge für den Architektur-Büro-Alltag.\nDie 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.\nTool 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 .","rapport#RAPPORT":"RAPPORT — Studio Management Software für Architekturbüros.\nQuellcode: git.kgva.ch/karim/RAPPORT Autor: Karim Gabriele Varano","rapport-server-selfhost-stack#Rapport Server (Selfhost-Stack)":"Software Verwendung Lizenz PostgreSQL Datenbank PostgreSQL-Lizenz GoTrue Authentication-Service MIT PostgREST REST-API über Postgres-Schema MIT Realtime WebSocket-Sync Apache-2.0 Storage Object-Storage für Belege \u0026 Logos Apache-2.0 Kong API-Gateway Apache-2.0 nginx Frontend-Webserver BSD-2-Clause Docker Compose Orchestrierung Apache-2.0","verwendete-open-source-software#Verwendete Open-Source-Software":"RAPPORT baut auf freier Software auf. Diese Liste nennt die wichtigsten Komponenten und ihre jeweiligen Lizenzen."},"title":"Lizenz"},"/server/":{"data":{"":"Self-Hosting\nRapport Server — der vollständige Selfhost-Stack für Rapport. Eigene Daten, eigene Domain, eigener Server. Komplett Open-Source, Docker-Compose, AGPL-3.0.","1--repo-klonen#1 · Repo klonen":"git clone https://git.kgva.ch/karim/rapport-server.git cd rapport-server","2--env-erstellen#2 · \u003ccode\u003e.env\u003c/code\u003e erstellen":"cp .env.example .env In .env müssen mindestens diese Werte ersetzt werden:\nVariable 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:\nopenssl 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#3 · Migrations holen":"Die SQL-Migrations stammen aus dem App-Repo. Einmal initial holen:\n./scripts/sync-migrations.sh Bei späteren Rapport-Updates erneut ausführen, dann docker compose down \u0026\u0026 docker compose up -d.","4--stack-starten#4 · Stack starten":"docker compose up -d Erststart dauert ~1 Minute (Postgres initialisiert sich, Migrations laufen, Container starten).","5--health-check#5 · Health-Check":"docker compose ps Alle Container sollten healthy zeigen. Frontend ist dann erreichbar unter http://localhost:8080.","architektur#Architektur":"Rapport Server bündelt sechs Open-Source-Komponenten zu einem stimmigen Stack:\n┌──────────────────────────────────────────────────────┐ │ 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 \u0026 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.","backup#Backup":"","bezug-rapport--rapport-server#Bezug Rapport ↔ Rapport Server":"Komponente Wo Lizenz Rapport Desktop-App git.kgva.ch/karim/RAPPORT AGPL-3.0 Rapport Server 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.","brauche-ich-supabase-cloud#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.","häufige-fragen#Häufige Fragen":"","kann-ich-von-der-desktop-app-auf-rapport-server-migrieren#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 .","postgres-dump#Postgres-Dump":"docker compose exec -T db pg_dumpall -U postgres \u003e backup-$(date +%Y%m%d).sql Empfohlen: per cron täglich + auf externe Disk / S3 / Backblaze sichern.","quellcode#Quellcode":"git.kgva.ch/karim/rapport-server — Issues, Pull Requests und Forks willkommen.","restore#Restore":"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","reverse-proxy--https#Reverse-Proxy + HTTPS":"Für Production-Setups mit eigener Domain — Caddy ist die einfachste Variante (config-as-code, Let’s-Encrypt automatisch):\napp.rapport.studio.ch { reverse_proxy localhost:8080 } api.rapport.studio.ch { reverse_proxy localhost:8000 } In .env dann:\nSITE_URL=https://app.rapport.studio.ch API_EXTERNAL_URL=https://api.rapport.studio.ch Alternativ über Nginx Proxy Manager mit Web-UI — siehe Troubleshooting.","setup-in-5-schritten#Setup in 5 Schritten":"","storage-belege-logos#Storage (Belege, Logos)":"docker compose exec storage tar -czf - /var/lib/storage \u003e storage-$(date +%Y%m%d).tar.gz","updates#Updates":"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.","voraussetzungen#Voraussetzungen":"OS Container-Runtime Linux (Ubuntu 22.04+, Debian 12+, …) Docker Engine + Compose v2 macOS (Mac Mini etc.) 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.\nPlus: ein DNS-Name für TLS (z. B. rapport.studio.ch), und optional ein Reverse-Proxy wie Nginx Proxy Manager oder Caddy .","wann-brauchst-du-rapport-server#Wann brauchst du Rapport Server?":"Szenario Lösung Ein Mensch, ein Mac Desktop-App reicht — 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.","was-kostet-das#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#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."},"title":"Server"}}