// n-sections.jsx — Nordic-style sections const GOOGLE_CAL_URL = "https://calendar.app.google/KS4b9peJhiikgHwH9"; // ──────────────────────────────────────────────────────────────────── // Nav // ──────────────────────────────────────────────────────────────────── function Nav({ onBook }) { return ( ); } // ──────────────────────────────────────────────────────────────────── // Hero — big wordmark + dark image card with tabs // ──────────────────────────────────────────────────────────────────── const HERO_TABS = [ { num: "01", ttl: "Our studio", desc: "10 years. 40+ products. Senior-only team." }, { num: "02", ttl: "The retainer", desc: "A design team. Without the hiring." }, { num: "03", ttl: "The math", desc: "Cheaper than a mid-level hire." }, { num: "04", ttl: "Book a call", desc: "30 minutes with Anna. No pitch." }]; const TEAM_PHOTOS = [ 'assets/team/vasyl.png', 'assets/team/as.png', 'assets/team/ac.png', 'assets/team/d.png', 'assets/team/ik.png', 'assets/team/sk.png', 'assets/team/oh.png', 'assets/team/ob.png']; function Avatar({ seed = 0, size = 64 }) { const src = TEAM_PHOTOS[seed % TEAM_PHOTOS.length]; return ( ); } function ClutchBadge() { const ref = React.useRef(null); React.useEffect(() => { let s = document.querySelector('script[src="https://widget.clutch.co/static/js/widget.js"]'); if (!s) { s = document.createElement('script'); s.src = 'https://widget.clutch.co/static/js/widget.js'; s.async = true; document.body.appendChild(s); } const t = setTimeout(() => { if (window.CLUTCHCO && typeof window.CLUTCHCO.Init === 'function') { try {window.CLUTCHCO.Init();} catch (e) {} } }, 600); return () => clearTimeout(t); }, []); return (
{/* Fallback shown until widget.clutch.co replaces this node */} 5.0 {[0, 1, 2, 3, 4].map((i) => )} 19 reviews
); } const OUTER_ORBIT = [ { seed: 0, size: 64 }, { seed: 1, size: 48 }, { seed: 2, size: 58 }, { seed: 3, size: 52 }, { seed: 4, size: 60 }]; const INNER_ORBIT = [ { seed: 5, size: 56 }, { seed: 6, size: 50 }, { seed: 7, size: 52 }]; function Hero({ onBook }) { return (
); } // ──────────────────────────────────────────────────────────────────── // Awards strip // ──────────────────────────────────────────────────────────────────── const STRIP = [ { nm: "Red Dot", ds: "Design Award 2025" }, { nm: "3× FWA", ds: "Of the Day" }, { nm: "18× Awwwards", ds: "SOTD · OWDA" }, { nm: "25× CSS DA", ds: "UI · UX · Innovation" }, { nm: "11× Behance", ds: "Featured Projects" }, { nm: "5.0 Clutch", ds: "Verified Reviews" }]; function AwardsStrip() { return (
{STRIP.map((s, i) =>
{s.nm} {s.ds}
)}
); } // ──────────────────────────────────────────────────────────────────── // About — split layout, photo placeholder + about copy // ──────────────────────────────────────────────────────────────────── function ClutchReviewsWidget() { const wrapRef = React.useRef(null); React.useEffect(() => { // Clear any previously rendered iframe inside our div before (re-)init, // so the widget rebuilds with current data-* attributes. if (wrapRef.current) { const stale = wrapRef.current.querySelectorAll('iframe'); stale.forEach((f) => f.remove()); } let s = document.querySelector('script[src="https://widget.clutch.co/static/js/widget.js"]'); if (!s) { s = document.createElement('script'); s.src = 'https://widget.clutch.co/static/js/widget.js'; s.async = true; document.body.appendChild(s); } const t = setTimeout(() => { if (window.CLUTCHCO && typeof window.CLUTCHCO.Init === 'function') { try {window.CLUTCHCO.Init();} catch (e) {} } }, 400); return () => clearTimeout(t); }, []); return (
); } function About({ onBook }) { return (
About us

A senior product design studio that stays.

We're a small senior team focused on clarity and craft. From product UI to design systems, we help SaaS teams turn ideas into thoughtful, functional experiences: week after week, the same team, the same context.

); } // ──────────────────────────────────────────────────────────────────── // Problem (dark) // ──────────────────────────────────────────────────────────────────── function Problem({ onBook }) { return (
The problem

Your product is moving. Your design isn't keeping up.

01 / Symptom

You've got engineers shipping features every sprint. A PM with a backlog that never shrinks. And design: either there's no one doing it, or there's one person doing everything, and it shows.

The problem isn't effort. It's structure.

02 / Cause

Design needs to be embedded in the product cycle, not bolted on when something looks broken. It needs someone who knows your flows, edge cases, users.

Hiring solves this. Eventually. After two months of recruiting, onboarding, and watching a new designer learn your product from scratch. And if they leave, you start over.