Professional Network / UI Extension
LinkedIn Messaging: Formatting Option
A pixel-accurate LinkedIn Messaging recreation that adds rich-text formatting directly inside the native compose surface, closing a gap that no professional messaging product should still have.
- Role
- Product Manager and builder: problem identification, interface recreation, formatting logic.
- Timeframe
- November 2025 to January 2026
- Stack
- HTML, CSS, JavaScript
- Vite for dev tooling
- Native contenteditable APIs for rich-text formatting
Why Now
LinkedIn is the only serious professional messaging surface at scale, and it still ships messages as plain text. Every adjacent surface, including Slack, Teams, and even LinkedIn Posts, supports rich text. The gap has become visible enough that users routinely compose their messages in a separate document and paste the result into LinkedIn, which is a reliable signal that the product is ready to be fixed.
The contenteditable web APIs are mature enough now to ship rich text without a third-party editor framework, which keeps the performance budget of a chat list intact.
The Problem
Professional messages often need structure. A founder intro benefits from a bolded name. A recruiter pitch benefits from a list of asks. An investor update benefits from emphasis on the number that matters. Plain text forces users to write messages that are worse than the ones they are capable of writing.
For LinkedIn as a business, this is a quality-of-conversation problem. The platform monetizes the strength of its network, and lower-quality messages produce lower response rates, which compresses the value of InMail and Premium over time.
Product Bet
The first bet is that the formatting surface must be invisible until a user invokes it, and must not add a single pixel of vertical space to the default compose state. Professional users will abandon any feature that makes the default view heavier.
The second bet is that formatting is a quality-of-conversation lever, not a styling lever. The reason to ship it is to let users write better messages, not to give them more toys.
What I Built
A visual recreation of LinkedIn Messaging that is close enough to the live product to let formatting behavior be tested in real context, rather than in an isolated editor. The compose area uses the browser’s native contenteditable APIs, which keeps the implementation light and the rendering predictable.
Tradeoffs
I did not build a persistence backend. Every message resets on reload. The prototype is about the compose moment, not the history surface.
I chose contenteditable over a rich-text editor framework such as Lexical or ProseMirror. Those frameworks would be the right choices at LinkedIn scale, but adopting one here would have tripled the prototype surface area without teaching anything new about the product question.
Business Read
The commercial core of LinkedIn Premium is InMail response rate. A feature that helps users write clearer, more structured messages is a direct lever on that metric, not a cosmetic one.
The engineering cost of shipping formatting is small. The product cost is larger, because formatting introduces tone decisions that ripple outward. How should bold render in the notification preview? How should a list survive in the email fallback? What happens when someone pastes formatted text from a Google Doc? The prototype is what makes those questions concrete, which is the real value of building one before scoping the real thing.
Outcomes
- A pixel-accurate recreation of LinkedIn Messaging that allows formatting behavior to be tested inside the real visual context of the product, rather than in an abstract editor.
- A working rich-text compose surface using native contenteditable, with no heavy editor framework in the way.
- A concrete list of downstream product questions that a production version would need to answer: notification rendering, email fallback, and paste behavior from other rich-text surfaces.