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!
Tag: children
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 }
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!):
Black Belt
Dan Q found GCARTJ6 The Pylon King
This checkin to GCARTJ6 The Pylon King reflects a geocaching.com log entry. See more of Dan's cache logs.
It took the geokid and I a moment or two to work out why this pylon was king, but once we had it was easy to find this (good-sized) cache. What a delightful Spring afternoon it was! And then the geokid found a tree under which the banks had eroded, making a perfect “hobbit hole” cave within its exposed roots (where he ate his ice cream).
Dan Q found GCARTJB Stop, Look… er… Listen?
This checkin to GCARTJB Stop, Look... er... Listen? reflects a geocaching.com log entry. See more of Dan's cache logs.
I’m volunteering at the building right next door to this bridge, this week, working on software that helps charities… among them, Samaritans! So finding this thematic cache was a must-do for the younger geokid and I on our lunch break today. A quick and easy find thanks to the clear telegraphing in the description, aided by our direction of approach. It’s a wonderful large bridge, and we got to watch a train zoom along the tracks beneath us as we crossed.
Dan Q found GC79ZK3 Wootton Word Wall
This checkin to GC79ZK3 Wootton Word Wall reflects a geocaching.com log entry. See more of Dan's cache logs.
I’ve never come across the TV series nor this kind of puzzle before, and opted to solve it in an unconventional way. We’re living for a week in an AirBnB nearby – one in a long series of short term lets while we and our insurance company find us sonewhere longer-term, following flood damage to our house last month.
This morning, the younger geokid and I came out for a walk with the geopup. After a little difficulty getting a GPSr fix we eventuality found a good-looking host, and after a few laps we had the well-camouflaged container in our hands. A good sized, well maintained container and an interesting puzzle, even if the way we solved it might be considered by some to have been cheating!
SL (using my own pencil; the one in the cache is blunt and I forgot to bring my sharpener), TFTC.
Dan Q found GC4MJR8 R’n’R #2 Skinny & Boney
This checkin to R’n’R #2 Skinny & Boney reflects a geocaching.com log entry. See more of Dan's cache logs.
Coming across from Finstock via R’n’R #9 (we’re absolutely doing this series in the wrong order!), the geokid, geopup and I made a poor choice by hugging the tree line rather than cutting out of the field and coming up the road: it was super muddy in the field at the points at which the footpath runs nearest to this cache, and we struggled to get through a particularly large puddle.
We initially made an effort to get “behind” the bush but eventually discovered we didn’t need to: the cache (whose nature we’d eventually managed to guess from the name) was accessible – with a bit of a stretch – from near the roadside.
And, in accordance with the theme, we’ve got a verse for you:
🎶 I used to wonder what caching could be,
🎶 Until you all shared this series with me.
🎶 Big adventure, tons of fun.
🎶 A beautiful cache; now it’s signed and done!
Dan Q found GC4MJY0 R’n’R #9 – Thumper
This checkin to GC4MJY0 R’n’R #9 – Thumper reflects a geocaching.com log entry. See more of Dan's cache logs.
The younger geokid and I had a plan, this morning, to drive out from our temporary (post-flood) accommodation in New Yatt, park at St. Peter’s in Wilcote, and then walk the dog around the area between Wilcote and Ramsden while we collect a few more caches from this excellent series.
Unfortunately our plans were scuppered early on when we discovered that a Scouts troop had completely occupied all possible parking spaces in Wilcote, and a platoon of children, supervised by some tired-looking adults, were beginning a walk around what looked likely to be the exact same routes we were planning.
So we came at it from the other angle. Driving around to Finstock, we parked near The Plough and came across the network of footpaths from the other end.
By the time we were at the corner of this field the kid and dog were enjoying running around in the Spring sunshine, and once we got to the GZ the cache itself was a quick and easy find… although the kid did take the time to stop and make a crude joke about the rabbit’s bum being corked!
Dan Q found GC4MJRJ R’n’R #3 – Not Quite A Well?
This checkin to GC4MJRJ R’n’R #3 – Not Quite A Well? reflects a geocaching.com log entry. See more of Dan's cache logs.
Another quick find for the sharp-eyed geokid, once we found the right host. Three for three and that’s time for us to turn about and go have our brunch. TFTC!
Dan Q found GC4MJRT R’n’R #4 – Changing Colours
This checkin to GC4MJRT R’n’R #4 – Changing Colours reflects a geocaching.com log entry. See more of Dan's cache logs.
The woods made it hard to get a good fix, but eventually we were in the vicinity of this excellent cache. It took a few different tree hosts before eventually we were looking in the right place. The younger geokid insists that I log that he caught sight of it before me!
Dan Q found GC4MJX6 R’n’R #6 – what YOU looking at?
This checkin to GC4MJX6 R’n’R #6 – what YOU looking at? reflects a geocaching.com log entry. See more of Dan's cache logs.
Came out for a dog walk from New Yatt this morning. The GZ is deep within thick brambles, but the younger geokid was up to the challenge and soon the unusual cache container was in hand. TFTC!
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.
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.
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.
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!
Dan Q found GCAWR04 Take an Allotment Break
This checkin to GCAWR04 Take an Allotment Break reflects a geocaching.com log entry. See more of Dan's cache logs.
The family and I are staying in Lyneham for a couple of weeks following the flooding of our house (on the other side of Witney). This morning the younger geokid, the geopup, and I came out for a walk to find this geocache as well as to explore Milton-under-Wychwood and tag some of the memorial benches for OpenBenches (1, 2, 3, 4).
We sat near the cache and the geokid immediately found it. Looks like we’re the second signatories of the New Year: somebody beat us to it on 5 Feb! TFTC.
“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.







