henning.tech

Henning Berge · Bryne, Norway · est. 2013

Software
developer who builds across stacks.

Full-time at Grensesnitt AS

I’ve been shipping code since the days of Warcraft 3 custom maps — through homemade RuneScape servers, university coursework, a stretch of web & mobile at Zendera and Styreportalen, and now consultancy at Grensesnitt on civic platforms, e-commerce and tooling. On the side: home-automation, and tools that sit between humans and AI agents. The thread is breadth — I like jumping into unfamiliar stacks and shipping something that holds.

Era VI2024 → nowlive

$ pwd

Now: tooling for agents, infra for clients.

Full-time at Grensesnitt AS — a consultancy that lets me jump across client engagements; the breadth is the whole point. On the side I’ve been building tools that sit between humans, AI agents and the messy systems they touch.

henning@grensesnitt — zsh — 92×24
~ $
Løplabbet magasin — Urbane eventyr cover
Client · e-commerce content
magasinet.loplabbet.no

Editorial magazine layered on top of Løplabbet’s store — a place for long-form running content next to the catalogue.

Norgips veggvelger — Finn systemet som passer for deg
Client · product configurator
veggvelger.norgips.no

A wall-system configurator for Norgips that walks builders through fire, sound and load specs to a buildable wall.

Aktiv kommune — Lei lokale, anlegg eller utstyr
Client · civic
Aktiv kommune

Municipal platform for booking community facilities and activities — calendars, permissions, the works.

kokebok.ber.ge — Kremet kylling med soltørkede tomater
Personal · Dec 2025
kokebok.ber.ge

A personal cookbook — recipes I actually cook, online so they survive a lost laptop and follow me to whatever kitchen I’m in.

LibriSync library screen — 100 of 270 audiobooks
Personal · Oct 2025
LibriSync

Audiobook sync experiment — embedding Rust inside a React Native app via a Kotlin shim. The kind of thing weekends are for.

Era V2021 → ongoing

Dashboard · home + state · HA since 2024

Civic & domestic.

Two parallel tracks. By day, contributing to Portico Estate and Designsystemet — the platform Norwegian municipalities use for property management and the public-sector design system from Digdir. By night, an ever-growing pile of Home Assistant integrations and tiny utilities for the house.

/lovelace · dashboards

Home Assistant dashboard with custom Drivstoff-priser tab
Drivstoff-priser · a HASS view I built so I can check 95 / 98 prices at every station around Bryne before I drive.
SystemAIR ventilation unit shown inside Home Assistant
SystemAIR · reverse-engineered the cloud API; the unit shows up in HASS like a first-class citizen.
Søppeltømming integration showing days until each waste pickup
Søppeltømming · MQTT bridge for Time Kommune renovation — papir, mat, glass, restavfall, all on the wall display.
Single fuel-station card for Esso Bryne
Per-station drilldown · every station gets its own device with sensors so I can graph the price history.
home · macOS · Jan 2026
StickThat
A macOS sticky-notes alternative with checklists, opacity, and an “always on top” mode I use every day.
home · minecraft
farming-turtle
CC:Tweaked turtle that farms while you sleep. Lua, in Minecraft.

/console · original xbox

LIVE · SDL2 demo build · drive the dashboard inline
home · original xbox · 2026 →
SodiumX — replacement dashboard for the OG Xbox

A fork of LithiumX rebuilt around a GPU-composited tile rail, blurred-boxart backdrops, and a full settings panel.

  • Cover flowSlot-based scroller modeled after Apple’s Cover Flow — tiles scale and fade by distance from the focused center, with momentum and snap.
  • Backdrop blurFocused game’s fanart is gaussian-blurred and composited as an ambient layer behind the rail.
  • GPU renderedEntire UI is GPU-composited via the nv2a — every layer, blur, and transition runs on the graphics pipeline.
  • Save backupAutomatic save-game backup with time-machine functionality — browse and restore any previous save snapshot.
  • Remote debuggingBuilt-in remote debug interface with crash reporting, performance profiling, and over-the-network updates.
  • System infoCPU / Mem / Storage / Temp / Fan / Net cards + hardware & dashboard tables.
  • File browserE:/Games breadcrumb, XBE-aware row icons, sortable list.
  • SettingsDisplay · Network · Audio · System · EEPROM · About, with live toggles.
Era IVJun 2018 → Feb 2022

First proper day jobs

Web & mobile, two employers, one notebook.

A stretch of full-time product work — first the Zendera web-app, then a few years at Styreportalen on their board-management web product and the Tutti mobile app.

9:41●●● ◔ 96%
Jun 2018 → Apr 2020 · Zendera AS
Order & fleet web app

First full-time gig. Frontend & backend on their internal web app — order timelines, live fleet map, my crash course in real production code.

AngularNodeSQL
Zendera order & fleet web app — timeline grid + Mapbox
9:41●●● ◔ 96%
Apr 2020 → Feb 2022 · Styreportalen
Tutti — feed & korps

Years of work on the Tutti mobile app and the online board-management product around it. Design, ship, maintain.

React NativeTypeScriptweb
Tutti app — Feed view with NMF posts
Era III2019

Lecture Notes · INF

Coursework & side quests.

A few years of formal CS at UiB (Universitetet i Bergen) — INF112 (a Robot Rally clone in Java/LibGDX), INF122 (FP), INF284 and others — running in parallel with a pile of weekend tools that scratched my own itches.

INF112 — Robocop

team project · LibGDX · Java

Group project recreating the board game RoboRally. Cards, conveyor belts, lasers, the lot. Lived at github.com/inf112-v19/Robocop.

  • Game loop, scripting, networking
  • Maven, JUnit, GitHub-flow

HASS & HACS integrations

side quest · python · HASS

Started a stack of custom integrations — most still live today on the dashboard further down. SystemAIR was the first one published to HACS.

  • Reverse-engineered cloud APIs
  • MQTT bridges, scrapers, schedulers
Era II2019 → ongoing

Stats · Server-side · github.com/runejs

RuneJS — building yesterday’s internet from scratch.

A TypeScript stack for the mid-2000s RuneScape protocol. Joined as the second contributor on runejs/server in late 2019 and have been co-leading the org ever since — game loop, content APIs, JS5 cache, login & update servers, and the client work that sits on the other end of the wire.

runejs/* · org
SRV
server
Game-server engine, content APIs and plugin system. Authored Dec 2019, still shipping in 2026.
core2019 →
FS
filestore · js5 · cache-parser
JS5 cache tooling. Reverse-engineered the on-disk format so the server can actually read what the client expects.
REtooling
NET
login-server · update-server · common
The auth + asset-update edge of the stack — split out so each piece can be deployed and reasoned about on its own.
infranode
PCL
refactored-client-377 / 435
Personal deobfuscation work on two client revisions. Years of squinting at decompiled Java to get clean, named source.
RE2017 →
RuneJS server screenshot — Lumbridge castle, 'Welcome to RuneJS.' chatbox
welcome to runejs.  Lumbridge, rendered by a deobfuscated 2006 client talking to a TypeScript.
Era I2013 → 2024 (hiatus)

Quests Available · 6

Map maker, cartographer of made-up worlds.

Cut my teeth in the Warcraft 3 modding scene — JASS, then Lua, then helping move things over to a TypeScript → Lua workflow. Most of the toolchain that made it possible (w3ts, war3-types, war3-transformer, JassToTs, WC3MapTranslator) is the work of a small community of map authors I’m glad to be a part of.

Warcraft Maul: Reimagined in-game screenshot
⚔
Warcraft Maul: Reimagined
Tower defense · TypeScript

Ground-up rebuild of the cult-classic WC3 map. Replaced years of tangled JASS with a typed code base, a deploy pipeline, and an active player base on maulbot.com.

Stack ts → luaRole authorStatus ongoing
⚙
wc3-ts-template
Project starter · TypeScript

A ready-to-clone TypeScript template for new WC3 maps — build pipeline, tooling and the type definitions wired up so authors can skip the yak-shaving and start writing gameplay.

Stack ts → luaOSS MIT
⚗
JassToTs · WC3MapTranslator
Reverse engineering · Node

Translators that round-trip between WC3’s legacy formats (.j, .w3x, .slk) and JSON so they can live in Git, in CI, and in modern editors.

Format binary ⇄ jsonEra first commits '16
☠
YAZM & experiments
Zombie survival · sandboxes

Smaller original maps and experiments that lived alongside Maul — testbeds for the TypeScript pipeline before it had to hold up a live community.

Role authorEra first commits '14
Stack

Langs · runtimes · platforms

10y+ TypeScript10y+ JavaScript8y+ Java6y+ Lua5y+ Kotlin5y+ Swift4y+ Python3y+ Rust5y+ C / C++RT NodeRT React NativeRT Next.jsINF DockerINF PostgresINF Home Assistant
End

Want to talk shop?
[email protected]

Based in Bryne, NorwayWorking at Grensesnitt AS