Projects, experiments & technical notes

This is a mixture of personal projects, things I have worked on at work and technical problems I found interesting. Some are finished, while others are still changing as I learn more. Client names and identifying details have been left out.

Personal project · ongoing

My TrueNAS homelab upgrade

Ongoing

My homelab is an existing TrueNAS server that I have gradually adapted as my needs have changed. The current upgrade is focused on giving it substantially more CPU and GPU capability for local AI, while keeping the storage and self-hosted services it already runs.

TrueNAS SCALE Ryzen 9 3950X 78 GB RAM TITAN RTX 24 GB Ollama OpenWebUI Docker Windows Server 2025 Active Directory DHCP iPXE MDT Cloudflare Tunnel Tailscale

The current upgrade

The server is keeping its ASRock X470 Taichi motherboard and 78 GB of RAM. I am upgrading the Ryzen 5 3600 to a Ryzen 9 3950X, replacing the 550 W power supply with an 850 W unit, and replacing the GT 710 used for display output with an NVIDIA TITAN RTX. The goal is to add useful local-AI capability without replacing the existing server or changing what it already does well.

What runs on it

  • TrueNAS SCALE for storage and application hosting
  • Nextcloud for private file access and synchronisation
  • AdGuard Home and Invidious for network and media experiments
  • Ollama and OpenWebUI for local ai
  • A Windows Server 2025 virtual machine providing Active Directory and DHCP for the local network
  • The portfolio website, stored on the Windows Server VM and published through its own Cloudflare Tunnel
  • A local TFTP server hosting the iPXE boot files and operating-system menu, alongside a standard Microsoft Deployment Toolkit installation managed through Deployment Workbench
  • SMB file shares provided directly by TrueNAS SCALE
  • Cloudflare Tunnel and Tailscale for different remote-access paths

Storage layout

  • Two 7.68 TB Intel SSDPE2NU076T8 NVMe drives for the main file storage
  • A 1 TB Kioxia Exceria G2 NVMe drive for virtual machines and TrueNAS applications
  • A 250 GB Kingston A2000 NVMe drive used as the TrueNAS boot device
  • A 6 TB Toshiba MG06ACA600E hard drive used for video recordings

What I have learned

Most of the learning has come from the awkward parts: permissions, container networking, virtual machines, local network services, iPXE and MDT deployment, GPU access, service dependencies and working out whether a fault belongs to the application, the guest or the host.

// simplified network layout
Internet
   ├── Cloudflare Tunnel
   │      on TrueNAS SCALE
   │      └── Nextcloud
   │
   ├── Cloudflare Tunnel
   │      on Windows Server VM
   │      └── Portfolio website
   │
   └── Tailscale
          └── Local network access

Local network
   └── TrueNAS SCALE server
          ├── SMB file shares
          ├── AdGuard Home
          ├── Invidious
          ├── AI
          │      ├── OpenWebUI
          │      └── Ollama
          │             └── TITAN RTX
          └── Windows Server 2025 VM
                 ├── Active Directory
                 ├── DHCP
                 ├── Portfolio website files
                 ├── Local TFTP server
                 │      ├── iPXE boot files
                 │      └── OS selection menu
                 └── Microsoft Deployment Toolkit
                        ├── Deployment Workbench
                        ├── Deployment share
                        └── Task sequences + images

Tailscale provides access to the wider local network, so the services are listed once under the TrueNAS SCALE host rather than duplicated beneath Tailscale. The Windows Server 2025 VM runs a local TFTP server for the iPXE boot files and operating-system menu. MDT is installed normally on the same VM and managed through Deployment Workbench, with its own deployment share, task sequences and images.

Personal project · established

Off-site TrueNAS backup server

In use

A separate TrueNAS SCALE system kept off-site as a secondary copy of important data from the main server. This server already existed before the current 3950X and TITAN RTX upgrade and has its own hardware and purpose.

TrueNAS SCALE Syncthing Dell OptiPlex 7010 SFF Core i7-3770K 24 GB DDR3 22 TB HDD Off-site storage

Repurposed hardware

The backup server is built from a Dell OptiPlex 7010 SFF. It originally used a Core i5-3470 and 8 GB of RAM, but I upgraded it to a Core i7-3770K and 24 GB of DDR3 to provide more threads and additional memory while continuing to reuse the existing system.

Storage

  • A 22 TB Western Digital WUH722222ALE6L4 hard drive stores the replicated data
  • A 250 GB Samsung 870 EVO SSD is used for the TrueNAS SCALE installation

Replication

Syncthing is installed on both TrueNAS servers. The main server automatically sends the selected data to the off-site server every three days, providing a separate copy away from the main system.

// off-site backup path
Main TrueNAS SCALE server
   └── Syncthing
          └── Every three days
                 └── Off-site TrueNAS SCALE
                        ├── 22 TB backup drive
                        └── 250 GB boot SSD

The backup server is a separate physical machine kept off-site, rather than part of the current main-server hardware upgrade.

A problem I worked through

PowerPoint template deployment through Intune

Work example

An existing Intune deployment for a corporate PowerPoint template was reporting as not installed across the assigned devices. I created a test group, assigned a user and worked through the existing package to identify why Intune was not detecting it correctly.

Microsoft Intune Win32 app PowerShell User context Detection rules

The problem

The PowerPoint template had already been packaged as an Intune Win32 application, with existing PowerShell install and uninstall scripts. The detection rule had been configured incorrectly, so Intune continued to report the application as not installed. After correcting the detection rule and testing the deployment again, I found a separate issue in the existing installation script: it assumed that the user's %APPDATA%\Microsoft\Templates folder was already present.

What I did

  • Created a test group and assigned a test user
  • Reviewed the existing Intune Win32 application and deployment settings
  • Identified and corrected the broken detection rule
  • Retested the application assignment and detection behaviour
  • Reviewed and tested the existing PowerShell scripts
  • Found that the installation script did not handle a missing Templates folder
  • Updated the deployment logic so the required directory could be created when absent

The useful bit

What initially appeared to be one deployment problem was actually two separate issues. The incorrect detection rule caused Intune to report the application as not installed, while the existing script also assumed that the destination folder was already present in the user profile.

Internal support tools

Internal support tools at Shiptheory

2022–2025

I put together and maintained several small PHP-based internal web tools to make repetitive support tasks easier. I used AI-assisted coding during development, then tested, hosted and maintained the tools around the team's actual workflows.

PHP Apache ngrok Shiptheory API HTTP GET & POST JSON Microsoft Access Bulk actions

Shipment recovery & retrieval

  • Allowed failed shipments to be retried in a more controlled way
  • Fetched shipments that had not yet been downloaded into Shiptheory from the connected sales channel
  • Fully automated individual and bulk retrieval through GET requests to an internal endpoint
  • Processed large batches far more quickly than handling each shipment manually one by one
  • Logged shipments downloaded or retried through the tool into a Microsoft Access database

Web-based API client

I also put together a browser-based client for the Shiptheory API. It allowed the request method and endpoint path to be changed, supported JSON request bodies and displayed the returned API data.

This meant a support agent did not need to install and configure a separate API client such as Postman. The tool provided a ready-to-use interface and automatically applied the required request headers, including Content-Type: application/json and Content-Length.

  • GET requests for retrieving information already held in Shiptheory
  • POST requests for sending data into Shiptheory
  • Customisable endpoint paths rather than a fixed set of actions
  • JSON request bodies for endpoints that required submitted data
  • Automatic request-header handling, removing the need for agents to configure each request manually
  • No separate Postman installation or local API-client setup required

How they were hosted

The tools were built in PHP and hosted on a local Apache web server. When they needed to be reached over the internet, I used ngrok to expose the local site externally.

Why they mattered

These were not large software projects, but they removed several repetitive steps from the support workflow. Bulk shipment batches could be processed automatically instead of one by one, while still being logged for reference. The API client also gave agents a prepared browser interface, avoiding the need to install Postman and manually configure methods, endpoints, JSON bodies and headers for each request. Maintaining the tools gave me practical experience with PHP, Apache, API behaviour, request methods, JSON, logging, exposing local services through ngrok and handling edge cases.

Personal website

hello.henryforber.co.uk

Live project

I put this site together to have somewhere more personal than LinkedIn to show my experience, interests and the things I work on outside support tickets.

HTML CSS Responsive design Cloudflare Analytics SEO basics

Design choices

The site is intentionally lightweight: plain HTML and CSS, no framework and no large animation library. I used AI-assisted coding while developing the site, then tested, edited and deployed it myself. The terminal influence is there because I like it, but I have tried to keep it restrained enough that the content still feels professional.

Under the surface

  • Responsive layouts for desktop and mobile
  • Custom favicons and social-sharing metadata
  • A sitemap, robots file and security contact
  • Basic Apache configuration, security headers and Cloudflare traffic analytics

The July 2026 refresh moved the site away from being a duplicated online CV and gave these projects and technical notes their own space.

Learning & certifications

Certifications sit here separately from the projects above. MD-102 is the next one I plan to work towards when time allows, with most of my attention on the Intune, Autopilot, application deployment and compliance topics.