Andrew Prifer
banner
prif.bsky.social
Andrew Prifer
@prif.bsky.social
UI, UX, 3D things. Graphics, UI & Interaction Design @ Luma AI. Prev: Theatre.js, Spline

https://bento.me/andrewprifer
What is the reason that the macOS genie animation looks like a trapezoid instead of a smooth bezier near the bottom?
November 24, 2025 at 5:03 PM
I find it very suspicious that the single benchmark where Gemini 3 Pro didn’t show any improvement is the one that most punishes overfitting to the training data by nondeterministically sourcing from a large set of novel real world problems.
November 18, 2025 at 4:56 PM
Investors please form an orderly line
November 17, 2025 at 5:02 PM
Haven’t seen anything like this before
November 16, 2025 at 6:48 PM
GPT-5 now supports constrained decoding with context free grammars. This is similar to structured outputs, but instead of forcing a schema, we can create custom languages and force the LLM to adhere to the syntax.

Huge.
November 11, 2025 at 4:58 PM
Insane in hindsight that this 3 year old commit of a bounding box tool not only uses a naming convention that only appeared 1-2 years later, but looks almost exactly like @vercel AI SDK tool definitions.
November 10, 2025 at 5:04 PM
Crazy that the encryption export laws of the Cold War still aren’t completely gone yet.
October 23, 2025 at 11:37 PM
As far as real world utility goes, coding models are a really smart typist with a CS degree. It's hard for me to agree with the crowd declaring the death of coding in <insert number of months>. Even today if I am any less specific in my prompts than this, the llm veers off in undesirable directions.
October 21, 2025 at 5:03 PM
it's not looking good bros
October 16, 2025 at 5:57 PM
my primary source of anxiety
October 16, 2025 at 4:01 PM
bro…
October 11, 2025 at 4:03 PM
My progressive blur library has weirdly picked up steam lately. If we can reach 200 stars I'll make a React Native version.
October 10, 2025 at 4:02 PM
Solution: keep track of pending promises, and at each step, race the ones that haven't settled yet.
October 9, 2025 at 3:56 PM
Learned the hard way: When using tool calls or structured outputs with LLMs, tool and schema descriptions barely have any sway.

To actually steer LLMs, always put this directly in your system prompt.
October 1, 2025 at 4:03 PM
I love that useChat in @aisdk replaced the data state with an onData callback because what the hell was I even doing here.
September 24, 2025 at 3:58 PM
dunk on Threads all you want but someone was cooking here
September 23, 2025 at 5:01 PM
Tutorial: what does <undocumented thing> do in <60 seconds

1. Visit GH repo
2. Press "."
3. Press CMD+SHIFT+F
4. Exclude ".md, .mdx, example/, .test.ts"
5. Search <thing>

The 50 lines of code you read will be more useful than an hour of forum searching.

Feat @aisdk
September 23, 2025 at 4:04 PM
Interactive idea bubbles that ripple playfully in response to your mouse—a fun experiment, though maybe a bit over the top. 🫧

Although it didn't make it into the product, I open sourced some of the tech here: github.com/AndrewPrife...
January 17, 2025 at 4:00 PM
At the same time, it also needs to blend with the carousel animation. Remember this is not the regular builtin scroll, we are in effect animating the carousel elements based on wheel / touch events, so every other animation needs to happen on top of that.
January 16, 2025 at 4:56 PM
The loading animation is using animation blending, a technique borrowed from video games that ensures that different animation cycles flow nicely into each other.
January 16, 2025 at 4:56 PM
An unexpected side-effect of having a system where I could already control all aspects of the layout and animate things in a highly customizable way was that I could go absolutely overboard with the loading animation.
January 16, 2025 at 4:56 PM
This bit was easy, I just borrowed @theopanag7's notebook and implemented a web version of their mobile SwiftUI magic.
January 16, 2025 at 4:56 PM
By the way, the mobile web version of the carousel has its very own tricks to be able to arrange the cards satisfyingly in all aspect ratios, while maintaining a specific height and allowing perfect scroll snapping.
January 16, 2025 at 4:56 PM
Without a limit on the number of generations per board (or per carousel even), some virtualization was essential. My best attempt at avoiding popping produced a satisfying visual in the dev tools.
January 16, 2025 at 4:56 PM
We quickly ended up running into weird-looking edge cases though as soon as different card aspect ratios were mixed, and in the end switched to the layout you see today.
January 16, 2025 at 4:56 PM