Skip to content

feat(mobile): add channel list with relay integration - #315

Merged
wesbillman merged 1 commit into
mainfrom
feat/mobile-channels-list
Apr 14, 2026
Merged

feat(mobile): add channel list with relay integration#315
wesbillman merged 1 commit into
mainfrom
feat/mobile-channels-list

Conversation

@wesbillman

Copy link
Copy Markdown
Collaborator

Summary

First real feature in the mobile app — validates end-to-end plumbing between Flutter, the relay REST API, and shared identity.

  • Relay client: lightweight http-based client with Bearer token and X-Pubkey (dev mode) auth
  • Channel list: pull-to-refresh, 30s polling, loading/error/empty states, channel type icons
  • Profile avatar: user avatar with presence dot indicator in the app bar
  • Settings page: relay URL, API token, dev pubkey config + theme picker
  • Identity: compile-time env config via --dart-define-from-file=.env.json — no hardcoded keys
  • Navigation: bottom nav shell (Channels + Settings tabs)
  • Tests: model parsing, relay client with mock HTTP, widget states (11 tests)

Running locally

cp mobile/.env.json.example mobile/.env.json
# Edit .env.json with your pubkey
flutter run --dart-define-from-file=mobile/.env.json

Test plan

  • flutter analyze — no issues
  • flutter test — 11 tests pass
  • Pre-commit hooks pass (dart format, flutter analyze)
  • Adversarial code review (2 rounds) — fixed ref.watch crash in async methods, token clearing bug, error message leaking, URL construction, pull-to-refresh on empty state
  • Manual: verify channel list loads against local relay
  • Manual: verify pull-to-refresh and 30s polling pick up new channels
  • Manual: verify profile avatar and presence indicator render

🤖 Generated with Claude Code

First real feature in the mobile app — validates end-to-end plumbing
between Flutter, the relay REST API, and shared identity.

- RelayClient: lightweight HTTP client with Bearer token and X-Pubkey
  (dev mode) auth support
- Channel list with pull-to-refresh, 30s polling, loading/error/empty states
- Profile avatar with presence indicator in app bar
- Settings page for relay URL, API token, and dev pubkey config
- Compile-time env config via --dart-define-from-file=.env.json
- Bottom nav shell (Channels + Settings tabs)
- Tests for model parsing, relay client, and widget states

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
@wesbillman

Copy link
Copy Markdown
Collaborator Author
Screenshot 2026-04-14 at 9 14 54 AM Screenshot 2026-04-14 at 9 14 59 AM

@wesbillman
wesbillman merged commit 08be364 into main Apr 14, 2026
15 of 16 checks passed
@wesbillman
wesbillman deleted the feat/mobile-channels-list branch April 14, 2026 15:42
kaalph pushed a commit to kaalph/buzz that referenced this pull request Aug 21, 2026
# By Wes (12) and others
# Via GitHub
* main: (26 commits)
  feat(mobile): websocket streaming with real-time messaging (block#323)
  feat(markdown): add image/video preview, lightbox, and multi-image gallery (block#316)
  feat(composer): add rich text editor with formatting and mentions (block#310)
  feat(mobile): align design language with desktop and polish UI (block#321)
  fix: lock file registry (block#318)
  feat(mobile): QR/code pairing flow with security hardening (block#317)
  feat: Sprout Huddles — voice conversations with AI agents (block#299)
  feat(mobile): add channel list with relay integration (block#315)
  feat: add change member role in channel sidebar (block#313)
  feat(desktop): deterministic nested thread panels (block#308)
  fix: show private channels in channel browser when user is a member (block#311)
  Replace inline channel creation with dialog (block#312)
  chore: improve chat message layout to left-aligned design (block#309)
  Add edit dialog for managed agents with relay profile sync (block#277)
  fix(ci): build relay with optimized profile to fix flaky e2e tests (block#307)
  Update actions/checkout action to v6 (block#305)
  Update dependency @tanstack/react-query to v5.98.0 (block#304)
  Update dependency @playwright/test to v1.59.1 (block#303)
  Update react monorepo to v19.2.5 (block#302)
  feat(mobile): scaffold Flutter app with Riverpod & Catppuccin theme (block#306)
  ...

# Conflicts:
#	desktop/src-tauri/Cargo.lock
#	desktop/src-tauri/Cargo.toml
#	desktop/src-tauri/src/lib.rs
#	desktop/src/features/channels/ui/ChannelScreen.tsx
kaalph pushed a commit to kaalph/buzz that referenced this pull request Aug 21, 2026
# By Wes (12) and others
# Via GitHub
* main: (26 commits)
  feat(mobile): websocket streaming with real-time messaging (block#323)
  feat(markdown): add image/video preview, lightbox, and multi-image gallery (block#316)
  feat(composer): add rich text editor with formatting and mentions (block#310)
  feat(mobile): align design language with desktop and polish UI (block#321)
  fix: lock file registry (block#318)
  feat(mobile): QR/code pairing flow with security hardening (block#317)
  feat: Sprout Huddles — voice conversations with AI agents (block#299)
  feat(mobile): add channel list with relay integration (block#315)
  feat: add change member role in channel sidebar (block#313)
  feat(desktop): deterministic nested thread panels (block#308)
  fix: show private channels in channel browser when user is a member (block#311)
  Replace inline channel creation with dialog (block#312)
  chore: improve chat message layout to left-aligned design (block#309)
  Add edit dialog for managed agents with relay profile sync (block#277)
  fix(ci): build relay with optimized profile to fix flaky e2e tests (block#307)
  Update actions/checkout action to v6 (block#305)
  Update dependency @tanstack/react-query to v5.98.0 (block#304)
  Update dependency @playwright/test to v1.59.1 (block#303)
  Update react monorepo to v19.2.5 (block#302)
  feat(mobile): scaffold Flutter app with Riverpod & Catppuccin theme (block#306)
  ...

# Conflicts:
#	desktop/src-tauri/Cargo.lock
#	desktop/src-tauri/Cargo.toml
#	desktop/src-tauri/src/lib.rs
#	desktop/src/features/channels/ui/ChannelScreen.tsx
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.

1 participant