A home-grown system - a local CMS on node/react to maintain my content in postgres, which I then read into Astro to produce a static HTML site, and host that on github pages.
I use gohugo templates for my static site and for hosting either you han use github pages or netlify. I use netlify because it has some additional functionality.
GitHub Pages hosted on personal domain.
hosted ghost, $9/mth and it never bothers me so I continue to pay them.
SvelteKit using the static adapter to render everything to static HTML - except a few islands of with dynamic components like for the image gallery - and MDsvex to convert markdown to Svelte components with some extra remark plugins to simplify crosslinking, Tailwind for the CSS with some design copied from the excellent TailwindUI, Github Actions to push the static pages to GitHub Pages, and a CNAME on my domain pointing at the Pages URL. I have an Ink.js TUI utility to manage some bits of the blog like optimize static assets, update metadata or un/publish a post, etc.
For search I just generate a JSON file with all my posts and use Fuse.js to search against it locally in the browser.