Articles get NewsArticle structured data (headline, image, dates, author,
publisher) plus article:published_time and article:modified_time, and the
homepage gets WebSite and Organization data. Every indexable page allows
max-image-preview:large. The modified date is the article folder's last
commit, so editing an article updates it, the sitemap lastmod included.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Cloudflare Pages falls back to the homepage with a 200 when there's no
404.html, which Google treats as soft 404s. The generated 404.html is
noindex and shows a detective gif from vibegif.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Swap every direct-img.link image across 7 articles and the site OG/author
images for hand-picked free.direct-img.link equivalents, update alt text to
match, and point the writer template at the free host.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
scripts/send-newsletter.mjs sends newsletter/<issue>/index.html via the
Resend batch API (100/batch, paced under the 10 req/s team limit, retries
rate-limit 429s/5xx, idempotency keys so re-runs resume without dupes) to
the active subscribers of a pool fetched with the scoped send key.
Adds one-click List-Unsubscribe headers. Never logs subscriber emails.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Visiting /newsletter/unsubscribe?email=... now unsubscribes on load and
shows an animated success check; the manual form shares the same state.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Renders an interaction-only Turnstile widget on /newsletter/ and sends its
token to newsletter.planetrenox.com/api/sub, which verifies it server side.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>