Users delete own messages; admins delete any. Soft delete: content null, deletedAt set, renders as [message deleted]. Socket.io broadcasts message:deleted to channel room.
Users delete own messages; admins delete any. Soft delete: content null, deletedAt set, renders as [message deleted]. Socket.io broadcasts message:deleted to channel room.