Skip to content

feat(mobile): star channels (Slack-style favorites)#863

Merged
wesbillman merged 1 commit into
mainfrom
brain/star-channels-mobile
Jun 4, 2026
Merged

feat(mobile): star channels (Slack-style favorites)#863
wesbillman merged 1 commit into
mainfrom
brain/star-channels-mobile

Conversation

@wesbillman
Copy link
Copy Markdown
Collaborator

@wesbillman wesbillman commented Jun 4, 2026

Star channels — mobile

Ports the desktop star-channels feature (#860) to mobile. Same model and behavior, mirroring the existing channel-mutes Flutter pattern.

Behavior

  • Star / Unstar from a channel's long-press action sheet (top item, above "Move to section").
  • A starred channel moves into a Starred section pinned at the top of the channel list and is removed from its normal group — Slack-style exclusivity (matches the desktop fix).
  • Star state syncs across devices and with desktop via NIP-78 (kind 30078, d-tag channel-stars, nip44-encrypted to self, last-writer-wins merge). Star a channel on desktop → it's starred on mobile, and vice-versa.

Screenshots

Long-press action sheet — Star channel (top item)

Star action sheet

After starring (general moves into a pinned Starred section and leaves the Channels list)

Starred section

Implementation

Mirrors channel_mutes/:

  • channel_stars/channel_stars_storage.dartChannelStarStore + mergeStores (per-channel max-updatedAt).
  • channel_stars/channel_stars_manager.dart — fetch/merge/subscribe/debounced-publish sync engine on d-tag channel-stars.
  • channel_stars/channel_stars_provider.dartchannelStarsProvider Notifier.
  • channels_page.dart — Starred section render (excluded from custom sections + default Channels) and the action-sheet toggle.

Scope

Stream channels v1 (same as desktop). Forums/DMs deferred.

Tests

  • flutter analyze: clean (no issues).
  • New channel_stars_storage_test.dart: 9 tests (parse/merge round-trips, last-writer-wins) — the coverage mobile mutes/sections never had.
  • Full mobile suite: 361 pass (1 pre-existing skip).
  • Manually verified on the iOS simulator (screenshots above): star → moves to Starred section, removed from Channels.

Port the desktop star-channels feature to mobile. Mirrors the
channel-mutes pattern: a per-channel flag with its own storage,
sync manager, and Riverpod provider.

- Star/Unstar from the channel long-press action sheet.
- A starred channel moves into a "Starred" section pinned at the top
  and is removed from its normal group — Slack-style exclusivity.
- State syncs across devices and with desktop via NIP-78 (kind 30078,
  d-tag channel-stars, nip44-encrypted to self, last-writer-wins merge).
- Adds a storage unit test (parse/merge round-trips).

Co-authored-by: Brain <21994759fc7a6fa6b965551d35cfd7897d262f2495467f2d78694ddcfa6a5c7e@sprout-oss.stage.blox.sqprod.co>
Signed-off-by: Wes <wesbillman@users.noreply.github.com>
@wesbillman wesbillman requested a review from a team as a code owner June 4, 2026 22:35
@wesbillman wesbillman merged commit 3ddfe5f into main Jun 4, 2026
15 checks passed
@wesbillman wesbillman deleted the brain/star-channels-mobile branch June 4, 2026 22:49
michaelneale added a commit that referenced this pull request Jun 5, 2026
* origin/main:
  chore(release): release version 0.3.11 (#865)
  fix(mobile+desktop): cross-device read state sync + diagnostic logging (#843)
  feat(mobile): star channels (Slack-style favorites) (#863)
  feat: desktop-screenshot skill to stop agents uploading relay media to PRs (#862)
  feat(desktop): star channels (Slack-style favorites) (#860)
  fix(desktop): handle symlinked persona pack directories (#859)
  feat: channel muting for desktop and mobile (#838)
  feat(acp): default SPROUT_ACP_MEMORY to on (#854)
  fix(desktop): eliminate image-hover layout jump in messages (#813)
  chore(release): release version 0.3.10 (#849)
  fix(desktop): harden relay mesh connect p-tag (#834)
  fix(desktop): scroll activity panel to bottom on open (#848)
  Polish desktop profile menu interactions (#836)
  fix(desktop): outline thread hover targets (#845)
  fix(desktop): keep message actions hover-only (#844)
  fix(desktop): let inbox composer fill available width (#841)

# Conflicts:
#	desktop/src/app/AppShell.tsx
#	desktop/src/features/workspaces/useWorkspaceInit.ts
tlongwell-block pushed a commit that referenced this pull request Jun 5, 2026
* origin/main: (39 commits)
  docs: add VISION_MESH.md — the compute-commons vision (#867)
  fix(desktop): simplify profile popover header (#853)
  fix(desktop): remove thread comment hover outline (#861)
  feat(desktop): always show channel section search/add buttons (#856)
  chore(release): release version 0.3.11 (#865)
  fix(mobile+desktop): cross-device read state sync + diagnostic logging (#843)
  feat(mobile): star channels (Slack-style favorites) (#863)
  feat: desktop-screenshot skill to stop agents uploading relay media to PRs (#862)
  feat(desktop): star channels (Slack-style favorites) (#860)
  fix(desktop): handle symlinked persona pack directories (#859)
  feat: channel muting for desktop and mobile (#838)
  feat(acp): default SPROUT_ACP_MEMORY to on (#854)
  fix(desktop): eliminate image-hover layout jump in messages (#813)
  chore(release): release version 0.3.10 (#849)
  fix(desktop): harden relay mesh connect p-tag (#834)
  fix(desktop): scroll activity panel to bottom on open (#848)
  Polish desktop profile menu interactions (#836)
  fix(desktop): outline thread hover targets (#845)
  fix(desktop): keep message actions hover-only (#844)
  fix(desktop): let inbox composer fill available width (#841)
  ...
tlongwell-block pushed a commit that referenced this pull request Jun 5, 2026
* origin/main: (39 commits)
  docs: add VISION_MESH.md — the compute-commons vision (#867)
  fix(desktop): simplify profile popover header (#853)
  fix(desktop): remove thread comment hover outline (#861)
  feat(desktop): always show channel section search/add buttons (#856)
  chore(release): release version 0.3.11 (#865)
  fix(mobile+desktop): cross-device read state sync + diagnostic logging (#843)
  feat(mobile): star channels (Slack-style favorites) (#863)
  feat: desktop-screenshot skill to stop agents uploading relay media to PRs (#862)
  feat(desktop): star channels (Slack-style favorites) (#860)
  fix(desktop): handle symlinked persona pack directories (#859)
  feat: channel muting for desktop and mobile (#838)
  feat(acp): default SPROUT_ACP_MEMORY to on (#854)
  fix(desktop): eliminate image-hover layout jump in messages (#813)
  chore(release): release version 0.3.10 (#849)
  fix(desktop): harden relay mesh connect p-tag (#834)
  fix(desktop): scroll activity panel to bottom on open (#848)
  Polish desktop profile menu interactions (#836)
  fix(desktop): outline thread hover targets (#845)
  fix(desktop): keep message actions hover-only (#844)
  fix(desktop): let inbox composer fill available width (#841)
  ...

Signed-off-by: npub1mprnacetjua2xx3p5eddmhxyk6wv929ymm5py8kd2xfxurxahspqqlgyta <d8473ee32b973aa31a21a65adddcc4b69cc2a8a4dee8121ecd51926e0cddbc02@sprout-oss.stage.blox.sqprod.co>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants