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.
Software engineer · product systems · interaction
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
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.
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.
Private · active product development Read case studyA 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.
Private · playable pre-release Read case studyWork 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.
Read case studyMy 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.
Private · daily infrastructure Read case studyA 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.
Read case studyCustom split-keyboard firmware where layers, encoders, alternate-repeat behavior and programmable input are treated as deterministic interaction contracts rather than ad-hoc key mappings.
Read case studyAn 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.
Read case studyA 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.
Read case studyAdditional systems
Offline-capable, bilingual visitor software for a Swedish nature reserve, spanning mobile trail guidance, information-desk presentation and citizen-science participation.
Read case studyA local-first graph and knowledge-review workspace that separates source evidence, machine-proposed candidates, reviewed canonical knowledge and deterministic graph/timeline projections.
Private · architecture case study Read case studyProfessional thread
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.
About
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
Interaction quality depends on the underlying model. State, constraints, timing and failure modes should be explicit before the surface is polished.
Good interfaces communicate what is happening, what can happen next and what the user controls. Hidden mechanics create friction and distrust.
Strong types, clear invariants, deterministic behavior and accessible interaction are not ceremony. They make ambitious systems easier to reason about and safer to change.