I’m like 98% sure that you should set `text-wrap: pretty;` by default globally in your app.
It gives you nicer line breaks (avoids orphans),which is what you want most of the time. Then fix the edge cases where orphans are actually what you need like some headings (edge case!).
Show more
Made a small dialog animation improvement at Linear:
Matched the previously mismatched animation duration of overlay and the dialog + swapped spring animaton for an ease-out one so it feels less abrupt.
Toast at the bottom right shows whether it’s before or after.
Show more
I’ve reached a point where I’m like not excited about new models. There are too many releases, too many people overhype those releases, and it feels like marginal gains.
I feel like the models from the last few months are good enough for my coding needs at least.
Show more
Many such cases, btw. thanks for 1.5 milion downloads and 40k GitHub stars!
Interesting to see how the AI companies are trying to make their apps feel more human, less alien.
Muse has this cute little animated guy smiling all the time, ready to help you with anything. It feels friendlier and more relatable than a blank, sterile screen with an input.
ChatGPT Computer Use shows a moving cursor as it’s working. It’s not technically required, but it makes the whole process less scary and easier to follow.
It’s like the early iPhone days when things used to immitate real world objects so that an unfamiliar technology felt more intuitive and relatable.
In this case we imitate presence, trying to give the AI a more human feel.
Show more
Migrated Linear from Radix to Base UI, took just over a milion tokens.
One nice subtle benefit of using Base UI over Radix is that the animations are interruptible since Base uses CSS transitions instead of keyframes.
This is me spamming on both dropdowns, notice the glitchiness in the one on the left.
Show more
Two favorite details in most AI chat apps:
- Typing anywhere outside the input automatically focuses it.
- Holding ⌘ shows each tab’s keyboard shortcut, like ⌘1, ⌘2, etc. (wish Chrome did that).
Show more
A small quality of life update:
When you were using the Linear Agent and a toast was render, it covered the chat.
Now the toast renders next to it and changes position when the chat is open/closed.
Show more
One of my favorite details of Sonner:
By default the toast disappears after 4 seconds unless you hover over it. But what if a toast is triggered and the user switches to a different tab? 4 seconds would pass and the toast would never be seen.
That’s why there’s a `useIsDocumentHidden` hook that checks if the document (tab) is hidden, and if so, it will pause the timer.
This can be done with the "visibilitychange" event listener on the document.
A small detail that improves the experience.
Show more
Over 1000 PRs later, Linear migrated from styled-components to
@stylexjs.
What began as performance optimization gave us better defaults for humans and agents alike.
Our engineer
@kenneth_skovhus on what we learned:
Show more
These graphs are also quite versatile.
Since it’s all just text you can animate them by simply changing colors or replacing characters.
You can put pretty much anything you want in them, you’re only limited by what characters are available.
Show more
Linear Diffs has been a joy to use, but one detail I like about the merge queue specifically is that the little icon on the left animates subtly.
It made me smile the first time I saw it. Nice work,
@yangit.
Show more
New: Merge queue status in diffs
See where a PR is in the queue and when it’s expected to merge.
Designed by
@pdotcv, you an see it live here:
New skill: /animate-expo
All the animation knowledge, but for your native apps.
React Native and Expo: gestures, sheets, haptics, screen transitions, and more.
Made in collaboration with the
@expo team.
Show more
After my last post about turning someone’s content into a skill, a few people asked the same question: how do you know who’s actually worth learning from, given all the AI slop out there?
Look for proof of work.
If I wanted to learn font design, I’d read everything Rasmus has ever said about fonts, because he made Inter. I wouldn’t search for the most viral typography thread.
Shipped work that strangers pay for or depend on is the best signal there is.
Before taking someone’s advice, open their GitHub or personal site. Find something they built that people actually use: a product, an open-source library, something tangible.
This is why followers and likes are not a great proxy for what’s good and what’s not.
Many people are good at posting shiny things, but as soon as you look for any tangible work, it falls apart. Mainly because building is a completely different skill, and that’s the skill you actually want.
You want to learn from the builders. Be allergic to the talkers.
Show more
Something I like to do recently is ask Fable to make me a skill out of someone’s publicly shared knowledge.
If someone writes about say marketing for developers, I send Fable a link to their articles and tell it to make me a skill out of it.
Then before sending a marketing email for example, I ask Fable to run it through that skill and show me how it can be improved.
This applies to anything really, writing, designing, etc. as long as there’s some publicly available data that you think is good.
So again, taste plays a role here as well.
Show more
The people getting great UI results with AI aren’t using a secret model or a magic prompt. They know what a great interface looks like, and they know how to steer AI towards it.
Work that used to take a week takes a day, and the quality bar doesn’t drop, it goes up, because you spend your time on the things that matter.
At the end of the day, people that use AI best are the ones that were excellent before LLMs as well. The ones that got the fundamentals right, went that extra mile, and cared about the thing they were working on.
Show more
Here are a few example prompts that go well with the /find-animation-opportunities skill:
Scoped to one view with extra context for more accurate judgement:
“Find animation opportunities in the checkout flow. It’s used a few times per session by each customer, factor this in.”
Combined with the /improve-animations skill, this works extremely well:
“Look through the dashboard UI for places that would benefit from motion, tell me what you'd skip and why, then turn the top suggestion into an improve-animations plan.”
Using this as a “shield” instead of trying to find ways to add animations:
“Before we add any motion to this dashboard, is there anything here that should animate at all?”
Right after an agent builds new UI:
“I just generated this settings page and it has zero motion. What should animate and what shouldn’t?”
Show more
New skill: /find-animation-opportunities
Search your UI for places that would genuinely benefit from motion, while also telling you what not to animate.