Margo

Frontend engineer writing about UI, performance and accessible web.

Amsterdam, NL

Why I switched from CSS-in-JS to Tailwind

August 8, 2026 · 6 min read

For two years I was a devoted styled-components user. The component-scoped styles felt elegant, and the theming API was powerful. But as the project grew, so did the bundle size. Runtime CSS generation was costing us.

I gave Tailwind a serious try last month. The utility-first approach felt verbose at first, but the developer experience won me over. Zero runtime overhead, purged unused styles automatically, and the design tokens finally felt consistent across the team.

The turning point was Lighthouse. Our performance score jumped 12 points after the migration. Sometimes the boring solution is the right one.

css tailwind performance

Building accessible forms: lessons learned

July 22, 2026 · 8 min read

Accessibility is often treated as a checklist. Install axe-core, fix the automated warnings, call it a day. But real accessibility is about how people actually use your interface.

Last quarter I audited our checkout flow with a screen reader. The experience was humbling. Custom dropdowns that looked perfect were completely broken for keyboard users. Error messages were visually clear but never announced to assistive tech.

We rewrote the components using native elements where possible. A native select is not as pretty, but it works everywhere. For custom widgets, we invested in proper ARIA patterns and focus management. The result? Fewer bugs, happier users, and surprisingly cleaner code.

a11y ui forms

TypeScript strict mode saved our refactor

July 5, 2026 · 5 min read

We had a legacy dashboard written in plain JavaScript. Over the years it accumulated subtle bugs — null checks forgotten, props renamed in one place but not another, implicit any types swallowing errors.

Enabling strict mode felt like turning on the lights in a dark room. Two hundred errors surfaced immediately. It took a week to fix them, but the codebase became predictable. During the next major refactor, the compiler caught three potential runtime crashes before they reached production.

If you are still hesitating about strict mode, my advice is: enable it, endure the pain for a sprint, and never look back.

typescript javascript refactoring

Micro-interactions that feel right

June 18, 2026 · 4 min read

Animation is a powerful tool, but it is easy to overdo. I have seen interfaces where every button bounces, every card slides in, and every loader spins for five seconds. It is exhausting.

The best micro-interactions are almost invisible. A button that subtly darkens on press. A modal that fades in over 150ms instead of snapping. A toast that slides out gently rather than disappearing instantly.

My rule of thumb: if the animation takes longer than 200ms, it is probably too slow. If the user notices the animation before the content, it is definitely too much.

animation ux design