Mirroring a static Hugo blog onto ATProto with standard.site and Sequoia, plus the GitHub Actions wiring that republishes the records on every push without any manual steps.
How I handle static SEO meta tags, canonical URLs, Open Graph tags, and prerendered HTML for Vite and Vue SPAs without adding SSR.
My practical Kamal vs Coolify comparison for solo SaaS apps: when I prefer one-command deploys, when a dashboard helps, and why I use Kamal with Hetzner.
I've loved Markdown since the day it was a Daring Fireball post. It's a simple rich text format that gets the job done, and it's used everywhere. Markdown is supported out of the box on PowerShell 6+, using the ConvertFrom-Markdown command.
Replit and browser app builders are fine for sketches. If the app matters, I want source code, a normal repo, terminal agents, and boring deployment.
My SaaS hosting cost comparison for Hetzner, Vercel, and Render: real numbers from running production apps on Hetzner VPS servers with Kamal and PostgreSQL.
A reference page for making stuff using Bluesky's public API.
A summary of interesting projects in the ATmosphere. Things online built on the AT Protocol, and other information surrounding it.
Someone on Reddit asked about deploying a custom vibe-coded app for work, installed on a local server. They could not code their way through problems,
No passwords. No separate registration form. No "confirm your email" step after sign up. The user enters an email address, gets a link, clicks it, and
Why I self-host my SaaS apps on Hetzner with Kamal: lower hosting costs, more control, local PostgreSQL performance, and simpler deployment in 2026.
How I use Terraform with Kamal 2 to provision a Hetzner server, configure DNS, and deploy small SaaS apps without paying for a separate PaaS per project.
Push-to-deploy has been a solved problem for a while. I used Heroku years ago and Render for the past 2 years — both handle deployment well. But I
When building frontend apps, getting the UI into different states is tricky because local APIs are fast and rarely fail. You want to see what happens
I built MyOG.social, a tool that automatically generates OG images for your pages. OG images are the preview images that show up when you share a link
I needed a way to expose local dev servers to the internet for webhook testing. ngrok works, but Cloudflare Tunnel is free and lets you use your own
How I set up PostHog analytics across frontend and backend apps, including event tracking, user identification, privacy choices, and server-side events.
I'm still thinking about this thing that everyone pretty much decided to stop thinking about in 2019.
Some thoughts on Ghost after trying it out for approx. 10 minutes.
Here are some bad ideas that you could wage your company on, if only you can drum up the adequate hype.
Compare middleware stacking with embedded delegation in Go HTTP servers. Learn when to override ServeHTTP for simpler request handling.
In the office, on top of hills, on trains, in fields, on the computer. Oh I've been ever-y-where, man, I've been ever-y-where
Build a link blog without a backend using Hugo and markdown. Track reading, articles, and activities with yearly detail pages and RSS filtering.
A Terraform and Kamal 2 demo repo for deploying a frontend, backend, and database stack on one VPS, plus notes on my current Hetzner setup.
The story of why you’re on charlesharri.es.
A technical walkthrough of building a customizable Framer Code Component for Buttondown email signups, complete with Property Controls and open source code.
Hi, I started a side project recently. It's currently an MVP. It’s a monitoring tool for websites and web services. You give it a list of URLs and
When your Facebook account gets hacked, you're on your own. You may be saved by either 1. luck, or 2. having two-factor authentication enabled.
How to cache bust static assets when you're just running a naïve script for website deploys.
Docker is very good and very powerful and absolutely not what I need in my life right now.
Implement client-side HTTP caching with ETag headers. Learn If-None-Match, 304 Not Modified responses, and weak validation in Go servers.
Troubleshoot CORS errors with this practical guide. Learn Access-Control-Allow-Origin headers, preflight requests, and domain allowlisting in Go.
Arc works with my crummy old laptop now! Is that enough to make me want to switch to it fulltime?
It's possible to listen to Wikipedia being edited in realtime—and it sounds pretty good!
Is there any point in making websites look good, beyond their normal ease of use? And if so—who are we doing it for?
Google Search has been having a Rough Time of it lately, but don’t feel bad: it’s their own fault.
No build step. No dependency management. Radically simplify the web. Transcend npm. I believe in you.
Remember when I said the web is good? I lied! Sort of. It's web developers who are bad.
Dropping CI/CD with GitHub Actions and going back to deploying my website by hand. It's artisan!
A website that is actually a spooky castle that you can go visit from the comfort of your very own personal sofa.
Host Google Fonts locally in Hugo without CDN dependency. Download woff2 files, configure CSS, and improve performance while maintaining GDPR compliance.
You've heard of dark mode, now check out colour mode.