How to auto-generate and publish blog posts with a GitHub Action
A content queue, a Node generator script that calls the Claude API, and a scheduled GitHub Action that writes a post and commits it — the exact autopilot I use to keep this blog fed.
9 posts
A content queue, a Node generator script that calls the Claude API, and a scheduled GitHub Action that writes a post and commits it — the exact autopilot I use to keep this blog fed.
A practical walk through the vercel.json headers block I ship in production — HSTS, X-Frame-Options, X-Content-Type-Options, Permissions-Policy, and immutable long-cache for hashed assets, fonts, and images.
Use @anthropic-ai/sdk with a JSON schema so Claude returns validated, machine-readable data instead of free text — the exact pattern that powers this blog's auto-post generator.
What an OG image is, why it's exactly 1200x630, and how to design one as an SVG template and render it to the PNG that social platforms show in link previews.
Send a real email from a Vercel serverless handler using Resend — creating the client from an env-based API key, building the message, escaping user input, and handling the failure cases.
Astro highlights code with Shiki out of the box. Here's how to pick a theme like github-dark, enable line wrapping, and understand how it plays with custom code-block markup.
Add a real comment section to a static Astro blog with zero backend — Giscus stores every comment as a GitHub Discussion. Here's the setup, the config shape, and how to match a dark theme.
Add lightweight, cookie-free analytics to Astro with @vercel/analytics in a tiny reusable component — what it does, when it loads, and how to wire it up.
Astro 7 ships a new default Markdown processor. Here's why you'd override it with unified() to register your own remark and rehype plugins, and how remarkPlugins, rehypePlugins, and shikiConfig fit together.