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

# Aspect Workflows Developer Productivity Platform

> Aspect Workflows integrates with your CI/CD and cloud infrastructure, improves developer productivity, and accelerates successful Bazel adoption.

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 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, children}) => <div className="relative flex flex-col p-8 md:p-12 rounded-2xl bg-zinc-50 dark:bg-zinc-800/40 border border-zinc-200 dark:border-zinc-700 overflow-hidden">
    <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 bg-blue-600 text-white text-sm font-semibold hover:bg-blue-700 transition shadow-sm whitespace-nowrap">
            Read Case Study
          </a>}
      </div>
    </div>
  </div>;

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 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 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 FeatureCard = ({title, description, href, children}) => {
  const Tag = href ? "a" : "div";
  const tagProps = href ? {
    href
  } : {};
  return <Tag {...tagProps} className={`group flex flex-col p-6 rounded-xl border border-zinc-200 dark:border-zinc-700/60 bg-white dark:bg-zinc-800/50 ${href ? "hover:shadow-md hover:border-blue-200 dark:hover:border-blue-700 transition-all duration-200" : ""}`}>
      {children && <div className="feature-card-icon mb-5 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"
  }}>
          {children}
        </div>}
      <h3 className={`text-lg font-semibold text-zinc-900 dark:text-white ${href ? "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">{description}</p>}
    </Tag>;
};

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

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

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-4xl 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, primaryCta, primaryHref = "#", secondaryCta, secondaryHref = "#", 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>}
          <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>}
          <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>
        </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>}
            <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>
          </div>
          {children && <div className="flex-1 min-w-0 hero-image">
              {children}
            </div>}
        </div>}
    </div>
  </section>;

<MarketingPage />

<Hero title="Aspect Workflows developer productivity platform" subtitle="{ Fast, Correct, Usable } — choose three" primaryCta="Start a Free Trial" primaryHref="/trial" secondaryCta="Request a Demo" secondaryHref="/request-demo" centered={false}>
  <img noZoom src="https://mintcdn.com/aspectbuild/x1L7Iep716jCyJVo/images/marketing/product/ui-hero.avif?fit=max&auto=format&n=x1L7Iep716jCyJVo&q=85&s=633c9c2d74575b21713c7dbc00598ad7" alt="Aspect Workflows Build & Test UI" width="1207" height="858" data-path="images/marketing/product/ui-hero.avif" />
</Hero>

<CustomerLogos>
  <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/BostonDynamics.svg?fit=max&auto=format&n=x1L7Iep716jCyJVo&q=85&s=6b33262c301f50ec5ec68721d3ec4288" alt="Boston Dynamics" className="customer-logo" width="120" height="28" data-path="images/marketing/customers/BostonDynamics.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/Google.svg?fit=max&auto=format&n=x1L7Iep716jCyJVo&q=85&s=65f9bb4611f92a8978eba7f33f0b755d" alt="Google" className="customer-logo" width="66" height="28" data-path="images/marketing/customers/Google.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/Robinhood.svg?fit=max&auto=format&n=x1L7Iep716jCyJVo&q=85&s=7c056e03beb7eb7656ae9bd7bc2fe483" alt="Robinhood" className="customer-logo" width="103" height="28" data-path="images/marketing/customers/Robinhood.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/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" />
</CustomerLogos>

<Section>
  <SectionHeader title="Aspect Workflows Platform" subtitle="Bazel is a powerful, fast, and scalable build system, but it's famously tricky to adopt. Our Bazel developer productivity platform reduces the time and complexity to operate Bazel at scale." />

  <FeatureGrid3>
    <FeatureCard title="01 · Launch with Confidence" description="Before Aspect Workflows, starting a Bazel project meant writing a lot of boilerplate before even reaching a 'Hello World' build. Bazel developers face many configuration choices and unique ways to format, lint, test, and manage dependencies. Our platform sets up Bazel for fast, scalable builds, right from the start, and integrates with your choice of continuous integration and development (CI/CD) tools.">
      <img noZoom src="https://mintcdn.com/aspectbuild/x1L7Iep716jCyJVo/images/marketing/icons/rocket.svg?fit=max&auto=format&n=x1L7Iep716jCyJVo&q=85&s=aad2842e33767a3adfda39f90f336298" alt="" width="48" height="49" data-path="images/marketing/icons/rocket.svg" />
    </FeatureCard>

    <FeatureCard title="02 · Boost Performance" description="Enhance Bazel's speed by getting your configuration files, toolchains, and external dependencies just right. Choose between Self-hosted on your cloud or Aspect-hosted.">
      <img noZoom src="https://mintcdn.com/aspectbuild/x1L7Iep716jCyJVo/images/marketing/icons/fast.svg?fit=max&auto=format&n=x1L7Iep716jCyJVo&q=85&s=a631c8f2127105e4112db8e0a4ccc641" alt="" width="48" height="49" data-path="images/marketing/icons/fast.svg" />
    </FeatureCard>

    <FeatureCard title="03 · Empower Developers" description="Automate Bazel busy work to allow developers to focus time on higher value contributions.">
      <img noZoom src="https://mintcdn.com/aspectbuild/x1L7Iep716jCyJVo/images/marketing/icons/powerful.svg?fit=max&auto=format&n=x1L7Iep716jCyJVo&q=85&s=6bd529786aea222f877c69824f1d0f83" alt="" width="48" height="48" data-path="images/marketing/icons/powerful.svg" />
    </FeatureCard>
  </FeatureGrid3>
</Section>

<Section gray>
  <div className="max-w-3xl mx-auto text-center space-y-6">
    <div className="h-px bg-zinc-300 dark:bg-zinc-600 w-full" />

    <p className="text-lg text-zinc-700 dark:text-zinc-300 italic leading-relaxed">
      Most CI platforms are based on the premise that the build system is incorrect: incremental rebuilds can produce stale results, so they are all designed around clean, cold workers that re-do all the build and test work.
    </p>

    <p className="text-lg text-zinc-700 dark:text-zinc-300 italic leading-relaxed">
      Bazel should be hosted the opposite way: re-build and re-test work can be minimized by leveraging Bazel's built-in incrementality, and correctness is guaranteed.
    </p>

    <div className="h-px bg-zinc-300 dark:bg-zinc-600 w-full" />
  </div>
</Section>

<Section>
  <div className="text-center max-w-3xl mx-auto">
    <h2 className="text-3xl md:text-4xl font-semibold text-zinc-900 dark:text-white tracking-tight">
      Manage multiple software languages from a Bazel monorepo
    </h2>

    <p className="mt-6 text-lg text-zinc-500 dark:text-zinc-300 leading-relaxed">
      Accelerate development while using your choice of continuous integration and development (CI/CD) workflow tools.
    </p>

    <a href="/trial" className="inline-flex items-center mt-8 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>
</Section>

<Section gray>
  <SectionHeader label="Aspect Workflows" title="Developer productivity platform" />

  <div className="grid gap-6 md:grid-cols-2">
    <MediaCard title="Self-hosted or Aspect-hosted" description="Control security, your data, and costs." href="/platform/hosting">
      <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="Aspect platform: self-hosted" width="1296" height="720" data-path="images/marketing/product/Self-hosted-img.avif" />
    </MediaCard>

    <MediaCard title="AXL" description="Extend tasks anywhere with the Aspect Extension Language." href="/platform/axl">
      <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="We wrote and maintain rules_py, rules_js, and more." href="/platform/rules">
      <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="Build File Generation" description="Write extensions in Starlark and auto-generate BUILD files." href="/platform/build-file-generation">
      <img noZoom src="https://mintcdn.com/aspectbuild/x1L7Iep716jCyJVo/images/marketing/product/build-file-img.avif?fit=max&auto=format&n=x1L7Iep716jCyJVo&q=85&s=d6cd4f5d8ac505e3205b0dc7f2c73cab" alt="Build file generation" width="1296" height="720" data-path="images/marketing/product/build-file-img.avif" />
    </MediaCard>

    <MediaCard title="CI Runners" description="Auto-scaling, self-hosted runners tuned for Bazel on your existing CI." 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="CI Runners" width="1284" height="720" data-path="images/marketing/product/ci-img.avif" />
    </MediaCard>

    <MediaCard title="Marvin: GitHub & GitLab Bot" description="Status checks, PR comments, review annotations, and suggested fixes." href="/platform/marvin">
      <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="GitHub Code Review" width="1296" height="720" data-path="images/marketing/product/github-img.avif" />
    </MediaCard>

    <MediaCard title="Selective Delivery" description="Deliver only the targets whose outputs actually changed." 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>

    <MediaCard title="Remote Cache" description="Boost Bazel performance." href="/platform/remote-cache">
      <img noZoom src="https://mintcdn.com/aspectbuild/x1L7Iep716jCyJVo/images/marketing/product/Cache-Hits.avif?fit=max&auto=format&n=x1L7Iep716jCyJVo&q=85&s=b502e20f08ca64b229ff95a938650e4b" alt="Remote caching" width="1296" height="720" data-path="images/marketing/product/Cache-Hits.avif" />
    </MediaCard>

    <MediaCard title="Remote Execution" description="Massively parallelize Bazel workloads." 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 execution" width="1296" height="720" data-path="images/marketing/product/Remote-img_1.avif" />
    </MediaCard>

    <MediaCard title="Build & Test UI" description="Triage build and test failures in one place." href="/platform/web-ui">
      <img noZoom src="https://mintcdn.com/aspectbuild/x1L7Iep716jCyJVo/images/marketing/product/web-ui-img.avif?fit=max&auto=format&n=x1L7Iep716jCyJVo&q=85&s=7b06796cf5cd7b01c5fdaebf3bfb0eb6" alt="Build and Test UI" width="1292" height="720" data-path="images/marketing/product/web-ui-img.avif" />
    </MediaCard>
  </div>
</Section>

<CustomerLogos title="Aspect Workflows integrates 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/x1L7Iep716jCyJVo/images/marketing/logos/github.svg?fit=max&auto=format&n=x1L7Iep716jCyJVo&q=85&s=bf4f0413f29231644e049dd4399f2ac4" alt="GitHub" className="customer-logo" width="24" height="24" 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>

<Section>
  <SectionHeader label="Self-Hosted" title="Self-Hosted Benefits" subtitle="Aspect engineers deploy the infrastructure, in our cloud or yours, and stay on-call for the service under our SLA. Here is why teams choose to self-host." />

  <FeatureGrid3>
    <FeatureCard title="Enhanced Security" description="Keep your code and build artifacts within your own infrastructure. No source code leaves your network.">
      <img noZoom src="https://mintcdn.com/aspectbuild/x1L7Iep716jCyJVo/images/marketing/icons/protect.svg?fit=max&auto=format&n=x1L7Iep716jCyJVo&q=85&s=af5818d5725923799e54382c188d5256" alt="" width="40" height="40" data-path="images/marketing/icons/protect.svg" />
    </FeatureCard>

    <FeatureCard title="Data Control and Compliance" description="Full control over where data lives, how it's managed, and who can access it. SSO (OIDC or SAML), SCIM, single-tenant, air-gapped.">
      <img noZoom src="https://mintcdn.com/aspectbuild/x1L7Iep716jCyJVo/images/marketing/icons/Hosting.svg?fit=max&auto=format&n=x1L7Iep716jCyJVo&q=85&s=be200f157c3532a4341c82dd642a3c4c" alt="" width="32" height="32" data-path="images/marketing/icons/Hosting.svg" />
    </FeatureCard>

    <FeatureCard title="Cloud Pricing" description="Run on your committed cloud spend. No markup on compute costs. You only pay for the resources you use.">
      <img noZoom src="https://mintcdn.com/aspectbuild/x1L7Iep716jCyJVo/images/marketing/icons/cloud.svg?fit=max&auto=format&n=x1L7Iep716jCyJVo&q=85&s=acaa74dfc7233d60a896de1d6ec99de1" alt="" width="24" height="24" data-path="images/marketing/icons/cloud.svg" />
    </FeatureCard>

    <FeatureCard title="Honest Billing" description="Transparent pricing without hidden fees. Predictable costs tied to your actual usage.">
      <img noZoom src="https://mintcdn.com/aspectbuild/x1L7Iep716jCyJVo/images/marketing/icons/Documentation.svg?fit=max&auto=format&n=x1L7Iep716jCyJVo&q=85&s=06dde831b9dc258ec192c68dee586094" alt="" width="48" height="48" data-path="images/marketing/icons/Documentation.svg" />
    </FeatureCard>

    <FeatureCard title="Low-latency, High-bandwidth Integrations" description="High-bandwidth, low-latency connections to your existing CI, source control, and artifact systems.">
      <img noZoom src="https://mintcdn.com/aspectbuild/x1L7Iep716jCyJVo/images/marketing/icons/integrations.svg?fit=max&auto=format&n=x1L7Iep716jCyJVo&q=85&s=773ccf480cdd92e597ae8aeb794d7a8d" alt="" width="32" height="32" data-path="images/marketing/icons/integrations.svg" />
    </FeatureCard>
  </FeatureGrid3>

  <div className="flex justify-center mt-10">
    <a href="/blog/self-hosting-your-cicd-infra" 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">
      Learn more →
    </a>
  </div>
</Section>

<Section gray id="support">
  <SectionHeader title="Platform support, included" subtitle="Every Aspect Workflows deployment comes with the people behind it. This isn't a support contract you buy on top; it's how the platform ships." />

  <FeatureGrid2>
    <FeatureCard title="White-glove installation" description="Aspect engineers deploy and tune everything end to end, on your cloud account or ours. You don't need Bazel infrastructure expertise on staff to get to production.">
      <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" />
    </FeatureCard>

    <FeatureCard title="24/7 infrastructure on-call" description="Critical alerts like runner pool saturation or disk pressure route to Aspect automatically and are acknowledged inside your SLA, so your team is never the pager of last resort.">
      <img noZoom src="https://mintcdn.com/aspectbuild/x1L7Iep716jCyJVo/images/marketing/icons/alert.svg?fit=max&auto=format&n=x1L7Iep716jCyJVo&q=85&s=b94eb68321eeb5fc8c9b592045a2858a" alt="" width="24" height="24" data-path="images/marketing/icons/alert.svg" />
    </FeatureCard>

    <FeatureCard title="Dedicated Slack channel" description="A direct line to the engineers who run your deployment, not a ticket queue. Questions about flags, performance, or rollouts get answered by people who can see your dashboards.">
      <img noZoom src="https://mintcdn.com/aspectbuild/x1L7Iep716jCyJVo/images/marketing/icons/integrations.svg?fit=max&auto=format&n=x1L7Iep716jCyJVo&q=85&s=773ccf480cdd92e597ae8aeb794d7a8d" alt="" width="32" height="32" data-path="images/marketing/icons/integrations.svg" />
    </FeatureCard>

    <FeatureCard title="Tuned by Bazel experts" description="The same engineers who maintain Aspect's open source rulesets keep your configuration, toolchains, and caching tuned as your build grows.">
      <img noZoom src="https://mintcdn.com/aspectbuild/x1L7Iep716jCyJVo/images/marketing/icons/powerful.svg?fit=max&auto=format&n=x1L7Iep716jCyJVo&q=85&s=6bd529786aea222f877c69824f1d0f83" alt="" width="48" height="48" data-path="images/marketing/icons/powerful.svg" />
    </FeatureCard>
  </FeatureGrid2>

  <p className="mt-10 text-center text-sm text-zinc-500 dark:text-zinc-400">
    Looking for expert help with Bazel itself, with or without the platform?{" "}
    <a href="/services#support" className="text-blue-600 dark:text-blue-400 font-semibold hover:underline">See Bazel Support →</a>
  </p>
</Section>

<Section gray>
  <SectionHeader label="Customer Stories" title="Why Teams Choose Aspect" />

  <TestimonialGrid>
    <TestimonialCard quote="Aspect Workflows has made Bazel an order of magnitude easier to deal with and also more valuable." author="Jimmy Tanner" role="Software Engineer, Physical Intelligence">
      <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" width="191" height="28" data-path="images/marketing/customers/Physical-Intelligence_1.svg" />
    </TestimonialCard>

    <TestimonialCard quote="We saw significant improvements in build consistency. Optimized dependencies led to fast and cost-effective AI training and inference cycles." author="Engineering Team" role="AssemblyAI">
      <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" width="116" height="28" data-path="images/marketing/customers/AssemblyAI_2.svg" />
    </TestimonialCard>

    <TestimonialCard quote="If we showed this to all the engineers at Sourcegraph there would be a mutiny if we didn't buy it." author="Engineering Team" role="Sourcegraph">
      <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>

    <TestimonialCard quote="We went from having significant limits in CI and tools to where the limits are now just due to our code." author="Neal Norwitz" role="Software Engineer">
      <img noZoom src="https://mintcdn.com/aspectbuild/x1L7Iep716jCyJVo/images/marketing/customers/coda-logo.svg?fit=max&auto=format&n=x1L7Iep716jCyJVo&q=85&s=8fea372e6752e74c4a63130980bcfcfa" alt="Coda" width="100" height="32" data-path="images/marketing/customers/coda-logo.svg" />
    </TestimonialCard>

    <TestimonialCard quote="Aspect Workflows was the missing piece in our new development and build process. We transitioned to a monorepo approach with Bazel and quickly found ourselves against a very steep learning curve. The Aspect team helped us sort many blockers and provided a reliable tool to build our software." author="Valentin Rusiechi" role="Director of Technology">
      <img noZoom src="https://mintcdn.com/aspectbuild/x1L7Iep716jCyJVo/images/marketing/customers/spi-logistics.avif?fit=max&auto=format&n=x1L7Iep716jCyJVo&q=85&s=41b15b33d464fb7828ab28a666da228b" alt="SPI Logistics" width="179" height="128" data-path="images/marketing/customers/spi-logistics.avif" />
    </TestimonialCard>
  </TestimonialGrid>
</Section>

<CTA title="See the platform on your monorepo" subtitle="Faster builds, lower costs, and Bazel experts behind you." primaryCta="Start a Free Trial" primaryHref="/trial" secondaryCta="Request a Demo" secondaryHref="/request-demo" />
