mobile bluesky app made with flutter lazurite.stormlightlabs.org/
mobile bluesky flutter
3
fork

Configure Feed

Select the types of activity you want to include in your feed.

docs: expand social graph section in roadmap

+71 -36
+71 -36
doc/roadmap.txt
··· 55 55 ================================================================================ 56 56 57 57 Summary: Identity bootstrap and OAuth session flows are fully wired, delivering 58 - secure sign-in, protected routing, and refreshed sessions for every authenticated 59 - account. 58 + secure sign-in, protected routing, and refreshed sessions for every 59 + authenticated account. 60 60 61 61 ================================================================================ 62 62 E. Timeline + thread + core cache (Drift) *bsky-E* ··· 74 74 - app.bsky.actor.getProfile (GET) 75 75 - app.bsky.feed.getAuthorFeed (GET) 76 76 - app.bsky.feed.searchPosts (GET) 77 + - app.bsky.graph.getFollowers (GET) - needed for followers list 78 + - app.bsky.graph.getFollows (GET) - needed for following list 79 + - app.bsky.graph.follow (POST) - needed for follow functionality 80 + - app.bsky.graph.unfollow (POST) - needed for unfollow functionality 77 81 78 82 Tasks: 79 - - [ ] Profile screen: fetch + cache profile + author feed, cursor paging. 80 - - [ ] Search screen: query -> paged results; store recent searches (local). 83 + - [x] Profile screen: fetch + cache profile + author feed, cursor paging. 84 + - [x] Search screen: query -> paged results; store recent searches (local). 81 85 - [ ] Shared hydration: ensure embeds/media are rendered consistently. 82 86 - [ ] Add routes 83 - - [ ] /search?q=<query> (SearchResultsPage) 84 - - [ ] /search/t/:postKey (ThreadPage reuse) 85 - - [ ] /search/u/:did (ProfilePage) 86 - - [ ] /me (MePage becomes ProfilePage for self) 87 - - [ ] /home/u/:did 88 - - [ ] /notifs/u/:did 89 - - [ ] Widgets 90 - - [ ] ProfileHeader 91 - - [ ] FollowButton (disabled if read-only browsing) 92 - - [ ] SearchBar (Material 3) 93 - - [ ] RecentSearchChips 94 - - [ ] ActorRow (for people results; if you add actor search) 87 + - [ ] /search?q=<query> 88 + (SearchScreen has initialQuery but router doesn't wire query params) 89 + - [x] /search/t/:uri 90 + - [x] /search/u/:did 91 + - [x] /home/u/:did 92 + - [x] /notifs/u/:did 93 + - [x] Widgets 94 + - [x] ProfileHeader 95 + - [x] FollowButton (disabled if read-only browsing) 96 + - [ ] Implement follow functionality 97 + - [x] SearchBar (Material 3) 98 + - [x] RecentSearchChips 99 + - [x] ActorRow 95 100 - [ ] Screens 96 - - [ ] ProfilePage (full): 97 - - header (avatar, bio, counts) 98 - - tabs (Posts / Replies optional / Media optional) 99 - - [ ] SearchPage (full): 100 - - search input 101 - - recent searches list 102 - - results list page (or same screen w/ state) 101 + - [ ] ProfilePage (partial): 102 + - [x] header (avatar, bio, counts) 103 + - [ ] tabs (Posts / Replies optional / Media optional) 104 + - [x] SearchPage (full): 105 + - [x] search input 106 + - [x] recent searches list 107 + - [x] results list page 103 108 - [ ] Follows/Followers (full): 104 - - FollowersPage, FollowingPage 109 + - [ ] FollowersPage 110 + - [ ] FollowingPage 111 + - [ ] Social Graph: 112 + - [ ] Follow/unfollow infrastructure: 113 + - [ ] Implement getFollowers endpoint in ProfileRepository 114 + - [ ] Implement getFollows endpoint in ProfileRepository 115 + - [ ] Implement follow/unfollow mutations 116 + - [ ] Wire FollowButton to follow/unfollow mutations 117 + - [ ] Add following status to ProfileData domain model 118 + - [ ] Cache relationship state in Drift (follows table) 119 + - [ ] Followers screen: 120 + - [ ] Create FollowersPage with cursor pagination 121 + - [ ] Add route /profile/followers/:did 122 + - [ ] Wire ProfileHeader follower stat button to FollowersPage 123 + - [ ] Reuse ActorRow widget for follower list 124 + - [ ] Following screen: 125 + - [ ] Create FollowingPage with cursor pagination 126 + - [ ] Add route /profile/following/:did 127 + - [ ] Wire ProfileHeader following stat button to FollowingPage 128 + - [ ] Reuse ActorRow widget for following list 129 + - [ ] Profile tabs: 130 + - [ ] Add TabBar to ProfilePage (Posts / Replies / Media) 131 + - [ ] Use existing ProfilePostsTab widget 132 + - [ ] Implement RepliesTab (filter author feed for replies) 133 + - [ ] Implement MediaTab (filter author feed for posts with images) 134 + - [ ] Polish: 135 + - [ ] Wire /search?q=<query> query parameter in router 136 + - [ ] Extract shared PostCard component 137 + (deduplicate _PostCard and _SearchResultCard) 138 + - [ ] Ensure consistent embed/media rendering across feeds 139 + 105 140 Tests: 106 - - [ ] Profile caching: refresh merges, does not duplicate feed items. 107 - - [ ] Search paging: stable cursor behavior and local persistence. 141 + - [x] Profile caching: refresh merges, does not duplicate feed items. 142 + - [x] Search paging: stable cursor behavior and local persistence. 143 + - [ ] Follow/unfollow: mutations update cache and UI state. 144 + - [ ] Followers/following pagination: cursor stability and cache behavior. 145 + - [ ] Profile tabs: switching tabs preserves scroll position. 108 146 109 147 Deliverables: 110 - - Profile + author feed + search posts shipped. 111 - - Search is a first-class workflow with deep-linkable query params. 148 + - [x] Profile + author feed + search posts shipped. 149 + - [ ] Search is a first-class workflow with deep-linkable query params 150 + (deep links exist, query param routing incomplete). 151 + - [ ] Social graph complete: follow/unfollow, followers/following lists. 152 + - [ ] Profile tabs with Posts/Replies/Media navigation. 112 153 113 154 ================================================================================ 114 155 G. Composer + local drafts + publish pipeline *bsky-G* ··· 143 184 - Offline drafts + reliable posting with media upload support. 144 185 145 186 ================================================================================ 146 - H. Notifications *bsky-H* 187 + H. Notifications *bsky-H* 147 188 ================================================================================ 148 189 149 190 Endpoints: ··· 162 203 - Notifications shipped with consistent navigation. 163 204 164 205 ================================================================================ 165 - I. Smart folders (local-only saved views) *bsky-I* 206 + I. Smart folders (local-only saved views) *bsky-I* 166 207 ================================================================================ 167 208 168 209 Definition: ··· 273 314 274 315 Deliverables: 275 316 - Desktop build that is genuinely usable (not just "it runs"). 276 - 277 - ================================================================================ 278 - Parking lot (Milestones A–D) 279 - ================================================================================ 280 - - Milestone D: Add dev fallback via com.atproto.server.createSession (app password, flagged build flavor). 281 - - Milestone D: Enforce redirect() rules so /notifs, /dms, and /compose require an authenticated session.