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
dunk on Threads all you want but someone was cooking here
September 23, 2025 at 5:01 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