Building this site from scratch
I’ve built a roguelike on an engine I wrote myself, trained neural networks to teach creatures to walk, and built a voice assistant that runs entirely offline in my house. And until today? None of that lived anywhere a single person could actually go and look at it.
So, this! A place to put the work, and a place to write about it while it’s still in progress instead of only once it’s finished.
Why hand-written HTML
The obvious move here is a template — a themed static site generator, or one of those drag-and-drop portfolio builders. I went the other way, and the reason is boring but real: I want to be able to fix it in two years.
Every framework I could have picked has a version number attached to a clock.
Plain HTML and CSS don’t! There’s no build step here, no
node_modules, nothing that goes stale while I’m off being
busy with something else. Adding a post means copying a file and filling it
in. That’s the entire workflow, and it’ll still work when I have
completely forgotten how any of this is put together.
The best tool for a personal site is the one that still runs after you completely ignore it for a year.
The other reason is that I’m actually learning this properly. I’ve
been working through HTML structure from the ground up — what nests
inside what, why <article> and <section>
are different things — and there is no faster way to learn that than
having a real site that visibly breaks when you get it wrong. Diving off the
deep end is my specialty.
The look
The palette isn’t invented, it’s pulled straight off the Timeless title art — hot pink, electric cyan, amber — sitting on near-black, with a faint drafting grid and CRT scanlines behind everything at an opacity you only really notice if you go looking for it. I wanted it to feel like a game menu without actually pretending to be one.
Everything runs off CSS custom properties in one block at the top of the stylesheet. Change one hex value up there and the whole site changes colour. That was on purpose, because I know myself — I’m going to want to repaint this the second it’s been live long enough to annoy me.
Where it lives, and where it is going
Right now this is served by GitHub Pages, which is free, always up, and asks nothing of me beyond pushing a commit. That was the right first step — get it live, get a URL, stop the whole thing from existing only on my desktop. It lives at jonjoe1001.dev now, which cost me twelve dollars and felt WAY better than it should have.
The longer-term plan is the more interesting bit though. There’s a TrueNAS box sitting in my house that’s already on twenty-four hours a day, and it can serve this site perfectly well. The catch is that self-hosting off a home connection usually means port-forwarding to your own IP, which is a security problem and a dynamic-DNS problem at the exact same time.
The way around it is a Cloudflare Tunnel: the NAS opens an outbound connection to Cloudflare, visitors hit Cloudflare, and the traffic comes back down that tunnel. No open ports, no exposed home IP, free TLS. The only thing I give up is uptime — the site becomes exactly as reliable as my power and my internet, which is a genuinely funny thing to sign up for.
Which is fine! The copy on GitHub isn’t going anywhere. Same files, two hosts, and I get to learn the self-hosting side on something where nothing actually breaks if I get it wrong.
Next
A proper write-up of how the neuroevolution in Emergent Evolver actually works — specifically the part where the network gets to add its own neurons, which is hands down the bit that surprised me most when it started working. WELCOME FRIENDS, LET’S GET CURIOUS!