*roadmap.txt* Material You (Flutter/Dart) Bluesky Client ================================================================================ O. Hardening (mobile) *bsky-O* ================================================================================ Phase 1: Code Quality and Architecture - [x] Feature architecture standardization: - [x] Audit all features for missing domain/infrastructure/application layers - [x] Refactor features missing layers (priority: auth, settings, profile, search, thread) - [x] Document architecture patterns in doc/architecture.md - [x] Establish clear guidelines for layer responsibilities - [x] Document testing patterns in doc/testing.md - [ ] Type safety improvements: - Use freezed for critical models - Add typed JSON parsing where appropriate - [x] Error handling standardization: - Define standard error types for common failures (network, auth, validation) - Standardize error display messages (no raw .toString() in UI) - Document error handling patterns in doc/errors.md - Add error handling tests Phase 2: Performance Optimization - [ ] Performance: - Decide on image caching strategy - List virtualization sanity checks (ListView.builder usage) - Profile critical paths with Flutter DevTools - Optimize animation controller usage in lists (skeleton widgets) - Memory leak detection (especially in stateful widgets) - [ ] Network efficiency: - Audit pagination cursor handling - Review cache invalidation strategies - Optimize background sync frequencies Phase 3: Quality Assurance - [ ] Test coverage: - Achieve >95% coverage target across all features - Add missing integration tests (notifications grouping, DMs outbox) - Add E2E tests for critical flows - Widget test coverage for all custom widgets - [ ] Accessibility: - Semantic labels for all interactive elements - Dynamic type support and testing - Contrast ratio checks (WCAG AA compliance) - Screen reader testing on iOS and Android - Keyboard navigation testing (tab focus order) - [ ] Scroll performance tests: - Sanity test on mid-range Android emulator profile - iOS scroll performance validation - Measure frame render times under load - [ ] Observability: - [x] Structured logging framework - [ ] Crash reporting integration (Sentry/Firebase Crashlytics) - [ ] Performance monitoring hooks - [ ] Analytics event tracking foundation Phase 4: Security and Moderation - [ ] Security audit: - Review secure storage usage (credentials, tokens) - Validate input sanitization (XSS prevention) - Audit network request security (HTTPS enforcement) - Review dependency vulnerabilities - [ ] Moderation basics: - Respect labels/filters returned by AppView/PDS - Hide/blur content based on moderation labels - User-configurable content filters - Block/mute functionality Tests: - [ ] Scroll perf sanity test on mid-range Android emulator profile - [ ] iOS scroll performance validation - [ ] A11y audit checklist pass - [ ] Security audit checklist pass - [ ] Database migration tests (upgrade, rollback, data preservation) - [ ] Error handling integration tests - [ ] Memory leak detection tests - [ ] Network failure resilience tests Deliverables: - [ ] Mobile app feels stable and responsive for daily use - [ ] All features follow consistent architecture patterns - [ ] Database migration strategy ready for production - [ ] Type-safe codebase with minimal unsafe casts - [ ] Comprehensive error handling with user-friendly messages - [ ] Security best practices validated - [ ] Accessibility requirements met (WCAG AA) - [ ] Performance benchmarks passing - [ ] Feature parity with official BlueSky app ================================================================================ Initial Release (Lazurite-0.1.0-alpha) ================================================================================ Core Composer Enhancement - [ ] Rich text composer with link unfurling - [ ] Video upload and playback support - [ ] GIF support integration - [ ] Thread composition (1/x posting) - [ ] Post scheduling functionality - [ ] Language tagging for posts - [ ] Enhanced mention resolution and link previews Complete Notifications System - [ ] Full notification list UI implementation - [ ] Notification grouping and batch operations - [ ] Unread count management and badges - [ ] Mark as seen service integration - [ ] Notification filtering by type - [ ] Pull-to-refresh for notifications - [ ] Notification settings screen Direct Messages Implementation - [ ] Conversation list UI - [ ] Message thread view with pagination - [ ] Send/receive text messages - [ ] Message requests and accept flow - [ ] Read receipts and message states - [ ] Offline message queue (outbox worker) - [ ] DM accessibility and screen reader support - [ ] Message history sync Settings & Preferences Completion - [ ] Complete settings screen implementation - [ ] Theme settings (light/dark/system) with Material You - [ ] Content moderation settings and label filters - [ ] Adult content toggle and custom labelers - [ ] Muted words configuration - [ ] Feed and thread preferences - [ ] About screen and app information - [ ] Data usage settings for media Profile & Social Features - [ ] Complete profileViewDetailed implementation - [ ] Pinned posts display and management - [ ] Pronouns, website, and account creation date - [ ] Mutual followers (known followers) display - [ ] Bookmark posts UI implementation - [ ] Share to external apps functionality - [ ] Enhanced user reporting flow Content Moderation Integration - [ ] Content label filtering integration with feeds - [ ] Mute/Block lists (moderation lists) support - [ ] Thread muting UI and management - [ ] Enhanced content warnings display - [ ] Custom labeler subscription - [ ] Advanced moderation tools Lists & Starter Packs - [ ] User-curated lists creation and management - [ ] List feeds and browsing - [ ] Starter pack discovery and sharing - [ ] Join via starter pack functionality - [ ] List privacy settings and permissions - [ ] List-based feed filtering Media & Accessibility Enhancement - [ ] Fullscreen image viewer implementation - [ ] Image quality and compression settings - [ ] Dynamic type support and testing - [ ] High contrast mode implementation - [ ] Reduced motion preferences - [ ] Complete screen reader support - [ ] WCAG AA compliance validation Search & Discovery - [ ] Hashtag search verification and enhancement - [ ] Trending topics implementation - [ ] Search suggestions and autocomplete - [ ] Advanced search filters - [ ] Search history management Platform Integration & Polish - [ ] Home screen widgets (iOS/Android) - [ ] Share sheet extension implementation - [ ] Deep link handling improvements - [ ] App performance optimization - [ ] Crash reporting integration - [ ] Analytics event tracking foundation **Release Criteria**: - [ ] All critical parity features implemented - [ ] >95% test coverage across new features - [ ] Accessibility audit passed (WCAG AA) - [ ] Performance benchmarks met - [ ] Security audit completed - [ ] Beta testing feedback incorporated - [ ] Documentation updated for all new features **Quality Gates**: - [ ] Feature completeness review - [ ] User acceptance testing - [ ] Performance regression testing - [ ] Security vulnerability scan - [ ] Accessibility compliance check - [ ] Cross-platform compatibility validation ================================================================================ P. Smart folders (local-only saved views) *bsky-P* ================================================================================ Definition: - A smart folder is a saved query over cached posts + local metadata. - It never fetches from network by itself; it organizes what’s already cached. Tasks: - [ ] Drift tables: - smart_folders (name, sortMode) - smart_folder_rules (type, payloadJson) - smart_folder_items materialization - [ ] Rule engine (MVP rule types): - author allow/deny (DIDs) - keyword include/exclude (text) - has media / has link - bookmarked only - exclude replies / replies only - [ ] UI: - create/edit folder - folder list and folder detail view Tests: - [ ] Rule evaluation tests against fixture posts. - [ ] Query performance test with N=10k cached posts. Deliverables: - "Saved views" that feel like feeds, entirely local and fast. ================================================================================ Q. Desktop pass *bsky-Q* ================================================================================ Tasks: - [ ] Responsive layout: - multi-column (timeline + thread) for wide screens - [ ] Keyboard shortcuts: - navigate, like, repost, reply, new draft - [ ] Storage: - confirm Drift backend performance on desktop targets - [ ] Window behaviors: - restore last route, remember split pane sizes - [ ] ThemeInspectorPane with role inspector in Settings - Split pane theme inspector showing multiple components - Computed role display (surfaceContainerLow, outlineVariant values) - [ ] Composer Keyboard shortcuts: - [ ] Ctrl/Cmd+N to open composer - [ ] Esc to cancel composer - [ ] Ctrl/Cmd+Enter to publish Tests: - [ ] Desktop smoke tests: app boots, auth works, DB works. Deliverables: - Desktop build that is genuinely usable (not just "it runs"). ================================================================================ R. Push Notification Backend *bsky-R* ================================================================================ Context: - Bluesky does NOT send push notifications directly to third-party clients - app.bsky.notification.registerPush forwards signed requests to your backend - Backend must validate signatures and relay to FCM/APNs Tasks: - [ ] Local Notifications - [ ] flutter_local_notifications integration - [ ] Foreground notification banner - [ ] Background notification display - [ ] Deep link handling from notification tap - [ ] Platform-specific configuration (Android channels, iOS presentation) - [ ] Backend service: - POST /register-device (store device token with user DID) - POST /push-notification (receive signed notifications from Bluesky) - POST /unregister-device (remove token on logout) - Validate Bluesky signatures using public key - Queue and batch push sends - Rate limiting and error handling - [ ] FCM/APNs integration: - FCM configuration for Android - APNs configuration for iOS - Handle token refresh and invalidation - [ ] Client integration: - Generate FCM/APNs tokens on app start - Register tokens via app.bsky.notification.registerPush - Include platform identifier (fcm/apns) and service endpoint - Re-register on token refresh - Unregister on logout - [ ] Infrastructure: - Deploy backend (AWS Lambda, Cloud Functions, etc.) - Database for device token storage - Monitoring and alerting - Delivery metrics tracking Tests: - [ ] Backend: signature validation, token storage, FCM/APNs send - [ ] Client: token generation, registration, unregistration - [ ] Integration: end-to-end push delivery from Bluesky → backend → device Deliverables: - Push notifications working end-to-end - Backend service deployed and monitored - Token management robust across app lifecycle ================================================================================ Parking Lot *bsky-plot* ================================================================================ Tasks: - [ ] Composer Analytics events: - [ ] Composer opened - [ ] Draft saved - [ ] Post published - [ ] Media attached - [ ] Publish failed - [x] DM Accessibility - [x] screen reader support (semantic labels) - [ ] keyboard navigation (Cmd/Ctrl+Enter to send) - [ ] DM Integration tests: - [ ] fetch convos → display → tap → open detail - [ ] compose → send → outbox → server → display - [ ] send offline → queue → network restore → deliver - [ ] receive message → display → mark read → sync - [ ] message request → accept → move to main list - [ ] DM Offline scenarios: - [ ] compose offline, send when online, display cached - [ ] DevTools Write Mode (Triple-Gated): - [ ] Settings toggle: "Enable record editing (dangerous)" - [ ] Biometric/device auth required before enabling - [ ] RecordEditorPage: JSON text editor with validation - [ ] com.atproto.repo.createRecord: create new records - [ ] com.atproto.repo.putRecord: update existing records - [ ] com.atproto.repo.deleteRecord: delete with typed confirmation - [ ] (Phase 9) Bookmarks Screen (View Saved Posts) - [ ] Diff preview for updates - [ ] Batch operations UI: com.atproto.repo.applyWrites with review - [ ] Security test: record editing disabled when gates are off - [ ] Security test: cannot edit other users' repos - [ ] (Phase 9) Muted Words/Filters Tests: - [ ] System theme: follows OS brightness changes - [ ] Multi-device: preference changes merge correctly - [ ] Offline queue: preference updates retry on network restoration