I'm going to go against the grain and say use K8s from the beginning, or maybe more broadly gitops. I now use a mix of nuc and pi with Talos Linux and deploy with argocd. My entire stack is run from git repos. For me thats really easy and makes running my lab and selfhosted parts a lot less work.
Though the learning experience going from vm management to docker, to compose, to K8s, to gitops has been valuable.
I have 2 registered tlds in .dev and .net. I split their use using .net for personal/selfhosted sites and .dev for public facing.
I self host for the same reason I play Factorio, it's a constant stream of solving problems and adding new ways to do things. There is a lot to do, but you don't need to do everything right away. Like a lot of people said, just break it up. I use Vikunja to create a list of things I want to and then break those things down into hour or weekend projects.
There is a challenge in the "bootstrap" process. But once you get something going then its easier to keep adding. Stuff like "Reverse proxy, VPN, Cloudfare bullshit" is not super necessary at first. Start with just getting an app going at an ip address and port that's only accessible on you LAN, then add the other stuff.