Slipmat · FireOne · Lemonade
Software engineer · product systems · interaction
I design and engineer systems that make complex behavior understandable.
My practice moves between product design and software engineering. Projects begin with observation, questions, sketches and working experiments. Promising ideas develop through explicit models, accessibility, performance measurement and repeatable verification, so exploration and implementation remain part of the same process.
Selected work
Selected projects and working methods.
Each case study describes the problem, the design process, the experiments and the engineering decisions that shaped the result. The emphasis is on how observation becomes a model, how a prototype becomes evidence and how proven behavior becomes part of a durable system.
Signal Broker · Defend · QMK / Vial / Halcyon
Booking · Inventory · Timeline
Kullaberg · Investigation Workbench
Slipmat
A playback-first media system organized as domain contracts, deterministic planners and state machines, adapters and services, presentation models, then platform projections. Playback authority stays explicit across Jellyfin, local media, native processing and the interface.
Private · active product development Read case studyFireOne
A submarine tactics game about uncertainty, geometry and commitment. Its Rust simulation separates world state from player and AI knowledge, using deterministic ECS behavior and sonar-driven incomplete information to make perception part of the simulation.
Private · playable pre-release Read case studySignal Broker
A vehicle-network development stack that exposes CAN, LIN and related buses through gRPC. Its browser client adds gRPC-Web and WebSocket access so live frames and decoded signals can be selected, inspected and charted interactively.
Read case studyDefend
A behavioral-parity modernization of a physics-driven strategy game. The historical Webpack/Babylon/Cannon build remains an executable reference while the active modernization lane isolates deterministic domain logic, worker and audio ownership, and renderer-independent contracts.
Read case studyQMK / Vial / Halcyon
An embedded input stack where firmware owns runtime semantics and persistence while typed Raw HID exposes capability-aware host configuration. Exact-target builds, resource reports, strict QMK lint and embedded anti-pattern checks make hardware constraints executable.
Public · active development Read case studyLemonade
A deterministic economic simulation whose core is prohibited from depending on ambient time, randomness, browser state or rendering libraries. Three.js, Web Audio, storage and UI remain adapters, while fixed-seed certification makes balance and accounting reviewable.
Public · active development Read case studyBooking
A configurable reservation platform built around a pure scheduling engine, replaceable persistence and explicit production transaction boundaries. Governance registries, SBOMs and provenance evidence are treated as part of the system architecture rather than release paperwork.
Public · active development Read case studyInventory
A local-first inventory PWA for check-out, overdue accountability, offline work, backup and export, with a clear history of items and responsible entities.
Public · active development Read case studyTimeline
A local-first chronology and relationship workspace with a renderer-independent temporal projection layer and retained keyed scene. Overscan, interaction retention and commit-time reconciliation preserve identity and performance while timeline, graph and map views evolve toward a coordinated model.
Public · active development Read case studyAdditional studies
Kullaberg digital ecosystem
Offline-capable, bilingual visitor software for a Swedish nature reserve, spanning mobile trail guidance, information-desk presentation and citizen-science participation.
Read case studyInvestigation Workbench
A local-first graph and knowledge-review workspace that separates source evidence, machine-proposed candidates, reviewed canonical knowledge and deterministic graph and timeline projections.
Private · architecture case study Read case studyProfessional thread
Design practice informs the way I engineer software.
My background connects graphic design, multimedia production and teaching with public-service software, large planning interfaces and systems engineering. I approach code as a design material: a medium for clarifying relationships, testing assumptions and shaping interaction.
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.
Each stage added another instrument for inquiry: visual composition, interaction, user observation, state modeling, performance analysis, deterministic simulation and automated verification. Together they support a practice where intuition proposes directions and evidence develops them.
About
I am interested in systems where structure and discovery reinforce each other.
A small interaction can reveal a physical model, a simulation can expose an unexpected relationship, and a well-structured tool can make complex information easier to examine and act upon.
I work across product thinking, visual and interaction design, and implementation. Minimal surfaces, careful hierarchy and working prototypes help make complex capability approachable.
Across media playback, games, vehicle telemetry, public-service software, knowledge graphs and programmable input, the method stays consistent: curiosity opens a direction, disciplined modeling gives it coherence and automation preserves time for further study.
Working principles
Discipline gives experimentation a durable form.
Begin with observation and a useful question.
Sketch, prototype, simulate and test on real hardware when the medium calls for it. Early experiments make relationships visible and allow a surprising result to guide the next question.
Turn experiments into evidence.
Instrument behavior with deterministic seeds, visual laboratories, accessibility checks, performance traces and explicit domain models. Comparable evidence gives creative decisions a shared basis.
Give proven ideas a stable form.
Types, tests, CI and documentation preserve established behavior. Automation carries routine verification so attention can return to observation, interpretation and new experiments.