Design engineer, Lisbon · remote

Interfaces that behave.

I design and build the front of the product: a real design system, states that never surprise anyone, and pages that load before the coffee does.

Booking one project for Q3. Two slots left.
state-inspector.tsx
state
default
note
Every control ships all six. This one is real, drive it.

Shipped with teams at

NorthwindLedgerlyCartographPace HealthVellum OS
What I do

Three ways I earn my keep.

Most of my work is one of these, or a stitch of two. No decks of buzzwords, just the interface layer done properly.

A token layer, a component library your team actually reaches for, and the docs that keep it honest. Built in code, not slides, so design and engineering finally read from one source.

tokensReact / TSStorybooka11y baked in

Your Lighthouse is red and your bounce rate agrees. I trace the waterfall, kill the layout shift, defer the noise, and hand back a page that passes on a mid-tier Android over 4G, not just on your laptop.

INPLCPCLSbundle surgery

Before you commit a sprint, I build the risky screen for real, clickable, with the states and the motion, so the team argues with a working thing instead of a static mock.

clickablereal datamotion specs

Selected work, with the numbers that mattered.

Case files
Ledgerly · fintech dashboard

The dashboard that finally loaded.

Rebuilt the render path and the data-table virtualization for a 40k-row ledger. The main view went from a spinner-and-a-prayer to instant.

0%
faster INP
0s
LCP, down from 6.4
0
Lighthouse a11y
Northwind · design system

One library, nine squads.

Replaced four drifting UI kits with a single token-driven system. Shipped 48 components with states, docs, and a contribution flow the teams actually use.

0
components
0
teams on it
0%
less UI drift
Pace Health · onboarding prototype

Two weeks of arguing, settled in a click.

Prototyped the new patient-intake flow for real, with validation, empty and error states, and reduced-motion. The team picked the direction in one session.

0
flows, clickable
0
brief to decision
0
re-litigated later
How it goes

A short, unmysterious engagement.

01

Discovery call

Thirty minutes. You describe the mess, I tell you honestly whether I am the right fix.

02

Audit & plan

A written diagnosis: what is slow or broken, what I would do, and what it costs.

03

Build in the open

Weekly, working commits. You see it move, not a status doc. No surprises at the end.

04

Handover

Documented, tested, yours. Your team can extend it without calling me, though they usually do.

Ways to work together.

Engagement

The Audit

€2.4k fixed

A week-long diagnosis of one product surface, with a prioritized fix list you own.

  • Performance & a11y report
  • Annotated interface teardown
  • Costed roadmap
Start with an audit

Project

€9k+ / scoped

The usual: a system, a rescue, or a prototype delivered end to end, built in the open.

  • Design system or full rebuild
  • Weekly working commits
  • Documented handover
Book a discovery call

Retainer

€5k / month

A standing design-engineering seat for teams shipping fast and refusing to let quality slip.

  • Reserved weekly capacity
  • System stewardship
  • Cancel with 30 days
Talk retainer
Questions before the call

The honest answers.

Both, on purpose. I design the interface and I ship the production code for it. The seam between the two is where most product quality leaks, so I close it.

Almost always. I plug into your repo, your design tools, and your standups, leave the team stronger than I found it, and document everything so nothing depends on me staying.

TypeScript and React by default, with framework-agnostic tokens underneath so the system outlives any one library. If you are on Vue or Svelte, the design layer still ports cleanly.

I take one project at a time. Right now the next opening is early Q3. An audit can usually slot in sooner, and it is the best way to hold a project slot.

The one action

Let's fix the interface layer.

Tell me the surface that keeps you up at night. I reply to every real message within two working days, from a human, not a funnel.

“Kep left our codebase calmer than he found it. The team still cites his docs a year later.” — Dana Osei, VP Engineering, Northwind

No CRM, no drip. Just a reply.

Message received.

Thanks, friend. I've got it, and you'll hear back from me within two working days. Nothing else to do.