Software engineer · product systems · interaction

I make complex systems legible, tactile and useful.

I work across product engineering, interaction design and systems implementation — from React and TypeScript interfaces to Rust, media processing, deterministic simulation, firmware-adjacent tools and local-first knowledge systems. The recurring problem is the same: understand the system deeply, then make its behavior clear enough to use, explore and trust.

Selected work

Projects that expose how I think.

Public repositories sit beside selected private work here. Open a project for the product niche it addresses, what makes it unusual, the design reasoning behind it, and the engineering approach used to preserve those ideas in implementation.

01 / Media systems

Slipmat

A playback-first multimedia client for owned and self-hosted media. Slipmat treats playback as an explicit system: one authoritative timeline, inspectable source and generation identity, a persistent Playback Rail, native audio processing, rich visualization and deep music analysis across Jellyfin and local media.

React 19Rust 2024Tauri v2JellyfinWASM analysis
Private · active product development Read case study
02 / Deterministic simulation

FireOne

A submarine tactics game about uncertainty, geometry and commitment. The authoritative Rust simulation separates world truth from what the player and AI are allowed to know, with deterministic ECS behavior, sonar-driven incomplete information and replaceable presentation clients.

RustBevy ECSRatatuiDeterminismSimulation AI
Private · playable pre-release Read case study
03 / Vehicle telemetry

Signal Broker

Work around a vehicle-network development stack that exposes CAN, LIN and related buses through gRPC instead of binding tools to one language or transport. Its browser client adds gRPC-Web and WebSocket access so live frames and decoded signals can be selected, inspected and charted interactively.

ElixirgRPCgRPC-WebCAN / LINVue
Read case study
04 / Developer environment

Workstation system

My dotfiles are a reproducible cross-platform workstation rather than a folder of copied configs: machine-aware profiles, declarative packages, GNU Stow boundaries, dry runs, rolling backups, lifecycle hooks, CI validation and an interactive Rust installer across macOS, Linux and Termux.

Rust TUIGNU StowmacOS + LinuxTermuxGitHub Actions
Private · daily infrastructure Read case study
05 / Procedural systems

Defend

A cross-platform 3D tower-defense project combining procedural behavior, physics, AI, projectiles and generated sound in the browser. It is an ongoing laboratory for simulation, performance and systems that must remain understandable while becoming more dynamic.

Babylon.jsTypeScriptPhysicsAIProcedural audio
Read case study
06 / Human input

QMK userspace

Custom split-keyboard firmware where layers, encoders, alternate-repeat behavior and programmable input are treated as deterministic interaction contracts rather than ad-hoc key mappings.

CQMKFirmwareErgonomics
Read case study
07 / Configuration tools

VIA app fork

An actively developed fork of the VIA keyboard configuration application used to explore richer control over programmable keyboard behavior, including more expressive RGB and configuration surfaces for custom firmware.

TypeScriptKeyboard toolingConfiguration UXWebHID
Read case study
08 / Economic simulation

Lemonade

A modern reconstruction of the classic Lemonade Stand around a small set of consequential decisions: pricing, inventory and advertising under changing weather and market conditions, with the simulation gradually exposing more economic structure.

JavaScriptPWAGame designEconomics
Read case study

Additional systems

More applications, experiments and earlier work on GitHub

Professional thread

Design depth became engineering depth.

My background connects graphic design, multimedia production and teaching with public-service JavaScript applications, large product-planning interfaces and increasingly deep systems engineering.

Historical public material documents frontend application work for Länsstyrelsen Skåne and earlier leadership in design, multimedia and university teaching. Public LinkedIn material also documents close collaboration around the rebuilding of IKEA Kitchen Planner and IKEA Planner tooling using React, TypeScript and accessibility-focused frontend engineering.

That progression matters more to me than a framework timeline: I learned to think about communication and interaction first, then increasingly about state, authority, performance, determinism and the technical boundaries required to make sophisticated interfaces trustworthy.

Read the professional experience narrative

About

I am interested in systems with consequences.

Software becomes interesting when choices matter: a control changes a physical model, an interface reveals hidden state, a simulation responds to strategy, or a tool gives a person more precise agency.

I move comfortably between product thinking, interaction details and implementation. I prefer interfaces that explain themselves through structure, state and behavior rather than decorative complexity.

My work ranges from media playback architecture and deterministic game simulation to vehicle telemetry, public-service software, reproducible developer environments, graph knowledge systems and programmable input. The medium changes; the emphasis on clarity, rigor and control does not.

Working principles

Build from the model outward.

01

Understand the system first.

Interaction quality depends on the underlying model. State, constraints, timing and failure modes should be explicit before the surface is polished.

02

Make behavior visible.

Good interfaces communicate what is happening, what can happen next and what the user controls. Hidden mechanics create friction and distrust.

03

Use rigor to preserve agency.

Strong types, clear invariants, deterministic behavior and accessible interaction are not ceremony. They make ambitious systems easier to reason about and safer to change.