mirror of
https://github.com/block/buzz.git
synced 2026-08-18 06:50:31 +02:00
Remove all event buffering from the relay client on both platforms so unread badges appear the instant a WebSocket event arrives. Desktop: remove MessageChannel-based event buffer from relayClientSession.ts — handleEvent now calls subscription.onEvent() directly. Mobile: remove Timer-based 16ms event buffer from relay_session.dart — _handleEvent now calls liveSub.onEvent() directly with inline dedup. Add KIND_STREAM_MESSAGE_V2 (40002) to CHANNEL_EVENT_KINDS on desktop and channelEventKinds on mobile so rich-format messages trigger instant badge updates instead of waiting for the 60-second polling refetch. Also includes NIP-RS cross-device read state sync (useReadStateSync hook on desktop, ReadStateSyncNotifier on mobile), read state seeding on first load, and a sync toggle in settings. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Sprout Mobile
Flutter mobile client for Sprout.
Setup
cd mobile
flutter pub get
Run
flutter run
Checks
dart format --output=none --set-exit-if-changed .
flutter analyze
flutter test
Or from the repo root: just mobile-check and just mobile-test.
Architecture
lib/
├── main.dart # Entry point, Riverpod bootstrap
├── app.dart # MaterialApp with theme
├── shared/
│ └── theme/ # Catppuccin light/dark, spacing tokens, extensions
└── features/
└── home/ # Placeholder home surface
- State management: Riverpod + Hooks (
HookConsumerWidget) - Theme: Catppuccin Latte (light) / Macchiato (dark) — matches desktop
- Spacing:
Gridtokens for consistent spacing - Linting:
flutter_lints+riverpod_lintviacustom_lint - Feature isolation: No cross-feature imports except
shared/