Arbeten · Selected work

Seven engagements,
described without adjectives.

Client names are withheld where the contract requires it. Everything else — the stack, the numbers and the parts that went badly — is as it happened.

Nordic logistics group 240 staff · Sweden & Denmark

Off AWS eu-west-1, onto Elastx and Hetzner

Eleven services, three managed databases and a queue nobody had documented. We audited for six weeks, rewrote the estate as NixOS configurations, replaced the managed pieces with PostgreSQL and MinIO, and cut over one service a week with rehearsed rollbacks. The queue turned out to be load-bearing; finding that out cost us a fortnight we had not quoted.

nixos wireguard pf rails

Migration to European hosting →

−61%
Monthly infrastructure spend
0
Unplanned minutes of downtime during cut-over
14 wks
Audit to final decommission
Research institute Public sector · Finland

A WordPress estate replaced by one Jekyll site

Four WordPress installations, sixty-one plugins between them and a standing quarterly patch bill. We modelled the content as Jekyll collections, built a bespoke theme with a WCAG 2.2 AA budget enforced in CI, and gave the communications team a Git-backed editor they took to in an afternoon. The site now builds in eleven seconds and is served from Stockholm.

jekyll ruby nixos

Jekyll sites & documentation →

38 ms
Median time to first byte
−94%
Hosting and maintenance cost
61 → 0
Plugins requiring quarterly patching
Engineering consultancy 90 staff · Sweden

Jira to Redmine, with fourteen years of history

A seat licence that had tripled in four years, and an archive nobody wanted to lose. We migrated 41,000 issues with numbers, attachments, authors, timestamps and relations preserved, rebuilt the workflows to match how the teams actually work, and put the whole installation in a NixOS module. Backups are restore-tested monthly and the evidence is emailed to the client.

redmine rails nixos

Redmine, hosted properly →

41,000
Issues migrated with history intact
€38k
Annual licence cost removed
1 VM
Runs the whole company's tracker
Medical device manufacturer Regulated · Germany

Local LLMs behind the firewall

The engineering team wanted code assistance; the data protection officer would not sign off on source code leaving the building. We specified a single GPU host, installed Ollama declaratively on NixOS, exposed an OpenAI-compatible endpoint over WireGuard, and indexed the internal document store for retrieval. Frontier-model quality it is not. For summarising, classifying and drafting, nobody has noticed.

ollama nixos emacs wireguard

Local AI, run properly →

0 bytes
Prompts leaving the perimeter
1 GPU
Serving 70 engineers
4 wks
Specification to sign-off
Municipal utility Public sector · Sweden

A network you can read out loud

Four sites, two data centres and a firewall configuration that had been appended to since 2011. We rebuilt the edge on pf with macros and tables, replaced the vendor VPN with a WireGuard mesh, and put both under normal code review. The ruleset went from 900 lines nobody understood to 140 that a new engineer reads on their first morning.

pf wireguard nixos

Infrastructure & networks →

900 → 140
Lines of firewall ruleset
1 file
Describes the whole edge
−100%
Vendor VPN licences
Field services company Utilities · Norway

A hundred handsets that are not a data broker

Technicians in the field needed a rugged, auditable device with no advertising identifier and no automatic cloud sync. We evaluated Ubuntu Touch, Sailfish OS and postmarketOS against their hardware, built a field application against the winning platform, and wrote the fleet provisioning as a Nix flake. The evaluation itself was the most valuable deliverable — two of the three were wrong for their device roster, and the report says why.

ubuntu-touch sailfish postmarketos
112
Handsets in the field
3 → 1
Platforms evaluated, one adopted
10 yrs
Stated support horizon
Public hackathons Sweden · every year since 2015

Ten years of not missing a year

The first was at Linköping Science Park in 2015, two years before Chenborg existed — the events came first and the company grew out of the people who kept running them. Since then, at least one public hackathon a year: format, network that survives eighty laptops, mentors at two in the morning, a code of conduct that is enforced rather than printed, and the Monday-morning work of deciding which projects continue and what gets published. We lend ThinkPads to anyone who arrives without one.

linux-tux jekyll nixos
2015
First event, Linköping Science Park
Every year
At least one public hackathon since
0
Years missed

Nästa steg

Tell us what you are running.
We will tell you what it should be.

A first conversation costs nothing and takes forty minutes. You will leave it with an honest opinion about your stack — including, occasionally, that you should change nothing at all.