Merlijn
Tishauser

Software engineer and photographer.

LinkedIn

I make complex systems easier to see, use, and trust.

I build software and the platforms it runs on. Away from the keyboard, I make photographs.

I care most about simplicity. An idea only counts once it runs as a system that is resilient, measurable and useful.

I keep learning on purpose, because the work keeps changing and I want to change with it.

Ask the site directly.

Pick a route to my work, experience, photography or notes. You can also type a question about my background; an AI answers it from my resume.

site guide: routes and AI questions
visitor@portfolio:~$ ./open-site-guide.sh
Site guide ready. The routes below work without the AI. Typed questions are answered by an AI from my resume and this site.
Choose a route below, type /help, or ask about my background.

Two projects I build and maintain.

Each has a write-up, a working demo, and the source code.

A network you can read.

Every device on a tile,
every link a line you can follow.

UniFi Network Map turns topology data into an isometric picture of what connects to what, inside the Home Assistant dashboard. Below: the same renderer, drawing a fictional home.

Open source. Home Assistant integration, listed in the default HACS store (the Home Assistant community store).

Fictional network 10 devices / 09 links
VLAN 1 VLAN 20 VLAN 1 VLAN 1 VLAN 20 VLAN 1 VLAN 1 VLAN 20 VLAN 1 VLAN 20 VLAN 1 VLAN 20 Attic AP Studio switch: Port 2... Attic AP Thermostat Thermostat Gateway Gateway Laptop Laptop Garden AP Studio switch: Port 3... Garden AP Studio switch Gateway: Port 9 (Stud... local: Port 1 (Gateway) Studio switch Phone Phone Printer Studio switch: Port 6 Printer Home Assistant Studio switch: Port 4 Home Assistant Storage Studio switch: Port 5 Storage

Infrastructure

Clients

Drawn by the same renderer as the Home Assistant card (unifi-network-maps 2.3.2) from a fictional topology. An interactive illustration, not a live dashboard: no real devices or telemetry.

The problem

A list of devices tells you what is there. It takes a map to see how it fits together, and which cable a problem is on.

The decision

Render the topology as an interactive isometric SVG inside the dashboard, with VLAN colours on the links and device details one selection away.

Traumatrees

Room for the stories
between generations.

Explore family connections, life events, and the patterns that run through them. At your own pace, with your story kept private.

Screenshot of the public demo, with a fictional family. Scroll sideways on smaller screens, or open the live demo to pan, zoom, and explore. No account needed.

Space for reflection

A family tree can hold more than names and dates. Traumatrees makes room for relationships, turning points, and patterns across generations.

Private by design

Sensitive entries are encrypted in your browser before they reach the server, so your reflections stay yours.

A tool for personal reflection, not therapy.

More from the workbench

  • The Books page: a list of books, each with a reading line, a Sync switch and what Hardcover will be told.
    The Books page, from the project README.

    Kobo Hardcover Sync

    Keeps your shelf on Hardcover in step with what you read on a Kobo e-reader: which books, how far, finished when. Plug the Kobo into your computer and it syncs. Nothing is installed on the Kobo.

    It starts as a dry run and never guesses a match: a book it cannot place waits for you to choose. It works with a stock Kobo and books from the Kobo store.

    Beta, v0.2.0. Runs on your own computer, or on a home server for a household.

    brew install merlijntishauser/tap/kobo-hardcover-sync
  • from unifi_topology import (
        Config, build_node_type_map, build_topology,
        fetch_devices, normalize_devices, render_svg,
    )
    
    devices = normalize_devices(fetch_devices(Config.from_env()))
    node_types = build_node_type_map(devices)
    gateways = [n for n, t in node_types.items() if t == "gateway"]
    topology = build_topology(
        devices, include_ports=True, only_unifi=False, gateways=gateways,
    )
    svg = render_svg(
        topology.tree_edges or topology.raw_edges,
        node_types=node_types,
    )
    Discover a network and render it, following the quick start in the README.

    UniFi Topology

    The Python library behind the network map above. It reads devices, ports and client connections from a UniFi controller, builds the topology, and renders it as an SVG diagram, flat or isometric.

    It started inside unifi-network-maps and now stands on its own, so the Home Assistant integration and anything else can use it as a library.

    v3.2.1 on PyPI. Python 3.12 or newer, MIT licence.

    pip install unifi-topology

Away from the keyboard.

Individual photographs and two series, each with its own way of looking.

Explore the photography →

Tech lineage.

Four decades of platforms, languages, wrong turns, and useful obsessions. Open an era, then a milestone for the story behind it.

1983—1992

Origins

5 milestones
1983 ZX Spectrum

The first computer I was allowed to play with.

1984 Atari ST

My dad bought this computer, and I was a kid with a newfound interest in technology and creativity.

1985 BASIC

Copying 500 lines of code from a book to learn the language.

1986 Logo

For loops for the win: move that turtle around.

1992 Mac Performa

The first Mac in our family, System 7 as default.

1996—2008

Open systems

5 milestones
1996 Linux

I bought an IBM PC to annoy my dad, but installed Red Hat Linux 4.2 after three weeks, because I hated Windows.

1997 PHP

Babysteps in adding features to a website, MySQL as the database.

2004 CS Classes

Formal education in computer science, learning algorithms and data structures.

2008 Agile

Standups with myself, pair programming with JP the Goat.

2008 Python

First language I really enjoyed, learning object-oriented programming.

2012—2020

Cloud shift

6 milestones
2012 AWS

After running servers co-located, someone else was on call for failing disks.

2014 Docker

Oh my Containers... so many containers, so little time.

2015 Java

Not touched since computer science classes, but CQRS and event-driven architectures are the bomb with Java.

2017 K8s

Inception: have Jenkins deploy K8s with Jenkins on it to deploy applications.

2019 Serverless

Who needs containers? Serverless computing for scalability and cost efficiency.

2020 Azure Landing Zones

Automate all the things!

2023—2026

Building now

6 milestones
2023 React

Transforming a legacy spaghetti codebase into a modern React application: full hands-on development again.

2024 AI Assisted Dev

Babysteps with LLMs and accelerated development workflows.

2025 Home Assistant

Hue, Zigbee and UniFi: the house finally does what it is told.

2026 Traumatrees

Zero-knowledge encryption, 100% commitment.

2026 Homelab

A Homelab running Proxmox, Traefik and rather too many LXCs. Turns out I missed being the one on call for failing disks.

2026 Agentic Dev

Past the babysteps: agents that read the repo, write the tests and ship. Reviewing their work carefully is the actual skill.

Gargle
What?!

The Pan Galactic Gargle Blaster was invented by Zaphod Beeblebrox, a major character in Douglas Adams' novel The Hitchhiker's Guide to the Galaxy.

The effect is like having your brains smashed out by a slice of lemon, wrapped 'round a large gold brick.

Read the recipe
Illustrated Pan-Galactic Gargle-Blaster can label with recipe notes
Official drink for the hacker at large.