| name | proofread-links |
| description | Proofread Interesting Links digest posts. Verifies all links and checks characterizations. Use Haiku model for cost efficiency. |
| disable-model-invocation | false |
Interesting Links Digest Proofreading
Recommended model: Run /model haiku before invoking this skill for cost efficiency.
Tasks
-
Extract all links from the article using grep or similar tools directly from the file. Do NOT manually transcribe URLs — transcription errors are easy to make (e.g., confusing 3.6.0 with 3-6-0) and will cause false positives/negatives in curl checks. Extract programmatically, then verify extracted URLs match the source file before testing.
-
Check all links are live using a single Bash call with curl -sI -o /dev/null -w "%{url} %{http_code}\n" for every URL. This is cheap and fast. Report any that return 4xx/5xx or fail to connect.
Medium links (medium.com, *.medium.com) always return 403 to curl — even bogus URLs do, so a raw curl can't validate them. Instead, validate them through Freedium: curl -sI -o /dev/null -w "%{http_code}\n" "https://freedium-mirror.cfd/<medium-url>". Freedium returns 200 for real articles and 404 for non-existent ones. If Freedium returns 200, treat the Medium link as clean.
-
Fetch fetchable links to verify characterizations — use WebFetch and verify:
- Does my summary/characterization accurately reflect the linked content?
- Have I misrepresented the author's point?
Domain handling:
- Medium posts (
medium.com, *.medium.com): Rewrite the URL through https://freedium-mirror.cfd/ (e.g. https://freedium-mirror.cfd/https://medium.com/...) to bypass the paywall/403
- Skip these domains — they block WebFetch and can only be checked via curl for HTTP status:
linkedin.com, www.linkedin.com
x.com, twitter.com
old.reddit.com, www.reddit.com
youtube.com, www.youtube.com
notion.so
- All other domains: fetch normally with WebFetch
-
Parallelisation — use 2-3 Task agents (Haiku model) to verify links in parallel, splitting the article into roughly equal chunks. Don't use more than 3 agents — the overhead outweighs the benefit.
-
Typos - Check the article for typos. I write in en-gb.
automagically is intentional
- For text typos: Offer to fix them using the Edit tool
- For typos in URLs: DO NOT fix automatically. URLs might contain literal typos (e.g., "whisleblower" in a URL that actually exists as misspelled). Instead:
- Report the suspected typo in the URL
- Note whether the URL works as-is
- Only offer to fix if the URL is broken AND you've verified the corrected version works
-
Category placement - Check each link is in the right section using this heuristic:
- Data Platforms, Architectures, and Modelling: architecture/design/thinking — posts about why or how to structure a system, data modelling
- Data Engineering, Pipelines, and CDC: building/tooling/operating — posts about building or operating a specific pipeline/tool, CDC-specific content
- Kafka and Event Streaming: Kafka ecosystem, messaging, event streaming platforms
- Stream Processing: Flink, Kafka Streams, Spark Streaming, stream processing frameworks
- Analytics: OLAP engines, dashboards, query engines (StarRocks, ClickHouse, BigQuery, etc.)
- OTF: Iceberg, Delta Lake, Hudi, Paimon, Fluss, catalogs, lakehouse patterns, file formats (Parquet, Lance, etc.)
- RDBMS: Postgres, MySQL, DuckDB, database internals, SQL
- General Data Stuff: anything data-related that doesn't fit above
- AI: all AI/ML content
- And finally: non-data content
- Flag any links that seem miscategorised, with a suggested alternative section
-
Punctuation consistency — every bullet should end with a full stop (or other appropriate terminal punctuation, e.g. ?, !, …). This applies even to bare "Author - [title]" entries. Flag any bullet missing terminal punctuation and offer to fix.
-
Images — check the frontmatter image: (header) and thumbnail: paths:
- Format: must be
.webp. If the post points at a .jpeg/.jpg/.png source, regenerate the webp via cwebp -q 80 -resize <width> 0 <src> -o <dest> and update the frontmatter.
- Dimensions: match the existing IL pattern in
static/images/<year>/<month>/:
- Header (
h_ prefix): 1800px wide, height free (typical full crops are 1800×1350, banner crops 1800×~600)
- Thumbnail (
t_ prefix): 800px wide, height free (typical 800×1067 portrait)
- File size: header should be roughly 200KB–800KB, thumbnail 100KB–300KB. Anything ≫1MB means the source wasn't resized — regenerate.
- Verify by sampling the previous month's
h_*.webp / t_*.webp with identify or ls -l to confirm the current convention before resizing.
-
Report format:
- List any broken links (from curl check)
- List any mischaracterized links with: what I said vs what it actually says
- List any potentially miscategorised links with suggested section
- List typos in text (offer to fix these)
- List suspected typos in URLs (with validation status)
- List any bullets missing terminal punctuation (offer to fix)
- Keep it concise - don't repeat back correct characterizations or correctly-placed links
Ignore
Header and footer boilerplate (author bio, navigation, copyright).