diff --git a/ee/apps/landing/app/cloud/page.tsx b/ee/apps/landing/app/cloud/page.tsx new file mode 100644 index 000000000..8be7c89cb --- /dev/null +++ b/ee/apps/landing/app/cloud/page.tsx @@ -0,0 +1,29 @@ +import { LandingCloud } from "../../components/landing-cloud"; +import { getGithubData } from "../../lib/github"; +import { baseOpenGraph } from "../../lib/seo"; + +export const metadata = { + title: "OpenWork Cloud — Control your team's AI workspace from a conversation", + description: + "OpenWork Cloud is the control plane for shared skills, plugins, members, and providers — runnable from plain English. Local-first by default, cloud-ready when your team needs it.", + alternates: { + canonical: "/cloud" + }, + openGraph: { + ...baseOpenGraph, + url: "https://openworklabs.com/cloud" + } +}; + +export default async function CloudPage() { + const github = await getGithubData(); + const cal = process.env.NEXT_PUBLIC_CAL_URL ?? ""; + + return ( + + ); +} diff --git a/ee/apps/landing/app/coworker/page.tsx b/ee/apps/landing/app/coworker/page.tsx new file mode 100644 index 000000000..be359e67a --- /dev/null +++ b/ee/apps/landing/app/coworker/page.tsx @@ -0,0 +1,29 @@ +import { LandingCoworker } from "../../components/landing-coworker"; +import { getGithubData } from "../../lib/github"; +import { baseOpenGraph } from "../../lib/seo"; + +export const metadata = { + title: "OpenWork Coworker — Design and deploy AI coworkers from chat", + description: + "Design a full AI coworker right from the OpenWork desktop chat, connect the tools that matter, and deploy to Slack, email, and beyond. Available in private beta.", + alternates: { + canonical: "/coworker" + }, + openGraph: { + ...baseOpenGraph, + url: "https://openworklabs.com/coworker" + } +}; + +export default async function CoworkerPage() { + const github = await getGithubData(); + const cal = process.env.NEXT_PUBLIC_CAL_URL ?? ""; + + return ( + + ); +} diff --git a/ee/apps/landing/app/sitemap.ts b/ee/apps/landing/app/sitemap.ts index f5d835d0f..9632074f5 100644 --- a/ee/apps/landing/app/sitemap.ts +++ b/ee/apps/landing/app/sitemap.ts @@ -5,6 +5,8 @@ const BASE_URL = "https://openworklabs.com"; const paths: { path: string; priority: number }[] = [ { path: "/", priority: 1 }, { path: "/download", priority: 0.7 }, + { path: "/cloud", priority: 0.7 }, + { path: "/coworker", priority: 0.7 }, { path: "/enterprise", priority: 0.7 }, { path: "/pricing", priority: 0.7 }, { path: "/trust", priority: 0.7 }, diff --git a/ee/apps/landing/components/landing-cloud-chat-demo.tsx b/ee/apps/landing/components/landing-cloud-chat-demo.tsx new file mode 100644 index 000000000..4fb2aca22 --- /dev/null +++ b/ee/apps/landing/components/landing-cloud-chat-demo.tsx @@ -0,0 +1,172 @@ +"use client"; +import { AnimatePresence, motion } from "framer-motion"; +import { Check, Terminal, Wrench } from "lucide-react"; +import { useEffect, useState } from "react"; + +type Step = + | { kind: "user"; content: string } + | { kind: "tool"; name: string; result: string } + | { kind: "agent"; content: string }; + +const script: Step[] = [ + { kind: "user", content: "Hey, invite Omar to my team." }, + { + kind: "tool", + name: "invite_member", + result: "Invited omar@acme.com as Member" + }, + { + kind: "agent", + content: + "Done — Omar's been added to your team. He'll get an email to join the workspace." + }, + { + kind: "user", + content: + "Now let's add these skills I have on my computer and share them with him." + }, + { + kind: "tool", + name: "share_skills", + result: "Shared 3 skills · Meeting Brief, Contract Reviewer, Outreach CRM" + }, + { + kind: "agent", + content: + "Shared. Omar will see Meeting Brief, Contract Reviewer, and Outreach CRM in his workspace the moment he joins." + } +]; + +const STEP_MS = 1700; +const LOOP_PAUSE_MS = 4200; + +export function LandingCloudChatDemo() { + const [visible, setVisible] = useState(1); + + useEffect(() => { + let timer: ReturnType; + const total = script.length; + + const tick = (i: number) => { + if (i < total) { + setVisible(i + 1); + timer = setTimeout(() => tick(i + 1), STEP_MS); + } else { + timer = setTimeout(() => { + setVisible(0); + timer = setTimeout(() => tick(1), 500); + }, LOOP_PAUSE_MS); + } + }; + + tick(1); + return () => clearTimeout(timer); + }, []); + + return ( +
+ {/* App chrome */} +
+
+
+
+
+
+
+ + OpenWork Cloud Control +
+ + + + + + Live + +
+ + {/* Chat */} +
+ + {script.slice(0, visible).map((step, i) => { + if (step.kind === "user") { + return ( + + {step.content} + + ); + } + + if (step.kind === "tool") { + return ( + +
+ + + {step.name} + + +
+
+ {step.result} +
+
+ ); + } + + return ( + + {step.content} + + ); + })} +
+ + {visible < script.length ? ( + + + + + + ) : null} +
+ + {/* Composer */} +
+
+ + Ask anything about your Cloud… + + + Send + +
+
+
+ ); +} diff --git a/ee/apps/landing/components/landing-cloud-section.tsx b/ee/apps/landing/components/landing-cloud-section.tsx new file mode 100644 index 000000000..ca1f3b768 --- /dev/null +++ b/ee/apps/landing/components/landing-cloud-section.tsx @@ -0,0 +1,33 @@ +"use client"; +import { Cloud } from "lucide-react"; +import Link from "next/link"; + +export function LandingCloudSection() { + return ( +
+
+ + OpenWork Cloud +
+

+ Control your team's AI +
+ workspace from a conversation. +

+

+ OpenWork Cloud is the control plane for shared skills, plugins, + members, and providers — runnable from plain English. Local-first by + default, cloud-ready when your team needs it. +

+ +
+ + Explore Cloud + + + Local-first by default. Cloud when you need it. + +
+
+ ); +} diff --git a/ee/apps/landing/components/landing-cloud.tsx b/ee/apps/landing/components/landing-cloud.tsx new file mode 100644 index 000000000..065b2f3c4 --- /dev/null +++ b/ee/apps/landing/components/landing-cloud.tsx @@ -0,0 +1,256 @@ +"use client"; +import { + ArrowRight, + BrainCircuit, + Cloud, + PlugZap, + Send, + ShieldCheck, + Sparkles +} from "lucide-react"; +import { LandingBackground } from "./landing-background"; +import { LandingCloudChatDemo } from "./landing-cloud-chat-demo"; +import { SiteFooter } from "./site-footer"; +import { SiteNav } from "./site-nav"; + +type Props = { + stars: string; + downloadHref: string; + callHref: string; +}; + +const CLOUD_SIGNUP_URL = "https://app.openworklabs.com?mode=sign-up"; + +const externalLinkProps = (href: string) => + /^https?:\/\//.test(href) + ? { rel: "noreferrer", target: "_blank" as const } + : {}; + +function ComingSoonBadge() { + return ( + + + Coming soon + + ); +} + +const features = [ + { + icon: Cloud, + title: "Hosted workers", + comingSoon: true, + body: "Deploy a worker on sandboxed infrastructure, reachable from desktop, browser, or chat. Each workspace gets its own subdomain." + }, + { + icon: Send, + title: "Share & import", + body: "Package skills, MCPs, plugins, and configs into a single link. Teammates import the whole setup in one click — no terminal, no setup guide, no technical knowledge needed." + }, + { + icon: BrainCircuit, + title: "Managed models", + body: "Give every teammate instant model access. OpenWork Models hosts frontier open-source models for $10 a seat — no provider accounts, no key juggling, every member provisioned automatically." + }, + { + icon: PlugZap, + title: "Extension marketplace", + body: "Ship reusable skills, MCPs, and plugins to your team through a marketplace. Import from the built-in OpenWork Marketplace or any GitHub repo in a couple of clicks." + }, + { + icon: ShieldCheck, + title: "Org controls", + body: "SSO/SAML, SCIM provisioning, RBAC, and desktop policies. Decide which providers, models, and extensions your team can use — enforced automatically by the desktop app." + }, + { + icon: Sparkles, + title: "Cloud MCP", + body: "Talk to your Cloud org from any MCP client — or right inside OpenWork. Invite teammates, share skills, and manage your workspace from plain English." + } +]; + +const steps = [ + { + n: "01", + title: "Build locally", + body: "Create skills, MCPs, plugins, and configs in the desktop app. Test on your own files with your own keys." + }, + { + n: "02", + title: "Share to Cloud", + body: "Spin up a shared workspace or send a link. Your team imports the setup in one click — no setup guide required." + }, + { + n: "03", + title: "Run & govern", + body: "Manage members, providers, and policy from one dashboard — or just ask in plain English through the Cloud MCP." + } +]; + +export function LandingCloud(props: Props) { + const callLinkProps = externalLinkProps(props.callHref); + const primaryCtaHref = CLOUD_SIGNUP_URL; + const primaryCtaLabel = "Get Started for free"; + const primaryCtaLinkProps = externalLinkProps(primaryCtaHref); + + return ( +
+ + +
+
+ +
+ +
+ {/* Hero */} +
+
+
+
+ + OpenWork Cloud +
+

+ Control your team's AI workspace from a conversation. +

+

+ OpenWork Cloud is the control plane for shared skills, + plugins, members, and providers — and you can run it all from + plain English. Local-first by default, cloud-ready when your + team needs it. +

+ + +
+ +
+ +
+
+
+ + {/* Features */} +
+
+

+ Everything you get with Cloud. +

+

+ A complete control plane for team access, shared runtime state, + and reusable agent setups — on top of the open-source core. +

+
+ +
+ {features.map((feature) => { + const Icon = feature.icon; + return ( +
+
+
+ +
+ {feature.comingSoon ? : null} +
+

+ {feature.title} +

+

+ {feature.body} +

+
+ ); + })} +
+
+ + {/* How it works */} +
+
+

+ Local-first. Cloud-ready. +

+

+ Start on your machine. Move to the cloud when your team needs + shared setups or org-wide governance. +

+
+ +
+ {steps.map((step) => ( +
+
+ {step.n} +
+

+ {step.title} +

+

+ {step.body} +

+
+ ))} +
+
+ + {/* Closing CTA */} +
+

+ Start free. Upgrade when your team's ready. +

+

+ Run OpenWork locally for free, or spin up a shared cloud workspace + in minutes. No credit card to start. +

+ +
+ + +
+
+
+ ); +} diff --git a/ee/apps/landing/components/landing-coworker-chat-demo.tsx b/ee/apps/landing/components/landing-coworker-chat-demo.tsx new file mode 100644 index 000000000..10a9c12c7 --- /dev/null +++ b/ee/apps/landing/components/landing-coworker-chat-demo.tsx @@ -0,0 +1,179 @@ +"use client"; +import { AnimatePresence, motion } from "framer-motion"; +import { Bot, Check, Rocket, Wrench } from "lucide-react"; +import { useEffect, useState } from "react"; + +type Step = + | { kind: "user"; content: string } + | { kind: "tool"; name: string; result: string } + | { kind: "agent"; content: string }; + +const script: Step[] = [ + { kind: "user", content: "Create a coworker for our sales team." }, + { + kind: "tool", + name: "create_coworker", + result: "Created coworker · Sales Assistant" + }, + { + kind: "agent", + content: + "Done. I've created a new coworker called Sales Assistant. Want to connect some tools to it?" + }, + { + kind: "user", + content: "Yes — connect it to Slack and HubSpot." + }, + { + kind: "tool", + name: "connect_tools", + result: "Connected Slack + HubSpot" + }, + { + kind: "agent", + content: + "Slack and HubSpot are connected. It can read your CRM, draft outreach, and post updates to your sales channel." + }, + { kind: "user", content: "Deploy it." }, + { + kind: "tool", + name: "deploy_coworker", + result: "Deployed · live in #sales" + }, + { + kind: "agent", + content: + "Sales Assistant is live. It's monitoring inbound leads and posting summaries to your #sales Slack channel now." + } +]; + +const STEP_MS = 1700; +const LOOP_PAUSE_MS = 4500; + +export function LandingCoworkerChatDemo() { + const [visible, setVisible] = useState(1); + + useEffect(() => { + let timer: ReturnType; + const total = script.length; + + const tick = (i: number) => { + if (i < total) { + setVisible(i + 1); + timer = setTimeout(() => tick(i + 1), STEP_MS); + } else { + timer = setTimeout(() => { + setVisible(0); + timer = setTimeout(() => tick(1), 500); + }, LOOP_PAUSE_MS); + } + }; + + tick(1); + return () => clearTimeout(timer); + }, []); + + return ( +
+ {/* App chrome */} +
+
+
+
+
+
+
+ + OpenWork · Coworker +
+ + + Private beta + +
+ + {/* Chat */} +
+ + {script.slice(0, visible).map((step, i) => { + if (step.kind === "user") { + return ( + + {step.content} + + ); + } + + if (step.kind === "tool") { + return ( + +
+ + + {step.name} + + +
+
+ {step.result} +
+
+ ); + } + + return ( + + {step.content} + + ); + })} +
+ + {visible < script.length ? ( + + + + + + ) : null} +
+ + {/* Composer */} +
+
+ + Design and deploy your coworker… + + + Send + +
+
+
+ ); +} diff --git a/ee/apps/landing/components/landing-coworker-section.tsx b/ee/apps/landing/components/landing-coworker-section.tsx new file mode 100644 index 000000000..646b4e363 --- /dev/null +++ b/ee/apps/landing/components/landing-coworker-section.tsx @@ -0,0 +1,35 @@ +"use client"; +import { ArrowRight, Bot, Rocket } from "lucide-react"; +import Link from "next/link"; + +export function LandingCoworkerSection() { + return ( +
+
+ + Introducing +
+

+ OpenWork Coworker. +
+ Design, connect, and deploy AI coworkers from chat. +

+

+ Build a full coworker experience right from the OpenWork desktop + interface, connect the tools that matter to you, and deploy it to Slack, + email, and beyond — without hosting infrastructure or surrendering + control. +

+ +
+ + Learn more + +
+ + Private beta +
+
+
+ ); +} diff --git a/ee/apps/landing/components/landing-coworker.tsx b/ee/apps/landing/components/landing-coworker.tsx new file mode 100644 index 000000000..6c3bfc2a9 --- /dev/null +++ b/ee/apps/landing/components/landing-coworker.tsx @@ -0,0 +1,291 @@ +"use client"; +import { motion } from "framer-motion"; +import { + ArrowRight, + Bot, + Mail, + MessageSquare, + Rocket, + Settings2, + Terminal, + Wrench, + X +} from "lucide-react"; +import { LandingBackground } from "./landing-background"; +import { LandingCoworkerChatDemo } from "./landing-coworker-chat-demo"; +import { SiteFooter } from "./site-footer"; +import { SiteNav } from "./site-nav"; + +type Props = { + stars: string; + downloadHref: string; + callHref: string; +}; + +const CLOUD_SIGNUP_URL = "https://app.openworklabs.com?mode=sign-up"; + +const externalLinkProps = (href: string) => + /^https?:\/\//.test(href) + ? { rel: "noreferrer", target: "_blank" as const } + : {}; + +const problemPaths = [ + { + label: "Option A · Self-host", + title: "Run the entire stack yourself", + body: "Provision servers, write code, maintain infrastructure, handle updates and downtime. You become the platform team.", + bad: true + }, + { + label: "Option B · Locked-in SaaS", + title: "Let the platform decide for you", + body: "Restricted tool selection, rigid workflows, and someone else's idea of how your team should work. It doesn't fit.", + bad: true + } +]; + +const ourWay = [ + { + icon: Settings2, + title: "Design it your way", + body: "Build the full coworker experience right from the OpenWork desktop chat. Pick the skills, MCPs, and tools that matter to you — no code, no infra." + }, + { + icon: Wrench, + title: "Connect what matters", + body: "Slack, HubSpot, Notion, email, your internal tools — anything with an MCP server. You choose the connections, not the platform." + }, + { + icon: Rocket, + title: "Deploy from chat", + body: "When it's ready, deploy straight from the conversation. Your coworker goes live on Slack, email, or wherever your team works." + } +]; + +const channels = [ + { name: "Slack", icon: MessageSquare, tone: "bg-gradient-to-br from-violet-400 to-purple-500" }, + { name: "Email", icon: Mail, tone: "bg-gradient-to-br from-sky-400 to-blue-500" }, + { name: "Telegram", icon: MessageSquare, tone: "bg-gradient-to-br from-amber-400 to-orange-400" } +]; + +export function LandingCoworker(props: Props) { + const callLinkProps = externalLinkProps(props.callHref); + const primaryCtaHref = CLOUD_SIGNUP_URL; + const primaryCtaLabel = "Join the private beta"; + const primaryCtaLinkProps = externalLinkProps(primaryCtaHref); + + return ( +
+ + +
+
+ +
+ +
+ {/* Hero */} +
+
+
+
+ + Introducing +
+

+ OpenWork Coworker +

+

+ Design a full AI coworker right from the OpenWork desktop chat, + connect the tools that matter to you, and deploy it to Slack, + email, and beyond — without hosting infrastructure or + surrendering control. +

+ +
+ + Available in private beta +
+ + + +

+ Teams using OpenWork Models or OpenWork Cloud get access first. +

+
+ +
+ +
+
+
+ + {/* The problem */} +
+
+

+ Teams deploying AI coworkers face two bad options. +

+

+ We talked to many teams who deploy AI coworkers onto Slack, + email, and beyond. They all hit the same wall. +

+
+ +
+ {problemPaths.map((path) => ( +
+
+ + {path.label} +
+

+ {path.title} +

+

+ {path.body} +

+
+ ))} +
+
+ + {/* Our way */} +
+
+
+ + The OpenWork way +
+

+ You design it. You connect it. You deploy it. +

+

+ All from the desktop chat interface. No infrastructure to host, + no platform making decisions for you. +

+
+ +
+ {ourWay.map((item, i) => { + const Icon = item.icon; + return ( + +
+ +
+

+ {item.title} +

+

+ {item.body} +

+
+ ); + })} +
+ + {/* Channels strip */} +
+
+ Deploy to where your team already works +
+
+ {channels.map((channel) => { + const Icon = channel.icon; + return ( +
+ + + + + {channel.name} + +
+ ); + })} +
+ + + + any MCP server + +
+
+
+
+ + {/* Beta CTA */} +
+
+ + Private beta · available now +
+

+ Be the first to get access. +

+

+ Sign up at openworklabs.com to join the private beta. Teams using + OpenWork Models or OpenWork Cloud get access first. +

+ +
+ + +
+
+
+ ); +} diff --git a/ee/apps/landing/components/landing-home.tsx b/ee/apps/landing/components/landing-home.tsx index 52a63d5a7..95278b1f2 100644 --- a/ee/apps/landing/components/landing-home.tsx +++ b/ee/apps/landing/components/landing-home.tsx @@ -5,6 +5,8 @@ import { useMemo, useRef, useState } from "react"; import { LandingAppDemoPanel } from "./landing-app-demo-panel"; import { LandingBackground } from "./landing-background"; +import { LandingCloudSection } from "./landing-cloud-section"; +import { LandingCoworkerSection } from "./landing-coworker-section"; import { LandingCloudWorkersCard } from "./landing-cloud-workers-card"; import { defaultLandingDemoFlowId, @@ -31,6 +33,15 @@ const externalLinkProps = (href: string) => const CLOUD_SIGNUP_URL = "https://app.openworklabs.com?mode=sign-up"; +const proofLogos = [ + { name: "Toyota", users: "4", src: "/proof-logos/toyota.svg", className: "h-6 w-16" }, + { name: "Lenovo", users: "4", src: "/proof-logos/lenovo.svg", className: "h-6 w-20" }, + { name: "IBM", users: "3", src: "/proof-logos/ibm.svg", className: "h-7 w-16" }, + { name: "Tesla", users: "2", src: "/proof-logos/tesla.svg", className: "h-7 w-10" }, + { name: "Stanford", users: "2", src: "/proof-logos/stanford.svg", className: "h-7 w-24" }, + { name: "MIT", users: "1", src: "/proof-logos/mit.svg", className: "h-7 w-16" } +]; + export function LandingHome(props: Props) { const [activeDemoId, setActiveDemoId] = useState(defaultLandingDemoFlowId); const [activeUseCase, setActiveUseCase] = useState(0); @@ -100,20 +111,34 @@ export function LandingHome(props: Props) {
-
- - Backed by - -
-
- Y -
- - Combinator - -
-
+
+
+
+ Used by people at + +
+ + {[...proofLogos, ...proofLogos].map((logo, index) => ( +
+ {logo.name} +
+ ))} +
@@ -416,8 +441,38 @@ export function LandingHome(props: Props) {
+ + + + +
+

+ Start free. Upgrade when your team's ready. +

+

+ Run OpenWork locally for free, or spin up a shared cloud workspace + in minutes. No credit card to start. +

+ +
+
diff --git a/ee/apps/landing/components/site-footer.tsx b/ee/apps/landing/components/site-footer.tsx index 5337528d2..f666f0a6d 100644 --- a/ee/apps/landing/components/site-footer.tsx +++ b/ee/apps/landing/components/site-footer.tsx @@ -27,14 +27,9 @@ export function SiteFooter() { Desktop - + Cloud - + Enterprise diff --git a/ee/apps/landing/components/site-nav.tsx b/ee/apps/landing/components/site-nav.tsx index 80ee5816a..0dcee52b4 100644 --- a/ee/apps/landing/components/site-nav.tsx +++ b/ee/apps/landing/components/site-nav.tsx @@ -34,7 +34,7 @@ export function SiteNav(props: Props) { { href: "/docs", label: "Docs", key: "docs", newTab: true }, { href: "/pricing", label: "Pricing", key: "pricing" }, { href: "/download", label: "Desktop", key: "download" }, - { href: "https://app.openworklabs.com", label: "Cloud", key: "cloud" }, + { href: "/cloud", label: "Cloud", key: "cloud" }, { href: "/enterprise", label: "Enterprise", key: "enterprise" } ] as const; diff --git a/ee/apps/landing/lib/agent-markdown.ts b/ee/apps/landing/lib/agent-markdown.ts index 9d7baa5dd..aa2d88a4e 100644 --- a/ee/apps/landing/lib/agent-markdown.ts +++ b/ee/apps/landing/lib/agent-markdown.ts @@ -1,6 +1,6 @@ const home = `# OpenWork -> The open-source Claude Cowork alternative. OpenWork is a desktop app that lets teams chat with 50+ LLMs, bring their own provider keys, and ship reusable agent setups with guardrails. +> The open-source Claude Cowork alternative. OpenWork is a free desktop app that lets teams run AI agents on their own files, use 50+ LLM providers with their own keys, and share reusable agent setups in one link. ## What it is @@ -8,13 +8,16 @@ const home = `# OpenWork - Bring your own model and provider (OpenAI, Anthropic, local models, 50+ supported) - Skills, plugins, and MCP servers extend what the agent can do - Shared agent setups for teams, with policy and guardrails +- Local-first desktop mode keeps files on the user's machine by default - Free and open source ## Primary calls-to-action -- **Try it free** — [Get Started for free](https://app.openworklabs.com?mode=sign-up) +- **Download desktop** — [Download OpenWork](https://openworklabs.com/download) +- **Try Cloud** — [Get Started for free](https://app.openworklabs.com?mode=sign-up) - **Team plans** — [Pricing](https://openworklabs.com/pricing) (first 5 seats free, then \\$10 per seat/mo) -- **Sign in to the hosted workspace** — [Cloud](https://app.openworklabs.com) +- **Cloud control plane** — [Cloud](https://openworklabs.com/cloud) +- **Private beta** — [OpenWork Coworker](https://openworklabs.com/coworker) - **SSO / audit / procurement** — [Enterprise](https://openworklabs.com/enterprise) - **Docs** — [openworklabs.com/docs](https://openworklabs.com/docs) @@ -166,9 +169,49 @@ const trust = `# Trust & Security Omar McAdam — team+security@openworklabs.com ` +const cloud = `# OpenWork Cloud + +> The control plane for shared skills, plugins, members, providers, and team governance — local-first by default, cloud-ready when a team needs shared setup and access. + +## What Cloud adds + +- Shared skills, MCPs, plugins, and configs for teams +- Managed models through OpenWork Models +- Organization controls: members, roles, SSO/SAML, SCIM, provider policy, and desktop policies +- Cloud MCP: manage the organization from plain English in any MCP client +- Hosted workers are marked coming soon + +## CTA + +- [Get Started for free](https://app.openworklabs.com?mode=sign-up) +- [Contact sales](https://openworklabs.com/enterprise#book) +` + +const coworker = `# OpenWork Coworker + +> Private beta: design an AI coworker from the OpenWork desktop chat, connect the tools that matter, and deploy it to Slack, email, and beyond. + +## Why it exists + +Teams deploying AI coworkers today usually choose between hosting the whole infra themselves or using a locked-down SaaS that decides too much for them. + +## The OpenWork way + +- Design the coworker from desktop chat +- Connect skills, MCPs, Slack, email, HubSpot, Notion, and internal tools +- Deploy from the conversation without hosting your own infrastructure +- Teams using OpenWork Models or OpenWork Cloud get access first + +## CTA + +- [Join the private beta](https://app.openworklabs.com?mode=sign-up) +` + export const agentMarkdown: Record = { "/": home, "/pricing": pricing, + "/cloud": cloud, + "/coworker": coworker, "/enterprise": enterprise, "/download": download, "/trust": trust, diff --git a/ee/apps/landing/middleware.ts b/ee/apps/landing/middleware.ts index edd2d0fbe..cdc5ab4e6 100644 --- a/ee/apps/landing/middleware.ts +++ b/ee/apps/landing/middleware.ts @@ -2,7 +2,7 @@ import { NextResponse, type NextRequest } from "next/server" import { agentMarkdown } from "./lib/agent-markdown" export const config = { - matcher: ["/", "/pricing", "/enterprise", "/download", "/trust"], + matcher: ["/", "/pricing", "/cloud", "/coworker", "/enterprise", "/download", "/trust"], } export function middleware(request: NextRequest) { diff --git a/ee/apps/landing/public/proof-logos/ibm.svg b/ee/apps/landing/public/proof-logos/ibm.svg new file mode 100644 index 000000000..56ef21d23 --- /dev/null +++ b/ee/apps/landing/public/proof-logos/ibm.svg @@ -0,0 +1 @@ +IBMIBM diff --git a/ee/apps/landing/public/proof-logos/lenovo.svg b/ee/apps/landing/public/proof-logos/lenovo.svg new file mode 100644 index 000000000..e00ec07bb --- /dev/null +++ b/ee/apps/landing/public/proof-logos/lenovo.svg @@ -0,0 +1 @@ +Lenovo diff --git a/ee/apps/landing/public/proof-logos/mit.svg b/ee/apps/landing/public/proof-logos/mit.svg new file mode 100644 index 000000000..c82c185e4 --- /dev/null +++ b/ee/apps/landing/public/proof-logos/mit.svg @@ -0,0 +1 @@ +MIT diff --git a/ee/apps/landing/public/proof-logos/stanford.svg b/ee/apps/landing/public/proof-logos/stanford.svg new file mode 100644 index 000000000..18824fb1f --- /dev/null +++ b/ee/apps/landing/public/proof-logos/stanford.svg @@ -0,0 +1 @@ +StanfordStanford diff --git a/ee/apps/landing/public/proof-logos/tesla.svg b/ee/apps/landing/public/proof-logos/tesla.svg new file mode 100644 index 000000000..9f96c54f7 --- /dev/null +++ b/ee/apps/landing/public/proof-logos/tesla.svg @@ -0,0 +1 @@ +Tesla diff --git a/ee/apps/landing/public/proof-logos/toyota.svg b/ee/apps/landing/public/proof-logos/toyota.svg new file mode 100644 index 000000000..d28ec3d25 --- /dev/null +++ b/ee/apps/landing/public/proof-logos/toyota.svg @@ -0,0 +1 @@ +Toyota