// Interactive lab: pick a tenant, tweak name + color, preview updates live const { useState: useStateLab, useRef: useRefLab, useEffect: useEffectLab } = React; function Lab() { const [name, setName] = useStateLab("Lumen"); const [domain, setDomain] = useStateLab("lumen.crm"); const [color, setColor] = useStateLab("#007fdc"); const previewRef = useRefLab(null); const tenantTint = hexToTint(color); const mark = name.charAt(0).toUpperCase(); const presets = [ { name: "Lumen", color: "#007fdc" }, { name: "Kairo", color: "#10B87A" }, { name: "Nexa", color: "#8B5CF6" }, { name: "Orbit", color: "#F59E0B" }, { name: "Helix", color: "#EF4444" }, { name: "Zenith", color: "#0EA5E9" }, ]; // Tilt on hover useEffectLab(() => { const el = previewRef.current; if (!el) return; const onMove = (e) => { const r = el.getBoundingClientRect(); const dx = (e.clientX - r.left - r.width / 2) / r.width; const dy = (e.clientY - r.top - r.height / 2) / r.height; el.style.transform = `rotateY(${-8 + dx * 10}deg) rotateX(${4 - dy * 8}deg)`; }; const onLeave = () => { el.style.transform = `rotateY(-8deg) rotateX(4deg)`; }; el.addEventListener('mousemove', onMove); el.addEventListener('mouseleave', onLeave); return () => { el.removeEventListener('mousemove', onMove); el.removeEventListener('mouseleave', onLeave); }; }, []); return (
LiveYour brand, in 10 seconds

The CRM Problem, Solved.

Ditch the steep learning curves and lead loss. Switch to an AI-powered CRM that is powerful, 100% yours and actually enjoyable to use. Type your brand name below to see your new platform come to life instantly.

1 · Pick a brand preset

{presets.map(p => ( ))}

2 · Or go custom

setName(e.target.value)} />
setDomain(e.target.value)} />
setColor(e.target.value)} />
{color.toUpperCase()}
Happy with the look? We'll get your branded CRM live on {domain} with logo, palette, and emails — typically in 14–30 days.
{mark}
{name}.crm
Dashboard Leads Pages
+ New Lead
Total
2,184
New
312
Contacted
874
Qualified
496
Converted
248
Lost
254
Search leads, companies, owners…
Filter
Name
Company
Stage
Value
{[ ['Ava Reyes', 'Acme Robotics', 'Qualified', '$12,400', '#10B87A'], ['Noah Patel', 'Forge Labs', 'Contacted', '$8,200', color], ['Mia Chen', 'Northwind Co.', 'New', '$3,900', '#F59E0B'], ['Liam Okafor', 'Vertex Studio', 'Converted', '$24,800', '#10B87A'], ['Sara Müller', 'Helio Systems', 'Qualified', '$15,100', '#10B87A'], ].map((row, i) => (
{row[0].charAt(0)}
{row[0]}
{row[1]}
{row[2]}
{row[3]}
))}
); } function hexToTint(hex) { const c = hex.replace('#', ''); const r = parseInt(c.slice(0, 2), 16); const g = parseInt(c.slice(2, 4), 16); const b = parseInt(c.slice(4, 6), 16); // blend toward white const mix = (v) => Math.round(v + (255 - v) * 0.88); return `rgb(${mix(r)}, ${mix(g)}, ${mix(b)})`; } window.Lab = Lab;