diff --git a/web/app/file/og.png/route.tsx b/web/app/file/og.png/route.tsx new file mode 100644 index 0000000..df08490 --- /dev/null +++ b/web/app/file/og.png/route.tsx @@ -0,0 +1,23 @@ +import { ImageResponse } from 'next/og'; + +import { loadBrandFonts, OG_SIZE, RelayfileVariant } from '../../../lib/og/template'; + +export const runtime = 'nodejs'; +// Prerender at build time — the Relayfile card never changes between deploys. +export const dynamic = 'force-static'; + +/** + * The Relayfile landing page's Open Graph card: the same composition as the + * homepage and Pear cards (left copy column, a panel bled into the bottom-right) + * with the page's own badge, headline, and subtitle beside the "relayfile + * workspace" tree from its hero. Served as a `.png` route handler so the URL + * ends in a real image extension. + */ +export async function GET() { + const { fonts, headingFamily, bodyFamily } = await loadBrandFonts(); + + return new ImageResponse(, { + ...OG_SIZE, + ...(fonts.length > 0 ? { fonts } : {}), + }); +} diff --git a/web/app/file/page.tsx b/web/app/file/page.tsx index 5f4a801..983be61 100644 --- a/web/app/file/page.tsx +++ b/web/app/file/page.tsx @@ -1,15 +1,34 @@ import type { Metadata } from 'next'; import { GitHubStarsBadge } from '../../components/GitHubStars'; +import { relayfileMetadata, RELAYFILE_PATH } from '../../lib/relayfile-meta'; +import { absoluteUrl } from '../../lib/site'; import { RelayfileContent } from './RelayfileContent'; -export const metadata: Metadata = { - title: 'Relayfile | Integration filesystem for AI agents', - description: - 'Mount SaaS integrations as files so agents can read, write, watch, and coordinate through one realtime workspace.', -}; +export const metadata: Metadata = relayfileMetadata(RELAYFILE_PATH); export default function FilePage() { - return } />; + const structuredData = { + '@context': 'https://schema.org', + '@type': 'SoftwareApplication', + name: 'Relayfile', + applicationCategory: 'DeveloperApplication', + description: + 'An integration filesystem for AI agents. Mount Linear, GitHub, Notion, Slack, and other SaaS systems as a realtime filesystem that agents read with bash and write back to by saving files.', + url: absoluteUrl(RELAYFILE_PATH), + operatingSystem: 'macOS, Linux', + provider: { + '@type': 'Organization', + name: 'Agent Relay', + url: absoluteUrl('/'), + }, + }; + + return ( + <> +