Reformat the README, and put the Reddit rule back together
CI / Typecheck, test, build (pull_request) Successful in 15s
Publish / Build and push (pull_request) Successful in 20s
Publish / Move the working version on (pull_request) Skipped

A Markdown formatter over the file, plus a repair to what it did on the way
through.

The Reddit rewrite rule is the longest row in the table and the only one the
formatter took apart. The pipes in its alternation are written `\|`, which is
how a literal pipe goes inside a table cell and how the X and TikTok rows have
always written theirs; the formatter dropped the backslashes, at which point
four of them became column separators. The row became seven cells, the
separator row was widened to seven to match, and `(.*)` picked up an escape
and turned into `(.\*)`.

The visible damage is a mangled table. The real damage is that the rule is
there to be copied into StopTheMadness, and what was left could not be: split
across six cells with a regex that no longer matches a Reddit URL.

The row and the separator are restored. Every rule in the table now compiles
and rewrites correctly, checked by pulling them out of the file and running
them against real URLs for each platform, including the `redd.it` short code
and a `/s/` share link.

Worth knowing that the formatter will do this again. Nothing in the repository
configures one, so this was run by hand -- but if it becomes a habit, README.md
wants excluding, because this table cannot survive it.

Co-Authored-By: Claude Opus 5 <[email protected]>
Claude-Session: https://claude.ai/code/session_017nMQ2eDKnqALYhAibpTKTu
This commit is contained in:
2026-08-27 13:23:47 -03:00
co-authored by Claude Opus 5
parent 503d8a8dec
commit 76441bb91d
+9 -9
View File
@@ -29,7 +29,7 @@ Replace `antisocial.example.com` with wherever you are running it.
| TikTok | `/^https:\/\/(?:www\.\|vm\.\|vt\.)?tiktok\.com\/(.*)$/` | `https://antisocial.example.com/tiktok/$1` |
| Bluesky | `/^https:\/\/bsky\.app\/(.*)$/` | `https://antisocial.example.com/bsky/$1` |
| Reddit | `/^https:\/\/(?:www\.\|old\.\|new\.\|np\.\|m\.)?reddit\.com\/(.*)$/` | `https://antisocial.example.com/reddit/$1` |
| Reddit | `/^https:\/\/redd\.it\/(.*)$/` | `https://antisocial.example.com/reddit/$1` |
| Reddit | `/^https:\/\/redd\.it\/(.*)$/` | `https://antisocial.example.com/reddit/$1` |
So `https://x.com/user/status/123` becomes
`https://antisocial.example.com/x/user/status/123`.
@@ -59,13 +59,13 @@ Each adapter layers its extraction, most structured first:
3. **The rendered DOM** — whatever is actually on screen is real.
4. **Open Graph tags** — the floor, and enough to show something.
| Platform | Loads | Reads |
| --------- | ---------------------------- | -------------------------------------------------------- |
| Bluesky | the public AT Protocol API | `getPostThread`; falls back to the post page |
| X | `platform.twitter.com` embed | the `cdn.syndication.twimg.com/tweet-result` response |
| Instagram | `/embed/captioned/` | `shortcode_media`, then the rendered `<video>`/`<img>` |
| TikTok | the post page | `__UNIVERSAL_DATA_FOR_REHYDRATION__` |
| Threads | the post page | the Relay payloads in `<script type="application/json">` |
| Platform | Loads | Reads |
| --------- | ---------------------------- | --------------------------------------------------------------- |
| Bluesky | the public AT Protocol API | `getPostThread`; falls back to the post page |
| X | `platform.twitter.com` embed | the `cdn.syndication.twimg.com/tweet-result` response |
| Instagram | `/embed/captioned/` | `shortcode_media`, then the rendered `<video>`/`<img>` |
| TikTok | the post page | `__UNIVERSAL_DATA_FOR_REHYDRATION__` |
| Threads | the post page | the Relay payloads in `<script type="application/json">` |
| Reddit | the post's own `.json` | the post and the first page of comments; falls back to the page |
On Bluesky and Threads people write in chains, so where the linked post is part
@@ -93,7 +93,7 @@ Reddit posts come with it: every comment the first page carried, nested the way
written. Each comment is a `<details>` element, so folding one takes its whole subtree
with it, works without JavaScript and works from the keyboard; a collapsed comment says
how many replies it is hiding. "Collapse all" is the one piece that needs the script,
which is why it only appears once the script has run. What was behind a *load more* is
which is why it only appears once the script has run. What was behind a _load more_ is
not fetched — that is a second page and often a third — but it is counted and said out
loud rather than quietly dropped.