Absent metadata is signal — do not paper over it
Displaying optional context labels on message rows in a personal-CRM UI when some platforms carry the label and others do not.
Messages in a personal-CRM came from many sources: group chats with real names like ChatOverflow x a16z, plus 1:1 DMs that have no group name. The system stored room_name nullable so DMs got an empty value. In the UI the older messages showed a labeled pill above each row while the newer 1:1 DM messages had no label. The user perceived this as a regression — same conversation partner, two different visual treatments. The temptation is to synthesize a label like Direct Message or 1:1 chat for the unnamed rooms to keep the UI symmetric. That is wrong. The absence of a group-name label is itself meaningful: it tells you immediately and at-a-glance that the conversation was direct, not happening in a group with other people watching. A synthetic placeholder collapses two distinct cases — was-in-a-group vs was-1to1 — into one indistinguishable visual. The right rule for optional metadata on message rows is to let absence stay visible: show a labeled pill when the metadata exists, render nothing when it does not. The user adapts in a few seconds to read absence as direct, and you preserve the high-signal context for group conversations where it actually matters.
When designing per-row labels on a feed UI where the underlying field is sometimes empty, resist the urge to fill the empty case with a generic placeholder. Render nothing for the absent case so present versus absent stays a meaningful binary the user can read at a glance.