# RosterChirp — Future Feature Requests

---

## Markdown Message Rendering

**Request:** Render markdown-formatted text in the message window.

**Scope recommendation:** Start with inline-only markdown (bold, italic, inline code, strikethrough, links). Full block-level markdown (headers, lists, tables, code blocks) is a follow-on.

### Why inline-only first
- Zero risk of misformatting existing plain-text messages
- Full markdown risks rendering existing content oddly (e.g. a message starting with `1.` or `#` rendering as a list/header)

### Implementation notes
- Integration point is `formatMsgContent()` in `Message.jsx` — already returns HTML for `dangerouslySetInnerHTML`; a markdown parser slots straight in
- Add `marked` npm package (~13KB) for parsing
- Add `DOMPurify` for XSS sanitization — **required**, markdown allows raw HTML passthrough and content comes from other users
- `marked` config: `{ breaks: true }` to preserve single-newline-as-`<br>` behaviour, `{ mangle: false, headerIds: false }` to suppress heading anchors
- Apply markdown parse first, then @mention substitution (so `**@[Name]**` renders correctly)
- Remove the existing URL regex linkifier in `formatMsgContent` — markdown handles links natively
- Strip markdown from reply previews (currently shows raw `**text**`)
- `handleCopy` copies `msg.content` (raw markdown source) — correct behaviour, no change needed
- Emoji-only detection runs on raw content before rendering — no change needed
- Compose box stays plain textarea for v1; no preview toolbar required

### Effort estimate
| Scope | Estimate |
|---|---|
| Inline-only (bold, italic, code, strikethrough) | ~1.5 hours |
| Full markdown (+ block elements, CSS for bubbles) | ~4–5 hours |
