Hi there, I'm Linus


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.

What I do


E-invoicing at scale

Ruby on Rails services that move invoices across the Peppol network and national platforms such as the French DGFiP, running on Kubernetes.

Developer tooling

Git tools in Rust, CI pipelines, MCP servers and agent skills so that both humans and AI assistants can work the stack safely.

Embedded and home

ESP32 BLE firmware in Rust and C++ for motorcycle handlebar controllers, custom PCBs and a Home Assistant setup that keeps growing.

Background

MSc in Algorithms, Languages and Logic and a BSc in Computer Science from Chalmers, Sweden. Freelancing and shipping since 2010.

Open source by the numbers


1,000+

GitHub stars across 249 public repositories, 9,000+ contributions in the last year

1.6M+

downloads of my 35 published Ruby gems on RubyGems.org

40+

pull requests merged into other people's projects, from dry-rb to esp32-nimble

18k

Stack Overflow reputation, 15 gold badges, answering Ruby questions since 2011

Project highlights


git fame

Summarise and pretty-print who wrote what in a git repository. 950+ stars, 100k+ gem downloads.

git ai

Leave the commit message empty and a git hook writes it from the staged diff. Rust, 50k+ downloads on crates.io.

Re:map

An expressive data transformation DSL for Ruby 3 built on refinements and pattern matching. 110k+ downloads.

rfix

RuboCop that only lints and auto-fixes the lines you actually committed. 79k+ downloads.

Home Assistant MCP

A Model Context Protocol server that lets an LLM query and control your smart home. Published on npm.

mcp-env-keychain

Keep API keys in the macOS Keychain and hand them to AI agents without ever showing them: Touch ID gated, output redacted.

More MCP servers

Read-only MariaDB, Logz.io log search and a GitHub Actions runner on top of nektos/act, all speaking MCP.

u701

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.

Off the keyboard


Extreme triathlon

Finisher of the three original extreme triathlons: Norseman (2014), Swissman and Celtman (2015, six days apart). Also Rockman, Öloppet and Ironman Nice.

Long-distance cycling

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.

Motorcycle overlanding

Solo on a Husqvarna 701 Enduro: the Balkans (2022), central Europe and Scandinavia (2023), Morocco (2025) and the Pamir Highway (2026).

Scuba diving

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.

Let's get in touch


Email is the fastest way. The rest of me is on the usual platforms.

Email

GitHub

Stack Overflow

RubyGems

crates.io

X