Rendered from icon.svg using qlmanage + sips + iconutil on macOS.
Required by electron-builder for all three platforms.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
electron-builder auto-detects CI and tries to publish to a release,
requiring a repository field and failing when none is found.
- Add repository and author fields to desktop/package.json
- Pass --publish never to electron-builder in the workflow so it builds
installers without attempting any publish step
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Messaging:
- Optimistic UI: message appears instantly in sender's view on send
- Skip WS relay-back of own messages to avoid duplicates
- Fix sent_at field name mismatch (sentAt → sent_at fallback)
Admin portal:
- /admin route: list all users, storage used vs quota, file count
- Inline-edit per-user storage quota (MB) and admin flag
- Stats header: total users, total storage, total files
- is_admin + storage_quota_mb columns added to users table
- Login response now includes isAdmin; sidebar shows Admin link for admins
- requireAdmin middleware on all /admin/* routes
Electron desktop app (desktop/):
- BrowserWindow with native title bar, system tray, hide-to-tray on close
- First-run setup dialog to configure self-hosted server URL
- Persists server URL via electron-store
- Tray menu: Open, Change server URL, Quit
- IPC: showNotification for future native push notifications
- electron-builder config for macOS (DMG), Windows (NSIS), Linux (AppImage)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>