This little webapp is intended to make it easier to copy messages from Slack or Beeper into other places for sharing or archival, with cleaned-up, readable formatting. I hacked it together on valtown with copious help from an LLM over a weekend; please propose changes or edits, as I'm sure I missed many use-cases and edge-cases. This app runs entirely in your browser and does not send your data anywhere.
- Clean markdown conversion: Converts Slack's HTML and Beeper's text to readable markdown format
- Multiple format support: Automatically detects and handles both Slack HTML and Beeper text formats
- Message grouping: For Beeper, combines successive messages from the same person unless they're >1 hour apart
- Thread support: Handles threaded conversations with visual indicators (Slack)
- Shows thread reply counts (e.g., "Thread: 3 replies (Last reply today at 19:03)")
- Marks threaded replies with ↳ prefix
- Identifies messages sent from thread to main channel with 📢 prefix
- Code block preservation: Maintains formatting for inline code and code blocks
- List handling: Properly converts ordered and unordered lists
- Timestamp formatting: Clean, consistent timestamp display
The app now supports Beeper's message format:
[8/20/2025, 4:39:00 PM] Han Wang: Let me know how this agreement looks!
[8/20/2025, 11:17:49 PM] Alex Rattray: Hey really sorry for the delay.
[8/20/2025, 11:17:57 PM] Alex Rattray: At first glance it looks great to me!
This gets converted to:
[8/20/2025, 4:39:00 PM] **Han Wang:**
> Let me know how this agreement looks!
[8/20/2025, 11:17:49 PM] **Alex Rattray:**
> Hey really sorry for the delay.
> At first glance it looks great to me!
- Automatic format detection: Just paste Beeper text and it will be recognized
- Message grouping: Combines consecutive messages from the same sender
- Time-based separation: Creates new groups if messages are >1 hour apart
- Clean formatting: Bold names, blockquoted content, proper spacing
The app now better handles Slack's threaded conversations:
-
Main messages with threads: When you copy a main channel message that has replies, it will show thread information like "Thread: 3 replies (Last reply today at 19:03)"
-
Individual thread replies: When copying from within a thread view, individual replies are marked with "↳" to show they're threaded responses
-
Thread-to-channel broadcasts: Messages sent from a thread to the main channel are marked with "📢" to indicate they were broadcast
-
Reply context: When a message is replying to another message, it will show the context with a 💬 emoji:
__↳ Alex Rattray__ [2025-07-24 07:03 PM EST]: > 💬 **John Doe**: Thanks this is a great update. Wasn't aware of the Apps bugs actually… > hmm… what are some themes you're seeing? is it like, ugly UX? frontend bugs? backend bugs? other?
- For Slack complete thread context: Copy from within the thread view in Slack to get individual replies with their context
- For Slack thread summaries: Copy from the main channel to see which messages have threads
- For Beeper: Simply copy and paste the text directly - the app will automatically group messages and format them cleanly
- Mixed conversations: The app handles both threaded and non-threaded messages in the same selection