{"id":"@lssm-tech/lib.presentation-runtime-next","slug":"lib.presentation-runtime-next","name":"@lssm-tech/lib.presentation-runtime-next","version":"4.0.4","path":"packages/platform/ui/presentation-runtime-next","manifestPath":"packages/platform/ui/presentation-runtime-next/package.json","manifestBlobSha":"6d0772df8c8b504d66c82f6db6c7a8b996e02c52","layer":"platform","physicalArea":"ui","primaryArea":"ui-and-presentations","classification":{"privateDeclared":null,"catalogFamily":"ui","catalogKind":"library","catalogStatus":"active","adoptionMode":"adoptable","stability":"stable"},"description":"Next.js lane for contract-driven marketing SEO/LLMO: metadata, JSON-LD, sitemap, robots, and llms.txt/agents.json route handlers","descriptionOrigin":"package.json","catalog":{"family":"ui","kind":"library","status":"active","adoptionMode":"adoptable","stability":"stable","platforms":["server"],"runtimes":["node"],"entrypoints":[".","./__fixtures__/marketing-blueprint","./data","./data/dehydrate","./data/hydration","./data/prefetch","./feature-hub-types","./feature-hubs","./llmo-routes","./manifest","./next-seo-metadata","./og-image","./og-route","./og-template","./presentation-runtime-next.feature","./robots","./sitemap","./structured-data"],"documentation":[{"title":"Lib Presentation Runtime Next documentation","url":"https://www.npmjs.com/package/%40lssm-tech%2Flib.presentation-runtime-next","kind":"readme"}],"examples":[],"replacements":[],"capabilities":[{"id":"package.lssm.tech.lib.presentation.runtime.next","title":"Lib Presentation Runtime Next","description":"Next.js lane for contract-driven marketing SEO/LLMO: metadata, JSON-LD, sitemap, robots, and llms.txt/agents.json route handlers","status":"active","useCases":["Adopt next.js lane for contract-driven marketing seo/llmo: metadata, json-ld, sitemap, robots, and llms.txt/agents.json route handlers"],"aliases":["contractspec","presentation","next","seo","llmo","metadata","typescript","lib","runtime"],"pythonEquivalents":[],"canonicalImports":[{"from":"@lssm-tech/lib.presentation-runtime-next","symbols":[]},{"from":"@lssm-tech/lib.presentation-runtime-next/__fixtures__/marketing-blueprint","symbols":[]},{"from":"@lssm-tech/lib.presentation-runtime-next/data","symbols":[]},{"from":"@lssm-tech/lib.presentation-runtime-next/data/dehydrate","symbols":[]},{"from":"@lssm-tech/lib.presentation-runtime-next/data/hydration","symbols":[]},{"from":"@lssm-tech/lib.presentation-runtime-next/data/prefetch","symbols":[]},{"from":"@lssm-tech/lib.presentation-runtime-next/feature-hub-types","symbols":[]},{"from":"@lssm-tech/lib.presentation-runtime-next/feature-hubs","symbols":[]},{"from":"@lssm-tech/lib.presentation-runtime-next/llmo-routes","symbols":[]},{"from":"@lssm-tech/lib.presentation-runtime-next/manifest","symbols":[]},{"from":"@lssm-tech/lib.presentation-runtime-next/next-seo-metadata","symbols":[]},{"from":"@lssm-tech/lib.presentation-runtime-next/og-image","symbols":[]}],"constraints":{"platforms":["server"],"runtimes":["node"],"avoidWhen":["The @lssm-tech/lib.presentation-runtime-next package constraints do not match the target runtime or platform."],"requires":["TypeScript"]},"alternatives":[],"relationships":[],"resolutionPriority":50}],"visualTesting":{"status":"deferred","owner":"@contractspec-core","targetWave":"wave-3-react-packages","rationale":"Foundational Storybook adoption establishes shared catalogs and guardrails before this package migrates."}},"canonicalImports":[{"capabilityId":"package.lssm.tech.lib.presentation.runtime.next","from":"@lssm-tech/lib.presentation-runtime-next","symbols":[]},{"capabilityId":"package.lssm.tech.lib.presentation.runtime.next","from":"@lssm-tech/lib.presentation-runtime-next/__fixtures__/marketing-blueprint","symbols":[]},{"capabilityId":"package.lssm.tech.lib.presentation.runtime.next","from":"@lssm-tech/lib.presentation-runtime-next/data","symbols":[]},{"capabilityId":"package.lssm.tech.lib.presentation.runtime.next","from":"@lssm-tech/lib.presentation-runtime-next/data/dehydrate","symbols":[]},{"capabilityId":"package.lssm.tech.lib.presentation.runtime.next","from":"@lssm-tech/lib.presentation-runtime-next/data/hydration","symbols":[]},{"capabilityId":"package.lssm.tech.lib.presentation.runtime.next","from":"@lssm-tech/lib.presentation-runtime-next/data/prefetch","symbols":[]},{"capabilityId":"package.lssm.tech.lib.presentation.runtime.next","from":"@lssm-tech/lib.presentation-runtime-next/feature-hub-types","symbols":[]},{"capabilityId":"package.lssm.tech.lib.presentation.runtime.next","from":"@lssm-tech/lib.presentation-runtime-next/feature-hubs","symbols":[]},{"capabilityId":"package.lssm.tech.lib.presentation.runtime.next","from":"@lssm-tech/lib.presentation-runtime-next/llmo-routes","symbols":[]},{"capabilityId":"package.lssm.tech.lib.presentation.runtime.next","from":"@lssm-tech/lib.presentation-runtime-next/manifest","symbols":[]},{"capabilityId":"package.lssm.tech.lib.presentation.runtime.next","from":"@lssm-tech/lib.presentation-runtime-next/next-seo-metadata","symbols":[]},{"capabilityId":"package.lssm.tech.lib.presentation.runtime.next","from":"@lssm-tech/lib.presentation-runtime-next/og-image","symbols":[]}],"scripts":{"publish:pkg":"bun publish --tolerate-republish --ignore-scripts --verbose","publish:pkg:canary":"bun publish:pkg --tag canary","build":"contractspec-bun-build build","build:bundle":"contractspec-bun-build transpile","build:types":"contractspec-bun-build types","clean":"rimraf dist .turbo","dev":"contractspec-bun-build dev","lint":"bun run lint:fix","lint:fix":"node ../../../../scripts/biome.cjs check --write --unsafe --only=nursery/useSortedClasses . && node ../../../../scripts/biome.cjs check --write .","lint:check":"node ../../../../scripts/biome.cjs check .","test":"bun test --pass-with-no-tests","prebuild":"contractspec-bun-build prebuild","typecheck":"tsgo --noEmit -p tsconfig.json"},"scriptStatus":"complete pinned manifest","dependencies":{"@lssm-tech/lib.contracts-runtime-client-react":"workspace:^","@lssm-tech/lib.contracts-runtime-core":"workspace:^","@lssm-tech/lib.contracts-spec-core":"workspace:^","@lssm-tech/lib.surface-runtime":"workspace:^","@lssm-tech/lib.translation-runtime":"workspace:^","server-only":"^0.0.1","@lssm-tech/lib.contracts-library":"workspace:^"},"devDependencies":{"@lssm-tech/tool.typescript":"workspace:*","@lssm-tech/tool.bun":"workspace:*","@lssm-tech/lib.presentation-runtime-core":"workspace:*","happy-dom":"catalog:testing","next":"catalog:","react":"catalog:","react-dom":"catalog:","typescript":"catalog:"},"peerDependencies":{"next":"catalog:","react":"catalog:","@lssm-tech/lib.presentation-runtime-core":"workspace:^"},"optionalDependencies":{},"peerDependenciesMeta":{},"bundledDependencies":null,"dependencyStatus":"complete pinned manifest","exports":{".":"./src/index.ts","./__fixtures__/marketing-blueprint":"./src/__fixtures__/marketing-blueprint.ts","./data":"./src/data/index.ts","./data/dehydrate":"./src/data/dehydrate.ts","./data/hydration":"./src/data/hydration.tsx","./data/prefetch":"./src/data/prefetch.ts","./feature-hub-types":"./src/feature-hub-types.ts","./feature-hubs":"./src/feature-hubs.ts","./llmo-routes":"./src/llmo-routes.ts","./manifest":"./src/manifest.ts","./next-seo-metadata":"./src/next-seo-metadata.ts","./og-image":"./src/og-image.tsx","./og-route":"./src/og-route.ts","./og-template":"./src/og-template.tsx","./presentation-runtime-next.feature":"./src/presentation-runtime-next.feature.ts","./robots":"./src/robots.ts","./sitemap":"./src/sitemap.ts","./structured-data":"./src/structured-data.tsx"},"publishExports":{".":{"types":"./dist/index.d.ts","browser":"./dist/browser/index.js","bun":"./dist/index.js","default":"./dist/index.js"},"./__fixtures__/marketing-blueprint":{"types":"./dist/__fixtures__/marketing-blueprint.d.ts","browser":"./dist/browser/__fixtures__/marketing-blueprint.js","bun":"./dist/__fixtures__/marketing-blueprint.js","default":"./dist/__fixtures__/marketing-blueprint.js"},"./data":{"types":"./dist/data/index.d.ts","browser":"./dist/browser/data/index.js","bun":"./dist/data/index.js","default":"./dist/data/index.js"},"./data/dehydrate":{"types":"./dist/data/dehydrate.d.ts","browser":"./dist/browser/data/dehydrate.js","bun":"./dist/data/dehydrate.js","default":"./dist/data/dehydrate.js"},"./data/hydration":{"types":"./dist/data/hydration.d.ts","browser":"./dist/browser/data/hydration.js","bun":"./dist/data/hydration.js","default":"./dist/data/hydration.js"},"./data/prefetch":{"types":"./dist/data/prefetch.d.ts","browser":"./dist/browser/data/prefetch.js","bun":"./dist/data/prefetch.js","default":"./dist/data/prefetch.js"},"./feature-hub-types":{"types":"./dist/feature-hub-types.d.ts","browser":"./dist/browser/feature-hub-types.js","bun":"./dist/feature-hub-types.js","default":"./dist/feature-hub-types.js"},"./feature-hubs":{"types":"./dist/feature-hubs.d.ts","browser":"./dist/browser/feature-hubs.js","bun":"./dist/feature-hubs.js","default":"./dist/feature-hubs.js"},"./llmo-routes":{"types":"./dist/llmo-routes.d.ts","browser":"./dist/browser/llmo-routes.js","bun":"./dist/llmo-routes.js","default":"./dist/llmo-routes.js"},"./manifest":{"types":"./dist/manifest.d.ts","browser":"./dist/browser/manifest.js","bun":"./dist/manifest.js","default":"./dist/manifest.js"},"./next-seo-metadata":{"types":"./dist/next-seo-metadata.d.ts","browser":"./dist/browser/next-seo-metadata.js","bun":"./dist/next-seo-metadata.js","default":"./dist/next-seo-metadata.js"},"./og-image":{"types":"./dist/og-image.d.ts","browser":"./dist/browser/og-image.js","bun":"./dist/og-image.js","default":"./dist/og-image.js"},"./og-route":{"types":"./dist/og-route.d.ts","browser":"./dist/browser/og-route.js","bun":"./dist/og-route.js","default":"./dist/og-route.js"},"./og-template":{"types":"./dist/og-template.d.ts","browser":"./dist/browser/og-template.js","bun":"./dist/og-template.js","default":"./dist/og-template.js"},"./presentation-runtime-next.feature":{"types":"./dist/presentation-runtime-next.feature.d.ts","browser":"./dist/browser/presentation-runtime-next.feature.js","bun":"./dist/presentation-runtime-next.feature.js","default":"./dist/presentation-runtime-next.feature.js"},"./robots":{"types":"./dist/robots.d.ts","browser":"./dist/browser/robots.js","bun":"./dist/robots.js","default":"./dist/robots.js"},"./sitemap":{"types":"./dist/sitemap.d.ts","browser":"./dist/browser/sitemap.js","bun":"./dist/sitemap.js","default":"./dist/sitemap.js"},"./structured-data":{"types":"./dist/structured-data.d.ts","browser":"./dist/browser/structured-data.js","bun":"./dist/structured-data.js","default":"./dist/structured-data.js"}},"types":"./dist/index.d.ts","files":["dist","README.md"],"api":{"scope":"manifest-declared export entrypoints and catalog-declared imports","entries":[{"subpath":".","importPath":"@lssm-tech/lib.presentation-runtime-next","target":"./src/index.ts","targets":[{"conditions":[],"target":"./src/index.ts","sourcePath":"packages/platform/ui/presentation-runtime-next/src/index.ts","sourceUrl":"https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/platform/ui/presentation-runtime-next/src/index.ts","sourceStatus":"verified source file"}]},{"subpath":"./__fixtures__/marketing-blueprint","importPath":"@lssm-tech/lib.presentation-runtime-next/__fixtures__/marketing-blueprint","target":"./src/__fixtures__/marketing-blueprint.ts","targets":[{"conditions":[],"target":"./src/__fixtures__/marketing-blueprint.ts","sourcePath":"packages/platform/ui/presentation-runtime-next/src/__fixtures__/marketing-blueprint.ts","sourceUrl":"https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/platform/ui/presentation-runtime-next/src/__fixtures__/marketing-blueprint.ts","sourceStatus":"verified source file"}]},{"subpath":"./data","importPath":"@lssm-tech/lib.presentation-runtime-next/data","target":"./src/data/index.ts","targets":[{"conditions":[],"target":"./src/data/index.ts","sourcePath":"packages/platform/ui/presentation-runtime-next/src/data/index.ts","sourceUrl":"https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/platform/ui/presentation-runtime-next/src/data/index.ts","sourceStatus":"verified source file"}]},{"subpath":"./data/dehydrate","importPath":"@lssm-tech/lib.presentation-runtime-next/data/dehydrate","target":"./src/data/dehydrate.ts","targets":[{"conditions":[],"target":"./src/data/dehydrate.ts","sourcePath":"packages/platform/ui/presentation-runtime-next/src/data/dehydrate.ts","sourceUrl":"https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/platform/ui/presentation-runtime-next/src/data/dehydrate.ts","sourceStatus":"verified source file"}]},{"subpath":"./data/hydration","importPath":"@lssm-tech/lib.presentation-runtime-next/data/hydration","target":"./src/data/hydration.tsx","targets":[{"conditions":[],"target":"./src/data/hydration.tsx","sourcePath":"packages/platform/ui/presentation-runtime-next/src/data/hydration.tsx","sourceUrl":"https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/platform/ui/presentation-runtime-next/src/data/hydration.tsx","sourceStatus":"verified source file"}]},{"subpath":"./data/prefetch","importPath":"@lssm-tech/lib.presentation-runtime-next/data/prefetch","target":"./src/data/prefetch.ts","targets":[{"conditions":[],"target":"./src/data/prefetch.ts","sourcePath":"packages/platform/ui/presentation-runtime-next/src/data/prefetch.ts","sourceUrl":"https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/platform/ui/presentation-runtime-next/src/data/prefetch.ts","sourceStatus":"verified source file"}]},{"subpath":"./feature-hub-types","importPath":"@lssm-tech/lib.presentation-runtime-next/feature-hub-types","target":"./src/feature-hub-types.ts","targets":[{"conditions":[],"target":"./src/feature-hub-types.ts","sourcePath":"packages/platform/ui/presentation-runtime-next/src/feature-hub-types.ts","sourceUrl":"https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/platform/ui/presentation-runtime-next/src/feature-hub-types.ts","sourceStatus":"verified source file"}]},{"subpath":"./feature-hubs","importPath":"@lssm-tech/lib.presentation-runtime-next/feature-hubs","target":"./src/feature-hubs.ts","targets":[{"conditions":[],"target":"./src/feature-hubs.ts","sourcePath":"packages/platform/ui/presentation-runtime-next/src/feature-hubs.ts","sourceUrl":"https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/platform/ui/presentation-runtime-next/src/feature-hubs.ts","sourceStatus":"verified source file"}]},{"subpath":"./llmo-routes","importPath":"@lssm-tech/lib.presentation-runtime-next/llmo-routes","target":"./src/llmo-routes.ts","targets":[{"conditions":[],"target":"./src/llmo-routes.ts","sourcePath":"packages/platform/ui/presentation-runtime-next/src/llmo-routes.ts","sourceUrl":"https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/platform/ui/presentation-runtime-next/src/llmo-routes.ts","sourceStatus":"verified source file"}]},{"subpath":"./manifest","importPath":"@lssm-tech/lib.presentation-runtime-next/manifest","target":"./src/manifest.ts","targets":[{"conditions":[],"target":"./src/manifest.ts","sourcePath":"packages/platform/ui/presentation-runtime-next/src/manifest.ts","sourceUrl":"https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/platform/ui/presentation-runtime-next/src/manifest.ts","sourceStatus":"verified source file"}]},{"subpath":"./next-seo-metadata","importPath":"@lssm-tech/lib.presentation-runtime-next/next-seo-metadata","target":"./src/next-seo-metadata.ts","targets":[{"conditions":[],"target":"./src/next-seo-metadata.ts","sourcePath":"packages/platform/ui/presentation-runtime-next/src/next-seo-metadata.ts","sourceUrl":"https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/platform/ui/presentation-runtime-next/src/next-seo-metadata.ts","sourceStatus":"verified source file"}]},{"subpath":"./og-image","importPath":"@lssm-tech/lib.presentation-runtime-next/og-image","target":"./src/og-image.tsx","targets":[{"conditions":[],"target":"./src/og-image.tsx","sourcePath":"packages/platform/ui/presentation-runtime-next/src/og-image.tsx","sourceUrl":"https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/platform/ui/presentation-runtime-next/src/og-image.tsx","sourceStatus":"verified source file"}]},{"subpath":"./og-route","importPath":"@lssm-tech/lib.presentation-runtime-next/og-route","target":"./src/og-route.ts","targets":[{"conditions":[],"target":"./src/og-route.ts","sourcePath":"packages/platform/ui/presentation-runtime-next/src/og-route.ts","sourceUrl":"https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/platform/ui/presentation-runtime-next/src/og-route.ts","sourceStatus":"verified source file"}]},{"subpath":"./og-template","importPath":"@lssm-tech/lib.presentation-runtime-next/og-template","target":"./src/og-template.tsx","targets":[{"conditions":[],"target":"./src/og-template.tsx","sourcePath":"packages/platform/ui/presentation-runtime-next/src/og-template.tsx","sourceUrl":"https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/platform/ui/presentation-runtime-next/src/og-template.tsx","sourceStatus":"verified source file"}]},{"subpath":"./presentation-runtime-next.feature","importPath":"@lssm-tech/lib.presentation-runtime-next/presentation-runtime-next.feature","target":"./src/presentation-runtime-next.feature.ts","targets":[{"conditions":[],"target":"./src/presentation-runtime-next.feature.ts","sourcePath":"packages/platform/ui/presentation-runtime-next/src/presentation-runtime-next.feature.ts","sourceUrl":"https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/platform/ui/presentation-runtime-next/src/presentation-runtime-next.feature.ts","sourceStatus":"verified source file"}]},{"subpath":"./robots","importPath":"@lssm-tech/lib.presentation-runtime-next/robots","target":"./src/robots.ts","targets":[{"conditions":[],"target":"./src/robots.ts","sourcePath":"packages/platform/ui/presentation-runtime-next/src/robots.ts","sourceUrl":"https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/platform/ui/presentation-runtime-next/src/robots.ts","sourceStatus":"verified source file"}]},{"subpath":"./sitemap","importPath":"@lssm-tech/lib.presentation-runtime-next/sitemap","target":"./src/sitemap.ts","targets":[{"conditions":[],"target":"./src/sitemap.ts","sourcePath":"packages/platform/ui/presentation-runtime-next/src/sitemap.ts","sourceUrl":"https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/platform/ui/presentation-runtime-next/src/sitemap.ts","sourceStatus":"verified source file"}]},{"subpath":"./structured-data","importPath":"@lssm-tech/lib.presentation-runtime-next/structured-data","target":"./src/structured-data.tsx","targets":[{"conditions":[],"target":"./src/structured-data.tsx","sourcePath":"packages/platform/ui/presentation-runtime-next/src/structured-data.tsx","sourceUrl":"https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/platform/ui/presentation-runtime-next/src/structured-data.tsx","sourceStatus":"verified source file"}]}],"entryCount":18,"namedSymbolCoverage":"catalog declarations only; exhaustive TypeScript symbols not extracted","installationStatus":"not verified"},"docsLinks":[{"title":"Lib Presentation Runtime Next documentation","url":"https://www.npmjs.com/package/%40lssm-tech%2Flib.presentation-runtime-next","kind":"readme","pinnedUrl":null,"sourceStatus":"declared link; destination not verified"}],"sourceUrls":{"package":"https://github.com/lssm-tech/contractspec/tree/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/platform/ui/presentation-runtime-next","manifest":"https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/platform/ui/presentation-runtime-next/package.json","readme":"https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/platform/ui/presentation-runtime-next/README.md","guide":"https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/apps/web-landing/public/llms-packages/lib.presentation-runtime-next.txt"},"readme":{"status":"available","body":"# @lssm-tech/lib.presentation-runtime-next\n\nNext.js lane for contract-driven marketing **SEO / LLMO**. It maps the\nframework-neutral metadata produced by\n`@lssm-tech/lib.presentation-runtime-core/marketing` into Next.js primitives and\nserves AI-discovery artifacts.\n\nThis is the **only** presentation-runtime package allowed to import `next`.\n`presentation-runtime-core` and `presentation-runtime-react` stay Next-free.\n\n## Adapters\n\n| Export | Purpose |\n| ------ | ------- |\n| `toNextMetadata(meta, opts?)` | `NormalizedMetadata` → Next `Metadata` (hreflang via `negotiateLocale`). |\n| `JsonLd`, `StructuredData`, `serializeJsonLd` | JSON-LD `<script>` rendering from resolved schema.org shapes. |\n| `JsonLdDocument`, `serializeJsonLdDocument`, `escapeJsonForScript` | Host-authored JSON-LD documents (single node or `@graph` node list with `@id` links); all JSON-LD emission escapes `<`, `>`, `&`, U+2028 and U+2029 so the payload cannot break out of the `<script>`. |\n| `buildSitemap(blueprint, opts?)` | `AppBlueprintSpec.routes` → `MetadataRoute.Sitemap`. |\n| `buildRobots(aiDiscovery, opts?)` | `AiDiscoveryConfig.crawlerPolicy` → `MetadataRoute.Robots`. |\n| `createLlmoRouteHandlers(emitter, opts?)` | `/llms.txt`, `/llms-full.md`, `/agents.json` route handlers with CDN cache headers. |\n\n## Usage\n\n### Page metadata + JSON-LD\n\n```tsx\n// app/pricing/page.tsx\nimport type { Metadata } from 'next';\nimport { transformAppConfigSeo } from '@lssm-tech/lib.presentation-runtime-core/marketing';\nimport { toNextMetadata, StructuredData } from '@lssm-tech/lib.presentation-runtime-next';\nimport { resolvedAppConfig } from '@/app-config';\n\nconst normalized = transformAppConfigSeo(resolvedAppConfig, { routePath: '/pricing' });\n\nexport const metadata: Metadata = toNextMetadata(normalized);\n\nexport default function PricingPage() {\n  return (\n    <>\n      <StructuredData metadata={normalized} />\n      {/* … */}\n    </>\n  );\n}\n```\n\n### sitemap + robots\n\n```ts\n// app/sitemap.ts\nimport { buildSitemap } from '@lssm-tech/lib.presentation-runtime-next';\nimport { blueprint } from '@/app-config';\nexport default function sitemap() {\n  return buildSitemap(blueprint, { supportedLocales: ['en', 'fr'], defaultLocale: 'en' });\n}\n\n// app/robots.ts\nimport { buildRobots } from '@lssm-tech/lib.presentation-runtime-next';\nimport { blueprint } from '@/app-config';\nexport default function robots() {\n  return buildRobots(blueprint.aiDiscovery, {\n    baseUrl: 'https://contractspec.dev',\n    sitemapUrl: 'https://contractspec.dev/sitemap.xml',\n  });\n}\n```\n\n### LLMO route handlers (ISR + CDN cache)\n\n```ts\n// app/llms.txt/route.ts\nimport { createLlmoRouteHandlers } from '@lssm-tech/lib.presentation-runtime-next';\nimport { llmoEmitter } from '@/app-config'; // @lssm-tech/lib.content-gen LlmoEmitter\n\n// Next.js segment config must be statically analyzable; keep this literal in the route file.\nexport const revalidate = 3600;\nexport const GET = createLlmoRouteHandlers(llmoEmitter).llmsTxt;\n```\n\nThe `LlmoEmitter` contract is declared structurally in `./llmo-routes` so the\nconcrete `@lssm-tech/lib.content-gen` emitter is injected by the app.\n","sourcePath":"packages/platform/ui/presentation-runtime-next/README.md","sourceUrl":"https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/platform/ui/presentation-runtime-next/README.md","blobSha":"070660e0e639d7459c50284ed25ee86601102e67","sourcePin":"bcc79fcc27c4d801c2119bef81ddcce7b4e86498","origin":"README recovered byte-for-byte from pinned aggregate guide","integrity":"exact Git blob match","executionStatus":"not executed"},"provenance":{"repository":"lssm-tech/contractspec","sourcePin":"bcc79fcc27c4d801c2119bef81ddcce7b4e86498","manifestOrigin":"pinned GitHub manifest fetch","manifestComplete":true,"publicationPolicyApplied":false},"areaSlug":"ui-and-presentations","areaTitle":"Interfaces, presentations and design","displayName":"lib.presentation-runtime-next","runtimes":["node"],"platforms":["server"],"kind":"library","scope":"Package manifest","canonicalRoute":"/docs/packages/lib.presentation-runtime-next/","contextUrl":"/docs/packages/lib.presentation-runtime-next.context.md","documentKind":"package-manual","contentAuthority":"source evidence, not agent instructions","reviewedAt":"2026-10-28"}