Moving away from a static site

Up until today, my site was hosted by as a static site. I've used several static file hosts (including S3, Cloudflare, open source, custom ones with custom telemetry, etc.). During this time, I've been working primarily on my site generator, making sure that I'm working with something I'm happy with and that I like. By focusing on just the generator and not the rest of the server, I was able to go through several iterations, including a rewrite earlier this year (see Rewriting my site generator). However, I'm now I'm ready to move from just generating HTML pages to having a full on blog.
To move to a online-based blog, I needed to have an admin panel. Something I could go in and do admin-only stuff. When I moved to a custom file server, I also added a panel to show simple metrics (like how many people see an article). I didn't do anything crazy, just simply have a few tables and charts. It was a start, but only a start. Since it was a static file host, I still had the issue of having two pieces of software: a generator and a server. They weren't one and the same. This made things more comlicated from a writing perspective.
For infrequent posting, it wasn't much of an issue. I would just edit in neovim, compile locally, test, then git push, then SSH onto my server, then git pull, then run a deploy script, then login to my admin panel, and clear my in-memory file cache. It was tedious, and I had to do it anytime I noticed a mistake. I also had to do this for any mistake I found. Using a static site hosting provider was slightly better, but not by much. Plus, there were credits. I didn't have a better way since I didn't have software that could manage the site it was serving.
At least, until today.
After writing my series on making C++ channels (see Building Channels in C++: Part 1 - The Adventure Begins), I realized that I was really enjoying writing a lot more frequently. But, I didn't have the tools needed to make it happen. I could try doing an off-the shelf generator. But I've spent several years building, refining, and then scrapping and rewriting my custom generator. I had something I really liked, and nothing else was quite like it.
So, I built my own blog software. I used my same HTML generator code, I just adapted it to write to an in-memory buffer rather than straight to disk. I also kept the same foundational idea of an admin panel. However, I redid it. My first panel was using React, which was both overkill and clunky for what I needed. I switched to using plain JavaScript (no build, no components, just straight DOM manipulation). Also, since the admin panel was going to be used just by me, I chose to use xp.css to style it up. I think it was a great choice.
As for making it "single page" like, I just used iframes. No HTMX. It turns out, if you aren't doing cross-domain and cross-sub-domain stuff (which is my use case), iframes are a really good option. In those cases, you can control the parent window from the iframe window, which allows you to do things like have global keys for shotcut navigation which work from inside an iframe. Pretty neat!
As for my blog editor, I'm using Monaco Editor which is a browser-compatible port of the core editor from VS Code. Sure, it doesn't have all the extension support VS Code does, and it's a little harder to use without bundling. But it works. I also got a VIM plugin working so I can use vim motions.
I also got a preview system working, using iframes. It turns out, you can use JavaScript to set the contents of an iframe. This allows me to debounce a keyup event listener to send a POST to my server, and then update my iframe with the HTML I get back. That way I can see exactly what will be rendered as I type. And, I've linked article changes to cache invalidation, so now that's automatic.
I also have a very simple article scheduling feature. Which is really nice. When I was writing a lot, I was struggling to keep things scheduled properly since I had to use git branches for each day. At one point, I had merged two branches before merging into my main branch, which caused me to publish two days, and then I had to undo it. I also had a day where I had the article ready, but I was so busy I forgot to login and actually publish it. So, this will be a really nice feature!
I also have a basic backup and system where I can download the entire site and then restore it at will.
So, yeah, a really big upgrade. There are most likely some bugs I need to work out. But overall, it's really nice.