Twenty Inches

I let the elder kid choose her lunch. She chose a pizza so huge that each slice is larger than her entire face. Needless to say, she needed a little help with it!

Two preteen children sit in front of an enormous pepperoni pizza.

×

A Selfhosted Static Site Editor

My 12-year-old was interested in learning some HTML and CSS and making her own website. If she were anybody else I’d point her at something like Nekoweb as a starter host because their web-based (VSCode-based) “Nekode” text editor makes writing your first static site simple.

But I’ve got a NAS sitting at home on a fibre connection, so I figured: I might as well just host something similar here.

Here’s how I did it:

1. DNS

I pointed her domain at my static IP, plus a subdomain for the “backend” interface. Suppose her site would be at example.net (and www.example.net) with the admin interface at admin.example.net: my DNS configuration might look like this:

@     10800 IN     A 172.66.147.243
www   10800 IN CNAME example.net.
admin 10800 IN CNAME example.net.

2. Caddy

I’ve got a Caddy webserver acting as a static server and a reverse proxy already, so I just added a new static site with a configuration like this:

example.net, www.example.net {
  root /volumes/example.net/public
  encode gzip
  templates
  file_server
}
The templates directive means that, if/when she wants to, she could use Caddy’s built-in SSI-like features. Or if she decides someday she’d prefer a static site generator then I can sort her out with shell access or something.

It probably wouldn’t be much harder to set up something like this from scratch on e.g. a Raspberry Pi: Caddy’s fast and easy to get set up.

3. Editor

I used the OpenVSCode Server Docker image to provide a browser-based VSCode interface in which she could edit HTML, CSS and JavaScript and drag-drop files from her local machine. I’m using Unraid on my NAS so I didn’t have to think much about running a new Docker container, but I guess that if I did then I’d have typed something like:

docker run -d \
  # 7890 is the port on my NAS that I'll proxy Caddy to:
  -p 7890:3000
  # /mnt/user/example.net is the path on my NAS;
  # /example.net is where it'll appear within VSCode:
  -v "/mnt/user/example.net:/example.net" \
  # this tells OpenVSCode-Server to mount the directory to begin with:
  -e OPENVSCODE_SERVER_ROOT=/example.net \
  gitpod/openvscode-server

Now all I needed to do was point Caddy at it. For the time being I simply restricted access to only “computers on my local LAN”, but it’d be easy enough to add authentication using basic auth and/or client certificates if she wanted to be able to work on her site from elsewhere:

admin.example.net {
  # Restrict access to 192.168.* LAN:
  @allowed {
    remote_ip 192.168.0.0/16
  }
  # Proxy permitted folks to the container:
  handle @allowed {
    reverse_proxy http://nas:7890
  }
  # Block everybody else:
  handle {
    abort
  }
}

That’s literally all it took to put together a web-based editing environment that publishes directly to a static website. And because it’s on my own infrastructure, it’d be trivially easy to modify it in the future if she decided to go in a different direction, e.g. a PHP site, or continuous deployment from a repo, or static site generation from a shell.

That’s all!

Here’s a test site I threw together using exactly this stack, demonstrating the entirely browser-based editing workflow (not shown is drag-and-drop to upload, but I promise that works too!):

F-Day plus 12

It’s now twelve days since a flood struck my house, causing the ground floor to be submerged under a couple of feet of water and ultimately leading us to kick off an insurance claim process.

A home office with its floor stripped down to poured concrete and an industrial dehumidifier running.
My regular home office of the last six years sits stripped-down, with no flooring, skirting boards, or power (with the exception of the specialised circuit powering an industrial dehumidifier).

And man, a home insurance claim seems to be… slow. For instance, we originally couldn’t even get anybody out to visit us until F-day plus 10 (later improved to F-day plus 7). The insurance company can’t promise that they’ll confirm that they’ll “accept liability” (agree to start paying for anything) until possibly as late as F-day plus 17. Nobody will check for structural damage until F-day plus 191.

Oh, and the insurance company have advised us to look for something like a “12 month let with a 6 month break clause”, which is horrifying. We could be out of our home for up to a year.

Dan, a white man, stands with his arms raised outside a nicely-decorated converted barn.
Right now, though, we’re spending two weeks in this holiday let about half an hour’s drive from our house. It’s pretty nice, except that we have to commute over the ever-congested single-lane Burford Bridge to get the kids to and from school every day2.

Some days it feels like being stuck in a nowhere-place… but simultaneously still having to make the regular everyday stuff keep ticking over. Visiting the house- currently stripped of anything damp and full of drying equipment – feels like stepping onto another planet… or like one of those dreams where you’re somewhere familiar except it’s wrong somehow.

But spending time away from it, “as if” on holiday except-not, is weird too: like we’re accepting the ambiguity; leaning-in to limbo. Especially while we’re waiting for the insurance company to do their initial things, it feels like life is both on hold, and not-allowed to be on hold.

A nervous-looking French Bulldog in a teal jumper looks up from under a desk.
The dog gets it. I had to take her to the house for a while on Monday3 and she spent the whole time leaning against my feet for reassurance.

And I worry that by the time they’re committed to paying for us to stay somewhere else for at least half a year, they lose any incentive they might have to contract for speed. There’s no hurry any more. We’re expected to just press pause on our home, but carry on with our lives regardless, pretending that everything’s normal.

So yeah, it’s a weird time.

Footnotes

1 I’m totally committed to this way of counting the progress, which I started on F-day plus 3. I get the feeling like it might be a worthwhile way of keeping track of how long all of this takes.

2 Normally, the younger and older child are able to get to school on foot or via a bus that stops virtually outside our house, each day, so an hour-plus round-trip to their schools and back up to twice a day is a bit of a drag! We’re managing to make it work with a little creativity, but I wouldn’t want to make it a long-term plan!

3 And do some work from there, amidst the jet engine-like noise of the dehumidifiers!

× × ×

“I’m glad I’m not the only one”

Still at MegaConLive. I’ve not done this kind of con before (and still wouldn’t, were it not for my tweenager and her various obsessions). Not my jam, and that’s fine.

But if there’s one thing for which I can sing it’s praises: everybody we’ve met is super friendly and nice. Sure, you can loudly telegraph your fandoms and identities via cosplay, accessories, masks, badges, bracelets or whatever… but it’s also just a friendly community of folks to just talk to.

The fashion choices are, more than anything, just an excuse to engage: a way to say “hey, here’s a conversation starter if you’d like to talk to me!”

Overheard a conversation between my kid and another of a similar age, and there was a heartwarming moment where the other kid said, “oh wow, I thought I was the only one!” Adorbs.

Convention stage with MegaConLive branding.

×

MegaConLive London

My 12-year-old’s persuaded me to take her to MegaConLive London this weekend.

As somebody who doesn’t pay much attention to the pop culture circles represented by such an event (and hasn’t for 15+ years, or whenever it was that Asdfbook came out?)… have you got any advice for me, Internet?

67 Bananas

I think my “six seven”-obsessed younger child was in the kitchen with a biro earlier. How do I know, you ask?

Close up of a bunch of bananas. The numbers 6 and 7 have been drawn on them in ball point pen.

×

Note #27906

The younger kids’ taekwondo school put on a free ‘new years workout’ class this morning. It was pretty awesome.

My watch says my heart rate averaged 146bpm, peaking at 169bpm. It’s possible I’m not as fit as I used to be. 😅

But at least I don’t feel like I might die, like I did during the ‘dads go free’ promotion last year. Progress?

In a gym environment with punchbags visible in the background Dan, a white man wearing a black t-shirt, throws a right jab, alongside others who are doing the same.

×

Bee

As part of my efforts to reclaim the living room from the children, I’m building a new gaming PC for the playroom. She’s called Bee, and – thanks to the absolute insanity that is The Tower 300 case from Thermaltake – she’s one of the most bonkers PC cases I’ve ever worked in.

On a desk cluttered with computer parts, a partially-built PC stands in an irregular-hexagonal prism shaped case with vented yellow sides and a three-pane angled glass front.

×

Note #27806

I asked the younger child to “help” me calculate how much Yorkshire pudding batter to make for this Christmas dinner.

Dan, a white man with a beard and blue hair, wearing a WordPress-themed Christmas jumper, beats a bowl of batter.

“Well,” he began, “I’m going to want FIVE Yorkshire puddings, soo…”

×

Duck shunning

I’m not sure which of our children was last in this bath, but the configuration in which they’ve left their toys makes me feel as though I’m the subject of some kind of waterfowl-related shunning.

Perhaps they finally got wind or my heretical opinions on the God of Ducks (may he throw us bread) and they’ve collectively decided to disassociate from me?

Four thematic rubber ducks sit along the edge of a fitted white bathtub, seemingly deliberate in their placement which sees them facing directly away from the bather and towards various shampoo bottles and a candle in a glass.

×

Happy Polyamory Day 2025

Happy Polyamory Day y’all. (Plus max props to Petra without whom I’d have forgotten about it, like most years.)

Closest thing I did to celebrating it was going out to the pub last night for beer and food with my metamour, while our partner-in-common took our kids to see a film. Polyfam life isn’t always glamorous; but it is full of love.

Distractingly Amazing

Found the younger child not-in-bed but dancing around his room, using his pyjamas as perhaps some kind of streamers or flags.

Me: “Why aren’t you in bed?”
Him: “I’m sorry; I got distracted by how amazing I am.”

Hard to argue with that.