feat(marketing): trim landing to hero, crew, hierarchy, security
ci / gates (push) Has been cancelled
ci / rust (push) Has been cancelled
ci / sandbox-k8s (push) Has been cancelled
ci / frontend (push) Has been cancelled
ci / e2e (push) Has been cancelled

Remove the Pitch, One-click, Works, Always-on and Skills sections and the
"Build your AI crew" footer CTA banner. Page is now Hero → CrewStrip →
Hierarchy → Security → FAQ → footer (dark tier kept). Prune the now-dead
section functions, consts, and imports (Image, skills icons). Repoint the
"marketing rendered" heading assertion (p0/p7/visual) from the removed
Pitch heading to the hero h1 (/agentic systems/); refresh the @visual baseline.

Co-Authored-By: Claude Opus 4.8 <[email protected]>
This commit is contained in:
Omar Sobh
2026-06-15 16:06:05 -07:00
co-authored by Claude Opus 4.8
parent 44512a744f
commit 5638006eb6
6 changed files with 5 additions and 371 deletions
+1 -357
View File
@@ -1,5 +1,4 @@
import { Lock, Package, Share2, ShieldCheck, Wand2 } from "lucide-react";
import Image from "next/image";
import { Lock, ShieldCheck } from "lucide-react";
import Link from "next/link";
import { AgentToken } from "./AgentToken";
@@ -127,334 +126,6 @@ export function CrewStrip() {
);
}
/* ---------- Pitch + trait badges ---------- */
const BADGES = [
{ src: "/images/marketing/badge-secure.svg", label: "Secure", w: 40, h: 38 },
{ src: "/images/marketing/badge-customizable.svg", label: "Customizable", w: 36, h: 38 },
{ src: "/images/marketing/badge-easy.svg", label: "Easy to use", w: 40, h: 40 },
{ src: "/images/marketing/badge-teams.svg", label: "Built for teams", w: 40, h: 37 },
];
export function Pitch() {
return (
<section
id="crew"
className="flex w-full flex-col items-center bg-white px-8 pt-[56px] pb-[80px] lg:px-6 lg:pt-[64px] lg:pb-[104px]"
>
<div className="flex w-full max-w-[874px] flex-col items-center gap-[40px]">
<h2
className="w-[348px] text-center text-[40px] leading-none font-[650] tracking-[-1.6px] sm:w-[600px] sm:text-[50px] lg:w-[874px] lg:text-[64px] lg:tracking-[-2.56px]"
style={{ color: "#161d27" }}
>
Multiply your brainpower
<br className="hidden lg:block" /> with a team of custom,
<br className="hidden lg:block" /> collaborative{" "}
<br className="inline sm:hidden" />
AI coworkers
</h2>
<div className="grid grid-cols-2 justify-items-center gap-x-4 gap-y-8 sm:grid-cols-4 lg:gap-x-0 lg:gap-y-0">
{BADGES.map((b) => (
<div
key={b.label}
className="flex w-[140px] flex-col items-center justify-center gap-4 lg:w-[204px]"
>
<img
src={b.src}
alt=""
className="object-contain"
style={{ width: b.w, height: b.h }}
/>
<span
className="text-[18px] leading-[0.9] font-medium tracking-[-0.36px] whitespace-nowrap"
style={{ color: "#161d27" }}
>
{b.label}
</span>
</div>
))}
</div>
</div>
</section>
);
}
/* ---------- One-click setup ---------- */
export function OneClick() {
return (
<section className="flex w-full justify-center bg-white px-4 py-10 lg:px-10 lg:py-14">
<div
className="relative flex w-full max-w-[1360px] flex-col items-stretch gap-8 overflow-hidden rounded-[40px] px-6 py-10 sm:px-12 sm:py-16 lg:flex-row lg:gap-4 lg:px-[88px] lg:py-[88px]"
style={{ backgroundColor: "#f9fbff" }}
>
<div className="relative z-10 flex min-w-0 flex-1 flex-col items-start justify-start gap-8">
<div className="relative" style={{ width: 137, height: 64 }}>
<div
className="absolute top-0 left-0 flex items-center justify-center bg-white"
style={{ width: 64, height: 64, borderRadius: 16, border: "2px dashed #e0584a" }}
>
<svg width="20" height="20" viewBox="0 0 24 24" fill="none" aria-hidden>
<path d="M12 5v14M5 12h14" stroke="#e0584a" strokeWidth="2.5" strokeLinecap="round" />
</svg>
</div>
<svg
className="absolute"
style={{ left: 55, top: 32, width: 36, height: 40 }}
viewBox="0 0 24 26"
fill="none"
aria-hidden
>
<path d="M2 2L22 13.5L13.5 15.5L9.5 24L2 2Z" fill="white" stroke="#0f172a" strokeWidth="1.5" strokeLinejoin="round" />
</svg>
</div>
<div className="flex max-w-[623px] flex-col gap-4">
<h2
className="m-0 font-[650]"
style={{ color: "#161d27", fontSize: "clamp(36px, 5vw, 56px)", lineHeight: 0.9, letterSpacing: "-0.04em" }}
>
One-click setup
</h2>
<p
className="m-0 max-w-[448px] font-medium"
style={{ color: "rgba(10,15,30,0.75)", fontSize: "clamp(16px, 1.4vw, 20px)", lineHeight: 1.6 }}
>
Set up as many clawmates as your team needs in a few minutes. All
in the cloud.
</p>
</div>
</div>
<div className="relative z-10 flex min-w-0 flex-1 items-center justify-center">
<div
className="flex flex-col gap-4 overflow-hidden pb-6"
style={{ width: 375, maxWidth: "100%", backgroundColor: "white", border: "1px solid #e2e8f0", borderRadius: 32, boxShadow: "0px 17px 40px 0px rgba(0,0,0,0.1)" }}
>
<div
className="relative flex w-full items-center justify-center overflow-hidden"
style={{ height: 168, background: "linear-gradient(160deg, #1e293b, #0b1220)" }}
>
<AgentToken name="Sandy Clawson" size={76} />
</div>
<div className="flex w-full flex-col gap-6 px-6">
<div className="flex flex-col gap-4">
<h3 className="m-0 font-bold whitespace-nowrap" style={{ color: "#0f172a", fontSize: 22, letterSpacing: "-0.02em", lineHeight: 1.1 }}>
Sandy Clawson
</h3>
<div className="flex items-center justify-between">
<div className="flex items-center gap-1.5">
<img src="/images/marketing/icon-slack.svg" alt="" className="size-5" />
<span className="font-medium" style={{ color: "#475569", fontSize: 14, letterSpacing: "-0.02em" }}>Slack</span>
</div>
<span className="font-medium whitespace-nowrap" style={{ color: "#0f172a", fontSize: 14, letterSpacing: "-0.02em" }}>@sandy</span>
</div>
{["Shared with your team", "Talks with other Claws"].map((row) => (
<div key={row} className="flex items-center justify-between">
<span className="font-medium" style={{ color: "#475569", fontSize: 14, letterSpacing: "-0.02em" }}>{row}</span>
<span aria-hidden className="inline-flex items-center justify-end" style={{ width: 36, height: 20, padding: 2, borderRadius: 9999, backgroundColor: "#e0584a" }}>
<span className="block" style={{ width: 16, height: 16, borderRadius: 9999, backgroundColor: "white", boxShadow: "0px 0px 1px 0px rgba(0,0,0,0.4), 0px 1px 3px 0px rgba(0,0,0,0.1)" }} />
</span>
</div>
))}
</div>
<button
type="button"
className="inline-flex w-full items-center justify-center font-semibold transition-colors"
style={{ height: 48, borderRadius: 9999, border: "1px solid #e2e8f0", backgroundColor: "white", color: "#0f172a", fontSize: 14, padding: "12px 24px", filter: "drop-shadow(0 4px 12px rgba(22,29,39,0.08))" }}
>
Create Claw
</button>
</div>
</div>
</div>
</div>
</section>
);
}
/* ---------- Works where you do ---------- */
const APPS = [
"teams", "google", "notion", "threads", "salesforce", "monday",
"asana", "telegram", "zoom", "linkedin", "mailchimp", "canva", "mslant",
];
export function Works() {
return (
<section className="flex w-full justify-center overflow-hidden bg-white px-4 py-6 lg:px-10 lg:py-8">
<div
className="relative flex w-full max-w-[1360px] flex-col items-stretch gap-16 rounded-[24px] p-8 sm:p-12 lg:flex-row lg:gap-4 lg:overflow-hidden lg:rounded-[40px] lg:p-[88px]"
style={{ backgroundColor: "#f9fbff" }}
>
<div className="flex min-w-0 flex-1 flex-col items-start justify-between gap-8 self-stretch lg:gap-0">
<div className="flex w-full flex-col gap-8">
<div className="flex items-center justify-center" style={{ width: 64, height: 64, backgroundColor: "white", borderRadius: 16, boxShadow: "2px 8px 16px 0px rgba(119,135,158,0.2)" }}>
<img src="/images/marketing/icon-slack.svg" alt="" style={{ width: 46, height: 46 }} />
</div>
<div className="flex max-w-[623px] flex-col gap-4">
<h2 className="m-0 font-[650]" style={{ color: "#0f172a", fontSize: "clamp(32px, 5vw, 56px)", lineHeight: 0.9, letterSpacing: "-0.04em" }}>
Works where you do
</h2>
<p className="m-0 max-w-[524px] font-medium" style={{ color: "rgba(10,15,30,0.75)", fontSize: "clamp(16px, 1.4vw, 20px)", lineHeight: 1.6 }}>
Each clawmate has their own computer and can collaborate over
Slack, Teams, email, and 3,000+ apps.
</p>
</div>
</div>
<ul className="m-0 mt-8 flex w-full max-w-[420px] list-none flex-wrap items-center p-0 lg:mt-12" style={{ gap: 10 }}>
{APPS.map((a) => (
<li key={a} className="flex items-center justify-center bg-white" style={{ width: 40, height: 40, borderRadius: 10, boxShadow: "2px 8px 16px 0px rgba(119,135,158,0.2)" }}>
<img src={`/images/marketing/app-${a}.png`} alt="" className="object-contain" style={{ width: 24, height: 24 }} />
</li>
))}
<li className="inline-flex items-center justify-center" style={{ width: 56, height: 40, color: "#d23a3a", fontSize: 14, fontWeight: 700, letterSpacing: "-0.04em" }}>
3,000<span style={{ marginLeft: 2 }}>+</span>
</li>
</ul>
</div>
<div className="relative hidden min-w-0 flex-1 items-center justify-center lg:flex">
<div className="relative w-full" style={{ maxWidth: 500, aspectRatio: "1628 / 2106" }}>
<Image src="/images/marketing/slack-convos.png" alt="Slack conversation previews" fill unoptimized sizes="500px" className="object-contain" />
</div>
</div>
<div className="relative w-full lg:hidden" style={{ height: 190 }}>
<div className="absolute top-0 left-1/2 flex -translate-x-1/2 items-start" style={{ width: 852 }}>
<img src="/images/marketing/slack-card-1.png" alt="" className="shrink-0" style={{ width: 300, height: 179, marginRight: -24 }} />
<img src="/images/marketing/slack-card-2.png" alt="" className="relative z-10 shrink-0" style={{ width: 300, height: 232, marginRight: -24 }} />
<img src="/images/marketing/slack-card-3.png" alt="" className="shrink-0" style={{ width: 300, height: 177 }} />
</div>
</div>
</div>
</section>
);
}
/* ---------- Always on ---------- */
export function AlwaysOn() {
return (
<section className="flex w-full justify-center bg-white px-4 py-6 lg:px-10 lg:py-8">
<div
className="relative flex w-full max-w-[1360px] flex-col items-stretch gap-8 overflow-hidden rounded-[40px] px-8 py-10 sm:px-12 sm:py-12 lg:h-[565px] lg:flex-row lg:gap-4 lg:py-0 lg:pr-0 lg:pl-[88px]"
style={{ backgroundColor: "#0f172a" }}
>
<div aria-hidden className="pointer-events-none absolute" style={{ top: -260, left: -260, width: 700, height: 700, background: "radial-gradient(closest-side, rgba(120,170,255,0.22), rgba(120,170,255,0) 70%)", filter: "blur(2px)" }} />
<div className="relative z-10 flex min-w-0 flex-1 flex-col items-start justify-center gap-8 lg:justify-start lg:pt-[88px]">
<img src="/images/moon.svg" alt="" width={61} height={64} className="block" />
<div className="flex max-w-[623px] flex-col gap-4">
<h2 className="m-0 font-[650]" style={{ color: "#f8fafc", fontSize: "clamp(36px, 5vw, 56px)", lineHeight: 0.9, letterSpacing: "-0.04em" }}>
Always on
</h2>
<p className="m-0 max-w-[496px] font-medium" style={{ color: "#cbd5e1", fontSize: "clamp(16px, 1.4vw, 20px)", lineHeight: 1.6 }}>
Your team of clawmates get real work done
<br className="hidden sm:inline" /> while you meet, eat, play, and
sleep.
</p>
</div>
</div>
<div className="relative z-10 flex min-w-0 flex-1 items-center justify-center lg:py-[64px] lg:pr-[64px]">
<div className="w-full max-w-[520px] overflow-hidden rounded-2xl border border-white/10 bg-[#0b1220] font-mono text-[12.5px] leading-relaxed shadow-2xl">
<div className="flex items-center gap-1.5 border-b border-white/10 px-4 py-3">
<span className="size-2.5 rounded-full bg-white/20" />
<span className="size-2.5 rounded-full bg-white/20" />
<span className="size-2.5 rounded-full bg-white/20" />
<span className="ml-2 text-[11px] text-marketing-slate-light">
marketing-claw · activity
</span>
</div>
<div className="flex flex-col gap-1.5 px-4 py-4 text-marketing-slate-light">
<p>
<span className="text-marketing-slate-light">02:14</span>{" "}
<span className="text-marketing-azure"></span> drafting the weekly
report
</p>
<p>
<span className="text-marketing-slate-light">02:15</span>{" "}
<span className="text-marketing-azure"></span> querying the
analytics warehouse
</p>
<p>
<span className="text-marketing-slate-light">02:17</span>{" "}
<span className="text-marketing-teal"></span> 3 tool calls
completed
</p>
<p className="rounded-md bg-white/[0.04] px-2 py-1.5">
<span className="text-marketing-teal"></span> awaiting human
approval <span className="text-white">send email team@</span>
</p>
<p>
<span className="text-marketing-slate-light">02:19</span>{" "}
<span className="text-marketing-teal"></span> approved by you ·
sent
</p>
<p className="flex items-center gap-2 text-marketing-slate-light">
<span className="inline-block size-2 rounded-full bg-marketing-teal" />
running while you sleep
</p>
</div>
</div>
</div>
</div>
</section>
);
}
/* ---------- Skills (your work, your way) ---------- */
export function SkillsShowcase() {
return (
<div className="relative w-screen" style={{ left: "50%", marginLeft: "-50vw" }}>
<section
id="deck"
className="flex w-full scroll-mt-24 flex-col items-center overflow-x-hidden bg-marketing-mist px-6 pt-[104px] pb-[104px] sm:pt-[176px] sm:pb-[200px]"
>
<div className="flex w-full flex-col items-center gap-[56px]" style={{ maxWidth: 1014 }}>
<div className="flex max-w-[544px] flex-col items-center gap-4">
<h2 className="text-center text-[32px] leading-none font-[650] tracking-[-1.28px] text-[#161d27] sm:text-[48px] sm:tracking-[-2.24px] lg:text-[56px]">
Your work, your way
</h2>
<p className="max-w-[468px] text-center text-[18px] leading-[1.6] font-medium text-[#0a0f1e]/75 sm:text-[20px]">
Teach your clawmates to work the way your company does. Share skills
with your whole team.
</p>
</div>
<div className="grid w-full gap-6 sm:grid-cols-3">
{[
{
Icon: Wand2,
title: "Create any new skill",
body: "Turn your team's workflows into custom skills simply by chatting.",
},
{
Icon: Package,
title: "Install our skill packs",
body: "Get started with our library of battle-tested skills. Tweak as you need.",
},
{
Icon: Share2,
title: "Share skills easily",
body: "Your team builds once and gets the benefits of AI together.",
},
].map(({ Icon, title, body }) => (
<div
key={title}
className="flex flex-col items-center gap-4 rounded-3xl border border-marketing-border bg-white px-6 py-10 text-center"
>
<span
className="flex size-14 items-center justify-center rounded-2xl"
style={{ backgroundColor: "rgba(59,130,246,0.1)" }}
>
<Icon aria-hidden size={26} strokeWidth={1.75} className="text-marketing-azure" />
</span>
<h3 className="text-[18px] leading-[1.1] font-semibold tracking-[-0.18px] text-marketing-ink">
{title}
</h3>
<p className="max-w-[260px] text-[14px] leading-[1.5] text-marketing-slate">
{body}
</p>
</div>
))}
</div>
</div>
</section>
</div>
);
}
/* ---------- Enhanced security ---------- */
const SECURITY = [
{ icon: "icon-admin", title: "Admin controls", body: "Admins can control access, app integrations, and skill installations." },
@@ -517,33 +188,6 @@ const FOOTER_LINKS = [
export function Footer() {
return (
<footer className="w-full">
<div className="relative flex w-full flex-col items-center overflow-hidden bg-[#f9fbff] px-6 pt-[127px] pb-[160px] sm:pb-[120px]">
<div className="absolute inset-0 h-full w-full opacity-[0.07]" style={{ backgroundImage: "url('/images/marketing/dot-pattern.svg')", backgroundSize: "cover", backgroundPosition: "center" }} />
<div className="relative flex w-full max-w-[561px] flex-col items-center gap-[40px] sm:gap-[56px]">
<div className="flex items-center justify-center gap-2.5">
{[
{ n: "Marketing Claw", a: "#3b82f6" },
{ n: "Support Claw", a: "#14b8a6" },
{ n: "Research Claw", a: "#3b82f6" },
{ n: "Ops Claw", a: "#3b82f6" },
{ n: "Growth Claw", a: "#14b8a6" },
].map(({ n, a }) => (
<AgentToken key={n} name={n} size={44} accent={a} />
))}
</div>
<h2 className="text-center text-[40px] leading-none font-[650] tracking-[-2.56px] text-[#161d27] sm:text-[56px] lg:text-[64px]">
Build your AI crew
</h2>
<div className="flex w-full max-w-[454px] flex-col gap-4 sm:flex-row">
<Link href="/login" className={`${ctaCoral} h-16 flex-1 p-4 text-[16px] tracking-[-0.32px] whitespace-nowrap`}>
Get started for free
</Link>
<a href="mailto:[email protected]" className="inline-flex h-16 flex-1 items-center justify-center rounded-[56px] bg-[#161d27] p-4 text-[16px] font-semibold tracking-[-0.32px] whitespace-nowrap text-white transition-colors hover:bg-[#2a3444]">
Book a demo
</a>
</div>
</div>
</div>
<div className="relative flex w-full flex-col items-center bg-[#161d27] px-6 pt-[40px] pb-12 sm:pt-[42px] sm:pb-16">
<div className="flex w-full max-w-[1100px] flex-col gap-[48px] sm:gap-[72px]">
<div className="flex items-center justify-between gap-8">