Stack
Libraries, packages and assets I build with
Libraries
Base UI
Unstyled, accessible React components with no CSS attached, built by people from the Radix, Floating UI and Material UI teams. A solid base when a design system needs its own look from day one.
Downshift
Hooks for accessible autocomplete, combobox and select inputs in React. It handles behaviour and state and leaves the markup to you, which solves the fiddliest component in any design system without dictating its look.
Headless UI
Unstyled, accessible components from Tailwind Labs (menus, listboxes, comboboxes, dialogs), made to be styled with Tailwind classes. One of the few headless libraries that also comes in a Vue version.
MJML
A markup language that compiles to responsive email HTML: the nested tables and inline CSS every mail client still expects, without writing them by hand. Framework-agnostic and around since 2015.
Motion
The animation library formerly known as Framer Motion, now framework-agnostic. Hardware-accelerated where the browser allows it, with a spring model that behaves the way you expect.
Phiki
TextMate-grammar syntax highlighting in PHP, so code blocks arrive already highlighted instead of waiting on a client-side pass. Highlights every snippet in the garden.
PhotoSwipe
The lightbox on the travel albums. Pinch-zoom that behaves like the OS viewer, keyboard and screen-reader support out of the box, and no dependencies.
Radix Colors
31 colour scales with 12 steps each, and every step has a defined job: background, hover, border, solid fill, text. Dark mode, alpha and P3 variants are included, so the hard part of a palette is already done.
Radix Primitives
Unstyled, accessible React components (dialog, popover, tabs and more) with keyboard and focus handling already solved. You can adopt them one at a time instead of committing to a whole library.
React Aria
Adobe's accessible, unstyled building blocks for React, either as low-level hooks or as 50+ ready components you style yourself. The most thorough of the headless libraries, with internationalisation built in.
React Email
Write HTML emails as React components instead of nested tables, preview them locally and render them to HTML for any sending service. Made by Resend, but not tied to it.
ScrollyVideo.js
Ties video playback to the scroll position for scroll-driven storytelling. Works in plain JavaScript and comes with components for React, Vue, Svelte and Astro.
Swup
Page transitions without a framework. Swaps one container, keeps the header and footer alive, and leaves the markup server-rendered. What makes navigating this site feel continuous.
Taxi.js
Small PJAX router for page transitions without a framework. The closest alternative to Swup, which is what this site uses instead.
Build tooling
Docusaurus
Meta's static-site generator for documentation: Markdown and MDX in, a fast static site out. Versioned docs, translations and search support come built in, which covers most of what a docs site needs.
esbuild
Bundles the JavaScript here in about twenty milliseconds. Fast enough that the build stops being a step you think about.
Kirby
File-based CMS with no database. Every page is a folder and a text file, which means the whole site is greppable, diffable and lives in Git. This site runs on it.
Nextra
The Next.js answer to Docusaurus: docs and blog sites written in MDX, with themes for both or your own. Search and syntax highlighting run at build time, so there is nothing extra to host.
PostCSS
The CSS pipeline on this site: imports, preset-env for the syntax browsers have not caught up to yet, autoprefixer, and cssnano at the end. No framework, just the parts that are needed.
Unlighthouse
Runs Lighthouse across every page of a site rather than one at a time, then puts the results in a single sortable report. Finds the page you would never have thought to test.
Utilities
Easing Gradients
Makes CSS gradients follow an easing curve instead of a straight line, which removes the hard edge where a gradient meets solid colour. An editor in the browser, plus a PostCSS plugin to use the result in a build.
Emoji to image
Pick an emoji and download it as a PNG in Apple, Google, Twitter or Facebook style. Handy for mockups and slides, where a system emoji would look different on every machine.
HTML to JSX
Paste HTML, get JSX back. One page of transform.tools, which has 60+ converters along the same lines: SVG to JSX, JSON to TypeScript, CSS to Tailwind and more.
MagicPattern
A toolbox of 30+ generators for backgrounds, patterns, gradients, blobs and waves, exported as images or as CSS and SVG code. Several generators are free, the rest sit behind a subscription.
SVGOMG
SVGO in the browser, with a live preview and a slider per optimisation. Paste an icon in, see exactly what each pass removes before you commit to it.
Utopia
Generates fluid type and space scales as clamp() values from two breakpoints. Replaces the pile of media queries most type scales end up as.
Icons & assets
Iconbuddy
One search across 300k+ open-source icons from more than 100 sets, with editing and plugins for Figma and VS Code. Each icon keeps the licence of the set it comes from.
Iconoir
Around 1,400 hand-drawn SVG icons, stroke-only and MIT licensed, with no account and no attribution requirement. The set this site runs on.
MingCute
An open-source icon set of 1,600+ icons in regular and filled, drawn on a 24px grid with a 2px stroke. Packages for most frameworks, an icon font and a Figma plugin, under Apache-2.0.
SVG Hub
Over 70 decorative SVGs (squiggles, scribbles, arrows, shapes) to recolour and paste in. The licence is CC BY-NC, so they are for personal projects, not client work.
SVG Loaders
Twelve loading spinners in pure SVG, animated with SMIL instead of CSS or JavaScript. Drop one in and set the colour through fill.
Repositories
sindresorhus/awesome
The list of awesome lists: a curated index of topic lists for almost every language, platform and field. Where to start when you need the well-regarded options in an area you do not know yet.