Blog
-
Forgejo on Debian 13 with Rootless Podman
April 3, 2026Full setup guide for running Forgejo as a rootless Podman container with Caddy as reverse proxy, systemd integration via Quadlets, and SSH access.
-
Initial VPS Setup on Debian
April 3, 2026First steps after provisioning a fresh Debian VPS — system updates, a non-root user with SSH key auth, unattended upgrades, and hardened SSH config.
-
Resolving Obsidian Wiki-Links in Astro with a Custom Remark Plugin
March 26, 2026How I wrote a small Remark plugin that converts [[wiki-links]] from Obsidian into proper HTML links at build time — without changing how I write in the editor.
-
Troubleshooting Mastodon Backfeed and Stale Webmentions
March 24, 2026A practical runbook for common failure modes in Mastodon + Bridgy + webmention.io setups: token scopes, canonical URLs, delayed backfeed, and stale reactions that no longer exist upstream.
-
POSSE to Mastodon: State, Media Uploads, and Safer Deploys
March 24, 2026How Mastodon syndication was added to the deploy pipeline: RSS-based posting for articles and notes, OG image uploads, idempotent state tracking, and rate-limit hardening.
-
Webmentions: Receiving and Sending Cross-Site Reactions
March 23, 2026How webmention.io handles incoming mentions and likes, how a build-time component displays them, and how webmention.app sends outgoing notifications after each deploy.
-
Syndication Links Without Frontmatter Editing
March 23, 2026How .bluesky-posted.json auto-populates u-syndication links on every article and note page — no manual frontmatter required after each post.
-
Improving Bluesky Syndication: Notes, Images, and State
March 23, 2026Extending the syndication script to cover notes, compress OG images before upload, use original publish dates, and persist Bluesky post URLs in the state file.
-
POSSE to Bluesky with the AT Protocol
March 23, 2026Automatically syndicating new articles to Bluesky after each deploy — fetching the live OG image, uploading it as a blob, and posting a rich link card via the AT Protocol API.
-
Microformats2: Marking Up Posts for the IndieWeb
March 23, 2026How h-entry, h-feed, and the rest of the MF2 vocabulary make articles, notes, and photos machine-readable without changing how they look.
-
Joining the IndieWeb
March 23, 2026Why I added IndieWeb support to this site, what it means in practice, and how identity verification works through rel=me and h-card.
-
Obfuscating Contact Data on a Static Site
March 23, 2026How I protect email addresses and personal contact details on a static Astro site from harvesting bots, using a combination of Base64 obfuscation and a CSS RTL trick that also defends against copy-paste.
-
Closing the Loop: Bluesky Reactions as Webmentions
March 23, 2026How Bridgy polls Bluesky for likes, reposts, and replies and sends them back as webmentions — so interactions on the syndicated copy appear on the original post.
-
Live Webmentions Without SSR: A Hybrid Approach
March 23, 2026Upgrading the WebMentions component from build-time-only to a hybrid model: static HTML renders instantly, a silent client-side fetch updates the count without a redeploy.
-
Syndicating Photos to Flickr with POSSE
March 21, 2026How I built a script that keeps Flickr in sync with my site — uploading new photos, deleting removed ones, moving photos between albums, and writing Flickr IDs back into sidecar files.
-
Adding Notes, Links, and Archives
March 21, 2026Three new content sections built on Astro content collections — short-form notes, a curated link log, and a unified chronological archive.
-
Distinguishing Collection Sets from Category Collections
March 21, 2026A single boolean flag in the frontmatter separates navigational collection nodes from publishable photo sets — keeping the archive clean without adding structural complexity.
-
Structuring Photos as a Collection Tree
March 21, 2026How the photos section grew from flat albums into a recursive collection hierarchy with nested routes, breadcrumbs, and a tag browsing system.
-
Building the Photo Stream
March 19, 2026How the photos section works — JSON sidecars from Vision, import.meta.glob, Flickr's justified-layout, and batch loading with IntersectionObserver.
-
Migrating the Vision Script from OpenAI to Claude
March 19, 2026How scripts/vision.ts was rewritten to use the Anthropic SDK with claude-opus-4-6 and tool use instead of OpenAI's json_schema response format.
-
Photo Albums with Astro's Content Layer
March 19, 2026How the albums section is structured — from content collection to justified grid, album-scoped photo routes, and a sub-nav to switch between stream and albums.
-
Vision Rate-Limit Runbook for Photo Sidecars
March 15, 2026A practical checklist for running scripts/vision.ts on larger photo batches without failing on 429 TPM limits.
-
Generating Photo Sidecars Locally Before a VPS Deploy
March 14, 2026How to run Vision metadata generation against an Obsidian photo library locally and sync the generated JSON sidecars to a VPS.
-
Obsidian to VPS Pipeline: Sync, Pull, and Redeploy
March 11, 2026A complete one-command publishing pipeline from Obsidian on macOS to a live Astro site on a VPS.
-
Triggering VPS Deploys with GitHub Actions
March 5, 2026How to trigger a Podman-based VPS deploy automatically after pushing to main.
-
Mirroring GitHub to Codeberg Without a Third-Party Action
March 5, 2026A clean repository mirroring setup from GitHub to Codeberg using native GitHub Actions and SSH.
-
Installing Podman Locally and on a VPS
March 4, 2026A practical install guide for Podman on macOS and Debian/Ubuntu servers, including first-run checks.
-
GitHub SSH on a VPS (Reliable Deploy Access)
March 4, 2026How to set up a stable SSH-based Git connection on a VPS for pull-based deployments.
-
Keeping the Website Running After a VPS Reboot
March 4, 2026How to ensure your Podman-hosted website comes back automatically after a server restart.
-
Operating Astro SSR in Production with Podman
March 4, 2026A compact day-two operations runbook: start, stop, logs, deploy updates, and rollback strategy.
-
Updating the Website Repository on a VPS
March 4, 2026A repeatable update flow for pulling the latest website code on a VPS and redeploying safely.
-
Caddy for Astro + Podman (HTTPS and Canonical Host)
March 3, 2026How to put Caddy in front of a Podman-hosted Astro SSR app with automatic TLS and www redirect.
-
Deploying Astro SSR to a VPS with Podman
March 2, 2026A practical VPS deployment flow for Astro SSR using Podman and podman-compose.
-
How to build your Website from Local Setup to VPS
March 1, 2026A complete local setup for running an Astro SSR site in Podman with the Node standalone adapter.
-
Hello, World!
December 1, 2025Saying hello in the world of coding.