um

Thread

A conversation: the container its messages, separators and typing indicator sit in, spacing them and, when it's live, giving a screen reader a log to follow. One family of message components renders a chat between people, a channel, an email thread and an AI chat.

A chat between people

Bubbles: theirs on the left with an avatar, yours on the right on the dark surface. continued: true joins a run from one sender; the last of yours carries its status; someone is typing.

Yesterday
Ana Silva
Are we still on for Friday?
Ana Silva
I can do 2pm, or later if that's easier.
You
2pm is perfect. Same place?
Today
Ana Silva
Yes! I'll book the corner table. Bring the sketches if you have them.
  • 👍1You reacted
You
Will do 👋
Ana Silva is typing

A channel thread

Rows with avatars, names and times. Hover a row for its actions; a continued row shows its time in the gutter. Reactions, a quoted reply, a reply count and an unread marker.

Ben Reyes

Release notes are drafted in notes/launch.md. Can someone review before Friday?

Ben Reyes

Especially the migration section, it moved around a lot.

New messages
Ana Silva
Ben ReyesCan someone review before Friday?

On it. I've left comments on the migration section and the rollback steps look right to me.

An email conversation

Letters in cards. Older messages are collapsed to their header and a line of the body, and open on a click or Enter. Reply and Forward are text buttons through bar.control.

Re: Interview on Friday

An AI chat

A bubble of your own and an unbubbled row for the reply, from the same helper. ai_chat_message is this with streaming, a thinking spinner and the optimistic template on top.

You
Who hasn't replied to the Platform Engineer invitations yet?

Three candidates haven't replied since Monday:

  • Ana Silva opened hers twice but hasn't answered.
  • Grace Okafor hasn't opened hers.
  • Tom Reyes's bounced.

I'd nudge Grace today and leave Ana until after she's back.

You
Draft the nudge for Grace.
Typing