41554 blogs · [ { "id": "01a0b68b-4ccb-7180-8b11-07ef8a5fa59d", "title": "alexcarpenter.me", "url": "https://alexcarpenter.me", "published_at": "2026-09-07T05:20:44+00:00" }, { "id": "01a08723-e397-7297-bd80-266df691ad26", "title": "GPU accelerated text shimmer", "url": "https://alexcarpenter.me/notes/2026-08-28-1/", "published_at": "2026-08-28T15:23:03+00:00" }, { "id": "01a08723-e397-7297-bd80-266df719eb2d", "title": "You Don't Have a Design System", "url": "https://alexcarpenter.me/notes/2026-08-26-1/", "published_at": "2026-08-26T12:44:05+00:00" }, { "id": "01a08723-e397-7297-bd80-266df74b2b15", "title": null, "url": "https://alexcarpenter.me/notes/2026-08-12-3/", "published_at": "2026-08-12T17:12:05+00:00" }, { "id": "01a08723-e397-7297-bd80-266df7e0bba6", "title": null, "url": "https://alexcarpenter.me/notes/2026-08-12-2/", "published_at": "2026-08-12T14:19:43+00:00" }, { "id": "01a08723-e397-7297-bd80-266df7eef08f", "title": null, "url": "https://alexcarpenter.me/notes/2026-08-12-1/", "published_at": "2026-08-12T11:42:52+00:00" }, { "id": "01a08723-e397-7297-bd80-266df86328ca", "title": null, "url": "https://alexcarpenter.me/notes/2026-08-11-1/", "published_at": "2026-08-11T20:16:36+00:00" }, { "id": "01a08723-e397-7297-bd80-266df951c2e5", "title": "colordx", "url": "https://alexcarpenter.me/notes/2026-08-10-1/", "published_at": "2026-08-10T12:07:42+00:00" }, { "id": "01a08723-e397-7297-bd80-266df9bde036", "title": null, "url": "https://alexcarpenter.me/notes/2026-07-31-2/", "published_at": "2026-08-01T01:12:29+00:00" }, { "id": "01a08723-e397-7297-bd80-266dfa90e568", "title": null, "url": "https://alexcarpenter.me/notes/2026-07-31-1/", "published_at": "2026-08-01T00:01:44+00:00" }, { "id": "01a08723-e397-7297-bd80-266dfb836555", "title": "Clever property usage to create a light-dark probe", "url": "https://alexcarpenter.me/notes/2026-07-29-2/", "published_at": "2026-07-29T14:23:31+00:00" }, { "id": "01a08723-e397-7297-bd80-266dfc147ede", "title": "How to choose a UI font", "url": "https://alexcarpenter.me/notes/2026-07-29-1/", "published_at": "2026-07-29T12:56:39+00:00" }, { "id": "01a08723-e397-7297-bd80-266dfceb6fb5", "title": "CSS anchor positioning for sidenotes", "url": "https://alexcarpenter.me/notes/2026-07-28-2/", "published_at": "2026-07-28T14:06:33+00:00" }, { "id": "01a08723-e397-7297-bd80-266dfcf4a5e0", "title": "OKHST: predictable color generation for user interfaces", "url": "https://alexcarpenter.me/notes/2026-07-28-1/", "published_at": "2026-07-28T12:28:43+00:00" }, { "id": "01a08723-e397-7297-bd80-266dfdc74288", "title": "Tom Sachs X Culture Slop interview", "url": "https://alexcarpenter.me/notes/2026-07-26-1/", "published_at": "2026-07-26T14:31:36+00:00" }, { "id": "01a08723-e397-7297-bd80-266dfded66d5", "title": "@klinking/squircle", "url": "https://alexcarpenter.me/notes/2026-07-21-2/", "published_at": "2026-07-21T12:11:31+00:00" }, { "id": "01a08723-e397-7297-bd80-266dfeb208d9", "title": "datavolve", "url": "https://alexcarpenter.me/notes/2026-07-21-1/", "published_at": "2026-07-21T12:08:45+00:00" }, { "id": "01a08723-e397-7297-bd80-266dff517829", "title": "A collection of Tailwind CSS utilities for fading edges of scroll containers based on scroll position.", "url": "https://alexcarpenter.me/notes/2026-07-20-1/", "published_at": "2026-07-20T14:07:02+00:00" }, { "id": "01a08723-e397-7297-bd80-266dff97a36f", "title": "Clerk components RTL support", "url": "https://alexcarpenter.me/notes/2026-07-19-1/", "published_at": "2026-07-19T12:55:39+00:00" }, { "id": "01a08723-e397-7297-bd80-266e002dc3b1", "title": "APCA color contrast guidelines promoted to stable", "url": "https://alexcarpenter.me/notes/2026-07-15-1/", "published_at": "2026-07-15T14:40:50+00:00" }, { "id": "01a08723-e397-7297-bd80-266e012715e3", "title": "Where to Find the Colors Your Screen Can’t Show You", "url": "https://alexcarpenter.me/notes/2026-07-07-1/", "published_at": "2026-07-07T14:07:56+00:00" }, { "id": "01a08723-e397-7297-bd80-266e02191167", "title": "Animating The Dialog Element Using View Transitions", "url": "https://alexcarpenter.me/notes/2026-06-24-1/", "published_at": "2026-06-24T12:52:07+00:00" }, { "id": "01a08723-e397-7297-bd80-266e025faa1b", "title": "How's Linear so fast? A technical breakdown", "url": "https://alexcarpenter.me/notes/2026-06-14-1/", "published_at": "2026-06-14T13:29:56+00:00" }, { "id": "01a08723-e397-7297-bd80-266e0298c24b", "title": null, "url": "https://alexcarpenter.me/notes/2026-05-26-1/", "published_at": "2026-05-26T12:14:54+00:00" }, { "id": "01a08723-e397-7297-bd80-266e02c75299", "title": "Better fluid sizing with round()", "url": "https://alexcarpenter.me/notes/2026-05-24-1/", "published_at": "2026-05-24T13:39:14+00:00" }, { "id": "01a08723-e397-7297-bd80-266e03219a0f", "title": null, "url": "https://alexcarpenter.me/notes/2026-04-26-1/", "published_at": "2026-04-26T13:58:20+00:00" }, { "id": "01a08723-e397-7297-bd80-266e0351e6be", "title": "Tree structure using CSS anchor positioning", "url": "https://alexcarpenter.me/notes/2026-04-04-1/", "published_at": "2026-04-04T18:35:11+00:00" }, { "id": "01a08723-e397-7297-bd80-266e039d3fc7", "title": "Nikhil Anand's personal website", "url": "https://alexcarpenter.me/notes/2026-03-27-1/", "published_at": "2026-03-27T18:49:41+00:00" }, { "id": "01a08723-e397-7297-bd80-266e040b602c", "title": "Nguyễn Ngọc Ánh's personal website", "url": "https://alexcarpenter.me/notes/2026-03-21-2/", "published_at": "2026-03-21T12:31:11+00:00" }, { "id": "01a08723-e397-7297-bd80-266e0432754a", "title": "William Jansson's personal website", "url": "https://alexcarpenter.me/notes/2026-03-21-1/", "published_at": "2026-03-21T12:29:03+00:00" }, { "id": "01a08723-e397-7297-bd80-266e043e65ae", "title": "Using Container Queries in a CSS Grid to Detect Truncation", "url": "https://alexcarpenter.me/notes/2026-03-20-1/", "published_at": "2026-03-20T12:37:14+00:00" }, { "id": "01a08723-e397-7297-bd80-266e04f976e8", "title": "Managing Context Windows with pi /tree: Branches, Summaries, and Subagent-like Workflows", "url": "https://alexcarpenter.me/notes/2026-03-17-1/", "published_at": "2026-03-17T11:19:43+00:00" }, { "id": "01a08723-e397-7297-bd80-266e05013df9", "title": "Daniel Griesser's PI Config", "url": "https://alexcarpenter.me/notes/2026-03-15-1/", "published_at": "2026-03-15T23:53:02+00:00" }, { "id": "01a08723-e397-7297-bd80-266e0535f26e", "title": "The Anatomy of an Agent Harness", "url": "https://alexcarpenter.me/notes/2026-03-11-1/", "published_at": "2026-03-11T11:18:23+00:00" }, { "id": "01a08723-e397-7297-bd80-266e05ba489b", "title": "Agentic Engineering Patterns", "url": "https://alexcarpenter.me/notes/2026-03-08-1/", "published_at": "2026-03-08T13:19:33+00:00" }, { "id": "01a08723-e397-7297-bd80-266e05ef1d9f", "title": "React Grab", "url": "https://alexcarpenter.me/notes/2026-03-06-2/", "published_at": "2026-03-07T00:23:27+00:00" }, { "id": "01a08723-e397-7297-bd80-266e060d9f65", "title": "Smooth Dot Indicators with Embla Carousel and CSS color-mix()", "url": "https://alexcarpenter.me/notes/2026-03-06-1/", "published_at": "2026-03-06T13:43:22+00:00" }, { "id": "01a08723-e397-7297-bd80-266e067be159", "title": "History of Software Design", "url": "https://alexcarpenter.me/notes/2026-03-05-1/", "published_at": "2026-03-05T19:20:10+00:00" }, { "id": "01a08723-e397-7297-bd80-266e075cb473", "title": "How to implement beautiful shadow borders", "url": "https://alexcarpenter.me/notes/2026-03-04-1/", "published_at": "2026-03-04T16:25:34+00:00" }, { "id": "01a08723-e397-7297-bd80-266e08569ce6", "title": "Naz Hamid's personal website", "url": "https://alexcarpenter.me/notes/2026-03-01-2/", "published_at": "2026-03-01T16:25:34+00:00" }, { "id": "01a08723-e397-7297-bd80-266e0874b722", "title": "Anton Repponen's personal website", "url": "https://alexcarpenter.me/notes/2026-03-01-1/", "published_at": "2026-03-01T14:30:41+00:00" }, { "id": "01a08723-e397-7297-bd80-266e0951a47f", "title": "ESLint complexity rule", "url": "https://alexcarpenter.me/notes/2026-02-24-1/", "published_at": "2026-02-24T20:50:52+00:00" }, { "id": "01a08723-e397-7297-bd80-266e09d92032", "title": null, "url": "https://alexcarpenter.me/notes/2026-02-16-2/", "published_at": "2026-02-16T16:48:22+00:00" }, { "id": "01a08723-e397-7297-bd80-266e09fa28e1", "title": "Building Type-Safe Compound Components", "url": "https://alexcarpenter.me/notes/2026-02-16-1/", "published_at": "2026-02-16T13:21:11+00:00" }, { "id": "01a08723-e397-7297-bd80-266e0a8b22cd", "title": "@nano_kit/store", "url": "https://alexcarpenter.me/notes/2026-02-15-2/", "published_at": "2026-02-15T13:41:03+00:00" }, { "id": "01a08723-e397-7297-bd80-266e0acd1a50", "title": "react-prehydrate", "url": "https://alexcarpenter.me/notes/2026-02-15-1/", "published_at": "2026-02-15T12:59:10+00:00" }, { "id": "01a08723-e397-7297-bd80-266e0afdf550", "title": "ASCII characters are not pixels: a deep dive into ASCII rendering", "url": "https://alexcarpenter.me/notes/2026-02-14-1/", "published_at": "2026-02-15T00:56:51+00:00" }, { "id": "01a08723-e397-7297-bd80-266e0be97c50", "title": "How I Use Claude Code", "url": "https://alexcarpenter.me/notes/2026-02-13-1/", "published_at": "2026-02-13T13:12:56+00:00" }, { "id": "01a08723-e397-7297-bd80-266e0ce8d186", "title": "Digital hygiene", "url": "https://alexcarpenter.me/notes/2026-02-12-1/", "published_at": "2026-02-12T12:43:49+00:00" }, { "id": "01a08723-e397-7297-bd80-266e0d360f21", "title": "eslint-plugin-react-render-types", "url": "https://alexcarpenter.me/notes/2026-02-11-2/", "published_at": "2026-02-11T12:47:53+00:00" }, { "id": "01a08723-e397-7297-bd80-266e0e1e09fe", "title": "Matt Rothenberg's personal website", "url": "https://alexcarpenter.me/notes/2026-02-11-1/", "published_at": "2026-02-11T12:43:56+00:00" }, { "id": "01a08723-e397-7297-bd80-266e0e678f5f", "title": "RESILIENT-UI SKILLS", "url": "https://alexcarpenter.me/notes/2026-02-09-1/", "published_at": "2026-02-09T15:49:31+00:00" }, { "id": "01a08723-e397-7297-bd80-266e0f45fa91", "title": "Building Bulletproof React Components", "url": "https://alexcarpenter.me/notes/2026-02-06-2/", "published_at": "2026-02-06T12:50:48+00:00" }, { "id": "01a08723-e397-7297-bd80-266e0f80f57f", "title": "A React trick to improve exit animations", "url": "https://alexcarpenter.me/notes/2026-02-06-1/", "published_at": "2026-02-06T12:50:26+00:00" }, { "id": "01a08723-e397-7297-bd80-266e10597c11", "title": "Alexander Vilinskyy's personal website", "url": "https://alexcarpenter.me/notes/2026-02-03-2/", "published_at": "2026-02-03T13:43:34+00:00" }, { "id": "01a08723-e397-7297-bd80-266e10e0ff60", "title": "before-and-after", "url": "https://alexcarpenter.me/notes/2026-02-03-1/", "published_at": "2026-02-03T12:06:47+00:00" }, { "id": "01a08723-e397-7297-bd80-266e119c8f54", "title": "Composition is all you need.", "url": "https://alexcarpenter.me/notes/2026-01-29-1/", "published_at": "2026-01-29T12:21:29+00:00" }, { "id": "01a08723-e397-7297-bd80-266e128249ce", "title": "When life gives you lemons, write better error messages", "url": "https://alexcarpenter.me/notes/2026-01-28-1/", "published_at": "2026-01-28T11:47:36+00:00" }, { "id": "01a08723-e397-7297-bd80-266e130b56b9", "title": null, "url": "https://alexcarpenter.me/notes/2026-01-26-1/", "published_at": "2026-01-26T19:34:05+00:00" }, { "id": "01a08723-e397-7297-bd80-266e1387f682", "title": "Greppability is an underrated code metric", "url": "https://alexcarpenter.me/notes/2026-01-22-1/", "published_at": "2026-01-22T21:17:27+00:00" }, { "id": "01a08723-e397-7297-bd80-266e1423c0a7", "title": "Annotating for agents", "url": "https://alexcarpenter.me/notes/2026-01-19-1/", "published_at": "2026-01-19T17:28:08+00:00" }, { "id": "01a08723-e397-7297-bd80-266e146bcc90", "title": "21 Lessons From 14 Years at Google", "url": "https://alexcarpenter.me/notes/2026-01-17-01/", "published_at": "2026-01-17T13:17:52+00:00" }, { "id": "01a08723-e397-7297-bd80-266e14e51d78", "title": null, "url": "https://alexcarpenter.me/notes/2026-01-06-1/", "published_at": "2026-01-06T22:02:58+00:00" }, { "id": "01a08723-e397-7297-bd80-266e15d776b7", "title": "How to target Safari with a CSS @supports media query", "url": "https://alexcarpenter.me/notes/2025-12-15-1/", "published_at": "2025-12-15T13:03:15+00:00" }, { "id": "01a08723-e397-7297-bd80-266e1678a530", "title": "2025 Holiday Coffee Gift Guide", "url": "https://alexcarpenter.me/notes/2025-12-03-1/", "published_at": "2025-12-03T12:49:22+00:00" }, { "id": "01a08723-e397-7297-bd80-266e16d87599", "title": "RESILIENT—UI interview #002 with Hayden Bleasel", "url": "https://alexcarpenter.me/notes/2025-11-18-1/", "published_at": "2025-11-18T13:30:55+00:00" }, { "id": "01a08723-e397-7297-bd80-266e16ed8e7f", "title": "The Web Animation Performance Tier List", "url": "https://alexcarpenter.me/notes/2025-11-05-2/", "published_at": "2025-11-05T15:20:46+00:00" }, { "id": "01a08723-e397-7297-bd80-266e179c0e28", "title": "RESILIENT—UI interview #001 with Dima Belyaev", "url": "https://alexcarpenter.me/notes/2025-11-05-1/", "published_at": "2025-11-05T12:52:09+00:00" }, { "id": "01a08723-e397-7297-bd80-266e189178dd", "title": "Preserve modal aspect ratio across viewport sizes", "url": "https://alexcarpenter.me/notes/2025-10-23-1/", "published_at": "2025-10-23T12:20:33+00:00" }, { "id": "01a08723-e397-7297-bd80-266e19735692", "title": null, "url": "https://alexcarpenter.me/notes/2025-09-28-1/", "published_at": "2025-09-28T13:44:13+00:00" }, { "id": "01a08723-e397-7297-bd80-266e19746a98", "title": "Dither plugin for TailwindCSS", "url": "https://alexcarpenter.me/notes/2025-09-20-1/", "published_at": "2025-09-20T12:39:55+00:00" }, { "id": "01a08723-e397-7297-bd80-266e1996e9fd", "title": "▲ Vercel Web Interface Guidelines", "url": "https://alexcarpenter.me/notes/2025-09-19-1/", "published_at": "2025-09-19T12:23:59+00:00" }, { "id": "01a08723-e397-7297-bd80-266e1a0f2615", "title": null, "url": "https://alexcarpenter.me/notes/2025-09-12-1/", "published_at": "2025-09-12T22:19:56+00:00" }, { "id": "01a08723-e397-7297-bd80-266e1a406e20", "title": null, "url": "https://alexcarpenter.me/notes/2025-09-06-1/", "published_at": "2025-09-06T19:33:30+00:00" }, { "id": "01a08723-e397-7297-bd80-266e1a843de5", "title": null, "url": "https://alexcarpenter.me/notes/2025-09-05-2/", "published_at": "2025-09-05T12:58:10+00:00" }, { "id": "01a08723-e397-7297-bd80-266e1b4e1910", "title": "My shadcn/ui registry", "url": "https://alexcarpenter.me/notes/2025-09-05-1/", "published_at": "2025-09-05T12:31:49+00:00" }, { "id": "01a08723-e397-7297-bd80-266e1be8bdcf", "title": "A Clock That Doesn't Snap", "url": "https://alexcarpenter.me/notes/2025-08-26-2/", "published_at": "2025-08-26T15:34:53+00:00" }, { "id": "01a08723-e397-7297-bd80-266e1c92392d", "title": "What are OKLCH colors?", "url": "https://alexcarpenter.me/notes/2025-08-26-1/", "published_at": "2025-08-26T15:32:27+00:00" }, { "id": "01a08723-e397-7297-bd80-266e1d76b868", "title": null, "url": "https://alexcarpenter.me/notes/2025-08-25-1/", "published_at": "2025-08-25T12:39:17+00:00" }, { "id": "01a08723-e397-7297-bd80-266e1de49860", "title": "Silk", "url": "https://alexcarpenter.me/notes/2025-08-23-1/", "published_at": "2025-08-23T17:53:44+00:00" }, { "id": "01a08723-e397-7297-bd80-266e1e6c43e0", "title": "use-stick-to-bottom", "url": "https://alexcarpenter.me/notes/2025-08-18-2/", "published_at": "2025-08-18T21:20:03+00:00" }, { "id": "01a08723-e397-7297-bd80-266e1e7da906", "title": null, "url": "https://alexcarpenter.me/notes/2025-08-18-1/", "published_at": "2025-08-18T18:56:44+00:00" }, { "id": "01a08723-e397-7297-bd80-266e1e9e217e", "title": "How to properly align icons within list items", "url": "https://alexcarpenter.me/notes/2025-08-14-1/", "published_at": "2025-08-14T19:49:05+00:00" }, { "id": "01a08723-e397-7297-bd80-266e1ebec00c", "title": "We shipped a shadcn/ui registry", "url": "https://alexcarpenter.me/notes/2025-08-13-3/", "published_at": "2025-08-13T20:34:12+00:00" }, { "id": "01a08723-e397-7297-bd80-266e1f3fe562", "title": null, "url": "https://alexcarpenter.me/notes/2025-08-13-2/", "published_at": "2025-08-13T12:10:08+00:00" }, { "id": "01a08723-e397-7297-bd80-266e1fb26c79", "title": null, "url": "https://alexcarpenter.me/notes/2025-08-13-1/", "published_at": "2025-08-13T11:54:31+00:00" }, { "id": "01a08723-e397-7297-bd80-266e2043b3f2", "title": null, "url": "https://alexcarpenter.me/notes/2025-08-05-1/", "published_at": "2025-08-05T23:26:48+00:00" }, { "id": "01a08723-e397-7297-bd80-266e20e284e7", "title": null, "url": "https://alexcarpenter.me/notes/2025-07-29-1/", "published_at": "2025-07-29T12:25:58+00:00" }, { "id": "01a08723-e397-7297-bd80-266e2175952c", "title": "shadcn/ui theme compatibility is now available", "url": "https://alexcarpenter.me/notes/2025-07-23-1/", "published_at": "2025-07-23T15:44:32+00:00" }, { "id": "01a08723-e397-7297-bd80-266e22505803", "title": "Write like you talk", "url": "https://alexcarpenter.me/notes/2025-07-21-1/", "published_at": "2025-07-21T12:37:45+00:00" }, { "id": "01a08723-e397-7297-bd80-266e2329168c", "title": "Chase McCoy's personal website", "url": "https://alexcarpenter.me/notes/2025-07-18-2/", "published_at": "2025-07-18T12:18:50+00:00" }, { "id": "01a08723-e397-7297-bd80-266e23594096", "title": "Jonas Brinkhoff's personal website", "url": "https://alexcarpenter.me/notes/2025-07-18-1/", "published_at": "2025-07-18T12:16:47+00:00" }, { "id": "01a08723-e397-7297-bd80-266e23598460", "title": "Building your ideas with Claude Code and Figma MCP with Dan Hollick", "url": "https://alexcarpenter.me/notes/2025-07-17-2/", "published_at": "2025-07-18T00:57:35+00:00" }, { "id": "01a08723-e397-7297-bd80-266e23736cd6", "title": "Agentic Engineering", "url": "https://alexcarpenter.me/notes/2025-07-17-1/", "published_at": "2025-07-18T00:49:48+00:00" }, { "id": "01a08723-e397-7297-bd80-266e23c44107", "title": "Clerk CSS variables are now available!", "url": "https://alexcarpenter.me/notes/2025-07-15-1/", "published_at": "2025-07-15T19:21:54+00:00" }, { "id": "01a08723-e397-7297-bd80-266e23d98518", "title": "What's the \"Geometry\" of Colours?", "url": "https://alexcarpenter.me/notes/2025-07-11-1/", "published_at": "2025-07-11T14:55:45+00:00" }, { "id": "01a08723-e397-7297-bd80-266e24633e7d", "title": "culori", "url": "https://alexcarpenter.me/notes/2025-07-08-1/", "published_at": "2025-07-08T12:36:45+00:00" }, { "id": "01a08723-e397-7297-bd80-266e24a81e83", "title": "That boolean should probably be something else", "url": "https://alexcarpenter.me/notes/2025-07-02-1/", "published_at": "2025-07-02T12:42:00+00:00" }, { "id": "01a08723-e397-7297-bd80-266e25271513", "title": "apcach", "url": "https://alexcarpenter.me/notes/2025-07-01-1/", "published_at": "2025-07-01T11:23:59+00:00" }, { "id": "01a08723-e397-7297-bd80-266e253f87e0", "title": "keyux", "url": "https://alexcarpenter.me/notes/2025-06-27-1/", "published_at": "2025-06-27T11:36:28+00:00" } ] posts Claim your blog
Back to Alex Carpenter
Blog · corpus.blog/blogs/alexcarpenter.me/posts

Alex Carpenter

alexcarpenter.me

2026

2025

23 Aug 2025