Bump Vite 8, matrix-js-sdk, and related deps; fix immer/vanilla-extract imports for new majors. Replace blocking sync error dialog with background recovery on wake/offline, and disable Vite auto-open in dev. Add feature handoff documentation index.
3.0 KiB
3.0 KiB
Client chrome — handoff
Summary
App shell UI outside core chat: custom title bar (Electron), splash screen, welcome page, account switcher, update notifications, sync status, spec version warnings, and feature capability checks.
User-facing behavior
- Title bar: drag region, window controls, room title, account menu (desktop)
- Splash: loading spinner during client init
- Welcome page: first-run / empty state hints
- Account switcher: switch between logged-in accounts (if multi-session)
- Update notification: new version available (electron-updater)
- Feature check: block unsupported browsers
- Spec versions: warn on old homeserver
Architecture
ClientRoot → TitleBar + AccountSwitcher + children
SplashScreen during matrix init
WelcomePage on empty states
UpdateNotification component
FeatureCheck wraps App
SpecVersions in ClientRoot
Key files
| Path | Role |
|---|---|
cinny/src/app/components/title-bar/TitleBar.tsx |
Desktop title bar |
cinny/src/app/components/splash-screen/SplashScreen.tsx |
Splash |
cinny/src/app/pages/client/WelcomePage.tsx |
Welcome / download links |
cinny/src/app/components/account-switcher/AccountSwitcher.tsx |
Multi-account |
cinny/src/app/components/update-notification/UpdateNotification.tsx |
Auto-update UI |
cinny/src/app/pages/FeatureCheck.tsx |
Browser capability gate |
cinny/src/app/pages/client/SpecVersions.tsx |
HS version warning |
cinny/src/app/pages/client/SyncStatus.tsx |
Sync indicator |
cinny/src/app/pages/ConfigConfig.tsx |
Config load error UI |
cinny/src/app/components/ClientConfigLoader.tsx |
Load config.json |
Data model
| Key | Storage |
|---|---|
| Sessions | multi-account in sessions.ts |
| electron-store | window bounds (main process) |
Dependencies
- Electron IPC for window controls
electron-updaterfor updatesclientConfigJSON (homeserver default, hash router, etc.)
Integration points
- electron-shell: title bar IPC
- matrix-client: splash until sync ready
- authentication: account switcher sessions
Testing
Manual
- Desktop: minimize/maximize/close via title bar.
- Slow network: splash shows until ready.
- Trigger update check in dev (if configured).
- Unsupported browser: FeatureCheck message.
Automated
- None
Known issues & gotchas
- Title bar only on Electron — web uses browser chrome
- Welcome page links point to GitHub releases — verify URLs match your distribution (Gitea vs GitHub)
FeatureCheckmay block older WebViews on Android
Future work
- Unified status bar (sync + update + call status)
- macOS traffic lights styling
Related docs
Add your extra things here
- Title bar shows
Paarrotprefix + dynamic room/space title suffix ClientConfigLoaderreads public config — document config.json schema in client config handoff if split later