mobile bluesky app made with flutter lazurite.stormlightlabs.org/
mobile bluesky flutter
at main 10 kB view raw
1*roadmap.txt* Material You (Flutter/Dart) Bluesky Client 2 3================================================================================ 4O. Hardening (mobile) *bsky-O* 5================================================================================ 6 7Phase 1: Code Quality and Architecture 8- [x] Feature architecture standardization: 9 - [x] Audit all features for missing domain/infrastructure/application 10 layers 11 - [x] Refactor features missing layers (priority: auth, settings, 12 profile, search, thread) 13 - [x] Document architecture patterns in doc/architecture.md 14 - [x] Establish clear guidelines for layer responsibilities 15 - [x] Document testing patterns in doc/testing.md 16- [ ] Type safety improvements: 17 - Use freezed for critical models 18 - Add typed JSON parsing where appropriate 19- [x] Error handling standardization: 20 - Define standard error types for common failures (network, auth, 21 validation) 22 - Standardize error display messages (no raw .toString() in UI) 23 - Document error handling patterns in doc/errors.md 24 - Add error handling tests 25 26Phase 2: Performance Optimization 27- [ ] Performance: 28 - Decide on image caching strategy 29 - List virtualization sanity checks (ListView.builder usage) 30 - Profile critical paths with Flutter DevTools 31 - Optimize animation controller usage in lists (skeleton widgets) 32 - Memory leak detection (especially in stateful widgets) 33- [ ] Network efficiency: 34 - Audit pagination cursor handling 35 - Review cache invalidation strategies 36 - Optimize background sync frequencies 37 38Phase 3: Quality Assurance 39- [ ] Test coverage: 40 - Achieve >95% coverage target across all features 41 - Add missing integration tests (notifications grouping, DMs outbox) 42 - Add E2E tests for critical flows 43 - Widget test coverage for all custom widgets 44- [ ] Accessibility: 45 - Semantic labels for all interactive elements 46 - Dynamic type support and testing 47 - Contrast ratio checks (WCAG AA compliance) 48 - Screen reader testing on iOS and Android 49 - Keyboard navigation testing (tab focus order) 50- [ ] Scroll performance tests: 51 - Sanity test on mid-range Android emulator profile 52 - iOS scroll performance validation 53 - Measure frame render times under load 54- [ ] Observability: 55 - [x] Structured logging framework 56 - [ ] Crash reporting integration (Sentry/Firebase Crashlytics) 57 - [ ] Performance monitoring hooks 58 - [ ] Analytics event tracking foundation 59 60Phase 4: Security and Moderation 61- [ ] Security audit: 62 - Review secure storage usage (credentials, tokens) 63 - Validate input sanitization (XSS prevention) 64 - Audit network request security (HTTPS enforcement) 65 - Review dependency vulnerabilities 66- [ ] Moderation basics: 67 - Respect labels/filters returned by AppView/PDS 68 - Hide/blur content based on moderation labels 69 - User-configurable content filters 70 - Block/mute functionality 71 72Tests: 73- [ ] Scroll perf sanity test on mid-range Android emulator profile 74- [ ] iOS scroll performance validation 75- [ ] A11y audit checklist pass 76- [ ] Security audit checklist pass 77- [ ] Database migration tests (upgrade, rollback, data preservation) 78- [ ] Error handling integration tests 79- [ ] Memory leak detection tests 80- [ ] Network failure resilience tests 81 82Deliverables: 83- [ ] Mobile app feels stable and responsive for daily use 84- [ ] All features follow consistent architecture patterns 85- [ ] Database migration strategy ready for production 86- [ ] Type-safe codebase with minimal unsafe casts 87- [ ] Comprehensive error handling with user-friendly messages 88- [ ] Security best practices validated 89- [ ] Accessibility requirements met (WCAG AA) 90- [ ] Performance benchmarks passing 91- [ ] Feature parity with official BlueSky app 92 93================================================================================ 94Initial Release (Lazurite-0.1.0-alpha) 95================================================================================ 96 97*todo* 98 99================================================================================ 100P. Smart folders (local-only saved views) *bsky-P* 101================================================================================ 102 103Definition: 104- A smart folder is a saved query over cached posts + local metadata. 105- It never fetches from network by itself; it organizes what’s already cached. 106 107Tasks: 108- [ ] Drift tables: 109 - smart_folders (name, sortMode) 110 - smart_folder_rules (type, payloadJson) 111 - smart_folder_items materialization 112- [ ] Rule engine (MVP rule types): 113 - author allow/deny (DIDs) 114 - keyword include/exclude (text) 115 - has media / has link 116 - bookmarked only 117 - exclude replies / replies only 118- [ ] UI: 119 - create/edit folder 120 - folder list and folder detail view 121 122Tests: 123- [ ] Rule evaluation tests against fixture posts. 124- [ ] Query performance test with N=10k cached posts. 125 126Deliverables: 127- "Saved views" that feel like feeds, entirely local and fast. 128 129================================================================================ 130Q. Desktop pass *bsky-Q* 131================================================================================ 132 133Tasks: 134- [ ] Responsive layout: 135 - multi-column (timeline + thread) for wide screens 136- [ ] Keyboard shortcuts: 137 - navigate, like, repost, reply, new draft 138- [ ] Storage: 139 - confirm Drift backend performance on desktop targets 140- [ ] Window behaviors: 141 - restore last route, remember split pane sizes 142- [ ] ThemeInspectorPane with role inspector in Settings 143 - Split pane theme inspector showing multiple components 144 - Computed role display (surfaceContainerLow, outlineVariant values) 145- [ ] Composer Keyboard shortcuts: 146 - [ ] Ctrl/Cmd+N to open composer 147 - [ ] Esc to cancel composer 148 - [ ] Ctrl/Cmd+Enter to publish 149Tests: 150- [ ] Desktop smoke tests: app boots, auth works, DB works. 151 152Deliverables: 153- Desktop build that is genuinely usable (not just "it runs"). 154 155================================================================================ 156R. Push Notification Backend *bsky-R* 157================================================================================ 158 159Context: 160- Bluesky does NOT send push notifications directly to third-party clients 161- app.bsky.notification.registerPush forwards signed requests to your backend 162- Backend must validate signatures and relay to FCM/APNs 163 164Tasks: 165- [ ] Local Notifications 166 - [ ] flutter_local_notifications integration 167 - [ ] Foreground notification banner 168 - [ ] Background notification display 169 - [ ] Deep link handling from notification tap 170 - [ ] Platform-specific configuration (Android channels, iOS presentation) 171- [ ] Backend service: 172 - POST /register-device (store device token with user DID) 173 - POST /push-notification (receive signed notifications from Bluesky) 174 - POST /unregister-device (remove token on logout) 175 - Validate Bluesky signatures using public key 176 - Queue and batch push sends 177 - Rate limiting and error handling 178- [ ] FCM/APNs integration: 179 - FCM configuration for Android 180 - APNs configuration for iOS 181 - Handle token refresh and invalidation 182- [ ] Client integration: 183 - Generate FCM/APNs tokens on app start 184 - Register tokens via app.bsky.notification.registerPush 185 - Include platform identifier (fcm/apns) and service endpoint 186 - Re-register on token refresh 187 - Unregister on logout 188- [ ] Infrastructure: 189 - Deploy backend (AWS Lambda, Cloud Functions, etc.) 190 - Database for device token storage 191 - Monitoring and alerting 192 - Delivery metrics tracking 193 194Tests: 195- [ ] Backend: signature validation, token storage, FCM/APNs send 196- [ ] Client: token generation, registration, unregistration 197- [ ] Integration: end-to-end push delivery from Bluesky → backend → device 198 199Deliverables: 200- Push notifications working end-to-end 201- Backend service deployed and monitored 202- Token management robust across app lifecycle 203 204================================================================================ 205Parking Lot *bsky-plot* 206================================================================================ 207 208Tasks: 209- [ ] Composer Analytics events: 210 - [ ] Composer opened 211 - [ ] Draft saved 212 - [ ] Post published 213 - [ ] Media attached 214 - [ ] Publish failed 215- [x] DM Accessibility 216 - [x] screen reader support (semantic labels) 217 - [ ] keyboard navigation (Cmd/Ctrl+Enter to send) 218- [ ] DM Integration tests: 219 - [ ] fetch convos → display → tap → open detail 220 - [ ] compose → send → outbox → server → display 221 - [ ] send offline → queue → network restore → deliver 222 - [ ] receive message → display → mark read → sync 223 - [ ] message request → accept → move to main list 224- [ ] DM Offline scenarios: 225 - [ ] compose offline, send when online, display cached 226- [ ] DevTools Write Mode (Triple-Gated): 227 - [ ] Settings toggle: "Enable record editing (dangerous)" 228 - [ ] Biometric/device auth required before enabling 229 - [ ] RecordEditorPage: JSON text editor with validation 230 - [ ] com.atproto.repo.createRecord: create new records 231 - [ ] com.atproto.repo.putRecord: update existing records 232 - [ ] com.atproto.repo.deleteRecord: delete with typed confirmation 233 - [ ] (Phase 9) Bookmarks Screen (View Saved Posts) 234 - [ ] Diff preview for updates 235 - [ ] Batch operations UI: com.atproto.repo.applyWrites with review 236 - [ ] Security test: record editing disabled when gates are off 237 - [ ] Security test: cannot edit other users' repos 238- [ ] (Phase 9) Muted Words/Filters 239Tests: 240- [ ] System theme: follows OS brightness changes 241- [ ] Multi-device: preference changes merge correctly 242- [ ] Offline queue: preference updates retry on network restoration