One pure decision function
decideFor() takes settings and a visitor and returns an answer, with no cookies or waiting inside. The real site, the previews and the crowd all call the same function, so they can never disagree.
I'm Ava. I run Simply Devign, where I build websites for brands and creatives on Shopify, Squarespace, Webflow and custom code. I built this site to show how I think about changing a live website safely: who sees what, how to roll out slowly, and how to undo a mistake in one click.
proxy.ts runs before anything else. It gives you a visitor ID and works out whether you're new or returning, on a phone or a laptop.
Everything that can change, from the theme to the headline, asks one function what to show: decideFor().
Is the switch on? Is the option valid? Are you in the audience? Are you inside the rollout? Fail any step and you get the default.
The default version shows instantly while your version is worked out, then swaps in. Most visitors never notice.
decideFor() takes settings and a visitor and returns an answer, with no cookies or waiting inside. The real site, the previews and the crowd all call the same function, so they can never disagree.
The four previews and the 100 dots aren't animations. Each one is a pretend visitor run through the exact code that decides what real visitors see.
Your visitor ID is hashed with each switch's name into a bucket from 0 to 99. Same visitor, same experience every time, and each switch rolls out independently.
Every visitor gets a private sandbox, so anyone can play without breaking the site for someone else. The trade-off: your settings don't follow you to another device.
Every switch is a plain form powered by a Server Action. Less code shipped to the browser, and the Control Room works before the page finishes loading.
The open switch lives in the address bar, like /lab?s=site_theme. No client state needed, the back button just works, and you can link straight to a switch.
Shared setups are packed into the URL, so anyone could edit one by hand. Every value is checked when it's unpacked, and anything invalid falls back to a safe default.
Each switchable section is wrapped in Suspense with the default version as its fallback. The page is fast for everyone, and nobody sees a blank space.