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.

one context · every channel
whatsappcustomer askschannel_messages
emailsupplier quoteschannel_messages
slackteam approveschannel_messages
webproduct followschannel_messages

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-timeline

items

ChannelTimeline

published

The 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.json

ChannelMessageBubble

published

Canonical 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.json

ChannelBadge

published

Platform 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.json

ChannelComposer

published

Outbound 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.json

The conversation is domain state. The UI is an install away.

channel domain