I build software, publish it, ride far, dive deep and solve strange problems
I'm a Swedish software engineer with more than 15 years of Ruby on Rails behind me and a growing habit of Rust, Go, TypeScript and ESP32 firmware. I hold an MSc in Algorithms, Languages and Logic from Chalmers University of Technology. Today I'm a Senior Software Engineer working on e-invoicing and Peppol document exchange, Kubernetes deployments, production reliability and the developer and AI tooling my team runs on.
Away from the keyboard I'm an extreme triathlete turned long-distance cyclist turned motorcycle overlander. Scroll down for the details.
Ruby on Rails services that move invoices across the Peppol network and national platforms such as the French DGFiP, running on Kubernetes.
Git tools in Rust, CI pipelines, MCP servers and agent skills so that both humans and AI assistants can work the stack safely.
ESP32 BLE firmware in Rust and C++ for motorcycle handlebar controllers, custom PCBs and a Home Assistant setup that keeps growing.
MSc in Algorithms, Languages and Logic and a BSc in Computer Science from Chalmers, Sweden. Freelancing and shipping since 2010.
GitHub stars across 249 public repositories, 9,000+ contributions in the last year
downloads of my 35 published Ruby gems on RubyGems.org
pull requests merged into other people's projects, from dry-rb to esp32-nimble
Stack Overflow reputation, 15 gold badges, answering Ruby questions since 2011
Summarise and pretty-print who wrote what in a git repository. 950+ stars, 100k+ gem downloads.
Leave the commit message empty and a git hook writes it from the staged diff. Rust, 50k+ downloads on crates.io.
An expressive data transformation DSL for Ruby 3 built on refinements and pattern matching. 110k+ downloads.
RuboCop that only lints and auto-fixes the lines you actually committed. 79k+ downloads.
A Model Context Protocol server that lets an LLM query and control your smart home. Published on npm.
Keep API keys in the macOS Keychain and hand them to AI agents without ever showing them: Touch ID gated, output redacted.
Read-only MariaDB, Logz.io log search and a GitHub Actions runner on top of nektos/act, all speaking MCP.
A Rust BLE proxy on an ESP32-C3 that makes the Carpe Iter Terrain Command handlebar controller work with iOS.
Upstream work merged into dry-rb (dry-core, dry-logic, dry-types), dip, esp32-nimble, overcommit, Anycomplete, atom/language-ruby and vscode-atom-keybindings, among others.
Finisher of the three original extreme triathlons: Norseman (2014), Swissman and Celtman (2015, six days apart). Also Rockman, Öloppet and Ironman Nice.
Pedalled from London to Hong Kong: 26 countries in 18 months. Most of them without a shared language, which taught me more than any conference.
Solo on a Husqvarna 701 Enduro: the Balkans (2022), central Europe and Scandinavia (2023), Morocco (2025) and the Pamir Highway (2026).
SSI-certified diver, dry suit included. The site tagline has said "dive" since 2015 and it still holds.
The Pamir trip has its own page: an interactive route map with every waypoint, pass and border crossing.