Why we rebuilt norml.studio on Next.js and Sanity
2 min read
By Zhenia Mohyla2 min read
There's a temptation, on every project, to make the interface interesting — to add the unexpected interaction, the clever transition, the layout nobody's seen before. Most of the time, that temptation is worth resisting.
Every novel pattern is something the user has to learn. A custom dropdown, a reinvented scroll, a menu that opens sideways — each one asks for a few seconds of attention the user didn't plan to spend. Spend that budget on the things that are genuinely yours, and pay the familiar price everywhere else.
Standard components carry decades of accumulated care: keyboard support, screen-reader semantics, focus handling, reduced-motion behavior. The moment you rebuild a native control from scratch, you inherit the job of reimplementing all of it — and most reinventions quietly skip the parts you can't see.
Restraint, here, isn't laziness. It's choosing not to reintroduce solved problems.
None of this is an argument for blandness. The place to be bold is the part of the product that is uniquely yours — the hero moment, the signature motion, the one screen people screenshot and send to a friend. Be ruthless about spending your novelty budget there, and almost nowhere else.
Before we ship a non-standard pattern, we ask three questions:
The best interface is the one the user never has to think about. Save the fireworks for the one moment that earns them.