diff --git a/web/app/auth/RelayauthContent.tsx b/web/app/auth/RelayauthContent.tsx index 017f6c7..0ffec38 100644 --- a/web/app/auth/RelayauthContent.tsx +++ b/web/app/auth/RelayauthContent.tsx @@ -69,7 +69,7 @@ const whyCards = [ const getStartedSteps = [ { title: 'Create an identity', - code: `curl -X POST https://api.relayauth.dev/v1/identities \\ + code: `curl -X POST "$RELAYAUTH_BASE_URL/v1/identities" \\ -H "content-type: application/json" \\ -d '{ "name": "billing-bot", @@ -80,7 +80,7 @@ const getStartedSteps = [ }, { title: 'Issue a token', - code: `curl -X POST https://api.relayauth.dev/v1/tokens \\ + code: `curl -X POST "$RELAYAUTH_BASE_URL/v1/tokens" \\ -H "content-type: application/json" \\ -d '{ "identity_id": "agent_8x2k", @@ -90,7 +90,7 @@ const getStartedSteps = [ }, { title: 'Verify at the edge', - code: `curl https://api.relayauth.dev/.well-known/jwks.json + code: `curl "$RELAYAUTH_BASE_URL/.well-known/jwks.json" # Then validate locally and enforce: # stripe:orders:read`, @@ -150,7 +150,7 @@ auth.authorize( token=token["access_token"], scope="stripe:orders:read", )`, - curl: `curl -X POST https://api.relayauth.dev/v1/identities \\ + curl: `curl -X POST "$RELAYAUTH_BASE_URL/v1/identities" \\ -H "authorization: Bearer $RELAYAUTH_API_KEY" \\ -H "content-type: application/json" \\ -d '{ @@ -160,7 +160,7 @@ auth.authorize( "sponsor_id": "user_jane" }' -curl -X POST https://api.relayauth.dev/v1/tokens \\ +curl -X POST "$RELAYAUTH_BASE_URL/v1/tokens" \\ -H "authorization: Bearer $RELAYAUTH_API_KEY" \\ -H "content-type: application/json" \\ -d '{ @@ -169,7 +169,7 @@ curl -X POST https://api.relayauth.dev/v1/tokens \\ "ttl": "1h" }' -curl https://api.relayauth.dev/.well-known/jwks.json`, +curl "$RELAYAUTH_BASE_URL/.well-known/jwks.json"`, }; function highlight(code: string, tab: SdkTab) { diff --git a/web/app/file/RelayfileContent.tsx b/web/app/file/RelayfileContent.tsx index 724c3a4..3fc520f 100644 --- a/web/app/file/RelayfileContent.tsx +++ b/web/app/file/RelayfileContent.tsx @@ -162,13 +162,13 @@ await run(agent, 'Review /digests/yesterday.md and file Linear follow-ups.');`, curl: { label: 'cURL', language: 'curl', - code: `curl "https://api.agentrelay.com/relayfile/v1/workspaces/rw_123/fs/tree?path=/" \\ + code: `curl "https://file.agentrelay.com/v1/workspaces/rw_123/fs/tree?path=/" \\ -H "authorization: Bearer $RELAYFILE_TOKEN" -curl "https://api.agentrelay.com/relayfile/v1/workspaces/rw_123/fs/file?path=/digests/yesterday.md" \\ +curl "https://file.agentrelay.com/v1/workspaces/rw_123/fs/file?path=/digests/yesterday.md" \\ -H "authorization: Bearer $RELAYFILE_TOKEN" -curl -X PUT "https://api.agentrelay.com/relayfile/v1/workspaces/rw_123/fs/file?path=/linear/issues/AGE-12.json" \\ +curl -X PUT "https://file.agentrelay.com/v1/workspaces/rw_123/fs/file?path=/linear/issues/AGE-12.json" \\ -H "authorization: Bearer $RELAYFILE_TOKEN" \\ -H "content-type: application/json" \\ -d '{"contentType":"application/json","content":"{\\"state\\":\\"In Review\\"}"}'`, diff --git a/web/app/layout.tsx b/web/app/layout.tsx index 1d8b277..0dd8e93 100644 --- a/web/app/layout.tsx +++ b/web/app/layout.tsx @@ -4,7 +4,7 @@ import { Geist_Mono, Inter, Sora } from 'next/font/google'; import type { ReactNode } from 'react'; import { defaultOgImage } from '../lib/og-meta'; -import { POSTHOG_HOST, SITE_URL } from '../lib/site'; +import { absoluteUrl, POSTHOG_HOST, SITE_EMAIL, SITE_NAME, SITE_URL } from '../lib/site'; import { WebsitePostHogPageView } from './PostHogPageView'; import './globals.css'; @@ -62,6 +62,53 @@ export const metadata: Metadata = { }, }; +// Site-wide structured data. Individual pages add their own Article/Service/ +// CollectionPage nodes and reference these two by @id, so an agent reading any +// single page still resolves the publisher and the site root. +const siteStructuredData = { + '@context': 'https://schema.org', + '@graph': [ + { + '@type': 'Organization', + '@id': `${SITE_URL}/#organization`, + name: SITE_NAME, + url: SITE_URL, + email: SITE_EMAIL, + logo: { + '@type': 'ImageObject', + url: absoluteUrl('/agent-relay-logo-white.svg'), + }, + description: + 'Agent Relay is the messaging layer for AI agents: channels, DMs, durable delivery, event listeners, and typed actions for any agent runtime.', + sameAs: [ + 'https://github.com/agentworkforce/relay', + 'https://twitter.com/agent_relay', + 'https://discord.gg/RJGE7CHV', + ], + }, + { + '@type': 'WebSite', + '@id': `${SITE_URL}/#website`, + name: SITE_NAME, + url: SITE_URL, + inLanguage: 'en-US', + publisher: { '@id': `${SITE_URL}/#organization` }, + }, + { + '@type': 'SoftwareApplication', + '@id': `${SITE_URL}/#software`, + name: SITE_NAME, + url: SITE_URL, + applicationCategory: 'DeveloperApplication', + operatingSystem: 'Any', + publisher: { '@id': `${SITE_URL}/#organization` }, + description: + 'Add channels, DMs, durable delivery, event listeners, and Zod-typed actions to any agent runtime.', + softwareHelp: { '@type': 'CreativeWork', url: absoluteUrl('/docs') }, + }, + ], +}; + export default function RootLayout({ children }: { children: ReactNode }) { const postHogKey = process.env.NEXT_PUBLIC_POSTHOG_KEY; const content = postHogKey ? ( @@ -83,7 +130,28 @@ export default function RootLayout({ children }: { children: ReactNode }) { return ( + + {/* Machine-readable mirrors of this site, advertised on every page so an + agent that lands anywhere can find the plain-text and feed formats. */} + + + + +