Sign in

Haz

@haz.dev
3.1K followers 239 following 982 posts

Co-founder @ariakit.com. Ex Automattic, WordPress. Posts about Design, JS, CSS, a11y. Neurodivergent, dad.

PostsRepliesMedia
Haz @haz.dev · 18/09/2026
AI is really bad at design, even Claude. But GPT models are painfully worse. Even when you're iterating, they're more likely to make suboptimal design decisions unless you guide them down to the tiniest detail. Claude (even Opus) will at least get *some* of those tiny details right.
240
Haz @haz.dev · 12/09/2026
Published another small project: github.com/diegohaz/rol... I (and my agents) will never write React.forwardRef again 🙏🏼
github.com
GitHub - diegohaz/rolldown-plugin-react-forward-ref: Transform React ref props into forwardRef components for React 18 with Rolldown and Vite.
Transform React ref props into forwardRef components for React 18 with Rolldown and Vite. - diegohaz/rolldown-plugin-react-forward-ref
011
Haz @haz.dev · 12/09/2026
I remember being super excited to share my new GitHub/npm projects, even the small ones. Now that AI has taken all the effort out of it, sharing doesn't feel the same. Anyway, here's a small project I spent a few Astra tokens on: github.com/diegohaz/oxl...
github.com
GitHub - diegohaz/oxlint-plugin-comment-reflow: Syntax-aware comment wrapping and safe trailing-comment placement for Oxlint.
Syntax-aware comment wrapping and safe trailing-comment placement for Oxlint. - diegohaz/oxlint-plugin-comment-reflow
030
Haz @haz.dev · 08/09/2026
Another drawing my son made. How long did it take you to recognize the character?
210
Haz @haz.dev · 08/09/2026
This is the CSS feature I wanted most: scale: calc(100% - 1px) 😭
130
Haz @haz.dev · 03/09/2026
My son made this drawing. He wants to know how many seconds it took you to figure out which character it is.
100
Haz @haz.dev · 02/09/2026
Colored badges that automatically adapt to any background color (CSS mix and relative color syntax). I'm back to UI design work this week. Inspiring posts incoming.
Four rounded panels labeled “Offset,” “Inverted,” “Brand,” and “Success” compare Plain, Brand, and Danger pill-button styles across dark gray, light gray, blue, and green backgrounds.
4291
Haz @haz.dev · 21/08/2026
HTML forms are so broken. With every other element, you can do this: <div id="foo"> div⁠.⁠id // "foo" Forms work the same way too: <form id="bar"> form⁠.⁠id // "bar" But then: <form id="bar"> <input name="id"> form⁠.⁠id // the input element 🤡
6130
Haz @haz.dev · 15/08/2026
The more I use other component libraries, the more convinced I am that Ariakit Components are necessary. We get so many details right, and the flexibility is unmatched.
Package statistics panel showing 1,157,131 weekly downloads with a rising purple trend chart, verified version 0.4.37, MIT license, last published 6 days ago, and four collaborator avatars.
131
Haz @haz.dev · 13/08/2026
Saw the eclipse today in León, Spain. My second totality, and it was even better than the first. I tried to capture it on camera, but there's simply no way to reproduce what you see. You either get a great close-up of the sun or a great shot of the surroundings with a tiny sun.
110
Haz @haz.dev · 07/08/2026
Ariakit has hundreds of component tests duplicated across happy-dom and Playwright. happy-dom is 6× faster, so humans and agents use it for quick feedback during dev. Playwright is authoritative and runs once when each task is complete. This setup has sped up development. Highly recommend it.
2140
Haz @haz.dev · 06/08/2026
Feels good, especially these days 🥲
GitHub pull request statistics showing 532 lines added and 1,636 lines removed, with a five-segment bar indicating substantially more deletions than additions.
020
Haz @haz.dev · 05/08/2026
Design has become such an important skill these days. No matter how intelligent models become, we've evolved over 100s of thousands of years to detect nuance, intent, emotion. Theory of mind. We have a biological advantage here. That's why AI will never be good at Design.
030
Haz @haz.dev · 28/07/2026
We've made so many improvements to @ariakit.com components over the past 3 months. I'm especially excited about the performance gains. In the next version, the new ComboboxSelect component will be twice as fast as the current Combobox + Select combination used to build selects with search fields.
191
Haz @haz.dev · 21/07/2026
Ariakit React just hit 1M weekly downloads on npm 🎉 We're just getting started. Launching something big in September/October.
Weekly Downloads metric showing 1,084,779 downloads, with a purple sparkline trending upward despite several dips.
042
Haz @haz.dev · 17/07/2026
If you're already managing DNS on Cloudflare, consider transferring your domains there. I just saved $160/year by moving a few domains from GoDaddy to Cloudflare.
020
Haz @haz.dev · 15/07/2026
Due to the growing number of supply chain attacks on OSS, we've limited PRs to maintainers only. But that doesn't mean contributors don't get credit. In fact, they get even more credit now by:
230
Haz @haz.dev · 13/07/2026
I don't know if it's just me, but I often struggle with walls of text that lack code examples when trying to understand code decisions. That's why I use this custom instruction in ChatGPT. It really helps me follow its line of thinking during the session and in the final output.
A settings interface for Custom instructions prompting an AI to always include code examples.
361
Haz @haz.dev · 12/07/2026
We just removed .nvmrc from Ariakit and let pnpm manage Node.js too. If your project already uses pnpm, you may not need a separate Node version manager. Here’s the migration:
Terminal output showing the successful execution of the pnpm i command in the ariakit repository, adding node version 24.18.0
161
Haz @haz.dev · 04/07/2026
I started watching Peaky Blinders on Netflix and realized I don't understand English at all. Without subtitles, I can't understand even 20% of what they're saying. It's like watching The Boys except everyone's Butcher. Send help!
010
Haz @haz.dev · 02/06/2026
If you're using jsdom with Vitest, consider switching to happy-dom instead. It's much faster, but it comes with one caveat: its DOM spec coverage isn't as extensive as jsdom's. That's why I was using jsdom. But there's a better approach...
Console output comparison showing test duration dropping from 46.8 seconds with jsdom to 20.8 seconds with happy-dom
1171
Haz @haz.dev · 30/05/2026
After spending 60% of my weekly limit in 2 days on Claude Max, I can confidently say that Codex/GPT-5.5 is significantly more reliable than Opus 4.8. The new workflow feature is fantastic. It spawned 300+ agents and generated 130 reports on a large codebase, most valid.
120
Haz @haz.dev · 28/05/2026
Just released constate v4. It's ESM-only now. It was about time! github.com/diegohaz/con...
github.com
Release constate@4.0.0 · diegohaz/constate
ESM-only package BREAKING if you load constate via require(), a <script src="https://unpkg.com/constate"> UMD tag, or a bundler that resolves package entries through the legacy main/module/types fi...
010
Haz @haz.dev · 26/05/2026
I’m testing the ChatGPT app on iOS. I can connect to my VPS over SSH, which is nice, but it doesn’t support worktrees, so I can’t really parallelize multiple tasks. How are you all handling this?
100
Haz @haz.dev · 22/05/2026
“Why this matters” is the new em dash.
031
Haz @haz.dev · 18/05/2026
Not gonna lie, I love Astro, but the Astro/Cloudflare migration from v5 to v6 has been the most painful one I've ever gone through, even with help from Opus 4.7 and GPT 5.5. Am I the only one?
030
Haz @haz.dev · 13/05/2026
Best decision I made while working in the Codex app was archiving a chat as soon as the work is finished. You can still recover it if needed (I needed once), but seeing only my active chats in the UI really helps reduce mental overhead. Highly recommend.
050
Haz @haz.dev · 13/05/2026
I've generally avoided posting about AI on Bsky. I think that's because there was a lot of negative sentiment around AI here early on. Is that still true? Is it okay to talk about AI here now?
521
Haz @haz.dev · 12/05/2026
Pull requests have become a serious attack vector in open-source projects. Sadly, until GitHub comes up with a better solution, restricting them to collaborators only is the best move.
010
Haz @haz.dev · 11/05/2026
Do we still use `process.env.NODE_ENV !== "production"` for Node.js libraries these days, like for dev-only warnings, or is there a better way to handle this?
200
Haz @haz.dev · 10/05/2026
Firefox has been moving fast lately. Many of the bug reports I'm following have been fixed. And 151 will finally support CSS container style queries. Firefox already has the fastest CSS engine of the big three. If it catches up on features too, it might become the best browser.
21075
Haz @haz.dev · 07/05/2026
Lost 20kg (44lbs) over the last 10 months. Body fat went from 28% to 18%. Visceral fat dropped to healthy levels. I've been exercising daily. Now the problem is that my weight keeps going down even though I'm not trying. My original goal was to lose only 15kg (33lbs). Has anyone gone through this?
110
Haz @haz.dev · 06/05/2026
Is it possible to build a GitHub alternative on top of atproto?
120
Haz @haz.dev · 27/04/2026
Tailwind CSS tip: If you need to create separate entry points for generated CSS files (for example, if you have an internal route with a lot of custom utilities), do this: global.css ``` @⁠import "tailwindcss"; @⁠source not "./internal"; ```
210
Haz @haz.dev · 24/04/2026
My experience with GPT-5.5 has been good so far. It feels more reliable than Opus 4.7. However, it's still disappointing in some ways. I'm using it to improve performance on @⁠ariakit⁠/⁠tailwind, and even with full test coverage and a robust automated performance test, it couldn't push beyond 5%.
130
Haz @haz.dev · 07/04/2026
Is this a strategy to get people to buy domains, or maybe even a scam? I received an email from a Chinese domain registry service saying that a Chinese company wants to register Ariakit domains with the `.cn` TLD. I responded that we have nothing to do with it.
110
Haz @haz.dev · 03/04/2026
So the Axios attack started with a video call with the maintainer. I guess that’s the first time I’ve seen the upside of social anxiety. I’ll always try to get people to do things async before hopping on a call, and I’m fine with missing out otherwise.
050
Haz @haz.dev · 31/03/2026
Ways to mitigate npm supply chain attacks: - Block all postinstall scripts unless necessary - Use minimumReleaseAge - Set up Trusted Publisher on npm/GitHub - Disallow npm tokens - Require 2FA for all org members - Restrict PRs to collaborators only (sadly) What else?
021
Haz @haz.dev · 23/03/2026
8 months later, finally migrated to the .com 🎉 (we're still working on the new version)
041
Haz @haz.dev · 21/03/2026
I'm considering this for all my open-source projects. I prefer a detailed issue/discussion. I don't mind if it's AI-generated as long as it's valid and heads in the right direction. High-quality PRs from external contributors are much rarer, whether they're from humans or AI.
A dark mode settings panel showing pull request permissions set to Collaborators only.
340
Haz @haz.dev · 15/03/2026
Happy and sad in one image.
A code diff summary showing 22,830 lines added and 48,919 lines removed.
051
Haz @haz.dev · 28/02/2026
Tailwind autocomplete would be more useful if multiple related tokens were grouped under their parent token. It would make it much easier to discover and navigate between them.
Two screenshots of a code editor's autocomplete menu for the class bg-. The top image, marked with a red X, shows the menu cluttered with every individual shade of amber like bg-amber-50 and bg-amber-100. The bottom image, marked with a green check, shows a much cleaner menu where all amber shades are grouped into a single line like bg-amber-100, 200, allowing other background utilities to be easily visible.
3531
Haz @haz.dev · 25/02/2026
GitHub needs private folders in public repos. Workarounds like submodules and git-crypt exist, but they’re painful and limited. Nothing would change for maintainers. External contributors just wouldn’t see those files’ source or diffs in PRs.
240
Haz @haz.dev · 21/02/2026
I've come to the sad conclusion that @apply in Tailwind is a big anti-pattern. With enough complex utilities, your CSS can balloon to hundreds of kB, bloating the CSSOM and hurting runtime rendering performance, not just network.
260
Haz @haz.dev · 18/02/2026
The fact that Vitest can run 1k tests in just 164 ms is mind-blowing.
Vitest console output showing 993 tests passed across 3 files
2562
Haz @haz.dev · 10/02/2026
🤔 I can't stop thinking about this. Do we really want another CSS framework?
Screenshot of technical documentation regarding "5.5 Setting Variables (the set Mixin)". The text explains that variables are set via the "set" mixin plugin and supports two forms.

1. Namespace form (for config-defined variables):
Code examples show setting a namespaced variable like css.set.color.$primary("#000"), setting a top-level variable like css.set.$spacing("0.1em"), setting mid-chain like css.flex.col.set.color.$primary("#000"), and setting inside a wrapping mixin like css.dark(...).

2. Callable form (for any variable, including defineVar() variables):
Code examples show defining a custom variable with css.defineVar() and setting it mid-chain using css.flex.col.set(custom, "value"), as well as setting a config variable using the callable syntax css.set(css.vars.color.$primary, "#000").
340
Haz @haz.dev · 07/02/2026
My dream CSS framework: ⋅ CSS-in-TS ⋅ Composable utilities as fns `md(size(2))` ⋅ Plugins are just fns `custom(flex())` ⋅ Compiled to static CSS by default ⋅ Dynamic when needed `hover(prop)` ⋅ Class order matters Maybe not possible?
3120
Haz @haz.dev · 06/02/2026
Modern CSS capabilities.
A technical diagram comparing three ways to style element corners using CSS variables `--r: 12px` and `--gap: 4px`.
1. "Border Radius": Standard support across all major browsers using `border-radius: var(--r)`.
2. "Corner Shape": Uses `corner-start-end-shape: scoop` and `border-start-end-radius` calculation, shown with Chrome and Edge icons.
3. "Border Shape": Uses a complex custom `border-shape` definition (likely CSS Houdini/Paint API) with extensive geometry calculations for shoulders and arcs, indicated with a Chrome Canary icon.
2635
Haz @haz.dev · 05/02/2026
Some checkbox cards I’ve been working on.
2581
Haz @haz.dev · 03/02/2026
This border-radius transition 🤌🏽 Believe it or not, it's just CSS.
921818