> ## Documentation Index
> Fetch the complete documentation index at: https://aspect.build/llms.txt
> Use this file to discover all available pages before exploring further.

# The Build Platform for Bazel at Scale - Aspect Build

> Aspect Build makes Bazel fast, usable, and effortless. The platform cuts build times and CI costs. Built by the team that maintains the rulesets you already depend on.

export const MarketingPage = () => <div className="marketing-page-marker" style={{
  display: "none"
}} />;

export const CTA = ({title, subtitle, primaryCta, primaryHref = "#", secondaryCta, secondaryHref = "#"}) => <section className="w-full flex justify-center px-4 py-16 md:py-20">
    <div className="w-full rounded-2xl text-white flex flex-col md:flex-row items-center justify-center gap-10 md:gap-16 p-8 md:p-12 text-center md:text-left" style={{
  maxWidth: "1140px",
  background: "linear-gradient(135deg, #1a3a5c 0%, #176ACC 100%)"
}}>
      <div>
        <h2 className="text-2xl md:text-3xl font-semibold tracking-tight">{title}</h2>
        {subtitle && <div className="mt-3 text-blue-100 text-base">{subtitle}</div>}
      </div>
      <div className="flex flex-wrap gap-3 shrink-0 justify-center">
        {primaryCta && <a href={primaryHref} className="inline-flex items-center px-6 py-3 rounded-lg bg-white text-blue-700 font-semibold hover:bg-blue-50 transition whitespace-nowrap shadow-sm">
            {primaryCta}
          </a>}
        {secondaryCta && <a href={secondaryHref} className={`inline-flex items-center px-6 py-3 rounded-lg border border-blue-300/50 text-white font-semibold hover:bg-blue-700/30 transition whitespace-nowrap ${secondaryHref === "/request-demo" ? "demo-gradient-btn" : ""}`}>
            {secondaryCta}
          </a>}
      </div>
    </div>
  </section>;

export const StatsBar = ({stats = [], grid = false}) => <div className={grid ? "stats-grid py-4" : "flex flex-wrap justify-center gap-8 md:gap-16 py-4"}>
    {stats.map((stat, i) => {
  const Tag = stat.href ? "a" : "div";
  return <Tag key={i} {...stat.href ? {
    href: stat.href
  } : {}} className={`flex flex-col items-center text-center${stat.href ? " group" : ""}`}>
          <span className={`text-3xl md:text-4xl font-bold ${grid ? "text-blue-600 dark:text-blue-400" : "text-zinc-900 dark:text-white"}`}>{stat.value}</span>
          <span className={`text-sm text-zinc-500 dark:text-zinc-400 mt-1${grid ? " stats-grid-label" : ""}${stat.href ? " group-hover:text-blue-600 dark:group-hover:text-blue-400 transition-colors" : ""}`}>{stat.label}</span>
        </Tag>;
})}
  </div>;

export const TestimonialCard = ({quote, author, role, company, companyLogo, imageType = "company", children}) => <div className="flex flex-col p-6 md:p-8 rounded-xl bg-white dark:bg-zinc-800/50 border border-zinc-200 dark:border-zinc-700 shadow-sm">
    {children && imageType === "company" && <div className="testimonial-card-company-logo mb-5">{children}</div>}
    {companyLogo && imageType === "author" && <div className="testimonial-card-company-logo mb-5">
        <img noZoom src={companyLogo} alt={company || ""} />
      </div>}
    <p className="text-zinc-700 dark:text-zinc-200 leading-relaxed text-base flex-1">"{quote}"</p>
    <div className="mt-6 pt-5 border-t border-zinc-100 dark:border-zinc-700 flex items-center gap-4">
      {children && imageType === "author" && <div className="testimonial-card-author-image">{children}</div>}
      <div>
        <div className="text-base font-semibold text-zinc-900 dark:text-white" style={{
  display: "block"
}}>{author}</div>
        {role && <div className="author-role-gap text-sm text-zinc-500 dark:text-zinc-400" style={{
  display: "block",
  marginTop: "0.625rem"
}}>{role}{(imageType !== "company" || !children) && company ? `, ${company}` : ""}</div>}
      </div>
    </div>
  </div>;

export const TestimonialGrid = ({children, columns = 2}) => <div className="relative">
    <svg className="absolute -top-4 -left-2 md:-top-8 md:-left-6 w-16 h-16 md:w-24 md:h-24 text-blue-500/10 dark:text-blue-400/15 pointer-events-none" fill="currentColor" viewBox="0 0 24 24" aria-hidden="true">
      <path d="M14.017 21v-7.391c0-5.704 3.731-9.57 8.983-10.609l.995 2.151c-2.432.917-3.995 3.638-3.995 5.849h4v10h-9.983zm-14.017 0v-7.391c0-5.704 3.731-9.57 8.983-10.609l.995 2.151c-2.432.917-3.995 3.638-3.995 5.849h4v10h-9.983z" />
    </svg>
    <div className={`relative grid gap-6 ${columns === 3 ? "md:grid-cols-2 lg:grid-cols-3" : "md:grid-cols-2"}`}>{children}</div>
  </div>;

export const Testimonial = ({quote, author, role, company, caseStudyHref, elevated = false, children}) => <div className={`relative flex flex-col p-8 md:p-12 rounded-2xl border border-zinc-200 dark:border-zinc-700 overflow-hidden ${elevated ? "bg-white dark:bg-zinc-800 shadow-sm" : "bg-zinc-50 dark:bg-zinc-800/40"}`}>
    <svg className="absolute top-8 left-8 w-12 h-12 text-zinc-200 dark:text-zinc-700 opacity-80" fill="currentColor" viewBox="0 0 24 24" aria-hidden="true">
      <path d="M14.017 21v-7.391c0-5.704 3.731-9.57 8.983-10.609l.995 2.151c-2.432.917-3.995 3.638-3.995 5.849h4v10h-9.983zm-14.017 0v-7.391c0-5.704 3.731-9.57 8.983-10.609l.995 2.151c-2.432.917-3.995 3.638-3.995 5.849h4v10h-9.983z" />
    </svg>
    <div className="relative flex flex-col md:flex-row items-start gap-8">
      <div className="flex-1">
        <p className="text-xl md:text-2xl text-zinc-800 dark:text-zinc-100 leading-relaxed font-medium">
          "{quote}"
        </p>
        <div className="mt-8 flex items-center gap-4">
          <div>
            <div className="font-semibold text-zinc-900 dark:text-white text-base" style={{
  display: "block"
}}>{author}</div>
            {role && <div className="author-role-gap text-sm text-zinc-400 dark:text-zinc-500" style={{
  display: "block",
  marginTop: "0.625rem"
}}>{role}{company ? `, ${company}` : ""}</div>}
          </div>
        </div>
      </div>
      <div className="flex flex-col items-center gap-5 md:min-w-44 shrink-0">
        {children && <div className="testimonial-company-logo">{children}</div>}
        {caseStudyHref && <a href={caseStudyHref} className="inline-flex items-center px-4 py-2 rounded-lg border border-zinc-300 dark:border-zinc-600 text-zinc-700 dark:text-zinc-200 text-sm font-semibold hover:bg-zinc-50 dark:hover:bg-zinc-800 transition whitespace-nowrap">
            Read case study
          </a>}
      </div>
    </div>
  </div>;

export const McpMock = () => <div className="mcp-mock" role="img" aria-label="An AI assistant using the Aspect MCP server to explain a failed build">
    <div className="mcp-mock-bar"><span /><span /><span /><span className="mcp-mock-title">AI assistant · aspect mcp</span></div>
    <div className="mcp-mock-body">
      <div className="mcp-msg mcp-user">Why did last night's main build fail? Is it flaky?</div>
      <div className="mcp-tool">list_invocations</div>
      <div className="mcp-tool">tail_build_log</div>
      <div className="mcp-tool">get_target_stats</div>
      <div className="mcp-msg mcp-agent">It failed on <code>//app/server:integration_test</code>, a timeout on the log's last page. That test has failed intermittently across recent main builds, so it's flaky, not broken by this change.</div>
    </div>
  </div>;

export const ScreenshotTabs = ({labels = [], captions = [], id = "shots", children}) => {
  const [active, setActive] = useState(0);
  const shots = [].concat(children).filter(c => c && typeof c === "object");
  const onKeyDown = e => {
    if (e.key !== "ArrowRight" && e.key !== "ArrowLeft") return;
    const next = (active + (e.key === "ArrowRight" ? 1 : shots.length - 1)) % shots.length;
    setActive(next);
    document.getElementById(`${id}-tab-${next}`)?.focus();
  };
  return <div className="shot-tabs">
      <div className="shot-tabs-list" role="tablist" onKeyDown={onKeyDown}>
        {labels.map((label, i) => <button key={label} id={`${id}-tab-${i}`} type="button" role="tab" aria-selected={i === active} aria-controls={`${id}-panel-${i}`} tabIndex={i === active ? 0 : -1} className="shot-tabs-tab" onClick={() => setActive(i)}>
            {label}
          </button>)}
      </div>
      <div className="shot-tabs-stage">
        {shots.map((shot, i) => <div key={i} id={`${id}-panel-${i}`} role="tabpanel" aria-labelledby={`${id}-tab-${i}`} className={`shot-tabs-panel${i === active ? " is-active" : ""}`}>
            <div className="shot-tabs-frame">{shot}</div>
            <div className="shot-tabs-caption">{captions[i]}</div>
          </div>)}
      </div>
    </div>;
};

export const FeatureShowcase = ({title, description, href, linkText = "Learn more", flipped = false, label, children}) => <div className={`flex flex-col ${flipped ? "md:flex-row-reverse" : "md:flex-row"} items-center gap-10 md:gap-16 py-10`}>
    <div className="flex-1 min-w-0">
      {label && <p className="text-xs font-semibold tracking-widest text-blue-600 dark:text-blue-400 uppercase mb-3">{label}</p>}
      <h3 className="text-2xl md:text-3xl font-bold text-zinc-900 dark:text-white tracking-tight">{title}</h3>
      <p className="mt-4 text-zinc-500 dark:text-zinc-300 leading-relaxed text-base">{description}</p>
      {href && <div className="mt-6">
          <a href={href} className="inline-flex items-center text-blue-600 dark:text-blue-400 font-semibold text-sm hover:underline underline-offset-2">
            {linkText} →
          </a>
        </div>}
    </div>
    <div className="flex-1 min-w-0 feature-showcase-image">
      {children}
    </div>
  </div>;

export const FeatureGrid2 = ({children}) => <div className="marketing-grid-2">{children}</div>;

export const MediaCard = ({title, description, href, linkText = "Learn more", external = false, children}) => {
  const Tag = href ? "a" : "div";
  const tagProps = href ? {
    href,
    ...external ? {
      target: "_blank",
      rel: "noopener noreferrer"
    } : {}
  } : {};
  return <Tag {...tagProps} className="group flex flex-col rounded-xl border border-zinc-200 dark:border-zinc-700/60 bg-white dark:bg-zinc-800/50 overflow-hidden hover:shadow-md hover:border-blue-200 dark:hover:border-blue-700 transition-all duration-200">
      {children && <div className="media-card-image aspect-[16/10] overflow-hidden bg-zinc-50 dark:bg-zinc-900">
          {children}
        </div>}
      <div className="flex flex-col flex-1 p-6">
        <h3 className="text-lg font-semibold text-zinc-900 dark:text-white group-hover:text-blue-600 dark:group-hover:text-blue-400 transition-colors">
          {title}
        </h3>
        {description && <p className="feature-card-desc text-sm text-zinc-500 dark:text-zinc-400 leading-relaxed flex-1">{description}</p>}
        {linkText && href && <span className="inline-flex items-center mt-4 text-sm text-blue-600 dark:text-blue-400 font-semibold group-hover:underline underline-offset-2">
            {linkText} {external ? "↗" : "→"}
          </span>}
      </div>
    </Tag>;
};

export const CustomerLogos = ({title = "TRUSTED BY LEADING ENGINEERING TEAMS", children}) => <section className="w-full flex justify-center px-4 py-10">
    <div className="w-full" style={{
  maxWidth: "1140px"
}}>
      {title && <div className="block text-center text-xs font-semibold tracking-widest text-zinc-400 dark:text-zinc-500 uppercase mb-12">
          {title}
        </div>}
      <div className="customer-logos-grid flex flex-wrap justify-center items-center gap-x-10 gap-y-8 md:gap-x-14">
        {children}
      </div>
    </div>
  </section>;

export const SectionHeader = ({title, subtitle, centered = true, label}) => <div className={`mb-12 ${centered ? "text-center" : ""}`}>
    {label && <p className="text-xs font-semibold tracking-widest text-blue-600 dark:text-blue-400 uppercase mb-3">
        {label}
      </p>}
    <h2 className="text-3xl md:text-5xl font-semibold text-zinc-900 dark:text-white tracking-tight">{title}</h2>
    {subtitle && <div className={`subtitle-gap text-lg md:text-xl text-zinc-500 dark:text-zinc-300 leading-relaxed ${centered ? "mx-auto" : ""}`} style={{
  marginTop: "1rem",
  maxWidth: centered ? "700px" : "none"
}}>
        {subtitle}
      </div>}
  </div>;

export const Section = ({children, className = "", gray = false, dark = false, id}) => <section id={id} className={`w-full flex justify-center px-4 py-16 md:py-24 ${gray ? "bg-gray-50 dark:bg-zinc-900" : dark ? "bg-zinc-900 dark:bg-zinc-950" : ""} ${className}`}>
    <div className="w-full" style={{
  maxWidth: "1140px"
}}>
      {children}
    </div>
  </section>;

export const Hero = ({title, subtitle, badge, eyebrow, heroImageClassName = "", primaryCta, primaryHref = "#", secondaryCta, secondaryHref = "#", note, centered = true, children}) => <section className="w-full flex justify-center px-4 pt-16 pb-16 md:pt-24 md:pb-24" style={{
  background: "linear-gradient(180deg, var(--hero-gradient-start, #f8fafc) 0%, var(--hero-gradient-end, #ffffff) 100%)"
}}>
    <div className="w-full" style={{
  maxWidth: "1140px"
}}>
      {centered && !children ? <div className="flex flex-col items-center text-center">
          {badge && <div className="inline-flex items-center gap-2 px-4 py-1.5 rounded-full bg-blue-50 dark:bg-blue-900/30 border border-blue-200 dark:border-blue-700 text-blue-700 dark:text-blue-300 text-sm font-medium mb-6">
              {badge}
            </div>}
          {eyebrow && <div className="text-xs font-semibold tracking-widest uppercase text-blue-600 dark:text-blue-400 mb-4">
              {eyebrow}
            </div>}
          <h1 className="text-4xl md:text-5xl font-semibold text-zinc-900 dark:text-white leading-tight tracking-tight" style={{
  maxWidth: "820px"
}}>
            {String(title).split(/\\n|\n/).map((line, i) => i ? [<br key={i} />, line] : line)}
          </h1>
          {subtitle && <div className="subtitle-gap text-lg md:text-xl text-zinc-500 dark:text-zinc-300 leading-relaxed" style={{
  marginTop: "1rem",
  maxWidth: "600px"
}}>
              {subtitle}
            </div>}
          {(primaryCta || secondaryCta) && <div className="flex flex-wrap gap-3 mt-10 justify-center">
            {primaryCta && <a href={primaryHref} className="inline-flex items-center px-6 py-3 rounded-lg bg-blue-600 text-white font-semibold hover:bg-blue-700 transition shadow-sm">
                {primaryCta}
              </a>}
            {secondaryCta && <a href={secondaryHref} className={`inline-flex items-center px-6 py-3 rounded-lg border border-zinc-300 dark:border-zinc-600 text-zinc-700 dark:text-zinc-200 font-semibold hover:bg-zinc-50 dark:hover:bg-zinc-800 transition ${secondaryHref === "/request-demo" ? "demo-gradient-btn" : ""}`}>
                {secondaryCta}
              </a>}
          </div>}
          {note && <div className="mt-4 text-sm text-center text-zinc-500 dark:text-zinc-400">{note}</div>}
        </div> : <div className="flex flex-col md:flex-row items-center gap-10 md:gap-16">
          <div className="flex-1 min-w-0">
            {badge && <div className="inline-flex items-center gap-2 px-4 py-1.5 rounded-full bg-blue-50 dark:bg-blue-900/30 border border-blue-200 dark:border-blue-700 text-blue-700 dark:text-blue-300 text-sm font-medium mb-6">
                {badge}
              </div>}
            {eyebrow && <div className="text-xs font-semibold tracking-widest uppercase text-blue-600 dark:text-blue-400 mb-4">
                {eyebrow}
              </div>}
            <h1 className="text-4xl md:text-5xl font-semibold text-zinc-900 dark:text-white leading-tight tracking-tight">
            {String(title).split(/\\n|\n/).map((line, i) => i ? [<br key={i} />, line] : line)}
          </h1>
            {subtitle && <div className="subtitle-gap text-lg md:text-xl text-zinc-500 dark:text-zinc-300 leading-relaxed" style={{
  marginTop: "1rem"
}}>
                {subtitle}
              </div>}
            <div className="flex flex-wrap gap-3 mt-8">
              {primaryCta && <a href={primaryHref} className="inline-flex items-center px-6 py-3 rounded-lg bg-blue-600 text-white font-semibold hover:bg-blue-700 transition shadow-sm">
                  {primaryCta}
                </a>}
              {secondaryCta && <a href={secondaryHref} className={`inline-flex items-center px-6 py-3 rounded-lg border border-zinc-300 dark:border-zinc-600 text-zinc-700 dark:text-zinc-200 font-semibold hover:bg-zinc-50 dark:hover:bg-zinc-800 transition ${secondaryHref === "/request-demo" ? "demo-gradient-btn" : ""}`}>
                  {secondaryCta}
                </a>}
            </div>
            {note && <div className="mt-4 text-sm text-zinc-500 dark:text-zinc-400">{note}</div>}
          </div>
          {children && <div className={`flex-1 min-w-0 hero-image ${heroImageClassName}`}>
              {children}
            </div>}
        </div>}
    </div>
  </section>;

<MarketingPage />

<Hero title="The Bazel build platform, from the team behind your rules." subtitle="A hosted remote cache and the Build Results UI, running in minutes with no sales call." note="Free for 10 users and 1 TB of cache egress a month." primaryCta="Get started for free" primaryHref="https://signup.aspect.build/" secondaryCta="Try Aspect Enterprise" secondaryHref="/trial" centered={false} heroImageClassName="hero-image-bleed">
  <video className="hero-video" muted playsInline preload="auto" poster="/images/marketing/hero-video/hero-tour-poster.jpg" aria-label="A tour of the Build Results UI: the builds list, one build's overview and timing profile, and a comparison of two builds">
    <source src="https://cdn.aspect.build/videos/hero-tour-2026-09-25.mp4" type="video/mp4" />

    <source src="https://cdn.aspect.build/videos/hero-tour-2026-09-25.webm" type="video/webm" />
  </video>
</Hero>

<CustomerLogos title="Trusted by leading engineering teams">
  <img noZoom src="https://mintcdn.com/aspectbuild/x1L7Iep716jCyJVo/images/marketing/customers/6sense.svg?fit=max&auto=format&n=x1L7Iep716jCyJVo&q=85&s=c5516feb9a828c21994978a22a865435" alt="6sense" className="customer-logo" width="68" height="28" data-path="images/marketing/customers/6sense.svg" />

  <img noZoom src="https://mintcdn.com/aspectbuild/x1L7Iep716jCyJVo/images/marketing/customers/AssemblyAI_2.svg?fit=max&auto=format&n=x1L7Iep716jCyJVo&q=85&s=344cedab08161a3f4639e086988f5e6a" alt="AssemblyAI" className="customer-logo" width="116" height="28" data-path="images/marketing/customers/AssemblyAI_2.svg" />

  <img noZoom src="https://mintcdn.com/aspectbuild/x1L7Iep716jCyJVo/images/marketing/customers/bedrock-logo.svg?fit=max&auto=format&n=x1L7Iep716jCyJVo&q=85&s=6ddbd38fb254b8eed0d0b68f6c2b15fd" alt="Bedrock" className="customer-logo" width="154" height="40" data-path="images/marketing/customers/bedrock-logo.svg" />

  <img noZoom src="https://mintcdn.com/aspectbuild/x1L7Iep716jCyJVo/images/marketing/customers/Glydways_1.svg?fit=max&auto=format&n=x1L7Iep716jCyJVo&q=85&s=108020ca2a37a42a7de2dae3d18739de" alt="Glydways" className="customer-logo" width="111" height="28" data-path="images/marketing/customers/Glydways_1.svg" />

  <img noZoom src="https://mintcdn.com/aspectbuild/x1L7Iep716jCyJVo/images/marketing/customers/Physical-Intelligence_1.svg?fit=max&auto=format&n=x1L7Iep716jCyJVo&q=85&s=0f1e23aad17d4665f5e27a1a27497388" alt="Physical Intelligence" className="customer-logo" width="191" height="28" data-path="images/marketing/customers/Physical-Intelligence_1.svg" />

  <img noZoom src="https://mintcdn.com/aspectbuild/x1L7Iep716jCyJVo/images/marketing/customers/rogo-logo_1.svg?fit=max&auto=format&n=x1L7Iep716jCyJVo&q=85&s=5efaefc40c45c9977545c3e432f2099d" alt="Rogo" className="customer-logo" width="53" height="28" data-path="images/marketing/customers/rogo-logo_1.svg" />

  <img noZoom src="https://mintcdn.com/aspectbuild/x1L7Iep716jCyJVo/images/marketing/customers/sourcegraph-logo.svg?fit=max&auto=format&n=x1L7Iep716jCyJVo&q=85&s=e2662bf928190f5df1b16dade2aefde0" alt="Sourcegraph" className="customer-logo" width="186" height="32" data-path="images/marketing/customers/sourcegraph-logo.svg" />

  <img noZoom src="https://mintcdn.com/aspectbuild/x1L7Iep716jCyJVo/images/marketing/customers/superhuman.svg?fit=max&auto=format&n=x1L7Iep716jCyJVo&q=85&s=6622b36a88301f73a2eae2ede19db903" alt="Superhuman" className="customer-logo" width="189" height="40" data-path="images/marketing/customers/superhuman.svg" />

  <img noZoom src="https://mintcdn.com/aspectbuild/x1L7Iep716jCyJVo/images/marketing/customers/vectara_1.svg?fit=max&auto=format&n=x1L7Iep716jCyJVo&q=85&s=742572d8ff6d7dea48fd919e96e1f64e" alt="Vectara" className="customer-logo" width="100" height="28" data-path="images/marketing/customers/vectara_1.svg" />

  <img noZoom src="https://mintcdn.com/aspectbuild/jpDM_0l4JxjmtuXg/images/marketing/customers/videoamp-logo.svg?fit=max&auto=format&n=jpDM_0l4JxjmtuXg&q=85&s=73289df20fef8684e1d5428fc1bc1267" alt="VideoAmp" className="customer-logo" style={{height: "3rem"}} width="1545" height="597" data-path="images/marketing/customers/videoamp-logo.svg" />

  <img noZoom src="https://mintcdn.com/aspectbuild/P5LPHeFddn3u2ftO/images/marketing/customers/ironclad.svg?fit=max&auto=format&n=P5LPHeFddn3u2ftO&q=85&s=fe62a983086ff780a7ead0284d352f04" alt="Ironclad" className="customer-logo" style={{height: "1.75rem"}} width="159" height="30" data-path="images/marketing/customers/ironclad.svg" />

  <div className="text-center text-sm text-zinc-400 dark:text-zinc-500" style={{ flexBasis: "100%" }}>
    Aspect engineers maintain <a href="/platform/rules" className="text-zinc-500 dark:text-zinc-400 font-semibold hover:text-blue-600 dark:hover:text-blue-400 hover:underline">rules\_js, rules\_ts, rules\_py, rules\_lint, rules\_oci and bazel-lib</a>.
  </div>
</CustomerLogos>

<Section gray>
  <SectionHeader title="Results on real monorepos" />

  <StatsBar
    grid
    stats={[
{ value: "18x", label: "Faster robot code deployment at Physical Intelligence", href: "/customers/physical-intelligence" },
{ value: "10x", label: "Estimated cut in CI compute cost at AssemblyAI", href: "/customers/assemblyai" },
{ value: "2.4x", label: "Faster median build and test at Sourcegraph", href: "/customers/sourcegraph" },
{ value: "60%", label: "Less developer CI wait time at AssemblyAI", href: "/customers/assemblyai" },
]}
  />

  <div className="mt-12">
    <Testimonial elevated quote="Aspect Workflows has made Bazel an order of magnitude easier to adopt and significantly more valuable for our team." author="Jimmy Tanner" role="Senior Software Engineer" company="Physical Intelligence" caseStudyHref="/customers/physical-intelligence">
      <img noZoom src="https://mintcdn.com/aspectbuild/x1L7Iep716jCyJVo/images/marketing/logos/Physical-Intelligence.svg?fit=max&auto=format&n=x1L7Iep716jCyJVo&q=85&s=ae844528db071dd2527c7a21bba709eb" alt="Physical Intelligence" className="h-7 brightness-0 opacity-70 dark:invert dark:opacity-80" width="244" height="36" data-path="images/marketing/logos/Physical-Intelligence.svg" />
    </Testimonial>
  </div>

  <div className="mt-6">
    <TestimonialGrid>
      <TestimonialCard quote="If you're running Bazel at any real scale — especially a monorepo — Aspect is worth a serious look. Their whole product is built around Bazel rather than bolted onto it. For us, that's been the difference between CI fighting our build system and CI working with it." author="Josh Excell" role="Manager, Engineering, VideoAmp">
        <img noZoom src="https://mintcdn.com/aspectbuild/jpDM_0l4JxjmtuXg/images/marketing/customers/videoamp-logo.svg?fit=max&auto=format&n=jpDM_0l4JxjmtuXg&q=85&s=73289df20fef8684e1d5428fc1bc1267" alt="VideoAmp" width="1545" height="597" data-path="images/marketing/customers/videoamp-logo.svg" />
      </TestimonialCard>

      <TestimonialCard quote="If we showed this to all engineers at Sourcegraph there would be mutiny if we didn't buy it." author="Sourcegraph engineers" role="First demo">
        <img noZoom src="https://mintcdn.com/aspectbuild/x1L7Iep716jCyJVo/images/marketing/customers/sourcegraph-logo.svg?fit=max&auto=format&n=x1L7Iep716jCyJVo&q=85&s=e2662bf928190f5df1b16dade2aefde0" alt="Sourcegraph" width="186" height="32" data-path="images/marketing/customers/sourcegraph-logo.svg" />
      </TestimonialCard>
    </TestimonialGrid>
  </div>

  <div className="flex justify-center mt-10">
    <a href="/customers" className="inline-flex items-center px-6 py-3 rounded-lg border border-zinc-300 dark:border-zinc-600 text-zinc-700 dark:text-zinc-200 font-semibold hover:bg-white dark:hover:bg-zinc-800 transition">
      Read the case studies
    </a>
  </div>
</Section>

<Section>
  <SectionHeader label="Aspect Cloud" title="Sign up, log in, build" subtitle="Laptops and CI share one hosted remote cache and stream every build to the Build Results UI. There's nothing to deploy." />

  <div className="setup-steps">
    <div>
      <div className="ladder-step">1</div>

      <div className="setup-card p-6 rounded-xl border border-zinc-200 dark:border-zinc-700/60 bg-white dark:bg-zinc-800">
        <div>
          <h3 className="text-lg font-semibold text-zinc-900 dark:text-white">Install the CLI</h3>

          <div className="mt-2 text-sm text-zinc-500 dark:text-zinc-400 leading-relaxed">
            macOS or Linux. Your existing <code>bazel</code> keeps working.
          </div>
        </div>

        <div className="setup-cmds">
          ```shell theme={null}
          curl -fsSL https://install.aspect.build | bash
          ```

          <div className="mt-2 text-xs text-zinc-500 dark:text-zinc-400">
            or <code>brew install aspect-build/aspect/aspect</code> on macOS
          </div>
        </div>
      </div>
    </div>

    <div>
      <div className="ladder-step">2</div>

      <div className="setup-card p-6 rounded-xl border border-zinc-200 dark:border-zinc-700/60 bg-white dark:bg-zinc-800">
        <div>
          <h3 className="text-lg font-semibold text-zinc-900 dark:text-white">Sign up and log in</h3>

          <div className="mt-2 text-sm text-zinc-500 dark:text-zinc-400 leading-relaxed">
            Free at <a href="https://signup.aspect.build/" className="text-blue-600 dark:text-blue-400 font-semibold hover:underline">signup.aspect.build</a>, no sales call. Log in once; the credential stays in your OS keyring.
          </div>
        </div>

        <div className="setup-cmds">
          ```shell theme={null}
          aspect auth login
          ```
        </div>
      </div>
    </div>

    <div>
      <div className="ladder-step">3</div>

      <div className="setup-card p-6 rounded-xl border border-zinc-200 dark:border-zinc-700/60 bg-white dark:bg-zinc-800">
        <div>
          <h3 className="text-lg font-semibold text-zinc-900 dark:text-white">Build</h3>

          <div className="mt-2 text-sm text-zinc-500 dark:text-zinc-400 leading-relaxed">
            Every build shares the cache and shows up in the Build Results UI. Use the Aspect CLI, or keep typing <code>bazel</code>.
          </div>

          <div className="mt-2 text-xs text-zinc-500 dark:text-zinc-400">
            <a href="/docs/aspect-workflows/cloud/local-setup" className="text-blue-600 dark:text-blue-400 font-semibold hover:underline">How it works →</a>
          </div>
        </div>

        <div className="setup-cmds">
          ```shell theme={null}
          aspect build //... --remote
          ```

          <div className="my-2 text-center text-xs font-semibold uppercase tracking-wide text-zinc-400 dark:text-zinc-500">or</div>

          ```shell theme={null}
          aspect setup bazelrc
          bazel build //... --config=aspect-cloud
          ```
        </div>
      </div>
    </div>
  </div>

  <div className="flex flex-wrap justify-center items-center gap-6 mt-10">
    <a href="https://signup.aspect.build/" className="inline-flex items-center px-6 py-3 rounded-lg border border-zinc-300 dark:border-zinc-600 text-zinc-700 dark:text-zinc-200 font-semibold hover:bg-zinc-50 dark:hover:bg-zinc-800 transition">
      Get started for free
    </a>

    <a href="/quickstart" className="text-blue-600 dark:text-blue-400 font-semibold hover:underline">
      Follow the quickstart →
    </a>
  </div>
</Section>

<Section gray>
  <SectionHeader label="Build Results UI" title="Every target, every build, explained" subtitle="Rank every target by P90 wall time, P90 artifact size, critical-path share, cache hit rate, flake rate or pass rate over a day to a year, see its trend, then compare any two builds to find what changed." />

  <div className="feature-showcase-image max-w-4xl mx-auto">
    <img src="https://mintcdn.com/aspectbuild/mPlChZw_LzKUv7Pq/images/marketing/web-ui/target-trends.png?fit=max&auto=format&n=mPlChZw_LzKUv7Pq&q=85&s=a39e3372b301bcbd7b67645603dcd773" alt="Most-built targets with P90 wall time, cache hit, flake rate and pass-rate trends" width="2336" height="736" data-path="images/marketing/web-ui/target-trends.png" />
  </div>

  <div className="mt-3 text-sm text-center text-zinc-500 dark:text-zinc-400">Every target, ranked and trended</div>

  <ScreenshotTabs id="build-results" labels={["Builds", "Tests", "Timeline"]} captions={["Team history, pass-rate trend on top", "Every test attempt, kept", "Critical path on the timeline"]}>
    <img src="https://mintcdn.com/aspectbuild/KFn6UBvzk8z5yEqC/images/marketing/web-ui/tab-builds.png?fit=max&auto=format&n=KFn6UBvzk8z5yEqC&q=85&s=814e40f0aeab5b6d5e1ffc5cf018a76a" alt="Builds list with the pass-rate trend and average build time" width="1285" height="494" data-path="images/marketing/web-ui/tab-builds.png" />

    <img src="https://mintcdn.com/aspectbuild/KFn6UBvzk8z5yEqC/images/marketing/web-ui/tab-tests.png?fit=max&auto=format&n=KFn6UBvzk8z5yEqC&q=85&s=c049be8b876471fb03b6c87773ff78f1" alt="Test results keeping every attempt of each test" width="1285" height="494" data-path="images/marketing/web-ui/tab-tests.png" />

    <img src="https://mintcdn.com/aspectbuild/KFn6UBvzk8z5yEqC/images/marketing/web-ui/tab-timeline.png?fit=max&auto=format&n=KFn6UBvzk8z5yEqC&q=85&s=b487610b96a3775bca3a254a0cba9c1f" alt="Build timeline with the critical path on top" width="1285" height="494" data-path="images/marketing/web-ui/tab-timeline.png" />
  </ScreenshotTabs>

  <div className="max-w-5xl mx-auto mt-8">
    <FeatureShowcase flipped label="MCP server" title="Ask your AI assistant why the build failed" description={<><code>aspect mcp</code> gives Claude Code, Codex, Cursor and other MCP clients read-only access to your builds, logs, targets and flake history. Included in every plan, even Free.</>} href="/docs/aspect-workflows/platform/guides/build-results-mcp" linkText="Set up the MCP server">
      <McpMock />
    </FeatureShowcase>
  </div>

  <div className="flex flex-wrap justify-center items-center gap-6 mt-10">
    <a href="https://signup.aspect.build/" className="inline-flex items-center px-6 py-3 rounded-lg border border-zinc-300 dark:border-zinc-600 text-zinc-700 dark:text-zinc-200 font-semibold hover:bg-zinc-50 dark:hover:bg-zinc-800 transition">
      Get started for free
    </a>

    <a href="/platform/web-ui" className="text-blue-600 dark:text-blue-400 font-semibold hover:underline">
      See the Build Results UI →
    </a>
  </div>

  <div className="mt-4 text-center text-sm text-zinc-500 dark:text-zinc-400">Trends need history, so the first day tells you far less than the first week.</div>
</Section>

<Section>
  <SectionHeader title="Start free. Grow into Enterprise." />

  <div className="ladder">
    <div>
      <div className="ladder-step">1</div>

      <div className="relative flex flex-col flex-1 p-8 rounded-xl border-2 border-blue-600 bg-white dark:bg-zinc-800 shadow-md tier-lift">
        <span className="tier-pill px-3 py-0.5 rounded-full bg-blue-600 text-white text-xs font-semibold whitespace-nowrap">Most teams start here</span>
        <div className="text-xs font-semibold tracking-widest uppercase text-blue-600 dark:text-blue-400">Aspect Cloud</div>
        <h3 className="mt-2 text-xl font-bold text-zinc-900 dark:text-white">Free</h3>

        <div className="mt-2 tier-headline">
          <span className="text-4xl price-mono font-semibold text-zinc-900 dark:text-white">\$0</span>
        </div>

        <div className="mt-1 text-sm text-zinc-500 dark:text-zinc-400">
          No credit card to start.
        </div>

        <div className="mt-4 text-sm text-zinc-600 dark:text-zinc-400">
          Up to 10 users, 1 TB of cache egress\* and 100 million build events\* a month.
        </div>

        <ul className="check-list mt-6 pt-6 border-t border-zinc-200 dark:border-zinc-700 space-y-2 text-sm text-zinc-600 dark:text-zinc-400">
          <li><a href="/platform/remote-cache" className="text-blue-600 dark:text-blue-400 hover:underline">Remote cache</a></li>
          <li><a href="/platform/web-ui" className="text-blue-600 dark:text-blue-400 hover:underline">Build Results UI</a></li>
          <li>Build Results API and MCP server</li>
          <li>Free uploads</li>
          <li><a href="https://slack.aspect.build" target="_blank" rel="noopener noreferrer" className="text-blue-600 dark:text-blue-400 hover:underline">Community Slack</a></li>
          <li>Email support</li>
        </ul>

        <div className="mt-auto pt-6">
          <a href="https://signup.aspect.build/" className="flex items-center justify-center px-6 py-3 rounded-lg bg-blue-600 text-white font-semibold hover:bg-blue-700 transition shadow-sm">
            Get started for free
          </a>
        </div>
      </div>
    </div>

    <div className="ladder-label">Past the free allowance</div>

    <div>
      <div className="ladder-step">2</div>

      <div className="flex flex-col flex-1 p-8 rounded-xl border border-zinc-200 dark:border-zinc-700 bg-white dark:bg-zinc-800">
        <div className="text-xs font-semibold tracking-widest uppercase text-zinc-500 dark:text-zinc-400">Aspect Cloud</div>
        <h3 className="mt-2 text-xl font-bold text-zinc-900 dark:text-white">Pay as you go</h3>

        <div className="mt-2 tier-headline">
          <span className="text-2xl font-semibold tracking-tight text-zinc-900 dark:text-white">Usage-based</span>
        </div>

        <div className="mt-1 text-sm text-zinc-500 dark:text-zinc-400">
          No base fee.
        </div>

        <div className="mt-4 text-sm text-zinc-600 dark:text-zinc-400">
          Pay only for what you use past the free allowance.
        </div>

        <div className="mt-6 pt-6 border-t border-zinc-200 dark:border-zinc-700">
          <div className="text-sm font-semibold text-zinc-900 dark:text-white mb-3">Everything in Free, plus:</div>

          <ul className="check-list space-y-2 text-sm text-zinc-600 dark:text-zinc-400">
            <li>Users past 10 at \$12 / user / month</li>
            <li>Cache egress past 1 TB at \$0.15 / GB</li>
            <li>Build events past 100 million at \$1.50 / million</li>
          </ul>
        </div>

        <div className="mt-auto pt-6">
          <a href="/pricing#metering" className="flex items-center justify-center px-6 py-3 rounded-lg border border-zinc-300 dark:border-zinc-600 text-zinc-900 dark:text-white font-semibold hover:bg-zinc-50 dark:hover:bg-zinc-800 transition">
            See how metering works
          </a>
        </div>
      </div>
    </div>

    <div className="ladder-label">Need execution or isolation?</div>

    <div>
      <div className="ladder-step">3</div>

      <div className="flex flex-col flex-1 p-8 rounded-xl border border-zinc-200 dark:border-zinc-700 bg-white dark:bg-zinc-800">
        <div className="text-xs font-semibold tracking-widest uppercase text-zinc-500 dark:text-zinc-400">Aspect Enterprise</div>
        <h3 className="mt-2 text-xl font-bold text-zinc-900 dark:text-white">Enterprise</h3>

        <div className="mt-2 tier-headline">
          <span className="text-2xl font-semibold tracking-tight text-zinc-900 dark:text-white">Annual platform fee</span>
        </div>

        <div className="mt-1 text-sm text-zinc-500 dark:text-zinc-400">
          Based on your configuration.
        </div>

        <div className="mt-4 text-sm text-zinc-600 dark:text-zinc-400">
          An isolated deployment: infrastructure and data no other customer shares, hosted by Aspect or self-hosted in your AWS or GCP account.
        </div>

        <div className="mt-3 text-sm">
          <a href="/pricing#enterprise-pricing" className="text-blue-600 dark:text-blue-400 font-semibold hover:underline">How it's priced →</a>
        </div>

        <ul className="check-list mt-6 pt-6 border-t border-zinc-200 dark:border-zinc-700 space-y-2 text-sm text-zinc-600 dark:text-zinc-400">
          <li><a href="/platform/remote-execution" className="text-blue-600 dark:text-blue-400 hover:underline">Remote execution</a> on Linux (x86, Arm, GPU) and macOS</li>
          <li><a href="/platform/ci-runners" className="text-blue-600 dark:text-blue-400 hover:underline">CI runners</a> on Linux (x86, Arm, GPU), any AWS or GCP instance type</li>
          <li><a href="/platform/selective-delivery" className="text-blue-600 dark:text-blue-400 hover:underline">Selective delivery</a></li>
          <li>SSO, with SCIM provisioning coming soon</li>
          <li>Air-gapped and GovCloud</li>
          <li>24/7 on-call and a 99.9% uptime SLA</li>
        </ul>

        <div className="mt-auto pt-6">
          <a href="/trial" className="flex items-center justify-center px-6 py-3 rounded-lg border border-zinc-300 dark:border-zinc-600 text-zinc-900 dark:text-white font-semibold hover:bg-zinc-50 dark:hover:bg-zinc-800 transition">
            Start a 30-day trial
          </a>

          <div className="mt-3 text-center text-sm text-zinc-500 dark:text-zinc-400">
            or <a href="/contact" className="text-blue-600 dark:text-blue-400 font-semibold hover:underline">talk to us</a>
          </div>
        </div>
      </div>
    </div>
  </div>

  <div className="mt-6 text-sm text-zinc-500 dark:text-zinc-400">
    \* Your first month includes the full free allowance of 1 TB of egress and 100 million build events, no credit card needed. After that, without a card, it's 100 GB of cache egress and 10 million build events a month; add a card to keep the full allowance. The card requirement is there to prevent abuse of the free allowance.
  </div>

  <div className="mt-10 p-5 rounded-xl border-2 border-dashed border-zinc-300 dark:border-zinc-600 text-center text-zinc-700 dark:text-zinc-300">
    Same <code>bazel</code>, same Aspect CLI, same BUILD files. Moving to Enterprise changes endpoints and credentials, not your build.
  </div>

  <div className="mt-4 text-center text-sm text-zinc-500 dark:text-zinc-400">
    Remote execution and CI runners come to Aspect Cloud in early 2027. <a href="/contact?topic=early-access" className="text-blue-600 dark:text-blue-400 font-semibold hover:underline">Join the early access list</a>
  </div>

  <div className="mt-8 text-center">
    <a href="/docs/aspect-workflows/platform/choosing" className="text-blue-600 dark:text-blue-400 font-semibold hover:underline">Compare offerings →</a>
  </div>
</Section>

<Section gray>
  <SectionHeader label="Aspect Enterprise" title="Lower CI bills. Your data stays yours." subtitle="Customers cut CI compute costs 40% (Sourcegraph) and an estimated 10x (AssemblyAI), on infrastructure no other customer shares." />

  <FeatureGrid2>
    <MediaCard title="Isolated, hosted or self-hosted" description="A deployment no other customer shares, hosted by Aspect or in your own AWS or GCP account, including air-gapped networks and GovCloud." href="/platform/aspect-enterprise">
      <img noZoom src="https://mintcdn.com/aspectbuild/x1L7Iep716jCyJVo/images/marketing/product/Self-hosted-img.avif?fit=max&auto=format&n=x1L7Iep716jCyJVo&q=85&s=76839717fb434a26e67eebad913fd06d" alt="Isolated Aspect Enterprise deployment" width="1296" height="720" data-path="images/marketing/product/Self-hosted-img.avif" />
    </MediaCard>

    <MediaCard title="Warm CI runners" description="Most CI starts every job on a cold worker and redoes the work. Aspect's runners keep Bazel warm between jobs, registered with GitHub Actions, Buildkite, GitLab or CircleCI, on x86, Arm or GPU hardware." href="/platform/ci-runners">
      <img noZoom src="https://mintcdn.com/aspectbuild/x1L7Iep716jCyJVo/images/marketing/product/ci-img.avif?fit=max&auto=format&n=x1L7Iep716jCyJVo&q=85&s=2a5d51dece056cdf6c64c8104a3d80d9" alt="Aspect CI runners" width="1284" height="720" data-path="images/marketing/product/ci-img.avif" />
    </MediaCard>

    <MediaCard title="Remote execution" description="Spread a build's actions across Linux workers on x86, Arm and GPU, and across macOS workers, with fleets that scale to zero when idle." href="/platform/remote-execution">
      <img noZoom src="https://mintcdn.com/aspectbuild/x1L7Iep716jCyJVo/images/marketing/product/Remote-img_1.avif?fit=max&auto=format&n=x1L7Iep716jCyJVo&q=85&s=c3f0392787bfb2fea1eec4f420cdb166" alt="Remote build execution" width="1296" height="720" data-path="images/marketing/product/Remote-img_1.avif" />
    </MediaCard>

    <MediaCard title="Selective delivery" description="Deliver only the targets whose outputs changed. Change is detected from each output's content hash rather than the git SHA, and only the changed targets are rebuilt with stamping for the push." href="/platform/selective-delivery">
      <img noZoom src="https://mintcdn.com/aspectbuild/x1L7Iep716jCyJVo/images/marketing/illustrations/aspect-delivery.svg?fit=max&auto=format&n=x1L7Iep716jCyJVo&q=85&s=cf41f5d900ae4230bf53b295c1693765" alt="Selective Delivery: only changed targets ship" width="720" height="480" data-path="images/marketing/illustrations/aspect-delivery.svg" />
    </MediaCard>
  </FeatureGrid2>

  <CustomerLogos title="Works with">
    <img noZoom src="https://mintcdn.com/aspectbuild/x1L7Iep716jCyJVo/images/marketing/logos/github-actions.svg?fit=max&auto=format&n=x1L7Iep716jCyJVo&q=85&s=c303e0d7f2e8b819d197505cf6ab2ea0" alt="GitHub Actions" className="customer-logo" width="278" height="45" data-path="images/marketing/logos/github-actions.svg" />

    <img noZoom src="https://mintcdn.com/aspectbuild/x1L7Iep716jCyJVo/images/marketing/logos/circleci.svg?fit=max&auto=format&n=x1L7Iep716jCyJVo&q=85&s=39540f50e69ffef89c94a484fa977bc9" alt="CircleCI" className="customer-logo" width="203" height="49" data-path="images/marketing/logos/circleci.svg" />

    <img noZoom src="https://mintcdn.com/aspectbuild/x1L7Iep716jCyJVo/images/marketing/logos/gitlab.svg?fit=max&auto=format&n=x1L7Iep716jCyJVo&q=85&s=5557fda3391720bdcf94533a59377b2b" alt="GitLab" className="customer-logo" width="177" height="49" data-path="images/marketing/logos/gitlab.svg" />

    <img noZoom src="https://mintcdn.com/aspectbuild/x1L7Iep716jCyJVo/images/marketing/logos/buildkite.svg?fit=max&auto=format&n=x1L7Iep716jCyJVo&q=85&s=69cb71c758c95e895ab106888eb3986d" alt="Buildkite" className="customer-logo" width="238" height="49" data-path="images/marketing/logos/buildkite.svg" />

    <div className="logo-row-break" />

    <img noZoom src="https://mintcdn.com/aspectbuild/opHihAsJL_m1LjyE/images/marketing/logos/github.svg?fit=max&auto=format&n=opHihAsJL_m1LjyE&q=85&s=acfecf4ca3dd7c0306193f5260da04ab" alt="GitHub" className="customer-logo" width="416" height="95" data-path="images/marketing/logos/github.svg" />

    <img noZoom src="https://mintcdn.com/aspectbuild/x1L7Iep716jCyJVo/images/marketing/logos/aws.svg?fit=max&auto=format&n=x1L7Iep716jCyJVo&q=85&s=9a64db96c521ff0fc7f2f950e96a6488" alt="AWS" className="customer-logo" width="81" height="49" data-path="images/marketing/logos/aws.svg" />

    <img noZoom src="https://mintcdn.com/aspectbuild/x1L7Iep716jCyJVo/images/marketing/logos/google-cloud.png?fit=max&auto=format&n=x1L7Iep716jCyJVo&q=85&s=e5630a18338a48e20078cea51269c4f2" alt="Google Cloud" className="customer-logo" width="518" height="96" data-path="images/marketing/logos/google-cloud.png" />
  </CustomerLogos>

  <div className="flex flex-wrap justify-center gap-3 mt-4">
    <a href="/trial" className="inline-flex items-center px-6 py-3 rounded-lg border border-zinc-300 dark:border-zinc-600 text-zinc-700 dark:text-zinc-200 font-semibold hover:bg-white dark:hover:bg-zinc-800 transition">
      Start a 30-day trial
    </a>

    <a href="/request-demo" className="inline-flex items-center px-6 py-3 rounded-lg border border-zinc-300 dark:border-zinc-600 text-zinc-700 dark:text-zinc-200 font-semibold hover:bg-zinc-50 dark:hover:bg-zinc-800 transition demo-gradient-btn">
      Request a demo
    </a>
  </div>
</Section>

<Section>
  <SectionHeader label="Free developer tools" title="Free, open source, and probably already in your build" subtitle="The same developer tools that power Aspect Workflows." />

  <FeatureGrid2>
    <MediaCard title="Aspect CLI" description="Open source task runner that extends Bazel with format, lint, BUILD generation, and delivery, all in Starlark. One command to install." href="/quickstart" linkText="Start the 10-minute quickstart">
      <img noZoom src="https://mintcdn.com/aspectbuild/4wAijf_e0qg5Bve0/images/marketing/product/aspect-cli-lint.avif?fit=max&auto=format&n=4wAijf_e0qg5Bve0&q=85&s=b4f655e2458620d33c37166caea73552" alt="Aspect CLI" width="1088" height="708" data-path="images/marketing/product/aspect-cli-lint.avif" />
    </MediaCard>

    <MediaCard title="Aspect Extension Language (AXL)" description="Starlark tasks that run anywhere. Ditch the bash scripts." href="/platform/axl" linkText="Write your first task">
      <img noZoom src="https://mintcdn.com/aspectbuild/x1L7Iep716jCyJVo/images/marketing/product/axl-img.avif?fit=max&auto=format&n=x1L7Iep716jCyJVo&q=85&s=1ba18616087f5f7414073fc3bbc50ceb" alt="Aspect Extension Language" width="1292" height="720" data-path="images/marketing/product/axl-img.avif" />
    </MediaCard>

    <MediaCard title="Bazel rules" description="rules_js, rules_ts, rules_py, rules_lint, rules_oci, bazel-lib and the rulesets around them. There's a good chance you're already running them." href="/platform/rules" linkText="Browse the rulesets">
      <img noZoom src="https://mintcdn.com/aspectbuild/x1L7Iep716jCyJVo/images/marketing/product/aspect-rules-repos.svg?fit=max&auto=format&n=x1L7Iep716jCyJVo&q=85&s=5736ed8928b7e9bf3f361ddcc7e434b6" alt="Aspect Bazel rules repositories on GitHub" width="976" height="556" data-path="images/marketing/product/aspect-rules-repos.svg" />
    </MediaCard>

    <MediaCard title="Workflows bot" description="Status checks, PR comments, code review annotations and suggested fixes, with live build and test results. Free to use." href="/platform/workflows-bot" linkText="Put the bot on your PRs">
      <img noZoom src="https://mintcdn.com/aspectbuild/x1L7Iep716jCyJVo/images/marketing/product/github-img.avif?fit=max&auto=format&n=x1L7Iep716jCyJVo&q=85&s=a2063a28005f68d0655fcdab0cbf320f" alt="The Workflows bot showing Bazel build results in a GitHub code review" width="1296" height="720" data-path="images/marketing/product/github-img.avif" />
    </MediaCard>
  </FeatureGrid2>

  <div className="flex justify-center mt-10">
    <a href="/docs/cli/install" className="inline-flex items-center px-6 py-3 rounded-lg border border-zinc-300 dark:border-zinc-600 text-zinc-700 dark:text-zinc-200 font-semibold hover:bg-white dark:hover:bg-zinc-800 transition">
      Install the CLI
    </a>
  </div>
</Section>

<Section gray>
  <FeatureGrid2>
    <div className="flex flex-col p-8 rounded-xl border border-zinc-200 dark:border-zinc-700/60 bg-white dark:bg-zinc-800/50">
      <div className="card-art">
        <img noZoom src="https://mintcdn.com/aspectbuild/4wAijf_e0qg5Bve0/images/marketing/bazelcon-2026/amsterdam.svg?fit=max&auto=format&n=4wAijf_e0qg5Bve0&q=85&s=663d84667399ce6322da376651565f42" alt="" width="853" height="421" data-path="images/marketing/bazelcon-2026/amsterdam.svg" />
      </div>

      <div className="mt-6 text-xs font-semibold tracking-widest uppercase text-blue-600 dark:text-blue-400">BazelCon, 13–15 October</div>
      <h3 className="mt-2 text-2xl font-semibold text-zinc-900 dark:text-white">Meet us in Amsterdam</h3>

      <div className="mt-2 text-zinc-500 dark:text-zinc-400 leading-relaxed">
        Aspect is giving seven conference sessions and three Training Day workshops.
      </div>

      <div className="mt-auto pt-6">
        <a href="/bazelcon-2026" className="text-blue-600 dark:text-blue-400 font-semibold hover:underline">See our talks →</a>
      </div>
    </div>

    <div className="flex flex-col p-8 rounded-xl border border-zinc-200 dark:border-zinc-700/60 bg-white dark:bg-zinc-800/50">
      <div className="feature-card-icon flex items-center justify-center rounded-xl bg-blue-50 dark:bg-blue-900/20 border border-blue-100 dark:border-blue-800/30" style={{ width: "4rem", height: "4rem" }}>
        <img noZoom src="https://mintcdn.com/aspectbuild/x1L7Iep716jCyJVo/images/marketing/icons/technical-support.svg?fit=max&auto=format&n=x1L7Iep716jCyJVo&q=85&s=cc2eb440ec8244f9100062982974da4d" alt="" width="24" height="24" data-path="images/marketing/icons/technical-support.svg" />
      </div>

      <div className="mt-6 text-xs font-semibold tracking-widest uppercase text-blue-600 dark:text-blue-400">Services</div>
      <h3 className="mt-2 text-2xl font-semibold text-zinc-900 dark:text-white">Stuck? Hire the maintainers</h3>

      <div className="mt-2 text-zinc-500 dark:text-zinc-400 leading-relaxed">
        Support, hands-on consulting for migrations and stuck builds, and Bazel courses, from the engineers who maintain your rules.
      </div>

      <div className="mt-auto pt-6">
        <a href="/contact" className="text-blue-600 dark:text-blue-400 font-semibold hover:underline">Talk with us →</a>
      </div>
    </div>
  </FeatureGrid2>
</Section>

<CTA title="Ready for faster builds and lower costs?" subtitle="Start free on Aspect Cloud, or run a 30-day trial of Aspect Enterprise with remote execution and CI runners." primaryCta="Get started for free" primaryHref="https://signup.aspect.build/" secondaryCta="Try Aspect Enterprise" secondaryHref="/trial" />

<div className="investor-strip flex flex-col items-center">
  <div className="compare-eyebrow">Backed by</div>

  <div className="investor-row">
    <a href="https://firstmark.com" target="_blank" rel="noopener noreferrer" className="investor-link">
      <img noZoom src="https://mintcdn.com/aspectbuild/x1L7Iep716jCyJVo/images/marketing/logos/firstmark.svg?fit=max&auto=format&n=x1L7Iep716jCyJVo&q=85&s=c92fdb437f4c5c7a1b15343b714e49fb" alt="FirstMark" className="investor-logo investor-logo--fm" width="274" height="32" data-path="images/marketing/logos/firstmark.svg" />
    </a>

    <span aria-hidden="true" className="investor-rule" />

    <a href="https://prestonwernerventures.com" target="_blank" rel="noopener noreferrer" className="investor-link">
      <img noZoom src="https://mintcdn.com/aspectbuild/x1L7Iep716jCyJVo/images/marketing/logos/preston-werner-ventures.png?fit=max&auto=format&n=x1L7Iep716jCyJVo&q=85&s=1184d1ef14e315b3b3f957f033492cb5" alt="Preston-Werner Ventures" className="investor-logo investor-logo--pwv" width="280" height="128" data-path="images/marketing/logos/preston-werner-ventures.png" />
    </a>
  </div>

  <div className="text-sm text-zinc-500 dark:text-zinc-400">
    Building for Bazel since 2021. <a href="/about" className="text-blue-600 dark:text-blue-400 font-semibold hover:underline">About Aspect →</a>
  </div>
</div>


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.