/* ============================================================ TRYONME Landing — BeforeAfter slider, Features grid, Extension ============================================================ */ function BeforeAfter() { const [pos, setPos] = useState(50); const [activeFit, setActiveFit] = useState(0); const dragging = useRef(false); const wrapRef = useRef(null); const fits = [ { name: "VINTAGE TEE", color: "#FF4D8B", garment: "tee" }, { name: "PARKA", color: "#2D3D7A", garment: "parka" }, { name: "MESH TANK", color: "#FFC83D", garment: "tank" }, ]; const handle = (clientX) => { if (!wrapRef.current) return; const r = wrapRef.current.getBoundingClientRect(); const p = ((clientX - r.left) / r.width) * 100; setPos(Math.max(2, Math.min(98, p))); }; useEffect(() => { const move = (e) => { if (!dragging.current) return; handle(e.touches ? e.touches[0].clientX : e.clientX); }; const up = () => { dragging.current = false; }; window.addEventListener("mousemove", move); window.addEventListener("touchmove", move); window.addEventListener("mouseup", up); window.addEventListener("touchend", up); return () => { window.removeEventListener("mousemove", move); window.removeEventListener("touchmove", move); window.removeEventListener("mouseup", up); window.removeEventListener("touchend", up); }; }, []); return (
§ LIVE DEMO
DRAG ME →

DRAG TO SEE THE
BEFORE → AFTER.

Same person, three outfits, zero changing rooms. Tap a fit to swap it.

{ dragging.current = true; handle(e.clientX); }} onTouchStart={(e) => { dragging.current = true; handle(e.touches[0].clientX); }} >
AFTER
BEFORE
{fits.map((f, i) => ( ))}
); } function BAImage({ variant, fit }) { const isAfter = variant === "after"; return (
{isAfter ? ( ) : ( )}
); } function Garment({ fit }) { if (fit.garment === "parka") { return ( <> {[260, 320, 380, 440].map(y => )} ); } if (fit.garment === "tank") { return ( <> {Array.from({ length: 80 }).map((_, i) => { const x = 150 + (i % 8) * 14; const y = 250 + Math.floor(i / 8) * 22; return ; })} ); } return ( <> TRYON ME ‘26 ); } function Features() { const features = [ { num: "A", title: "Auto-detect garment", body: "iOS Subject Lifter pulls the clothes out of any screenshot. No cropping, no stickers.", color: "var(--pink)" }, { num: "B", title: "Manual crop fallback", body: "Eight-handle box, dimmed surround. For when the AI gets a bit too generous.", color: "var(--yellow)" }, { num: "C", title: "Before / after compare", body: "Slider in every result. Side by side or full screen — your call.", color: "var(--blue)" }, { num: "D", title: "5 free credits", body: "On sign-up, no card. Top up with credit packs or promo codes.", color: "var(--pink)" }, { num: "E", title: "Save · Share · Delete", body: "Long-press in History. Outfits stay on-device unless you share them.", color: "var(--yellow)" }, { num: "F", title: "On-device first", body: "Photos and history live in your phone. Cloud opt-in, never the default.", color: "var(--blue)" }, ]; return (
§ WHAT'S INSIDE
FEATURES · vol.1


NO BLOAT.

{features.map((f, i) => (
{f.num}
{f.title}

{f.body}

))}
); } function Extension() { return (
CHROME · NEW


Browsing on desktop? Right-click any clothing image — ASOS, SSENSE, Depop, IG, you name it — hit Try on with TryOnMe. The fit ships to your phone in seconds.

  • ★ Works on every site that loads images
  • ★ Sign in with Google — same account as the app
  • ★ Unlimited storage of try-ons in your library
); } function ExtensionMockup() { return (
depop.com/p/cropped-leather-jacket
{Array.from({ length: 60 }).map((_, i) => ( ))}
Open image in new tab
Save image as…
Copy image
Try on with TryOnMe
Inspect
); } window.BeforeAfter = BeforeAfter; window.Features = Features; window.Extension = Extension;