Files
openwork/ee/apps/landing/lib/agent-markdown.ts
Jan Carbonell 8d0414bd25 feat(landing): SEO metadata, JSON-LD, H1 fixes, manifest (#1493)
* feat(landing): SEO metadata, JSON-LD, H1 fixes, manifest

Raises the site's traditional SEO to match its strong agent-readiness
foundations (llms.txt, api-catalog, markdown negotiation).

Metadata:
- Root layout: canonical, og:type/siteName/locale, explicit robots
- Per-page canonical + openGraph.url on every route
- Rewritten titles/descriptions for /pricing, /enterprise, /den, /download
  (previously 14-21 char titles and 51-73 char descriptions)
- /feedback and /starter-success marked noindex,follow
- /feedback removed from sitemap; /privacy and /terms demoted to 0.3
- Title dash normalized to em-dash site-wide

Headings:
- /den gains a real <h1> (was <h2> only — a11y + SEO bug)
- /enterprise H1 rewritten to be enterprise-specific (was a dup of home)
- /pricing H1 enriched; tier names promoted to <h2> in pricing-grid
- /download nav-card duplicate H2s demoted to spans
- lib/agent-markdown.ts H1s realigned with HTML for agent parity

Structured data:
- New components/structured-data.tsx helper
- Organization on every page (root)
- SoftwareApplication on / and /download
- Product with three Offers on /pricing

Manifest & perf:
- New app/manifest.ts
- Enterprise hero: 12MB PNG -> 1.1MB JPEG (1600px q70)
  Old PNG left in public/ for a follow-up cleanup commit

* chore(landing): remove unused /den marketing page

Deletes the /den route and its components (LandingDen, DenHero) along
with every internal reference. The cloud product is still linked from
nav + footer, pointing at https://app.openworklabs.com.

- Removed from sitemap.ts, middleware.ts matcher, and agent-markdown
  (both the markdown twin and the "Den (team workspace)" home mention)
- Removed from llms.txt routing list and site map
- Footer "Cloud" link now points to the external app (matches nav)
- Nav internal key renamed from "den" to "cloud" and type union updated
- WebMCP navigate_to destinations no longer advertise "den"

api-catalog still references "OpenWork Den API" since that's the API
product name, not the marketing page — untouched.

* fix(landing): point nav + footer Cloud link at /cloud redirect

Previous removal of /den hardcoded the external app URL into the nav
and footer. Switch to the /cloud internal path so the existing cloud
redirect is the single source of truth (and works consistently with
the rest of the internal links).

* docs(landing): restore Cloud mentions in llms.txt and agent-markdown

The previous /den removal also stripped every Cloud mention from the
agent-facing text. Restore them pointing at /cloud (which redirects to
https://app.openworklabs.com) so agents can still route users to the
hosted workspace.

* fix(landing): link Cloud directly to app.openworklabs.com, not /cloud

There's no /cloud route on the marketing site — the hosted app lives
at https://app.openworklabs.com. Point every Cloud link (nav, footer,
llms.txt, agent-markdown, WebMCP) at the real URL.

* feat(landing): replace Trust details link with Security Review CTA

The old small Trust details text link under the Book a call button got
lost. Surface it as a proper secondary CTA next to Book a call, and
rename to Security Review to set expectations for enterprise buyers.

Also updates the enterprise markdown twin to mirror the label.

* fix(landing): preserve og:type/siteName/locale/images on pages overriding openGraph

Next.js replaces (not merges) the openGraph object across layout/page
boundaries. Earlier per-page metadata added only og:url, which silently
wiped og:type, og:siteName, og:locale, and og:image off every page that
did so — exactly the fields the root layout relied on for defaults.

Introduce lib/seo.ts with a baseOpenGraph constant and spread it into
every per-page openGraph override. Caught by running the PR's test plan
against the dev server: 12 failing checks → 0 after this fix.

* feat(landing): rasterize SVG into favicon.ico + PNG icon set

Adds proper raster icons for browsers/OSes that don't render SVG
favicons (older Safari, Android home-screen, Windows taskbar):

- app/favicon.ico — 32×32, PNG-in-ICO container
- app/icon.png — 192×192
- app/apple-icon.png — 180×180

Uses Next.js App Router icon-file convention — Next auto-generates the
<link rel="icon"> / <link rel="apple-touch-icon"> tags, so the
manual icons: metadata block in app/layout.tsx is removed.

Manifest updated to advertise the 192×192 PNG (the Android PWA pick)
alongside the 180 apple-icon and the SVG mark.

All three PNGs generated from public/openwork-mark.svg with sharp,
centered on a white square canvas with ~10% padding so the mark
doesn't bleed to the edges at any size. Generator script at
/tmp/generate-favicons.mjs (not committed) — re-run any time the
source SVG changes.

* fix(landing): match /enterprise H1 styling + copy to /

The /enterprise hero H1 used slightly different Tailwind classes (mb-6,
leading-[1.05]) than the homepage H1 (mb-5, leading-[1.1]), giving a
visibly different type rhythm. Align to the home page classes.

Copy updated to 'A privacy-first alternative to Claude Cowork for your
org' — clearer positioning than 'OpenWork for the enterprise'. Mirrored
in the agent-markdown enterprise twin for parity.

* fix(landing): use 'organization' not 'org' in /enterprise H1

* fix(landing): restore original /enterprise hero subhead copy

* fix(landing): open Docs in a new tab from the main nav

Footer's Docs link already opens in a new tab; the top nav didn't. Add
an explicit newTab flag to the nav items array and honor it in both
the desktop and mobile menus so visitors keep the marketing tab open
while reading docs.
2026-04-19 10:31:57 -07:00

157 lines
5.1 KiB
TypeScript

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.
## What it is
- Desktop app (macOS, Windows, Linux) — GUI for OpenCode
- 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
- Free and open source
## Primary calls-to-action
- **Try it free** — [Download the desktop app](https://openworklabs.com/download)
- **Hosted cloud workers** — [Pricing](https://openworklabs.com/pricing) (\\$50/mo per worker)
- **Sign in to the hosted workspace** — [Cloud](https://app.openworklabs.com)
- **SSO / audit / procurement** — [Enterprise](https://openworklabs.com/enterprise)
- **Docs** — [openworklabs.com/docs](https://openworklabs.com/docs)
## For agents
- Agent skills index — \`/.well-known/agent-skills/index.json\`
- llms.txt — \`/llms.txt\`
- API catalog (RFC 9727) — \`/.well-known/api-catalog\`
- Sitemap — \`/sitemap.xml\`
Backed by Y Combinator.
`
const pricing = `# OpenWork pricing — free, team, and enterprise
> OpenWork has three tiers: free open-source desktop, \\$50/mo Team Starter, and custom Enterprise.
## Solo — \\$0
- Open-source desktop app
- macOS, Windows, Linux downloads
- Bring your own provider keys
- Free forever
- CTA: [Download](https://openworklabs.com/download)
## Team Starter — \\$50 / month
- 5 seats included
- API access
- Skill Hub Manager
- Bring your own LLM keys, distributed to your team
- CTA: [Start team plan](https://app.openworklabs.com/checkout)
## Enterprise — Custom pricing
- Enterprise rollout support
- Deployment guidance
- Custom commercial terms
- For org-wide rollout and custom terms
- CTA: [Talk to us](https://openworklabs.com/enterprise#book)
Prices exclude taxes.
`
const enterprise = `# A privacy-first alternative to Claude Cowork for your organization
> The open-source Claude Cowork alternative — self-hosted, permissioned, and compliance-ready. SSO, audit, custom deployment, and procurement support.
## What Enterprise includes
- Enterprise rollout support and deployment guidance
- Custom commercial terms
- SSO / SAML integration
- Audit logs and policy controls
- Named security contact and incident response
## Deployment models
- Self-hosted desktop app — data stays local, bring your own keys
- Cloud workers — managed by OpenWork, sandbox infrastructure via Daytona (EU)
## Next step
- [Book a call](https://openworklabs.com/enterprise#book)
- [Security Review](https://openworklabs.com/trust) — data handling, subprocessors, and incident SLA
- See [Pricing](https://openworklabs.com/pricing) for tier comparison
`
const download = `# Download OpenWork
> Desktop app for macOS, Windows, and Linux. Latest release published on GitHub.
## macOS
- **Apple Silicon (M-series)** — recommended for M1/M2/M3/M4. \`.dmg\`
- **Intel (x64)** — for Intel-based Macs. \`.dmg\`
## Windows
- **x64** — MSI installer
## Linux
- **Arch / AUR** — \`yay -S openwork\` (or \`paru -S openwork\`)
- **Ubuntu / Debian** — \`.deb\` for x64 and arm64
- **Fedora / RHEL / openSUSE** — \`.rpm\` for x64 and arm64
Direct download URLs resolve from the latest GitHub release. Browse all assets at [github.com/openworklabs/openwork/releases/latest](https://github.com/openworklabs/openwork/releases/latest).
## After installing
Once the desktop app is running, use the [workspace-guide skill](https://openworklabs.com/.well-known/agent-skills/workspace-guide/SKILL.md) for first-run orientation.
`
const trust = `# Trust & Security
> How OpenWork handles data, what subprocessors are involved, and how to reach the security team.
## Key facts
- **Deployment** — self-hosted desktop app on your machines
- **Data storage** — local-only, nothing leaves your machine in desktop mode
- **LLM keys** — bring your own, sent directly to your provider
- **Telemetry** — none in desktop mode; opt-in feedback only
- **Incident SLA** — 72hr notify, 3-day ack, 7-day triage
- **Subprocessors** — 5 named vendors (cloud & website only)
## Data handling
| Data type | Self-hosted | Cloud |
|---|---|---|
| Source code | Local only | Accessed at runtime via your LLM provider; not stored |
| LLM API keys | Local keychain / env vars | Held by your LLM provider, not by OpenWork |
| Prompts & responses | Local only | Sent to your LLM provider; not logged by OpenWork |
| Usage telemetry | None | Anonymous via PostHog; can be disabled |
| Authentication | Your SSO / SAML | Google or GitHub OAuth |
## Subprocessors
- PostHog — analytics (US/EU)
- Polar — billing (US)
- Google — OAuth (US)
- GitHub — OAuth (US)
- Daytona — cloud sandbox infrastructure (EU)
## Security contact
Omar McAdam — team+security@openworklabs.com
`
export const agentMarkdown: Record<string, string> = {
"/": home,
"/pricing": pricing,
"/enterprise": enterprise,
"/download": download,
"/trust": trust,
}
export const agentMarkdownRoutes = Object.keys(agentMarkdown)