Skip to content

feat(stream-android): add Sendbird → Stream Chat migration skill#43

Draft
aleksandar-apostolov wants to merge 1 commit into
mainfrom
feat/stream-android-sendbird-migration
Draft

feat(stream-android): add Sendbird → Stream Chat migration skill#43
aleksandar-apostolov wants to merge 1 commit into
mainfrom
feat/stream-android-sendbird-migration

Conversation

@aleksandar-apostolov

Copy link
Copy Markdown
Contributor

Adds a Sendbird → Stream Chat migration skill for Android (Kotlin / Jetpack Compose / XML Views) — a repeatable, empirically-hardened procedure for migrating any Sendbird integration to Stream. Sibling to the iOS migration skill, but built from the Android SDK's actual surface and validated by end-to-end dogfooding, not translated from iOS.

What's here

  • skills/stream-android/sendbird-migration.md — the skill: detect the integration shape (Sendbird uikit-compose / XML uikit / custom UI on the low-level sendbird-chat SDK / spaghetti; MVVM/MVI; single- vs multi-activity; Compose-Nav vs fragments+Jetpack-Nav), pick one of three paths (Stream Compose bundled screens / keep-the-UI-swap-the-SDK surgical / cross-framework XML→Compose via ComposeView), swap packages + init/auth, map channels/messages/state, re-apply theming + custom messages, and verify fidelity per screen.
  • SKILL.md — a migration flag routes "migrate off Sendbird" requests to the skill (orthogonal to the A/B/C/D tracks).

Load-bearing pieces

  • Gap-handling protocol for screens Sendbird bundled that Stream doesn't: detect the dropped screen, then either wire the bundled Stream equivalent (GroupChannelInfoScreen/DirectChannelInfoScreen) or — for screens Stream doesn't ship (channel creation) — tell the user it isn't out-of-the-box, link the public cookbook, and offer to build it. Never silently drop or invent a screen.
  • v7 packaging gotcha — the state layer is folded into stream-chat-android-client (io.getstream.chat.android.client.api.state), state/offline aren't published separately, and the client auto-installs state (no withPlugins). Verify against the published artifact, not the dev tree.
  • State-layer mapping (collections → queryChannelsAsState/watchChannelAsState), custom-message carriers (Message.extraData vs a custom AttachmentFactory), and the always-needed solid-bubble + white-text and DM-name fidelity fixes.

Built + validated empirically

  • Grounded in real migrations of Sendbird source apps across architectures, then dogfood-tested: a fresh agent given only the skill produced a correct migration plan including the gap-handling, and a separate fresh agent migrated a spaghetti / low-level-SDK app end-to-end to a first-try successful build that connects and renders.

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