u/Better-Recipe-7591

We solved UI slop. We stopped generating UI and started measuring it.

We solved UI slop. We stopped generating UI and started measuring it.

UI slop isn't a taste problem. It's a sampling problem. And you can't really prompt your way out of a sampling problem. Every trick you've tried, negative constraints, a gazillion line .md file that says no gradients in caps, all of it just moves you around inside the same bubble.

Here's the thing that finally made it click for us. ThePrimeagen put it best: the model returns the middle of the distribution. You can push it around inside the average. You can't leave the average.

That's why you type "no purple" and get purple. Then the glowing orb. Then the badge pill. Then three feature cards. It isn't disobeying you. It's doing exactly what sampling does.

There's a second failure sitting on top of that one, and we think almost nobody talks about it.

A screenshot doesn't contain the animation.

Feed a model a picture of a site you love and the layout survives. So do the colours, the type, the spacing. Timing doesn't. The easing curve isn't in the pixels. Neither is the stagger, or the scroll range an effect is bound to, or two elements moving at different rates against the same scroll.

So the model has to invent the part that actually makes a site feel expensive. And inventing means, again, the middle of the distribution. Fade in, 300ms, ease out. Every time, forever.

That's the real reason AI sites feel dead even when they photograph fine. The look got copied. The life never made it.

So we stopped generating and started measuring.

We read the live page. What's actually bound to what, the real timing values while the thing is running. Then we write that section into the project. Nothing is sampled, so there's no average to land in the middle of. That's the whole idea, and it's why we think slop is solvable instead of something you fight forever with a longer prompt.

https://reddit.com/link/1vnrd7l/video/tjj6vyfic8jh1/player

The clip is three runs, each one harder than the last.

A scroll rig off a private jet site, where the jet climbs behind the headline and a photo wipes to a blueprint. Pure timeline, so it's all stagger and easing and scroll ranges with nothing to hide behind.

Then a photo grid that scatters and reassembles. Harder, because both states are real layouts and the whole thing lives in the transition between them.

Then a three.js scene, which is the one we're proud of. The reference is a Tokyo street diorama. What came back is a desk, monitor, chair, shelves, for the portfolio we were building. Live WebGL, spinnable, not a video of one. Same movement, completely different subject.

Which is the part we care about most. The animation is the expensive half. The brand is the other half. When you point at a site you like, you don't want their content. You want how it feels. So keep the animation and bring your own brand. Tokyo becomes a desk. The timing never moves.

Test it. Drop a URL in the our waitlist signup at platho.io and we'll run it and post exactly what comes back, including when it breaks.

- two of us building this in Europe

reddit.com
u/Better-Recipe-7591 — 6 days ago

A client sends you an award-winning site and says "make ours like this". We got tired of that job taking three weeks.

A client sends you a link to something gorgeous. One of those award-winning sites, the kind with scroll effects that make you sit up. "Make ours like this. Same feel, our brand."

Every freelancer here has taken that job. It bills 3-4k. It takes weeks. And barely any of those weeks are design, because the design was settled by whoever built the reference. You're just rebuilding what already exists, by eye, one easing curve at a time.

So you do the 2026 thing. Screenshot the reference, write a careful brief, hand it to an AI.

It comes back static. It always comes back static.

We spent months on that before we worked out why. A screenshot doesn't contain the animation.

Flatten a page into an image and layout survives. Colour, type, spacing, all fine. Timing doesn't make it across. The easing curve isn't in the pixels. Neither is the stagger, the scroll range an effect is bound to, or the fact that two elements drift at different speeds against the same scroll. It was never in the picture, so no prompt pulls it back out.

Then there's the part underneath that. ThePrimeagen has a bit that made it click for us: the model returns the middle of the distribution. You can push it around inside the average, but you're still inside it. Same reason you type "no purple" and get purple, then the glowing orb, then three feature cards. Prompting moves you around in there. It doesn't get you out.

So the model is guessing at something that was never in front of it, and the guess lands in the middle. Fade in, 300ms, ease out. Every time.

We stopped guessing and started measuring.

Three runs, each harder than the last.

https://reddit.com/link/1vnqxcp/video/6z847wrdb8jh1/player

First, a scroll rig - a private jet charter site where the jet climbs behind the headline and a photo wipes to a blueprint. Pure timeline. Stagger, easing, scroll ranges, nothing else to hide behind.

Then a layout that moves: an image cloud that scatters into a grid. Harder, because both states are real layouts and the whole thing lives in the transition between them.

Then the one we're proud of. We pointed it at a three.js scene, a slowly turning diorama, and got back a live WebGL scene sitting in the footer of our test site. Spinnable. Not a video, not a picture of one.

And it isn't their diorama. Theirs is a Tokyo street. Ours is a desk - monitor, chair, shelves - belonging to the fictional developer whose portfolio we were building. Same movement, different world.

That's the part we actually care about. The animation is the expensive half. The brand is the cheap half. Nobody pointing at a site wants that company's content. They want how it feels. So keep the animation and bring your own brand. A jet becomes a burger. Tokyo becomes a desk. The timing never moves.

We didn't want to take our own word for it, so we ran a control. Five other models (including Fable), same page - ycombinator.com - a 1,552-character brief with an explicit ANIMATIONS section, seven full-page screenshots each. Layout came back fine. Type, spacing, the exact orange. Not one of the five reproduced the scroll animation. The best of them returned the right structure filled with grey placeholder boxes, sitting perfectly still.

Not a prompting problem. Not a model problem. An input problem.

Ask us anything. And if you want to throw a page at us, drop a URL in the waitlist of platho.io, we'll run it and post what comes back, failures included.

- two of us, building this in Europe

reddit.com
u/Better-Recipe-7591 — 6 days ago