Skip to content

Frontend

Tailwind CSS Mask Generator

Interactive tool to generate and visualize Tailwind CSS mask-image styles. Explore linear, radial, and conic gradients with full control over composition, size, position, and clipping.

Viewport Debugger

Comprehensive tool for debugging viewport dimensions, visual viewport API, safe areas, and testing mobile keyboard behavior

CSS white-space, word-break and overflow-wrap explained

How CSS white-space, word-break, and overflow-wrap work, and which one to reach for when text wraps badly or overflows its container.

How to Vertically Center Text in CSS Properly

Why text doesn't center properly in buttons and badges. Learn about leading space, font metrics, and how to fix it with text-box-trim and margin-block.

CSS Text Properties Playground

Interactive playground to experiment with all CSS text properties together. Test how overflow, text-overflow, white-space, word-break, line-clamp, text-box-trim, and margin-block interact.

Flexbox Playground

Interactive Flexbox playground to visualize and experiment with flexbox properties in real-time.

Color Contrast Checker

Check color contrast ratios for accessibility compliance — APCA (WCAG 3) and WCAG 2.x testing with visual heatmaps.

Color Converter

Convert any color format (Hex, RGB, HSL, OKLCH, Oklab, Lab, P3) to modern CSS Color 4/5. Bulk conversion and gamut mapping.

Font Optimization for the Web

Strategies to load fonts as fast as possible, for fun and for profit

Rebuilding My Website: From Next.js to Astro

A deep dive into modernizing my website: migrating from Next.js to Astro, cutting bundle sizes, and leveraging AI-powered migrations.

Useful TypeScript Patterns

Type theory names are hard to remember, but some of them are very useful in practice. These are some types I've found useful in everyday TypeScript coding.

Open Graph for Lazy Developers

A simple guide to Open Graph optimization for your website, including how to set up your meta tags and how to test your website's Open Graph data.

The many ways to deal with overflowing text

An interactive guide demonstrating techniques for handling long words and overflowing text, including truncation with ellipsis, line clamping, wrapping, breaking, hyphenating, and more.

Building a stunning table of contents that follows headings

How to build a table of contents that has a better user experience, using SVG paths and masks.

How to get sticky elements to stick

Learn why your position: sticky element is not working, and the three techniques to use to make it work.

React performance techniques

Techniques to improve React component rendering performance when there are no better alternatives.

React component patterns

Learn about the various design patterns to help you write better and more reusable React components.

Lessons learned from building a blog component system

Pitfalls and lessons learned from building this blog's component system. Walks through margins, inline code styling, full-bleed layouts and forms.

A glimpse into front end interviews

My experience with front end interviews, including their process, topics, questions and some more tips and tricks to help you get the role you desire

Why building a front-end framework in Rust is hard

A look at what makes a front-end framework work and how Rust's ergonomics and constraints such as ownership makes writing one difficult.

How to optimize React using React DevTools

Learn how to use the React devtool's profiler to optimize and improve your React app's performance.

An interactive guide to Flexbox

An interactive flexbox guide and playground to visualize and experiment with various flexbox css properties.

How lit-html works

Learn how the lit-html library works, and how it is different from virtual-dom libraries like React.

React Hooks constraints explained

An explanation of why React hooks have limitations, such as why you cannot call them in an if-else statement.