About Chris Child

About Me

Hi, I'm Chris Child — a software developer based in the UK with a passion for building things, both digital and physical.

I'm a full-stack developer with deep experience in C# / .NET and the Microsoft ecosystem, alongside modern frontend technologies like React, TypeScript, and Node.js. I work extensively with Azure, Docker, and CI/CD pipelines in my professional life.

This blog, Hardcopy, is where I document things I've learned, problems I've solved, and tools I've found useful. It covers topics from Azure and .NET to Linux, Docker, and web development — essentially anything that I think might help someone else (or future me) save a few hours of debugging.

Beyond the Code

Outside of work, I'm a hobbyist who can't resist a new project. I run a personal UNRAID server with 82TB of storage, tinker with Home Assistant for home automation, and own a 3D printer that's still waiting for its first truly useful print. I have a chronic tool-acquiring habit that necessitated moving to a house with a bigger garage.

About This Site

Hardcopy is built with React Router v7, TypeScript, and TailwindCSS. Blog posts are authored as Markdown files, rendered with Marked and Highlight.js for syntax highlighting, and the whole site is statically pre-rendered and hosted on Cloudflare Pages. There's a full breakdown further down this page. The source code is available on GitHub.

Fun Facts

  • 🎮

    I got my start in web development thanks to Neopets — customizing my shop page was my first introduction to HTML and CSS

  • 🟠

    My favorite color is orange, which is immediately apparent to anyone who's met me — from my wardrobe to my workspace to my code editor theme

  • 💻

    I believe good documentation is as important as good code, though I don't always practice what I preach

Tech Hobbies(when I'm not coding)

🖨️

3D Printing

Owner of a 3D printer that's still waiting for its first actually useful print. Currently specializing in creating plastic dust collectors and conversation pieces.

🔧

Tool Collection

Have a chronic tool-acquiring habit that necessitated moving to a house with a bigger garage. I firmly believe n+1 is the correct number of tools to own.

💾

Home Server

Run a personal UNRAID server with 82TB of storage. It's like having my own personal cloud, except I'm also the IT department when things go wrong.

🏠

Smart Home

Home Assistant enthusiast who has automated nearly everything possible. Unfortunately, quite unsuccessful and most everybody else hates it.

Desk Setup(where the magic doesn't happen)

AMD Ryzen 7 7840HS, RX 7700S dGPU, 64 GB RAM. Modular, repairable, and yes — the bezel is orange.

28" 4K coding monitor with a 3:2 aspect ratio (3840 x 2560). More vertical space means fewer scrolls.

Low-profile mechanical gaming keyboard with RGB lighting. Clicky switches for that satisfying feedback — and to annoy everyone on calls.

The classic gaming mouse that moonlights as a productivity workhorse. Infinite scroll wheel is life-changing.

Compact macro pad for shortcuts, build commands, and whatever else I decide to automate this week.

The wireless charging desk mat. Keeps the mouse topped up without cables. Future-feeling, present-day useful.

1080p/60fps webcam. More camera than any video call has ever needed.

🎙️

Blue Yeti

The USB microphone that half the internet owns. Does the job, sounds decent, looks good on the desk.

Over-ear noise cancelling headphones. Essential for focusing when the smart home decides to do something unexpected.

Wireless earbuds for on the go. ANC when the over-ears are too much commitment.

Electric sit-stand desk. Mostly in the sitting position, if we're being honest.

💺

The Expensive Chair

It was expensive. It's comfortable. The name has been lost to time and a lack of bookmarking the receipt.

This Site(meta, I know)

Hardcopy is a statically generated blog built with modern web tech, then stripped of all client-side JavaScript at build time. The result is a fast, accessible, zero-JS site that still gets built with React. Here's how it all fits together:

The full-stack framework powering the site. Pages are pre-rendered at build time using the SSG capabilities, producing static HTML for every route.

Vite

Lightning-fast dev server and build tool. Handles bundling, HMR, and the build pipeline alongside the React Router Vite plugin.

The entire codebase is written in TypeScript for type safety and better DX. Auto-generated route types keep everything in sync.

Utility-first CSS framework handling all styling, combined with CSS custom properties for seamless dark mode and high-contrast theme support.

Blog posts are authored as Markdown files with YAML frontmatter. Rendered at build time with Marked and syntax-highlighted with Highlight.js.

The site is deployed to Cloudflare Pages for global CDN distribution. Fast, free, and zero-config for static sites.

🚫

Zero JavaScript

A custom post-build script strips all JavaScript from the rendered HTML. The site is fully functional with zero client-side JS — just pure static HTML and CSS.

Accessibility

Built-in theme toggle (dark/light mode), adjustable font sizes, and a high-contrast mode. All preferences are persisted in localStorage.

Comment threads on blog posts are powered by Disqus, loaded on-demand so they don't impact the static nature of the rest of the site.

Unraid Server(my own personal cloud, minus the SLA)

🖥️ Hardware

cpu

AMD Ryzen 7 1700

ram

32 GB DDR4

storage

82 TB HDD Array

cache

1 TB NVMe SSD (ZFS)

The heart of the media setup. Streams movies, TV shows, and music to every device in the house and beyond.

Radarr, Sonarr, Lidarr, and Prowlarr handle automated media management. NZBGet takes care of downloads, and Overseerr lets the household request content.

🤖

OpenClaw (VM)

AI agent running in a dedicated virtual machine. Because every homelab needs at least one AI experiment running.

Self-hosted email server for the bassett.network domain. Because trusting someone else with your email is so last decade.

All services are accessed securely via *.bassett.network through Cloudflare Tunnels. No ports exposed to the internet, no dynamic DNS headaches.

Home Assistant(everyone else hates it)

Running on a Raspberry Pi with a Sonoff Zigbee 3.0 dongle, coordinating somewhere between 20-50 devices across Zigbee, WiFi, and Thread/Matter (the IKEA BILRESA Thread border router is still not working, thanks for asking). Custom Lovelace dashboards serve as the control centre — which only I ever look at.

Devices & Integrations

The lighting backbone — bulbs, light strips, and motion sensors scattered throughout the house. The one integration that actually works reliably.

Zigbee sensors, switches, and plugs coordinated through a Sonoff Zigbee 3.0 dongle. The budget-friendly glue holding the smart home together.

Controls the heating via the Vaillant integration in Home Assistant. Smart schedules that nobody else agreed to, running on hardware nobody else understands.

Voice assistants in a few rooms. Mostly used by others to complain that the lights won't turn on properly.

📺

Smart TVs

Samsung and LG TVs integrated for media control and automation triggers. They know when you're watching and dim the lights accordingly.

Energy Monitoring

Tracking energy usage from the heat pump and home battery. Solar panels are on the roadmap. The dashboards are excellent, even if nobody else looks at them.

Automations

💡

Lighting Automation

Scenes, schedules, and motion-triggered lights throughout the house

🌡️

Climate Control

Smart heating schedules tied to presence detection and outdoor temperature

🎵

Media Control

Automated media player integration with lighting scenes

🔔

Notifications

Alerts for energy usage, device status, and anything else worth interrupting someone for

Networking(no VLANs, who has the time)

The router and firewall handling all traffic in and out. Solid, reliable, and blessedly boring.

4 Velop nodes flashed with OpenWrt acting as wireless access points. Enterprise-level flexibility at consumer prices.

🔌

Switches

4-5 switches scattered around the house. Honestly couldn't tell you the exact number without going and counting them.

All homelab services accessible via *.bassett.network through Cloudflare Tunnels. No VLANs though — who has the time?

Credentials & Education(the formal stuff)

Certifications

  • Microsoft Certified: Developing ASP.NET MVC Web Applications
  • Microsoft Certified: Developing Microsoft Azure and Web Services
  • UK Government SC Security Clearance
  • Full clean driving license (I promise I drive better than I code)

Education

Lancaster University

BSc (Hons) Computer Science — High 2:1

2008 - 2011

Lancaster and Morecambe College

BTEC National Diploma in IT — Triple Distinction

2006 - 2008

Dallam School

10 A*-C GCSEs inc. English and Maths

2000 - 2005

Software Tech(the day job and beyond)