registries / channel
@ekairos-channel
Every channel, one thread. These components render the canonical channel_messages schema straight from InstantDB — install them and a multichannel inbox exists. The only custom code left is your send endpoint and a webhook mount.
setup
Configure once. Install by name.
The components depend on the schema, not on your backend — push @ekairos/channel entities to your InstantDB app and they are live.
{
"registries": {
"@ekairos-channel": "https://registry.ekairos.dev/r/channel/{name}.json"
}
}pnpm dlx shadcn@latest add @ekairos-channel/channel-timelineitems
ChannelTimeline
publishedThe whole conversation across every channel: queries channel_messages reactively from InstantDB by contextId and renders the interleaved timeline.
components/ekairos/channel/channel-timeline.tsx
shadcn add @ekairos-channel/channel-timeline/r/channel/channel-timeline.jsonChannelMessageBubble
publishedCanonical message bubble: direction, role, platform badge, participant, status and timestamp for any channel_messages record.
components/ekairos/channel/channel-message.tsx
shadcn add @ekairos-channel/channel-message/r/channel/channel-message.jsonChannelBadge
publishedPlatform identity chip (web, email, whatsapp, slack, teams, discord, telegram) with per-channel accent.
components/ekairos/channel/channel-badge.tsx
shadcn add @ekairos-channel/channel-badge/r/channel/channel-badge.jsonChannelComposer
publishedOutbound composer: picks a channel and posts to your send endpoint — the one piece of custom code an app owns.
components/ekairos/channel/channel-composer.tsx
shadcn add @ekairos-channel/channel-composer/r/channel/channel-composer.jsonThe conversation is domain state. The UI is an install away.
channel domain