Interface engineer / Copenhagen

I build interfaces that behave like objects.

Ten years of frontend work, most of it on products where the motion is the product: trading terminals, field tools, and instruments people use for hours at a time. I write the animation layer, and then I write the docs for it.

Now
Interface lead, Ferrite
Stack
TypeScript, GSAP, Svelte, Rust
Timezone
CET, overlapping US East
Taking on
Two contracts a year

The workbench

Three small things, written out and running. The code on the left is the code driving the panel on the right, not a screenshot of it.

stagger.js

1 / 3

// 16 tiles, out from the middle gsap.from(".tile", { scale: 0.4, y: 40, duration: 0.6, ease: "back.out(2)", stagger: { each: 0.05, from: "center" } });
// function values place each dot gsap.set(".dot", { transformOrigin: "50% 62px", rotation: (i) => i * 60 }); gsap.to(".dot", { rotation: "+=360", duration: 4, ease: "none", repeat: -1 });
// the ease does all the work gsap.to(".ball", { y: 96, duration: 1.1, ease: "bounce.out", repeat: -1, repeatDelay: 0.5 });

Selected work

  1. A trading terminal showing index rows and an area chart.

    Ferrite

    Interface lead / 2023 to now

    The motion layer for a trading terminal, where a late frame is a real cost. I own the animation system, the perf budget, and the documentation that stops the two drifting apart.

    • TypeScript
    • React
    • GSAP
    • WebGL

    78msInteraction latency at p95, down from 210ms

  2. A survey vessel working offshore in open water.

    Tidepool

    Contract / 2022

    An offline-first field app for marine surveys. Built for a boat with no signal, one hand free, and salt water on the screen. Every interaction has a wet-glove fallback.

    • Svelte
    • SQLite
    • Rust
    • Capacitor

    40miOffshore, full function, no connection

  3. Close detail of synthesiser knobs labelled resonance and envelope amount.

    Continuo

    Open source / maintained since 2020

    A step sequencer that runs in a browser tab. Audio scheduling on a worker, drawing on a canvas, and a UI that stays honest about what the clock is doing.

    • Web Audio
    • Canvas
    • Workers

    3msScheduling jitter, worst case

How I work

Motion is load-bearing

Animation is not the polish pass. It is how an interface explains what just happened, where a thing went, and whether it worked. I treat it as part of the logic, and I test it like logic.

The slow path is the real path

I develop throttled, on the oldest device the product supports. What feels effortless on a laptop is frequently unusable three years down the hardware curve, and that is the device most people are holding.

Write it down

An animation system nobody understands gets replaced within a year. I leave behind the reasoning, the constraints, and the failure modes, so the next person can argue with the decision instead of guessing at it.

Notes

Got something that needs to feel right?

I take on two contracts a year and I am free from October. Tell me what you are building and what is going wrong with it.

[email protected]