From 955323a50af6caac6d2a241e79447d8d197a91a2 Mon Sep 17 00:00:00 2001 From: Dan Farrelly Date: Wed, 22 Jan 2025 17:59:33 -0500 Subject: [PATCH] Jan landing page updates (#1050) * AI landing page. Update contact forms * Clone durable workflows page * Adjust pricing breakpoint --- .gitignore | 2 + app/ai/page.tsx | 127 ++++++++++++------ pages/contact.tsx => app/contact/page.tsx | 34 ++--- app/landing/{ => (pages)}/Header.tsx | 0 app/landing/{ => (pages)}/layout.tsx | 0 .../content.mdx | 0 .../page.tsx | 0 .../message-queue-vs-message-bus/content.mdx | 0 .../message-queue-vs-message-bus/page.tsx | 0 .../content.mdx | 0 .../page.tsx | 0 app/landing/ai/page.tsx | 60 +++++++++ app/landing/durable-workflows/page.tsx | 28 ++++ app/layout.tsx | 2 +- app/pricing/PlanCard.tsx | 11 +- app/pricing/page.tsx | 2 +- app/uses/durable-workflows/page.tsx | 84 +++++++----- pages/yc.tsx => app/yc/page.tsx | 54 ++++---- components/ContactForm.tsx | 14 +- components/Quote.tsx | 10 +- components/utils/classNames.ts | 5 + package.json | 1 + pnpm-lock.yaml | 8 ++ shared/Footer/index.tsx | 2 +- utils/social.ts | 3 + 25 files changed, 305 insertions(+), 142 deletions(-) rename pages/contact.tsx => app/contact/page.tsx (85%) rename app/landing/{ => (pages)}/Header.tsx (100%) rename app/landing/{ => (pages)}/layout.tsx (100%) rename app/landing/{ => (pages)}/managing-capacity-for-ai-concurrency/content.mdx (100%) rename app/landing/{ => (pages)}/managing-capacity-for-ai-concurrency/page.tsx (100%) rename app/landing/{ => (pages)}/message-queue-vs-message-bus/content.mdx (100%) rename app/landing/{ => (pages)}/message-queue-vs-message-bus/page.tsx (100%) rename app/landing/{ => (pages)}/multi-tenant-concurrency-noisy-neighbors/content.mdx (100%) rename app/landing/{ => (pages)}/multi-tenant-concurrency-noisy-neighbors/page.tsx (100%) create mode 100644 app/landing/ai/page.tsx create mode 100644 app/landing/durable-workflows/page.tsx rename pages/yc.tsx => app/yc/page.tsx (70%) create mode 100644 components/utils/classNames.ts diff --git a/.gitignore b/.gitignore index 927be7567..dd8ee56fe 100644 --- a/.gitignore +++ b/.gitignore @@ -35,3 +35,5 @@ # Nix /.direnv/ .env*.local + +cdn diff --git a/app/ai/page.tsx b/app/ai/page.tsx index 50c120885..8fac5b34d 100644 --- a/app/ai/page.tsx +++ b/app/ai/page.tsx @@ -28,13 +28,25 @@ export const metadata: Metadata = generateMetadata({ const ref = "ai-landing-page"; export default function Page() { + return ; +} + +export function AIPage({ + heroCTAs, + heroFeature, + showCTAs = true, +}: { + heroCTAs?: { href: string; text: string }[]; + heroFeature?: React.ReactNode; + showCTAs?: boolean; +}) { return (
{/* The background needs to be here with negative position to bleed under the header nav */}
- +

@@ -168,12 +180,16 @@ export default function Page() { -

-
-
-

AI early access program

-

- Be the first to get access to and stay in the loop about our - latest AI features, including step.ai,{" "} - AgentKit and more. -

- + {showCTAs && ( +
+
+
+

AI early access program

+

+ Be the first to get access to and stay in the loop about our + latest AI features, including step.ai,{" "} + AgentKit and more. +

+ +
-
- -
+ + + )}
); } -function Hero() { +function Hero({ + ctas = [ + { + href: `/ai/early-access?ref=${ref}`, + text: "Sign up for early access", + variant: "primary", + }, + { + href: `/docs/features/inngest-functions/steps-workflows/step-ai-orchestration?ref=${ref}`, + text: "Explore the docs", + variant: "link", + }, + ], + featured, +}: { + ctas?: { + href: string; + text: string | React.ReactNode; + variant?: "primary" | "link"; + }[]; + featured?: React.ReactNode; +}) { return (
-
+

Ship AI workflows and Agents to production faster

@@ -386,25 +425,25 @@ function Hero() { backend complexity.

- - + {ctas.map((cta) => ( + + ))}
- Mosaic screenshot of the Inngest dashboard showing a trace view for an AI workflow + {featured ? ( + featured + ) : ( + Mosaic screenshot of the Inngest dashboard showing a trace view for an AI workflow + )}
); } diff --git a/pages/contact.tsx b/app/contact/page.tsx similarity index 85% rename from pages/contact.tsx rename to app/contact/page.tsx index fe9c2df1d..deff4e123 100644 --- a/pages/contact.tsx +++ b/app/contact/page.tsx @@ -1,25 +1,20 @@ -import Header from "src/shared/Header"; +import { type Metadata } from "next"; + import Container from "src/shared/layout/Container"; -import Footer from "src/shared/Footer"; -import Quote from "src/shared/Home/Quote"; +import Quote from "src/components/Quote"; import ContactForm from "src/components/ContactForm"; import { RiLifebuoyLine } from "@remixicon/react"; +import { generateMetadata } from "src/utils/social"; -export async function getStaticProps() { - return { - props: { - meta: { - title: "Chat with solutions engineering", - }, - designVersion: "2", - }, - }; -} +export const metadata: Metadata = generateMetadata({ + title: "Schedule a demo", + description: + "Schedule a demo with a solutions expert to learn more about Inngest.", +}); -export default function Contact() { +export default function Page() { return (
-
@@ -68,10 +63,10 @@ export default function Contact() { title: "CEO @ Ocoya", avatar: "/assets/customers/ocoya-aivaras-tumas.png", }} - variant="vertical" - className="p-0 md:p-0 pb-4 md:px-0 md:pt-4 md:pr-2" + variant="no-padding" + className="pb-8 rounded-none border-b border-subtle" /> -
+
SOC 2

Inngest is SOC 2 Type II compliant.

-

+

Trusted by

@@ -103,7 +98,6 @@ export default function Contact() {
-
); } diff --git a/app/landing/Header.tsx b/app/landing/(pages)/Header.tsx similarity index 100% rename from app/landing/Header.tsx rename to app/landing/(pages)/Header.tsx diff --git a/app/landing/layout.tsx b/app/landing/(pages)/layout.tsx similarity index 100% rename from app/landing/layout.tsx rename to app/landing/(pages)/layout.tsx diff --git a/app/landing/managing-capacity-for-ai-concurrency/content.mdx b/app/landing/(pages)/managing-capacity-for-ai-concurrency/content.mdx similarity index 100% rename from app/landing/managing-capacity-for-ai-concurrency/content.mdx rename to app/landing/(pages)/managing-capacity-for-ai-concurrency/content.mdx diff --git a/app/landing/managing-capacity-for-ai-concurrency/page.tsx b/app/landing/(pages)/managing-capacity-for-ai-concurrency/page.tsx similarity index 100% rename from app/landing/managing-capacity-for-ai-concurrency/page.tsx rename to app/landing/(pages)/managing-capacity-for-ai-concurrency/page.tsx diff --git a/app/landing/message-queue-vs-message-bus/content.mdx b/app/landing/(pages)/message-queue-vs-message-bus/content.mdx similarity index 100% rename from app/landing/message-queue-vs-message-bus/content.mdx rename to app/landing/(pages)/message-queue-vs-message-bus/content.mdx diff --git a/app/landing/message-queue-vs-message-bus/page.tsx b/app/landing/(pages)/message-queue-vs-message-bus/page.tsx similarity index 100% rename from app/landing/message-queue-vs-message-bus/page.tsx rename to app/landing/(pages)/message-queue-vs-message-bus/page.tsx diff --git a/app/landing/multi-tenant-concurrency-noisy-neighbors/content.mdx b/app/landing/(pages)/multi-tenant-concurrency-noisy-neighbors/content.mdx similarity index 100% rename from app/landing/multi-tenant-concurrency-noisy-neighbors/content.mdx rename to app/landing/(pages)/multi-tenant-concurrency-noisy-neighbors/content.mdx diff --git a/app/landing/multi-tenant-concurrency-noisy-neighbors/page.tsx b/app/landing/(pages)/multi-tenant-concurrency-noisy-neighbors/page.tsx similarity index 100% rename from app/landing/multi-tenant-concurrency-noisy-neighbors/page.tsx rename to app/landing/(pages)/multi-tenant-concurrency-noisy-neighbors/page.tsx diff --git a/app/landing/ai/page.tsx b/app/landing/ai/page.tsx new file mode 100644 index 000000000..57e49ecec --- /dev/null +++ b/app/landing/ai/page.tsx @@ -0,0 +1,60 @@ +import type { Metadata } from "next"; +import { AIPage } from "src/app/ai/page"; +import ContactForm from "src/components/ContactForm"; +import { generateMetadata } from "src/utils/social"; +import { H2 } from "src/components/LandingPage/Heading"; + +export const metadata: Metadata = generateMetadata({ + // Prevent Google from indexing landing pages which may have + // duplicate and/or temporary content + robots: "noindex", + title: "AI", + description: + "Orchestration for AI workflows and AI agents. Build, iterate and ship to production with confidence.", +}); + +export default function Page() { + return ( + <> + + } + showCTAs={false} + /> +
+
+
+

Schedule a call

+

+ We're here to help you with any questions you have about Inngest + and AI. +

+
+ +
+
+
+ +
+ + ); +} diff --git a/app/landing/durable-workflows/page.tsx b/app/landing/durable-workflows/page.tsx new file mode 100644 index 000000000..d7c90190c --- /dev/null +++ b/app/landing/durable-workflows/page.tsx @@ -0,0 +1,28 @@ +import type { Metadata } from "next"; +import { DurableWorkflowsPage } from "src/app/uses/durable-workflows/page"; +import { generateMetadata } from "src/utils/social"; +import ContactForm from "src/components/ContactForm"; + +export const metadata: Metadata = generateMetadata({ + // Prevent Google from indexing landing pages which may have + // duplicate and/or temporary content + robots: "noindex", + title: "Durable Workflows", + description: + "Write complex workflows as code and let Inngest handle the rest. Inngest manages state, retries, logging and observability for you.", +}); + +const baseCTA = "landing-durable-workflows"; + +export default function Page() { + return ( + <> + + + ); +} diff --git a/app/layout.tsx b/app/layout.tsx index da9945284..c14f9e2d4 100644 --- a/app/layout.tsx +++ b/app/layout.tsx @@ -62,7 +62,7 @@ export default function RootLayout({