diff --git a/ee/apps/landing/app/apple-icon.png b/ee/apps/landing/app/apple-icon.png new file mode 100644 index 00000000..b1d86b68 Binary files /dev/null and b/ee/apps/landing/app/apple-icon.png differ diff --git a/ee/apps/landing/app/den/page.tsx b/ee/apps/landing/app/den/page.tsx deleted file mode 100644 index aeb20b22..00000000 --- a/ee/apps/landing/app/den/page.tsx +++ /dev/null @@ -1,22 +0,0 @@ -import { LandingDen } from "../../components/landing-den"; -import { getGithubData } from "../../lib/github"; - -export const metadata = { - title: "OpenWork — Den", - description: - "Always-on AI workers that handle repetitive work for your team and report back in Slack, Telegram, or the desktop app.", -}; - -export default async function Den() { - const github = await getGithubData(); - const cal = process.env.NEXT_PUBLIC_CAL_URL || "/enterprise#book"; - - return ( - - ); -} diff --git a/ee/apps/landing/app/download/page.tsx b/ee/apps/landing/app/download/page.tsx index c1ec01f1..e7497dfc 100644 --- a/ee/apps/landing/app/download/page.tsx +++ b/ee/apps/landing/app/download/page.tsx @@ -1,11 +1,42 @@ import { SiteFooter } from "../../components/site-footer"; import { SiteNav } from "../../components/site-nav"; +import { StructuredData } from "../../components/structured-data"; import { getGithubData } from "../../lib/github"; +import { baseOpenGraph } from "../../lib/seo"; + +const downloadSchema = { + "@context": "https://schema.org", + "@type": "SoftwareApplication", + name: "OpenWork", + description: + "Open source Claude Cowork alternative. Desktop app for macOS, Windows, and Linux that lets teams use 50+ LLMs with their own provider keys.", + url: "https://openworklabs.com/download", + downloadUrl: "https://github.com/different-ai/openwork/releases/latest", + applicationCategory: "BusinessApplication", + operatingSystem: "macOS, Windows, Linux", + offers: { + "@type": "Offer", + price: "0", + priceCurrency: "USD" + }, + publisher: { + "@type": "Organization", + name: "OpenWork", + url: "https://openworklabs.com" + } +}; export const metadata = { - title: "OpenWork - Download", + title: "Download OpenWork — macOS, Windows, Linux", description: "Download OpenWork desktop for macOS, Windows, and Linux. Includes AUR install instructions and direct package downloads.", + alternates: { + canonical: "/download" + }, + openGraph: { + ...baseOpenGraph, + url: "https://openworklabs.com/download" + } }; export default async function Download() { @@ -15,6 +46,7 @@ export default async function Download() { return (
+ -

macOS

+ macOS

Apple Silicon and Intel builds

-

Windows

+ Windows

x64 MSI installer

-

Linux

+ Linux

AUR, .deb, and .rpm options

diff --git a/ee/apps/landing/app/enterprise/page.tsx b/ee/apps/landing/app/enterprise/page.tsx index dedc911f..8b5133ba 100644 --- a/ee/apps/landing/app/enterprise/page.tsx +++ b/ee/apps/landing/app/enterprise/page.tsx @@ -1,9 +1,18 @@ import { LandingEnterprise } from "../../components/landing-enterprise"; import { getGithubData } from "../../lib/github"; +import { baseOpenGraph } from "../../lib/seo"; export const metadata = { - title: "OpenWork — Enterprise", - description: "Secure hosting for safe, permissioned AI employees." + title: "OpenWork Enterprise — Self-hosted AI agents for teams", + description: + "Deploy shared skills, MCPs, and agent workflows across your org. Self-hosted or managed, 50+ LLM providers, HIPAA / SOC 2 / ISO 27001 / GDPR ready.", + alternates: { + canonical: "/enterprise" + }, + openGraph: { + ...baseOpenGraph, + url: "https://openworklabs.com/enterprise" + } }; export default async function Enterprise() { diff --git a/ee/apps/landing/app/favicon.ico b/ee/apps/landing/app/favicon.ico new file mode 100644 index 00000000..c59a048f Binary files /dev/null and b/ee/apps/landing/app/favicon.ico differ diff --git a/ee/apps/landing/app/feedback/page.tsx b/ee/apps/landing/app/feedback/page.tsx index 74fd8e6d..76b006c7 100644 --- a/ee/apps/landing/app/feedback/page.tsx +++ b/ee/apps/landing/app/feedback/page.tsx @@ -2,10 +2,22 @@ import Link from "next/link"; import { AppFeedbackForm, type AppFeedbackPrefill } from "../../components/app-feedback-form"; import { OpenWorkMark } from "../../components/openwork-mark"; import { SiteFooter } from "../../components/site-footer"; +import { baseOpenGraph } from "../../lib/seo"; export const metadata = { - title: "OpenWork - Feedback", + title: "OpenWork — Feedback", description: "Send app feedback to the OpenWork team with prefilled runtime context.", + alternates: { + canonical: "/feedback" + }, + robots: { + index: false, + follow: true + }, + openGraph: { + ...baseOpenGraph, + url: "https://openworklabs.com/feedback" + } }; type PageProps = { diff --git a/ee/apps/landing/app/icon.png b/ee/apps/landing/app/icon.png new file mode 100644 index 00000000..2780d900 Binary files /dev/null and b/ee/apps/landing/app/icon.png differ diff --git a/ee/apps/landing/app/layout.tsx b/ee/apps/landing/app/layout.tsx index cf7009e4..42cfbc30 100644 --- a/ee/apps/landing/app/layout.tsx +++ b/ee/apps/landing/app/layout.tsx @@ -3,6 +3,17 @@ import { Inter, JetBrains_Mono } from "next/font/google"; import Script from "next/script"; import { BotIdClient } from "botid/client"; import { WebMcpProvider } from "../components/webmcp-provider"; +import { StructuredData } from "../components/structured-data"; + +const organizationSchema = { + "@context": "https://schema.org", + "@type": "Organization", + name: "OpenWork", + legalName: "Different AI", + url: "https://openworklabs.com", + logo: "https://openworklabs.com/openwork-mark.svg", + sameAs: ["https://github.com/different-ai/openwork"] +}; const inter = Inter({ subsets: ["latin"], @@ -18,18 +29,25 @@ const jetbrains = JetBrains_Mono({ export const metadata = { metadataBase: new URL("https://openworklabs.com"), - title: "OpenWork — The open source Claude Cowork alternative", + title: "OpenWork — Open source Claude Cowork alternative for teams", description: "Bring your own model and provider, wire in your tools and context, and ship reusable agent setups across your org — with guardrails built in.", + alternates: { + canonical: "/" + }, + robots: { + index: true, + follow: true + }, openGraph: { + type: "website", + siteName: "OpenWork", + locale: "en_US", images: ["/og-image-clean.png"] }, twitter: { card: "summary_large_image", images: ["/og-image-clean.png"] - }, - icons: { - icon: "/openwork-mark.svg" } }; @@ -46,6 +64,7 @@ export default function RootLayout({ return ( +