Fixing Stripe webhook invalid signature error on Cloudflare

If you're getting a 400 Bad Request with "Invalid signature" from your Stripe webhook on Cloudflare Workers or Cloudflare Pages, the actual problem might not be your webhook secret at all. The symptom# The Stripe webhook endpoint returns: 400 Bad Request Invalid signature In St…

Adding comments to my blog with D1 and Server Islands

For years I have been running this blog on Zola without any comment system. The static nature of Zola made adding comments non-trivial and I was not keen on third-party solutions like Disqus or Giscus. When I migrated to Astro (not yet published at the time of writing), the oppor…

Fragment link checking in Astro

In my previous post I covered how Zola validates internal links and anchors at build time. As I'm considering migrating my blog to Astro, I needed to solve the same problem: how do I ensure that fragment links (anchors) actually point to existing headings? Here's how I set up fra…

Wi-Fi ACL on RouterOS 7 - The WPA3 Retreat

In my previous post I described my setup with WPA3 on the 5GHz band and WPA2 with MAC filtering on the 2.4GHz band. The idea was sound: modern devices get modern security, legacy devices get extra protection through access control lists. Reality, however, had other plans. The WPA…

RouterOS syntax highlighting for Astro

While migrating my blog from Zola to Astro, I ran into an issue with RouterOS syntax highlighting. Astro uses Shiki for code highlighting, and Shiki doesn't include RouterOS out of the box. Here's how I solved it. The problem# When building the Astro site, I saw warnings like: […

No module named keyring

After running brew upgrade on my Mac M3, OfflineIMAP suddenly stopped working with this error: OfflineIMAP 8.0.1 Licensed under the GNU GPL v2 or any later version (with an OpenSSL exception) imaplib2 v3.06, Python v3.14.0, OpenSSL 3.6.0 1 Oct 2025 Account sync Peter: *** Proc…

Fixing bitwarden cli commonjs error

I have already write an update post about bitwarden backup. After running smoothly for months, my automated Bitwarden backup GitHub Action suddenly started failing. The error message was cryptic: Error [ERR_REQUIRE_ESM]: require() of ES Module /Users/peterbabic/backups/bitwarden/…