8 Commits

Author SHA1 Message Date
karim gabriele varano 9f9a7d2cae Einstellungen: Tab «Updates & Support» + Bump auf 0.7.0
Neuer Settings-Tab mit manueller Update-Suche (ignoriert die Skip-
Markierung), Zeitstempel der letzten Prüfung, Link zur Dokumentation
auf rapport.kgva.ch. Update-Helper sind in src/utils/updater.js
zentralisiert; UpdateNotifier schreibt jetzt auch beim Auto-Check
das Datum der letzten Prüfung mit.

Version 0.6.0 → 0.7.0 in package.json, tauri.conf.json, Cargo.toml
und allen UI-Referenzen. Changelog-Eintrag 0.7 mit den drei
Highlights dieses Releases ergänzt.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-16 01:24:29 +02:00
karim gabriele varano 4b9bc7dd20 System-Tray: Quick-Access-Menü, Hide-on-Close, Cmd+Q beendet
Tray-Icon in der macOS-Menüleiste mit Linksklick zum Fokussieren und
Rechtsklick-Menü: Rapport öffnen, Dashboard, Zeiterfassung, Projekte,
Buchhaltung, Einstellungen, Beenden. Menü-Klicks senden ein
rapport:navigate-Event ans Frontend.

Der rote Schliessen-Button versteckt nur — die App läuft im Hintergrund
weiter. Cmd+Q (RunEvent::ExitRequested) und der Tray-Quit-Eintrag
setzen ein is_quitting-Flag und beenden die App wirklich.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-16 01:22:29 +02:00
karim gabriele varano 1ce2ca4399 App-Updater: Tauri-Plugin mit Auto-Check und Skip-Funktion
Beim App-Start wird automatisch geprüft, ob bei git.kgva.ch/karim/RAPPORT
eine neue Version verfügbar ist. Update-Modal mit Release-Notes und drei
Aktionen: Jetzt installieren (Download → Signaturprüfung → Neustart),
Später, oder Diese Version überspringen (in localStorage gemerkt).

Signing via minisign-Keypair unter ~/.tauri/rapport_updater.key,
Public Key im Tauri-Config. Release-Script scripts/release.sh baut,
signiert und erzeugt latest.json für Gitea.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-16 01:19:25 +02:00
karim gabriele varano e345602dc2 macOS: Ad-hoc Signing für Bundle aktivieren
Beseitigt die "App ist beschädigt"-Meldung beim ersten Start unsignierter
Downloads. Nutzer können die App nun via Rechtsklick → Öffnen oder über
Systemeinstellungen → Datenschutz freigeben, ohne xattr-Workaround.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-14 03:18:02 +02:00
karim gabriele varano 4aac21e3e9 UI: Spinner statt LADEN-Text, Pills unter Header in Einstellungen
- ViewFallback: dezenter, zentrierter Spinner statt kaum lesbarem
  "LADEN…"-Text zwischen lazy-loaded Views
- Einstellungen: Pill-Navigation jetzt konsistent unter dem Header
  (zuvor lagen die Pills bei allen Tabs ausser "Mein Profil" darüber)

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-14 03:13:58 +02:00
karim 7d069dc367 Delete public/erste-schritte.html 2026-05-13 01:47:21 +02:00
karim gabriele varano 38591ecc92 README: technische Build- und Setup-Dokumentation
Ersetzt den Vite-Template-Default durch eine entwicklerorientierte Referenz:
Voraussetzungen, Dev-/Build-Befehle, Projektstruktur, Sicherheits-Notizen
und Release-Workflow.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-13 01:19:59 +02:00
karim gabriele varano 8de93ff27f Rapport 0.6 — Initial Public Release
Sicherheits-Hardening
- Passwort-Hashing mit PBKDF2 (SHA-256, 100k Iterationen) inkl. transparenter
  Migration bestehender Klartext-Passwörter beim ersten Login
- Login Brute-Force-Schutz (5 Fehlversuche → 60s Lockout), Constant-Time-Compare,
  Mindestpasswortlänge 8 Zeichen
- HTML-Sanitizer für Brieftexte (Allowlist, entfernt javascript:/data:/vbscript:-URLs,
  Event-Handler, Script-Tags; rel=noopener für target=_blank)
- Datenexport entfernt Legacy-Klartextpasswörter (Hashes bleiben)
- Kryptografische IDs via crypto.randomUUID statt Math.random
- sessionStorage speichert keine Credentials mehr

GUI & Performance
- Code-Splitting pro View via React.lazy + Suspense (Initial-Bundle 86 KB gzipped)
- swissqrbill als lokale Dependency — QR-Rechnungen offline-fähig
- Spesenbelege (Bild/PDF) direkt in der Tageserfassung mit Bildkomprimierung
- Avatar-Upload: 256px-Skalierung + JPEG-Kompression, Typprüfung
- Über-Rapport-Modal, einheitliche Bearbeiten-Icons, Pinnwand-Kategorien als Pills

Bug-Fixes
- Auto-überfällig-Routine läuft nur noch einmal pro Tag (verhindert Re-Render-Loop)

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-13 01:16:26 +02:00
2 changed files with 5 additions and 17 deletions
-11
View File
@@ -1,11 +0,0 @@
{
"version": "0.7.0",
"notes": "Rapport 0.7.0",
"pub_date": "2026-05-16T00:01:33Z",
"platforms": {
"darwin-aarch64": {
"signature": "dW50cnVzdGVkIGNvbW1lbnQ6IHNpZ25hdHVyZSBmcm9tIHRhdXJpIHNlY3JldCBrZXkKUlVSUjV0czVoWDR4NGxjZjNKU2k0bGhOOUdmbmM2ejdGS3BHTWhuM09iQ3VyaWtEc2twNlA5UjcxN3cxQ3M4MktoQ2o2RHVsSVAvbWdORWZodm5Hc20vZlJPa2g5V0FyTHd3PQp0cnVzdGVkIGNvbW1lbnQ6IHRpbWVzdGFtcDoxNzc4ODg5NjkzCWZpbGU6UkFQUE9SVCBQUkUtUkVMRUFTRS5hcHAudGFyLmd6CmVzUkZmZkVlZ3V6KzhaMVpxYTZaRlFaZVJQZzVoQldNbUpuQlZFdkhWaHVoTCtkVndCaytQMGVOSkFZVHB4UTcvb0FReWJVMW1nd0xXMTlKTkRwL0FRPT0K",
"url": "https://git.kgva.ch/karim/RAPPORT/releases/download/0.7.0/RAPPORT%20PRE-RELEASE.app.tar.gz"
}
}
}
+5 -6
View File
@@ -42,9 +42,9 @@ case "$ARCH" in
esac esac
echo "→ Build Rapport $VERSION ($PLATFORM_KEY)" echo "→ Build Rapport $VERSION ($PLATFORM_KEY)"
TAURI_SIGNING_PRIVATE_KEY="$(cat "$KEY_PATH")" \ TAURI_SIGNING_PRIVATE_KEY_PATH="$KEY_PATH" \
TAURI_SIGNING_PRIVATE_KEY_PASSWORD="" \ TAURI_SIGNING_PRIVATE_KEY_PASSWORD="" \
npx tauri build npm run tauri build
BUNDLE_DIR="src-tauri/target/release/bundle/macos" BUNDLE_DIR="src-tauri/target/release/bundle/macos"
TAR_GZ=$(ls "$BUNDLE_DIR"/*.app.tar.gz 2>/dev/null | head -n1 || true) TAR_GZ=$(ls "$BUNDLE_DIR"/*.app.tar.gz 2>/dev/null | head -n1 || true)
@@ -56,10 +56,9 @@ if [ -z "$TAR_GZ" ] || [ ! -f "$SIG_FILE" ]; then
fi fi
ASSET_NAME=$(basename "$TAR_GZ") ASSET_NAME=$(basename "$TAR_GZ")
ASSET_URL_NAME=$(printf '%s' "$ASSET_NAME" | sed 's/ /%20/g')
SIGNATURE=$(cat "$SIG_FILE") SIGNATURE=$(cat "$SIG_FILE")
PUB_DATE=$(date -u +"%Y-%m-%dT%H:%M:%SZ") PUB_DATE=$(date -u +"%Y-%m-%dT%H:%M:%SZ")
DOWNLOAD_URL="$GITEA_REPO/releases/download/$VERSION/$ASSET_URL_NAME" DOWNLOAD_URL="$GITEA_REPO/releases/download/v$VERSION/$ASSET_NAME"
NOTES=${RELEASE_NOTES:-"Rapport $VERSION"} NOTES=${RELEASE_NOTES:-"Rapport $VERSION"}
@@ -86,8 +85,8 @@ echo " Platform: $PLATFORM_KEY"
echo " latest.json wurde im Repo-Root geschrieben." echo " latest.json wurde im Repo-Root geschrieben."
echo echo
echo "Nächste Schritte:" echo "Nächste Schritte:"
echo " 1) Auf Gitea Release mit Tag $VERSION erstellen und folgende Assets hochladen:" echo " 1) Auf Gitea Release v$VERSION erstellen und folgende Assets hochladen:"
echo " - $ASSET_NAME" echo " - $ASSET_NAME"
echo " - (optional) DMG für Erstinstallation" echo " - (optional) DMG für Erstinstallation"
echo " 2) latest.json committen + auf main pushen:" echo " 2) latest.json committen + auf main pushen:"
echo " git add latest.json && git commit -m 'Release $VERSION' && git push origin main" echo " git add latest.json && git commit -m 'Release v$VERSION' && git push origin main"