wilhelm@forfot.net

Trøndelag, Norway

Wilhelm Forfotbuilds things that report back

By day I write C# — webshops, content platforms and the plumbing that holds them together. After hours I put microcontrollers into things that were never meant to have one, and run far more servers at home than anyone needs.

Written with an AI. I'm dyslexic; it isn't.

  • C# / .NET
  • nopCommerce
  • Umbraco
  • Blazor
  • TypeScript
  • Go
  • ESP32

About

The short version

I'm a developer at HK-Bits, where most of my days are spent on e-commerce and content management for Norwegian businesses — building the plugins, integrations and CMS structures that turn a stock platform into something a client can actually run their business on.

I like the unglamorous parts: getting an upgrade path right, making an integration fail gracefully at three in the morning, keeping a codebase something the next person can read. And I like knowing how the whole stack behaves, from the SQL query to the reverse proxy in front of it.

Outside work that same curiosity points at hardware. If a device has a radio, a serial port or an undocumented protocol, there's a decent chance I've had it open on the desk trying to make it talk to Home Assistant.

Work

What I do professionally

Almost all of it runs on .NET. Five areas cover the bulk of it.

E-commerce

nopCommerce plugin development

Custom plugins for webshops: payment and shipping integrations, ERP and PIM sync, pricing rules, product data pipelines. Shared functionality lives in versioned NuGet packages so a fix reaches every shop instead of being copy-pasted into each one.

Content management

Umbraco, from v9 to v17

Document type architecture, block-based page building, uSync-driven migrations between environments, custom property editors and backoffice adjustments — including hybrid setups where Umbraco supplies the editorial content rendered inside a nopCommerce storefront.

Applications

ASP.NET Core and Blazor

Line-of-business applications and multi-tenant SaaS: Blazor Server and WebAssembly, EF Core with tenant-scoped data, .NET Aspire for orchestration, Entra ID and Azure AD B2C for authentication, PostgreSQL or SQL Server underneath.

Across departments

WordPress support for the rest of the house

Other departments run their sites on WordPress, and I'm who they come to when one needs to do something it doesn't do out of the box: custom Divi modules, WooCommerce adjustments, plugins written in PHP rather than assembled from the plugin directory — and the debugging session when a site starts behaving oddly.

Internal tools

Tooling and data plumbing

CRM and reporting tools for internal use, and a self-hosted MCP server that makes survey data available to the people who need it — behind Entra ID authentication, exposing anonymous aggregates only, with per-area access rules rather than a shared password.

Toolbox

Things I reach for

Roughly in order of how often they're open.

Languages

  • C#
  • TypeScript
  • JavaScript
  • Go
  • PHP
  • Python
  • SQL
  • C++ (embedded)

.NET

  • ASP.NET Core
  • Blazor
  • Razor / MVC
  • EF Core
  • .NET Aspire
  • MudBlazor

Platforms

  • nopCommerce
  • Umbraco
  • uSync
  • WordPress
  • WooCommerce
  • Divi

Data

  • SQL Server
  • PostgreSQL
  • Redis
  • MySQL

Infrastructure

  • Docker
  • Proxmox
  • Linux
  • nginx
  • Caddy
  • GitHub Actions
  • Azure

Hardware & home

  • ESP32
  • PlatformIO
  • ESPHome
  • ESP-NOW
  • BLE
  • MQTT
  • Home Assistant

Off the clock

What I build when nobody asked for it

These are the projects that keep me learning. None of them are C#, which is rather the point.

Up to 9

Live

A multiplayer card game a friend and I invented, then actually shipped. Real-time play over WebSockets, bots with three difficulty levels, ranking and achievements, two languages, a Discord bot running inside the same process, and an install-to-phone build. Deployed straight from GitHub Actions.

Go · TypeScript · PostgreSQL · Caddy

Humid Hub

Running

A touchscreen hub on an ESP32-S3 with battery-powered sensor nodes reporting temperature and humidity over ESP-NOW. It also drives the house lighting: the BLE protocol was worked out by hand — challenge/response auth and AES keystream — so the lights answer directly instead of going through the vendor's gateway.

ESP32 · LVGL · ESP-NOW · BLE · MQTT · Home Assistant

Robot mower telemetry

In progress

A budget robot mower with no working app and no cloud worth trusting. An ESP32-C3 bolted inside it and a power-metering plug at the charging station turn that into stuck alerts, battery graphs, mowing time per day and a start button in Home Assistant.

ESP32-C3 · ESPHome · Home Assistant

The home lab

Always on

One unglamorous Ubuntu box, and everything on it is for people I know: modded Minecraft servers for friends — including a pack put together for the group actually playing on it — other game servers when someone asks, and the everyday services my family uses. Reverse proxy, certificates and backups in front, so it stays up without me thinking about it.

Ubuntu · Docker · Minecraft (Forge) · nginx · Caddy

Car telemetry

Rolling

Scripting on an open-source vehicle monitoring module so the car reports state of charge, consumption and position to A Better Route Planner — live, on its own, without an app subscription in the middle.

JavaScript · OVMS · CAN

Agent tooling

Running

Self-hosted MCP servers, editor hooks and a session time tracker: infrastructure that lets AI coding tools reach real systems safely — with authentication, scoped access and an audit trail, rather than an API key pasted into a config file.

Python · FastMCP · SQLite · OAuth

3D printing

Between jobs

Enclosures, brackets and the mounts that hold the projects above together. Most of the actual engineering went into making the slicer behave on Linux, which is its own small hobby.

FlashForge · FDM · Linux

Spec sheet

The details

Based inTrøndelag, Norway
Day jobDeveloper at HK-Bits
Ships mostlyC# on .NET
Also writesTypeScript, Go, PHP, Python, a little C++
EditorsRider, PhpStorm, and a terminal
DesktopArch-based Linux, KDE Plasma, fish shell
Runs at homeAn Ubuntu server, Docker, Home Assistant
Currently buildingA card game, and a mower that knows when it's stuck

Contact

Say hello

Questions about nopCommerce or Umbraco, an idea for something that should be talking to Home Assistant, or just want to compare home labs — mail is the surest way to reach me.

wilhelm@forfot.net