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
Yes, it's the best we have right now, at least for graphic design (not design in general). But getting a good result still takes a lot of iteration and specific guidance. For example, it generated this atrocious table of contents in one of my sessions:
Dark “On this page” navigation lists Centered, Split, With Form, and Minimal, with Centered highlighted in blue and marked by a blue segment on the vertical line to the left.
160
Haz @haz.dev · 18/09/2026
Very little
120
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 · 09/09/2026
Tell me more, please.
100
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
It would let me create a consistent pressed state for buttons (always inset by 1px), regardless of their size.
020
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 · 03/09/2026
www.npmjs.com/package/@ari...
000
Haz @haz.dev · 02/09/2026
It doesn't. contrast-color only works for pure black/white text unfortunately.
120
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 · 22/08/2026
<form name="activeElement">
110
Haz @haz.dev · 21/08/2026
And the document.activeElement case is even worse because it will be an element, but not the actual activeElement.
120
Haz @haz.dev · 21/08/2026
At least that gives you an explicit error. The problem is silent errors like `something ${element.id}`
110
Haz @haz.dev · 21/08/2026
If you add the name attribute to the form element itself, it pollutes the document scope.
100
Haz @haz.dev · 21/08/2026
getAttribute is slower. Some of our perf tests regressed by 20% after we attempted it.
100
Haz @haz.dev · 21/08/2026
Now guess what happens to document.activeElement if you have this: <form name="activeElement"> Yes, it’s as bad as it gets.
230
Haz @haz.dev · 21/08/2026
And it doesn't stop with attributes. An input named "click" breaks form⁠.⁠click(), etc.
350
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
After that, we have tons of new components on the roadmap. Most of the APIs and use cases are already established, so it's just a matter of timing and tokens. If you haven't tried it yet, ask your agent to give it a try, and let me know how it goes.
000
Haz @haz.dev · 15/08/2026
But that will change in the next few months. We've spent the past few months investing heavily in bug fixes and performance improvements. We're preparing v0.5, which will likely be the last release before v1 (finally).
102
Haz @haz.dev · 15/08/2026
AI also seems to understand it particularly well. Having no breaking changes over the past 3 years, despite 37 new versions, might have helped keep the training data up to date. The one area where we're behind is the number of components.
100
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
I really recommend seeing one if you get the chance. It's an incredible experience. The eclipse is extremely bright, but no camera can capture it faithfully. It looks like a huge, thin ring light in the sky, feels more artificial than natural.
000
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
We may try that at some point, but we're not just testing components. We're also testing our examples, which cover all the use cases. Some involve page navigation and broader page context beyond the component itself.
121
Haz @haz.dev · 07/08/2026
Worth noting that we use @⁠ariakit⁠/⁠test, which provides user event methods and works around many happy-dom quirks. We can reliably reproduce browser behavior in most cases.
npmjs.com
010
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
I wouldn't call this an exception. If a multibillion-dollar company ships this, I can expect many smaller sites to have poorly designed modes too. Still, "properly designed" is highly subjective. I think pure white-on-black, Vercel-like UIs are bad because they hurt my eyes. Others find them fine.
130
Haz @haz.dev · 06/08/2026
> I cannot think of a scenario when I want my system to be dark but this particular site The scenario I can think of is when one of them is poorly designed. The old Cloudflare dash suffered from this. Its dark mode was so bad that I preferred light mode even though my OS was always set to dark.
280
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
This comes on top of the improvements we've already made in recent versions. So if you haven't upgraded in a while, you can expect components to be up to 4× faster across the board.
031
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
It's in the thread.
010
Haz @haz.dev · 15/07/2026
Honestly, I feel like this is the best experience for both contributors and maintainers. No spam or AI slop PRs, no back-and-forth reviews, and everyone is rewarded.
010
Haz @haz.dev · 15/07/2026
Everyone involved is automatically added to the merge commit as `Co-authored-by`. They also appear in the changelog entries and receive the "Contributor" badge on GitHub.
110
Haz @haz.dev · 15/07/2026
1. Opening the issue 2. Helping with the issue 2.a. Providing a workaround 2.b. Testing a proposed solution 2.c. Linking to a fork with a solution 2.d. Helping with API/Design decisions 3. Reviewing the PR
110
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
Text: When working with code, always include examples or snippets in your explanation. Simple, focused code examples make code problems easier to understand.
000
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
2. Point GitHub Actions at the same configuration: - uses: actions/setup-node@v6 with: node-version-file: package.json The result: package.json becomes the single source of truth for both pnpm and Node, and contributors don’t need to switch Node manually.
030
Haz @haz.dev · 12/07/2026
1. Pin Node for the project: `pnpm runtime set node 24` This adds devEngines.runtime to package.json. Then pnpm install resolves an exact Node version, records its checksum in pnpm-lock.yaml, and installs it locally.
120
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/07/2026
Also installing node modules on a macOS runner 🫠 For some reason, it takes 2-3x as long as it does on Ubuntu.
260