3 Commits

Author SHA1 Message Date
Vojtěch Maršál 7f695b0786 Keep notifications alive when the app is closed (foreground service)
Adds LiveSocketService, a started foreground service that holds the /ws
WebSocket open after the app is swiped away and raises system notifications
for incoming alerts and messages while backgrounded. Shown as a low-priority
ongoing "Listening" notification (channel "Live updates").

- Started/stopped together with the push toggle (Profile) and on login/logout.
- foregroundServiceType=dataSync (+ FOREGROUND_SERVICE_DATA_SYNC permission).
- START_STICKY + onTaskRemoved no-op so it survives task removal; the OS may
  still kill it on explicit Force-Stop or reboot-until-reopened.
- MainShell no longer posts notifications itself (the service owns that) and
  just keeps the bell count fresh; the poll remains as a catch-up.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-13 15:03:52 +02:00
Vojtěch Maršál 9e2dd40af0 Live updates over WebSocket + clickable links
- Connect to the server's /ws multiplexed socket (chat/notifications/board) for
  the whole authenticated session. Auth rides the existing cookie jar; no server
  changes needed (the server allows clients that send no Origin header).
- Chat now updates live: ConversationViewModel merges messages pushed over the
  socket for the open conversation (no more leaving/re-entering to see replies).
- Notifications are now real-time in-app (bell updates instantly); when the app is
  backgrounded, incoming alerts and messages raise a system notification via the
  same socket. The 15-min WorkManager poll remains as a catch-up safety net.
- Links are now clickable in chat messages, task comments, and descriptions via a
  new RichText component (handles <a> anchors and bare http/www URLs).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-13 14:50:24 +02:00
Vojtěch Maršál d0b1529c3f Initial commit: BountyBoard Android client
Native Kotlin + Jetpack Compose (Material 3) client for the BountyBoard
platform. Cookie-session + CSRF auth with a configurable base URL, the full
role-based feature set (admin / consultant / developer), local + OIDC SSO
sign-in, and background push notifications (WorkManager poll) for alerts and
messages. Bundles the app's editorial "ledger" design system and the original
Fraunces / Schibsted Grotesk / Spline Sans Mono typefaces.

Includes a prebuilt debug APK (BountyBoard-debug.apk) for side-loading.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-13 14:31:31 +02:00