From 81036c3e5585ec2be434f06a973dad9af37d55ab Mon Sep 17 00:00:00 2001 From: Viljami + Claude Date: Tue, 20 Oct 2026 05:50:13 +0000 Subject: [PATCH 1/5] docs: add answer-first descriptions to pages whose auto excerpt was a link label 60 pages had no frontmatter description, so Docusaurus used the first paragraph as meta description, which for most of them is a link row such as "[API Docs]" or " ". Each description is taken from the page's own intro. Generated reference pages (SDK clients, CLI commands, library typedoc) are left untouched. Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_01Et6RzideGVXaP9rWvwx1QZ --- docs/apps/components/external-product-catalog.md | 1 + docs/apps/components/overview.md | 1 + docs/apps/components/portal-extension.md | 1 + docs/apps/functions/deploy-and-update.md | 1 + docs/apps/how-to-guides/build-a-custom-jb.md | 1 + docs/audit-logs.md | 1 + docs/auth/access-tokens.md | 1 + docs/auth/anonymization.md | 1 + docs/auth/permissions.md | 1 + docs/automation/architecture.md | 1 + docs/automation/automation-executions.md | 1 + docs/automation/automation-flows.md | 1 + docs/automation/entity-mapping.md | 1 + docs/automation/event-catalog-trigger.md | 1 + docs/automation/intro.md | 1 + docs/blueprints/editing-and-synchronizing.md | 1 + docs/blueprints/installing-a-blueprint.md | 1 + docs/blueprints/intro.md | 1 + docs/blueprints/sandboxes.md | 1 + docs/blueprints/supported-resources.md | 1 + docs/cli/overview.md | 1 + docs/deadlines/intro.md | 1 + docs/entities/attributes.md | 1 + docs/entities/capabilities.mdx | 1 + docs/entities/entity-api.md | 1 + docs/entities/entity-tables.md | 1 + docs/entities/flexible-entities.md | 1 + docs/entities/relations.md | 1 + docs/entities/taxonomies.md | 1 + docs/environments/environments-secrets.md | 1 + docs/files/document-generation.md | 1 + docs/files/file-api.md | 1 + docs/files/file-collections.md | 1 + docs/files/file-entity.md | 1 + docs/integrations/batch-api.md | 1 + docs/integrations/webhooks/monitoring.md | 1 + docs/integrations/webhooks/payload-structure/customization.md | 1 + docs/integrations/webhooks/payload-structure/file-delivery.md | 1 + docs/integrations/webhooks/payload-structure/intro.md | 1 + docs/intro.md | 1 + docs/journeys/journey-builder.md | 1 + docs/journeys/post-qualification.md | 1 + docs/journeys/submissions.md | 1 + docs/messaging/email-settings.md | 1 + docs/messaging/message-api.md | 1 + docs/messaging/outlook/security-and-privacy.md | 1 + docs/notes/notes_api.mdx | 1 + docs/portals/architecture.md | 1 + docs/portals/customer-portal.md | 1 + docs/portals/metering.md | 1 + docs/sdk/overview.md | 1 + docs/templates/custom-variables.md | 1 + docs/templates/document-templates.md | 1 + docs/templates/email-templates.md | 1 + docs/templates/template-variables.md | 1 + docs/ui-design/concorde-design-tokens.md | 1 + docs/workflows/intro.md | 1 + docs/workflows/workflow-data-on-entities.md | 1 + docs/workflows/workflow-in-progress.md | 1 + docs/workflows/workflow-notes.md | 1 + 60 files changed, 60 insertions(+) diff --git a/docs/apps/components/external-product-catalog.md b/docs/apps/components/external-product-catalog.md index f3b85708..dd448ce9 100644 --- a/docs/apps/components/external-product-catalog.md +++ b/docs/apps/components/external-product-catalog.md @@ -2,6 +2,7 @@ title: External Product Catalog hide_title: true sidebar_position: 7 +description: "Integrate an external product catalog with epilot by adding an External Product Catalog component to your App and configuring its hooks in the component editor." ---

External Product Catalog

diff --git a/docs/apps/components/overview.md b/docs/apps/components/overview.md index 388f1366..c896d39e 100644 --- a/docs/apps/components/overview.md +++ b/docs/apps/components/overview.md @@ -2,6 +2,7 @@ title: Overview hide_title: true sidebar_position: 1 +description: "Components are the building blocks of every epilot App. Each component type extends a specific part of the platform, such as entity pages, journeys, portals or flows." ---

 

diff --git a/docs/apps/components/portal-extension.md b/docs/apps/components/portal-extension.md index f3dd3467..87812855 100644 --- a/docs/apps/components/portal-extension.md +++ b/docs/apps/components/portal-extension.md @@ -2,6 +2,7 @@ title: Portal Extensions hide_title: true sidebar_position: 6 +description: "Extend epilot portals with custom functionality and third-party integrations, from seamless links to hooks for data retrieval, validation and export." ---

Portal Extensions

diff --git a/docs/apps/functions/deploy-and-update.md b/docs/apps/functions/deploy-and-update.md index c2cfa7a8..0daa0f37 100644 --- a/docs/apps/functions/deploy-and-update.md +++ b/docs/apps/functions/deploy-and-update.md @@ -2,6 +2,7 @@ title: Deploying & Updating hide_title: true sidebar_position: 5 +description: "Add, deploy and update App functions with the epilot CLI: scaffold workflow or scheduled functions, deploy them and learn how updates reach installations." --- # Deploying & Updating Functions diff --git a/docs/apps/how-to-guides/build-a-custom-jb.md b/docs/apps/how-to-guides/build-a-custom-jb.md index 3b2e1e71..acebea95 100644 --- a/docs/apps/how-to-guides/build-a-custom-jb.md +++ b/docs/apps/how-to-guides/build-a-custom-jb.md @@ -2,6 +2,7 @@ title: "How to build a custom Journey block" hide_title: true sidebar_position: 1 +description: "Step-by-step guide to building a custom Journey block as an epilot App: a block that shows the address entered in the journey as a marker on an OpenStreetMap map." --- ## How to build a custom Journey block diff --git a/docs/audit-logs.md b/docs/audit-logs.md index bd805d21..e64386a6 100644 --- a/docs/audit-logs.md +++ b/docs/audit-logs.md @@ -1,5 +1,6 @@ --- sidebar_position: 14 +description: "Audit logs are a tamper-resistant record of who did what, when and on which resource in your epilot organization, for security reviews, compliance and troubleshooting." --- # Audit Logs diff --git a/docs/auth/access-tokens.md b/docs/auth/access-tokens.md index 229b842e..c403933b 100644 --- a/docs/auth/access-tokens.md +++ b/docs/auth/access-tokens.md @@ -1,5 +1,6 @@ --- sidebar_position: 2 +description: "Authorize epilot API calls with Access Tokens: create, restrict (read-only or anonymized), use and revoke tokens for integrations and scripts." --- # Access Tokens diff --git a/docs/auth/anonymization.md b/docs/auth/anonymization.md index a6815e2e..e9eeb20b 100644 --- a/docs/auth/anonymization.md +++ b/docs/auth/anonymization.md @@ -1,6 +1,7 @@ --- sidebar_position: 2.5 title: PII Anonymization +description: "epilot can mask personal data (PII) in API responses so AI assistants, analytics and integrations get the shape and relations of your data without personal identifiers." --- # PII Anonymization diff --git a/docs/auth/permissions.md b/docs/auth/permissions.md index d233b9bb..e4673ab5 100644 --- a/docs/auth/permissions.md +++ b/docs/auth/permissions.md @@ -1,5 +1,6 @@ --- sidebar_position: 4 +description: "epilot permissions use role-based access control (RBAC) with attribute-based conditions, inspired by AWS IAM policies, for fine-grained control by role, resource and attribute." --- # Permissions diff --git a/docs/automation/architecture.md b/docs/automation/architecture.md index ab2c9fa1..116ffda5 100644 --- a/docs/automation/architecture.md +++ b/docs/automation/architecture.md @@ -1,5 +1,6 @@ --- sidebar_position: 10 +description: "How the epilot automation engine works: a serverless, event-driven pipeline on AWS Lambda, DynamoDB, EventBridge and SQS that matches entity events to flows and runs their actions." --- # Architecture diff --git a/docs/automation/automation-executions.md b/docs/automation/automation-executions.md index f23155a6..f8321469 100644 --- a/docs/automation/automation-executions.md +++ b/docs/automation/automation-executions.md @@ -1,5 +1,6 @@ --- sidebar_position: 3 +description: "Every time an Automation Flow is triggered, epilot creates an Automation Execution. Learn how executions run their actions and which execution statuses exist." --- # Automation Executions diff --git a/docs/automation/automation-flows.md b/docs/automation/automation-flows.md index e2b1d97b..5ef566e4 100644 --- a/docs/automation/automation-flows.md +++ b/docs/automation/automation-flows.md @@ -1,5 +1,6 @@ --- sidebar_position: 2 +description: "Automation Flows are epilot's automation configurations: the triggers that start them and the actions they run on entities." --- # Automation Flows diff --git a/docs/automation/entity-mapping.md b/docs/automation/entity-mapping.md index da00d399..5613b100 100644 --- a/docs/automation/entity-mapping.md +++ b/docs/automation/entity-mapping.md @@ -1,5 +1,6 @@ --- sidebar_position: 4 +description: "Use the Create/Edit Entity (Advanced) automation action to map data from one entity into new or existing entities, with attribute mappings and mapping operations." --- # Entity Mapping diff --git a/docs/automation/event-catalog-trigger.md b/docs/automation/event-catalog-trigger.md index b50ad1f8..329f40b5 100644 --- a/docs/automation/event-catalog-trigger.md +++ b/docs/automation/event-catalog-trigger.md @@ -1,6 +1,7 @@ --- sidebar_position: 5 title: Event Catalog Trigger +description: "The Event Catalog trigger starts an Automation Flow whenever a Core Event, such as CustomerRequestSubmitted or MeterReadingAdded, is published in your organization." --- # Event Catalog Trigger diff --git a/docs/automation/intro.md b/docs/automation/intro.md index e365f508..044b8724 100644 --- a/docs/automation/intro.md +++ b/docs/automation/intro.md @@ -1,6 +1,7 @@ --- title: Overview sidebar_position: 1 +description: "epilot automation is a general-purpose framework for executing actions on entities in response to events." --- # Automation diff --git a/docs/blueprints/editing-and-synchronizing.md b/docs/blueprints/editing-and-synchronizing.md index c0bc7531..56a7e670 100644 --- a/docs/blueprints/editing-and-synchronizing.md +++ b/docs/blueprints/editing-and-synchronizing.md @@ -2,6 +2,7 @@ sidebar_position: 3 title: Editing and synchronizing hide_title: true +description: "Edit a Blueprint in the Blueprint overview (rename it, add or remove resources, download or delete it) and synchronize it with another organization." --- ## Editing Blueprints diff --git a/docs/blueprints/installing-a-blueprint.md b/docs/blueprints/installing-a-blueprint.md index 4f737ab9..6e282af3 100644 --- a/docs/blueprints/installing-a-blueprint.md +++ b/docs/blueprints/installing-a-blueprint.md @@ -2,6 +2,7 @@ sidebar_position: 2 title: Installing a Blueprint hide_title: true +description: "Install a Blueprint from the epilot Marketplace with a one-click or advanced install, configure it after installation, or create your own custom Blueprint." --- diff --git a/docs/blueprints/intro.md b/docs/blueprints/intro.md index 8a5b4750..7914da21 100644 --- a/docs/blueprints/intro.md +++ b/docs/blueprints/intro.md @@ -1,6 +1,7 @@ --- title: Blueprints sidebar_position: 1 +description: "Blueprints from the epilot Marketplace bundle journeys, automations, entity schemas, templates and more, so companies can launch energy use cases in a few clicks." --- # Blueprints diff --git a/docs/blueprints/sandboxes.md b/docs/blueprints/sandboxes.md index b42d501a..92dfd043 100644 --- a/docs/blueprints/sandboxes.md +++ b/docs/blueprints/sandboxes.md @@ -1,6 +1,7 @@ --- sidebar_position: 5 title: Sandboxes +description: "A Sandbox is a separate epilot organization for safely testing configurations without affecting production. Validated changes can be promoted to production." --- # Sandboxes diff --git a/docs/blueprints/supported-resources.md b/docs/blueprints/supported-resources.md index 61a10104..ccc0bf00 100644 --- a/docs/blueprints/supported-resources.md +++ b/docs/blueprints/supported-resources.md @@ -1,6 +1,7 @@ --- sidebar_position: 10 title: Supported Resources +description: "Resource types that Blueprints support, each corresponding to a ResourceNodeType in the Blueprint Manifest API." --- # Supported Resources diff --git a/docs/cli/overview.md b/docs/cli/overview.md index c3550ae7..34405e46 100644 --- a/docs/cli/overview.md +++ b/docs/cli/overview.md @@ -1,6 +1,7 @@ --- sidebar_position: 1 title: Overview +description: "The epilot CLI calls any epilot API operation with one command, no SDK setup or boilerplate needed: just run npx epilot." --- # epilot CLI diff --git a/docs/deadlines/intro.md b/docs/deadlines/intro.md index dc3cf5b9..5c4e7f2a 100644 --- a/docs/deadlines/intro.md +++ b/docs/deadlines/intro.md @@ -1,6 +1,7 @@ --- title: Switching Deadlines sidebar_position: 0 +description: "Calculate contract switching deadlines for power and gas in the German energy market, based on regulatory rules, working days and holidays, via API, SDK or a standalone library." --- # Contract Switching Deadlines diff --git a/docs/entities/attributes.md b/docs/entities/attributes.md index 2c5cfd97..cb8c436e 100644 --- a/docs/entities/attributes.md +++ b/docs/entities/attributes.md @@ -1,6 +1,7 @@ --- sidebar_position: 3 title: Attributes +description: "Attributes are the fields of an entity schema. Each one appears as a table column and as an editable field in the entity detail view. Reference of attribute types and properties." --- # Attributes diff --git a/docs/entities/capabilities.mdx b/docs/entities/capabilities.mdx index 6b4ab9b3..bdc46d0b 100644 --- a/docs/entities/capabilities.mdx +++ b/docs/entities/capabilities.mdx @@ -1,5 +1,6 @@ --- sidebar_position: 7 +description: "Capabilities extend entity views with extra functionality, such as tabs, attribute groups or action buttons, defined on a schema through UI hooks." --- # Capabilities diff --git a/docs/entities/entity-api.md b/docs/entities/entity-api.md index efff3d4c..01c5cfbf 100644 --- a/docs/entities/entity-api.md +++ b/docs/entities/entity-api.md @@ -1,5 +1,6 @@ --- sidebar_position: 5 +description: "The Entity API is the primary data layer for epilot business objects, with sub-APIs for schemas, CRUD, search, relations and activity." --- # Entity API diff --git a/docs/entities/entity-tables.md b/docs/entities/entity-tables.md index 9c3c76b9..a2957900 100644 --- a/docs/entities/entity-tables.md +++ b/docs/entities/entity-tables.md @@ -1,5 +1,6 @@ --- sidebar_position: 4 +description: "Entity tables list the entities of a schema with full-text search, attribute filters, sorting, saved views and bulk import and export." --- # Entity Tables diff --git a/docs/entities/flexible-entities.md b/docs/entities/flexible-entities.md index 632d1832..c9b1db1b 100644 --- a/docs/entities/flexible-entities.md +++ b/docs/entities/flexible-entities.md @@ -1,5 +1,6 @@ --- sidebar_position: 0 +description: "Everything in epilot is an entity: contacts, orders, products, contracts, meters, files and more. Entities are flexible JSON objects backed by user-definable schemas." --- # Flexible Entities diff --git a/docs/entities/relations.md b/docs/entities/relations.md index 1613d129..1c449699 100644 --- a/docs/entities/relations.md +++ b/docs/entities/relations.md @@ -1,5 +1,6 @@ --- sidebar_position: 6 +description: "Relations link entities to each other across epilot, regardless of schema. Covers the relation data structure, references, hydration and relation attributes." --- # Relations diff --git a/docs/entities/taxonomies.md b/docs/entities/taxonomies.md index 67b7ddd1..dbd0f5b8 100644 --- a/docs/entities/taxonomies.md +++ b/docs/entities/taxonomies.md @@ -1,6 +1,7 @@ --- title: Taxonomies sidebar_label: Taxonomies +description: "Taxonomies are epilot's labeling and classification system for entities, relations and files, managed through the Label Builder." --- # Taxonomies diff --git a/docs/environments/environments-secrets.md b/docs/environments/environments-secrets.md index 90dd51ab..5a52ddfd 100644 --- a/docs/environments/environments-secrets.md +++ b/docs/environments/environments-secrets.md @@ -1,6 +1,7 @@ --- title: Environments & Secrets sidebar_position: 1 +description: "Environments & Secrets is an organization-level key-value store for configuration and credentials that you reference anywhere with {{ env.variable_key }} syntax." --- # Environments & Secrets diff --git a/docs/files/document-generation.md b/docs/files/document-generation.md index ac98b5a3..2468d936 100644 --- a/docs/files/document-generation.md +++ b/docs/files/document-generation.md @@ -1,5 +1,6 @@ --- sidebar_position: 3 +description: "The Document Generation API creates documents from templates with variable substitution, image embedding, Excel output and asynchronous jobs." --- # Document Generation diff --git a/docs/files/file-api.md b/docs/files/file-api.md index bd4a9358..22e0d09c 100644 --- a/docs/files/file-api.md +++ b/docs/files/file-api.md @@ -1,5 +1,6 @@ --- sidebar_position: 2 +description: "Upload and download files in epilot with the File API, step by step: request upload and download URLs, transfer the file and save it as a File entity." --- # File API diff --git a/docs/files/file-collections.md b/docs/files/file-collections.md index a6f8de8a..4020d263 100644 --- a/docs/files/file-collections.md +++ b/docs/files/file-collections.md @@ -1,5 +1,6 @@ --- sidebar_position: 3 +description: "File Collections group and organize files within entities. They come in two types: shared (global) collections and personal (user) collections." --- # File Collections diff --git a/docs/files/file-entity.md b/docs/files/file-entity.md index f35e50d1..143abd8a 100644 --- a/docs/files/file-entity.md +++ b/docs/files/file-entity.md @@ -1,5 +1,6 @@ --- sidebar_position: 1 +description: "Every file uploaded to epilot is a File entity, available through the Entity API, with access control, file relations and versions." --- # File Entity diff --git a/docs/integrations/batch-api.md b/docs/integrations/batch-api.md index 28f02340..a2278ee7 100644 --- a/docs/integrations/batch-api.md +++ b/docs/integrations/batch-api.md @@ -1,6 +1,7 @@ --- sidebar_position: 5 title: Batch API +description: "The Batch API executes multiple epilot API calls in a single HTTP request and lets you retrieve the results asynchronously." --- # Batch API diff --git a/docs/integrations/webhooks/monitoring.md b/docs/integrations/webhooks/monitoring.md index a9edd090..086e5e90 100644 --- a/docs/integrations/webhooks/monitoring.md +++ b/docs/integrations/webhooks/monitoring.md @@ -1,5 +1,6 @@ --- sidebar_position: 4 +description: "Monitor epilot webhooks: every webhook request is logged as an event with a success or failure status in the Webhook Events section of the webhook configuration." --- # Monitoring diff --git a/docs/integrations/webhooks/payload-structure/customization.md b/docs/integrations/webhooks/payload-structure/customization.md index 2696c8dd..787296d8 100644 --- a/docs/integrations/webhooks/payload-structure/customization.md +++ b/docs/integrations/webhooks/payload-structure/customization.md @@ -1,6 +1,7 @@ --- sidebar_position: 4 title: JSONata Customization +description: "Customize epilot webhook payloads with JSONata to reshape, filter or extract fields before delivery." --- # Customization diff --git a/docs/integrations/webhooks/payload-structure/file-delivery.md b/docs/integrations/webhooks/payload-structure/file-delivery.md index 4e12e58c..e0e04f1b 100644 --- a/docs/integrations/webhooks/payload-structure/file-delivery.md +++ b/docs/integrations/webhooks/payload-structure/file-delivery.md @@ -1,6 +1,7 @@ --- sidebar_position: 3 title: "File Data Delivery" +description: "Deliver the actual file bytes of file events, such as File Created, to your webhook endpoint as Base64 in the JSON payload or as multipart/form-data." --- # File Data Delivery diff --git a/docs/integrations/webhooks/payload-structure/intro.md b/docs/integrations/webhooks/payload-structure/intro.md index cea0ff2b..c02285ec 100644 --- a/docs/integrations/webhooks/payload-structure/intro.md +++ b/docs/integrations/webhooks/payload-structure/intro.md @@ -1,6 +1,7 @@ --- sidebar_position: 1 title: Common Data Structure +description: "Structure of epilot webhook payloads for automation and portal user access triggers: metadata, entity, relations and activity objects." --- # Payload Structure diff --git a/docs/intro.md b/docs/intro.md index 02d7949b..407631af 100644 --- a/docs/intro.md +++ b/docs/intro.md @@ -2,6 +2,7 @@ title: Overview hide_title: true sidebar_position: 1 +description: "Developer documentation for epilot, the energy XRM: architecture, entities, authentication, automation, journeys, portals, integrations, APIs and SDK." --- import AgentToolkitPromo from '@site/src/components/AgentToolkitPromo'; diff --git a/docs/journeys/journey-builder.md b/docs/journeys/journey-builder.md index 9f3537f2..5ac60d6f 100644 --- a/docs/journeys/journey-builder.md +++ b/docs/journeys/journey-builder.md @@ -1,5 +1,6 @@ --- sidebar_position: 1 +description: "The Journey Builder is a WYSIWYG editor for creating end-customer and partner journeys from steps and blocks, and for embedding them and handling submissions." --- # Journey Builder diff --git a/docs/journeys/post-qualification.md b/docs/journeys/post-qualification.md index 4218eab9..c5ff34f7 100644 --- a/docs/journeys/post-qualification.md +++ b/docs/journeys/post-qualification.md @@ -1,5 +1,6 @@ --- sidebar_position: 8 +description: "A post-qualification journey collects additional information about a lead captured by another journey, via a link sent to the contact by email." --- # Post Qualification Journey diff --git a/docs/journeys/submissions.md b/docs/journeys/submissions.md index 122fc1cf..757d73ea 100644 --- a/docs/journeys/submissions.md +++ b/docs/journeys/submissions.md @@ -1,5 +1,6 @@ --- sidebar_position: 4 +description: "Submissions are entities that store raw data collected from journeys or other external sources, created through the Submission API." --- # Submissions diff --git a/docs/messaging/email-settings.md b/docs/messaging/email-settings.md index 9ceb763d..7d9cef60 100644 --- a/docs/messaging/email-settings.md +++ b/docs/messaging/email-settings.md @@ -1,5 +1,6 @@ --- sidebar_position: 1 +description: "Send and receive email through epilot on behalf of your organization from your own custom subdomain instead of the default epilot domain." --- # Email Settings diff --git a/docs/messaging/message-api.md b/docs/messaging/message-api.md index a2f7565a..0e518d47 100644 --- a/docs/messaging/message-api.md +++ b/docs/messaging/message-api.md @@ -1,5 +1,6 @@ --- sidebar_position: 2 +description: "The Message API is epilot's central email service for sending, receiving and managing email messages within the platform." --- # Message API diff --git a/docs/messaging/outlook/security-and-privacy.md b/docs/messaging/outlook/security-and-privacy.md index 92727bc4..2825593a 100644 --- a/docs/messaging/outlook/security-and-privacy.md +++ b/docs/messaging/outlook/security-and-privacy.md @@ -1,6 +1,7 @@ --- title: Security & Privacy sidebar_position: 4 +description: "Security and privacy of the epilot Outlook integration: Microsoft Entra controls which mailboxes flow into epilot, and epilot permissions control who sees them." --- # Security & Privacy diff --git a/docs/notes/notes_api.mdx b/docs/notes/notes_api.mdx index 1a2f707d..ca7f7c2b 100644 --- a/docs/notes/notes_api.mdx +++ b/docs/notes/notes_api.mdx @@ -1,6 +1,7 @@ --- title: Notes API sidebar_position: 3 +description: "The Notes API lets developers and integration partners create, read, update and delete Note entities in epilot." --- [[API Docs](/api/notes)] [[SDK](https://www.npmjs.com/package/@epilot/notes-client)] diff --git a/docs/portals/architecture.md b/docs/portals/architecture.md index 4bf65998..a5976d90 100644 --- a/docs/portals/architecture.md +++ b/docs/portals/architecture.md @@ -1,5 +1,6 @@ --- sidebar_position: 2 +description: "Architecture of epilot Portals: multi-tenant, white-label portals with per-portal domain and authentication on a shared, serverless AWS backend." --- # Architecture diff --git a/docs/portals/customer-portal.md b/docs/portals/customer-portal.md index f6fbd337..d5b18ea6 100644 --- a/docs/portals/customer-portal.md +++ b/docs/portals/customer-portal.md @@ -1,5 +1,6 @@ --- sidebar_position: 1 +description: "epilot Portals are white-label self-service interfaces for customers and installers. Overview of what administrators configure and what end users can do." --- # Overview diff --git a/docs/portals/metering.md b/docs/portals/metering.md index 0671783a..545c8d35 100644 --- a/docs/portals/metering.md +++ b/docs/portals/metering.md @@ -1,5 +1,6 @@ --- sidebar_position: 3 +description: "The Metering API manages meters and meter readings for administrators and portal end users, with different permission scopes." --- # Metering diff --git a/docs/sdk/overview.md b/docs/sdk/overview.md index f71e2474..f99f4a44 100644 --- a/docs/sdk/overview.md +++ b/docs/sdk/overview.md @@ -1,6 +1,7 @@ --- sidebar_position: 1 title: Overview +description: "@epilot/sdk is the official TypeScript SDK for epilot: one package with 30+ fully typed API clients. Install it, get started and import only the clients you need." --- # epilot SDK diff --git a/docs/templates/custom-variables.md b/docs/templates/custom-variables.md index 3e976ed7..9712c4cd 100644 --- a/docs/templates/custom-variables.md +++ b/docs/templates/custom-variables.md @@ -1,5 +1,6 @@ --- sidebar_position: 5 +description: "Custom Variables are reusable, organization-level template logic (Handlebars expressions, order tables, journey links and text snippets) for email and document templates." --- # Custom Variables diff --git a/docs/templates/document-templates.md b/docs/templates/document-templates.md index e4c4c652..c58a1b2c 100644 --- a/docs/templates/document-templates.md +++ b/docs/templates/document-templates.md @@ -1,5 +1,6 @@ --- sidebar_position: 3 +description: "Generate PDF, DOCX and XLSX documents from Word or Excel templates populated with Handlebars variables from epilot entities." --- # Document Templates diff --git a/docs/templates/email-templates.md b/docs/templates/email-templates.md index 0e6943a2..341ac3e0 100644 --- a/docs/templates/email-templates.md +++ b/docs/templates/email-templates.md @@ -1,5 +1,6 @@ --- sidebar_position: 2 +description: "The Email Template API manages reusable email templates in epilot with HTML content, variable substitution, branding and file attachments." --- # Email Templates diff --git a/docs/templates/template-variables.md b/docs/templates/template-variables.md index 359b30fc..dc09c31a 100644 --- a/docs/templates/template-variables.md +++ b/docs/templates/template-variables.md @@ -1,5 +1,6 @@ --- sidebar_position: 0 +description: "The Template Variables API discovers and substitutes Handlebars variables in epilot email and document templates." --- # Template Variables diff --git a/docs/ui-design/concorde-design-tokens.md b/docs/ui-design/concorde-design-tokens.md index c87a89cd..6c4c9c60 100644 --- a/docs/ui-design/concorde-design-tokens.md +++ b/docs/ui-design/concorde-design-tokens.md @@ -2,6 +2,7 @@ title: Concorde Design tokens hide_title: true sidebar_position: 3 +description: "Reference of Concorde design tokens: the CSS variables for colors, typography, shadows, layout and blocks that style epilot Journeys built with the open-source Concorde library." ---

Concorde Design tokens: CSS variables

diff --git a/docs/workflows/intro.md b/docs/workflows/intro.md index 333a56c9..bead9bb4 100644 --- a/docs/workflows/intro.md +++ b/docs/workflows/intro.md @@ -1,6 +1,7 @@ --- title: Overview sidebar_position: 1 +description: "Workflows are structured collections of tasks that track progress and execute operations across a business process in epilot." --- # Workflows diff --git a/docs/workflows/workflow-data-on-entities.md b/docs/workflows/workflow-data-on-entities.md index c187b9a1..ac05a45c 100644 --- a/docs/workflows/workflow-data-on-entities.md +++ b/docs/workflows/workflow-data-on-entities.md @@ -1,6 +1,7 @@ --- title: Workflow data on entities sidebar_position: 2 +description: "How epilot stores workflow execution data inside the entity payload, keyed by workflow definition ID, and how to migrate from the deprecated structure." --- # Workflow data on entities diff --git a/docs/workflows/workflow-in-progress.md b/docs/workflows/workflow-in-progress.md index 2fc624b8..543ffa1f 100644 --- a/docs/workflows/workflow-in-progress.md +++ b/docs/workflows/workflow-in-progress.md @@ -1,6 +1,7 @@ --- title: Workflow in progress sidebar_position: 4 +description: "How epilot workflows progress: tasks, phases, their statuses and how the current workflow position is tracked." --- # Workflow in progress diff --git a/docs/workflows/workflow-notes.md b/docs/workflows/workflow-notes.md index 8bcd2706..e1ba5511 100644 --- a/docs/workflows/workflow-notes.md +++ b/docs/workflows/workflow-notes.md @@ -1,6 +1,7 @@ --- title: Workflow Notes sidebar_position: 3 +description: "Workflow Notes are stored through the Comments API with a specific context ID format that links each note to its workflow." --- # Workflow Notes From e2591dd3cab11346eb3be770a661e32697111faf Mon Sep 17 00:00:00 2001 From: Viljami + Claude Date: Tue, 20 Oct 2026 05:50:50 +0000 Subject: [PATCH 2/5] docs: give generated SDK/CLI reference pages and two section indexes real descriptions The SDK client and CLI command pages got "- Base URL://..." as their meta description. The update-sdk/update-cli scripts now write a description derived from the page title, and the committed pages carry the same line so the next regeneration is a no-op. Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_01Et6RzideGVXaP9rWvwx1QZ --- docs/cli/commands/access-token.md | 1 + docs/cli/commands/address-suggestions.md | 1 + docs/cli/commands/address.md | 1 + docs/cli/commands/ai-agents.md | 1 + docs/cli/commands/app.md | 1 + docs/cli/commands/audit-logs.md | 1 + docs/cli/commands/automation.md | 1 + docs/cli/commands/billing.md | 1 + docs/cli/commands/blueprint-manifest.md | 1 + docs/cli/commands/consent.md | 1 + docs/cli/commands/customer-portal.md | 1 + docs/cli/commands/dashboard.md | 1 + docs/cli/commands/data-governance.md | 1 + docs/cli/commands/deduplication.md | 1 + docs/cli/commands/design.md | 1 + docs/cli/commands/document.md | 1 + docs/cli/commands/email-settings.md | 1 + docs/cli/commands/email-template.md | 1 + docs/cli/commands/entity-mapping.md | 1 + docs/cli/commands/entity.md | 1 + docs/cli/commands/environments.md | 1 + docs/cli/commands/erp-integration.md | 1 + docs/cli/commands/event-catalog.md | 1 + docs/cli/commands/file.md | 1 + docs/cli/commands/iban.md | 1 + docs/cli/commands/journey.md | 1 + docs/cli/commands/kanban.md | 1 + docs/cli/commands/message.md | 1 + docs/cli/commands/metering.md | 1 + docs/cli/commands/notes.md | 1 + docs/cli/commands/notification.md | 1 + docs/cli/commands/organization.md | 1 + docs/cli/commands/partner-directory.md | 1 + docs/cli/commands/permissions.md | 1 + docs/cli/commands/pricing-tier.md | 1 + docs/cli/commands/pricing.md | 1 + docs/cli/commands/purpose.md | 1 + docs/cli/commands/sandbox.md | 1 + docs/cli/commands/submission.md | 1 + docs/cli/commands/targeting.md | 1 + docs/cli/commands/template-variables.md | 1 + docs/cli/commands/user.md | 1 + docs/cli/commands/validation-rules.md | 1 + docs/cli/commands/webhooks.md | 1 + docs/cli/commands/workflow-definition.md | 1 + docs/cli/commands/workflow.md | 1 + docs/integrations/webhooks/intro.md | 1 + docs/pricing/README.mdx | 1 + docs/sdk/clients/access-token.md | 1 + docs/sdk/clients/address-suggestions.md | 1 + docs/sdk/clients/address.md | 1 + docs/sdk/clients/ai-agents.md | 1 + docs/sdk/clients/app.md | 1 + docs/sdk/clients/audit-logs.md | 1 + docs/sdk/clients/automation.md | 1 + docs/sdk/clients/billing.md | 1 + docs/sdk/clients/blueprint-manifest.md | 1 + docs/sdk/clients/consent.md | 1 + docs/sdk/clients/customer-portal.md | 1 + docs/sdk/clients/dashboard.md | 1 + docs/sdk/clients/data-governance.md | 1 + docs/sdk/clients/deduplication.md | 1 + docs/sdk/clients/design.md | 1 + docs/sdk/clients/document.md | 1 + docs/sdk/clients/email-settings.md | 1 + docs/sdk/clients/email-template.md | 1 + docs/sdk/clients/entity-mapping.md | 1 + docs/sdk/clients/entity.md | 1 + docs/sdk/clients/environments.md | 1 + docs/sdk/clients/erp-integration.md | 1 + docs/sdk/clients/event-catalog.md | 1 + docs/sdk/clients/file.md | 1 + docs/sdk/clients/iban.md | 1 + docs/sdk/clients/journey.md | 1 + docs/sdk/clients/kanban.md | 1 + docs/sdk/clients/message.md | 1 + docs/sdk/clients/metering.md | 1 + docs/sdk/clients/notes.md | 1 + docs/sdk/clients/notification.md | 1 + docs/sdk/clients/organization.md | 1 + docs/sdk/clients/partner-directory.md | 1 + docs/sdk/clients/permissions.md | 1 + docs/sdk/clients/pricing-tier.md | 1 + docs/sdk/clients/pricing.md | 1 + docs/sdk/clients/purpose.md | 1 + docs/sdk/clients/sandbox.md | 1 + docs/sdk/clients/submission.md | 1 + docs/sdk/clients/targeting.md | 1 + docs/sdk/clients/template-variables.md | 1 + docs/sdk/clients/user.md | 1 + docs/sdk/clients/validation-rules.md | 1 + docs/sdk/clients/webhooks.md | 1 + docs/sdk/clients/workflow-definition.md | 1 + docs/sdk/clients/workflow.md | 1 + scripts/update-cli-docs.sh | 1 + scripts/update-sdk-docs.sh | 1 + 96 files changed, 96 insertions(+) diff --git a/docs/cli/commands/access-token.md b/docs/cli/commands/access-token.md index 57959cd4..a48020ed 100644 --- a/docs/cli/commands/access-token.md +++ b/docs/cli/commands/access-token.md @@ -1,5 +1,6 @@ --- title: "Access Token API" +description: "epilot CLI commands for the Access Token API: quick start, common flags and every operation, callable from the command line." --- # Access Token API diff --git a/docs/cli/commands/address-suggestions.md b/docs/cli/commands/address-suggestions.md index 862636d6..f532bd47 100644 --- a/docs/cli/commands/address-suggestions.md +++ b/docs/cli/commands/address-suggestions.md @@ -1,5 +1,6 @@ --- title: "Address Suggestions API" +description: "epilot CLI commands for the Address Suggestions API: quick start, common flags and every operation, callable from the command line." --- # Address Suggestions API diff --git a/docs/cli/commands/address.md b/docs/cli/commands/address.md index dd1c6d7e..d1e47a5f 100644 --- a/docs/cli/commands/address.md +++ b/docs/cli/commands/address.md @@ -1,5 +1,6 @@ --- title: "Address API" +description: "epilot CLI commands for the Address API: quick start, common flags and every operation, callable from the command line." --- # Address API diff --git a/docs/cli/commands/ai-agents.md b/docs/cli/commands/ai-agents.md index c4088501..3e96d72b 100644 --- a/docs/cli/commands/ai-agents.md +++ b/docs/cli/commands/ai-agents.md @@ -1,5 +1,6 @@ --- title: "AI Agents API - OpenAPI 3.0" +description: "epilot CLI commands for the AI Agents API - OpenAPI 3.0: quick start, common flags and every operation, callable from the command line." --- # AI Agents API - OpenAPI 3.0 diff --git a/docs/cli/commands/app.md b/docs/cli/commands/app.md index 772a488c..0f54788b 100644 --- a/docs/cli/commands/app.md +++ b/docs/cli/commands/app.md @@ -1,5 +1,6 @@ --- title: "App API" +description: "epilot CLI commands for the App API: quick start, common flags and every operation, callable from the command line." --- # App API diff --git a/docs/cli/commands/audit-logs.md b/docs/cli/commands/audit-logs.md index 0dccb047..b0296e98 100644 --- a/docs/cli/commands/audit-logs.md +++ b/docs/cli/commands/audit-logs.md @@ -1,5 +1,6 @@ --- title: "Audit Log" +description: "epilot CLI commands for the Audit Log: quick start, common flags and every operation, callable from the command line." --- # Audit Log diff --git a/docs/cli/commands/automation.md b/docs/cli/commands/automation.md index b9b4c596..ea57af45 100644 --- a/docs/cli/commands/automation.md +++ b/docs/cli/commands/automation.md @@ -1,5 +1,6 @@ --- title: "Automation API" +description: "epilot CLI commands for the Automation API: quick start, common flags and every operation, callable from the command line." --- # Automation API diff --git a/docs/cli/commands/billing.md b/docs/cli/commands/billing.md index 5f0998e0..c3311321 100644 --- a/docs/cli/commands/billing.md +++ b/docs/cli/commands/billing.md @@ -1,5 +1,6 @@ --- title: "Billing API" +description: "epilot CLI commands for the Billing API: quick start, common flags and every operation, callable from the command line." --- # Billing API diff --git a/docs/cli/commands/blueprint-manifest.md b/docs/cli/commands/blueprint-manifest.md index 1188289e..887ebea7 100644 --- a/docs/cli/commands/blueprint-manifest.md +++ b/docs/cli/commands/blueprint-manifest.md @@ -1,5 +1,6 @@ --- title: "Blueprint Manifest API" +description: "epilot CLI commands for the Blueprint Manifest API: quick start, common flags and every operation, callable from the command line." --- # Blueprint Manifest API diff --git a/docs/cli/commands/consent.md b/docs/cli/commands/consent.md index 0483f03c..aa4120ed 100644 --- a/docs/cli/commands/consent.md +++ b/docs/cli/commands/consent.md @@ -1,5 +1,6 @@ --- title: "Consent API" +description: "epilot CLI commands for the Consent API: quick start, common flags and every operation, callable from the command line." --- # Consent API diff --git a/docs/cli/commands/customer-portal.md b/docs/cli/commands/customer-portal.md index 4b40d43b..2c79b2f8 100644 --- a/docs/cli/commands/customer-portal.md +++ b/docs/cli/commands/customer-portal.md @@ -1,5 +1,6 @@ --- title: "Portal API" +description: "epilot CLI commands for the Portal API: quick start, common flags and every operation, callable from the command line." --- # Portal API diff --git a/docs/cli/commands/dashboard.md b/docs/cli/commands/dashboard.md index 18249900..5ce637bf 100644 --- a/docs/cli/commands/dashboard.md +++ b/docs/cli/commands/dashboard.md @@ -1,5 +1,6 @@ --- title: "Dashboard API" +description: "epilot CLI commands for the Dashboard API: quick start, common flags and every operation, callable from the command line." --- # Dashboard API diff --git a/docs/cli/commands/data-governance.md b/docs/cli/commands/data-governance.md index fd75126a..fd628c21 100644 --- a/docs/cli/commands/data-governance.md +++ b/docs/cli/commands/data-governance.md @@ -1,5 +1,6 @@ --- title: "Data Governance API" +description: "epilot CLI commands for the Data Governance API: quick start, common flags and every operation, callable from the command line." --- # Data Governance API diff --git a/docs/cli/commands/deduplication.md b/docs/cli/commands/deduplication.md index 55d2d723..9559578b 100644 --- a/docs/cli/commands/deduplication.md +++ b/docs/cli/commands/deduplication.md @@ -1,5 +1,6 @@ --- title: "Deduplication API" +description: "epilot CLI commands for the Deduplication API: quick start, common flags and every operation, callable from the command line." --- # Deduplication API diff --git a/docs/cli/commands/design.md b/docs/cli/commands/design.md index a9cf4f8f..6ede275d 100644 --- a/docs/cli/commands/design.md +++ b/docs/cli/commands/design.md @@ -1,5 +1,6 @@ --- title: "Design Builder API v2" +description: "epilot CLI commands for the Design Builder API v2: quick start, common flags and every operation, callable from the command line." --- # Design Builder API v2 diff --git a/docs/cli/commands/document.md b/docs/cli/commands/document.md index c7cf71f6..12959b46 100644 --- a/docs/cli/commands/document.md +++ b/docs/cli/commands/document.md @@ -1,5 +1,6 @@ --- title: "Document API" +description: "epilot CLI commands for the Document API: quick start, common flags and every operation, callable from the command line." --- # Document API diff --git a/docs/cli/commands/email-settings.md b/docs/cli/commands/email-settings.md index 3c63c949..4be55080 100644 --- a/docs/cli/commands/email-settings.md +++ b/docs/cli/commands/email-settings.md @@ -1,5 +1,6 @@ --- title: "Messaging Settings API" +description: "epilot CLI commands for the Messaging Settings API: quick start, common flags and every operation, callable from the command line." --- # Messaging Settings API diff --git a/docs/cli/commands/email-template.md b/docs/cli/commands/email-template.md index 7a3812cd..382b07a7 100644 --- a/docs/cli/commands/email-template.md +++ b/docs/cli/commands/email-template.md @@ -1,5 +1,6 @@ --- title: "Email template API" +description: "epilot CLI commands for the Email template API: quick start, common flags and every operation, callable from the command line." --- # Email template API diff --git a/docs/cli/commands/entity-mapping.md b/docs/cli/commands/entity-mapping.md index a978b9c3..18ac771f 100644 --- a/docs/cli/commands/entity-mapping.md +++ b/docs/cli/commands/entity-mapping.md @@ -1,5 +1,6 @@ --- title: "Entity Mapping API" +description: "epilot CLI commands for the Entity Mapping API: quick start, common flags and every operation, callable from the command line." --- # Entity Mapping API diff --git a/docs/cli/commands/entity.md b/docs/cli/commands/entity.md index 8e2f2b99..43ee3730 100644 --- a/docs/cli/commands/entity.md +++ b/docs/cli/commands/entity.md @@ -1,5 +1,6 @@ --- title: "Entity API" +description: "epilot CLI commands for the Entity API: quick start, common flags and every operation, callable from the command line." --- # Entity API diff --git a/docs/cli/commands/environments.md b/docs/cli/commands/environments.md index 66e973ef..471e861d 100644 --- a/docs/cli/commands/environments.md +++ b/docs/cli/commands/environments.md @@ -1,5 +1,6 @@ --- title: "Environments API" +description: "epilot CLI commands for the Environments API: quick start, common flags and every operation, callable from the command line." --- # Environments API diff --git a/docs/cli/commands/erp-integration.md b/docs/cli/commands/erp-integration.md index 8df16c36..cfbce798 100644 --- a/docs/cli/commands/erp-integration.md +++ b/docs/cli/commands/erp-integration.md @@ -1,5 +1,6 @@ --- title: "ERP Integration API" +description: "epilot CLI commands for the ERP Integration API: quick start, common flags and every operation, callable from the command line." --- # ERP Integration API diff --git a/docs/cli/commands/event-catalog.md b/docs/cli/commands/event-catalog.md index 179eb2f7..a7dbb730 100644 --- a/docs/cli/commands/event-catalog.md +++ b/docs/cli/commands/event-catalog.md @@ -1,5 +1,6 @@ --- title: "Event Catalog API" +description: "epilot CLI commands for the Event Catalog API: quick start, common flags and every operation, callable from the command line." --- # Event Catalog API diff --git a/docs/cli/commands/file.md b/docs/cli/commands/file.md index 1f910fa6..93c3b94a 100644 --- a/docs/cli/commands/file.md +++ b/docs/cli/commands/file.md @@ -1,5 +1,6 @@ --- title: "File API" +description: "epilot CLI commands for the File API: quick start, common flags and every operation, callable from the command line." --- # File API diff --git a/docs/cli/commands/iban.md b/docs/cli/commands/iban.md index b4378bc6..05166fec 100644 --- a/docs/cli/commands/iban.md +++ b/docs/cli/commands/iban.md @@ -1,5 +1,6 @@ --- title: "Iban API" +description: "epilot CLI commands for the Iban API: quick start, common flags and every operation, callable from the command line." --- # Iban API diff --git a/docs/cli/commands/journey.md b/docs/cli/commands/journey.md index 865b8f9d..6b8d3e5c 100644 --- a/docs/cli/commands/journey.md +++ b/docs/cli/commands/journey.md @@ -1,5 +1,6 @@ --- title: "Journey API" +description: "epilot CLI commands for the Journey API: quick start, common flags and every operation, callable from the command line." --- # Journey API diff --git a/docs/cli/commands/kanban.md b/docs/cli/commands/kanban.md index f9085681..5a6e0ec3 100644 --- a/docs/cli/commands/kanban.md +++ b/docs/cli/commands/kanban.md @@ -1,5 +1,6 @@ --- title: "Kanban API" +description: "epilot CLI commands for the Kanban API: quick start, common flags and every operation, callable from the command line." --- # Kanban API diff --git a/docs/cli/commands/message.md b/docs/cli/commands/message.md index 71dd4837..a8323ea7 100644 --- a/docs/cli/commands/message.md +++ b/docs/cli/commands/message.md @@ -1,5 +1,6 @@ --- title: "Message API" +description: "epilot CLI commands for the Message API: quick start, common flags and every operation, callable from the command line." --- # Message API diff --git a/docs/cli/commands/metering.md b/docs/cli/commands/metering.md index a33f0c35..8b1be534 100644 --- a/docs/cli/commands/metering.md +++ b/docs/cli/commands/metering.md @@ -1,5 +1,6 @@ --- title: "Metering API" +description: "epilot CLI commands for the Metering API: quick start, common flags and every operation, callable from the command line." --- # Metering API diff --git a/docs/cli/commands/notes.md b/docs/cli/commands/notes.md index 27d9980c..aaa84fec 100644 --- a/docs/cli/commands/notes.md +++ b/docs/cli/commands/notes.md @@ -1,5 +1,6 @@ --- title: "Notes API" +description: "epilot CLI commands for the Notes API: quick start, common flags and every operation, callable from the command line." --- # Notes API diff --git a/docs/cli/commands/notification.md b/docs/cli/commands/notification.md index 35289a9e..04d58854 100644 --- a/docs/cli/commands/notification.md +++ b/docs/cli/commands/notification.md @@ -1,5 +1,6 @@ --- title: "Notification API" +description: "epilot CLI commands for the Notification API: quick start, common flags and every operation, callable from the command line." --- # Notification API diff --git a/docs/cli/commands/organization.md b/docs/cli/commands/organization.md index 40322060..ec92a8c3 100644 --- a/docs/cli/commands/organization.md +++ b/docs/cli/commands/organization.md @@ -1,5 +1,6 @@ --- title: "Organization API" +description: "epilot CLI commands for the Organization API: quick start, common flags and every operation, callable from the command line." --- # Organization API diff --git a/docs/cli/commands/partner-directory.md b/docs/cli/commands/partner-directory.md index 976c4c1f..d7a0f267 100644 --- a/docs/cli/commands/partner-directory.md +++ b/docs/cli/commands/partner-directory.md @@ -1,5 +1,6 @@ --- title: "Partner API" +description: "epilot CLI commands for the Partner API: quick start, common flags and every operation, callable from the command line." --- # Partner API diff --git a/docs/cli/commands/permissions.md b/docs/cli/commands/permissions.md index 33b4d01a..27742fa4 100644 --- a/docs/cli/commands/permissions.md +++ b/docs/cli/commands/permissions.md @@ -1,5 +1,6 @@ --- title: "Permissions API" +description: "epilot CLI commands for the Permissions API: quick start, common flags and every operation, callable from the command line." --- # Permissions API diff --git a/docs/cli/commands/pricing-tier.md b/docs/cli/commands/pricing-tier.md index bbd5a478..70ae33a6 100644 --- a/docs/cli/commands/pricing-tier.md +++ b/docs/cli/commands/pricing-tier.md @@ -1,5 +1,6 @@ --- title: "Pricing Tier API" +description: "epilot CLI commands for the Pricing Tier API: quick start, common flags and every operation, callable from the command line." --- # Pricing Tier API diff --git a/docs/cli/commands/pricing.md b/docs/cli/commands/pricing.md index 503969d0..33457b9c 100644 --- a/docs/cli/commands/pricing.md +++ b/docs/cli/commands/pricing.md @@ -1,5 +1,6 @@ --- title: "Pricing API" +description: "epilot CLI commands for the Pricing API: quick start, common flags and every operation, callable from the command line." --- # Pricing API diff --git a/docs/cli/commands/purpose.md b/docs/cli/commands/purpose.md index 176b9fbd..73ef9c08 100644 --- a/docs/cli/commands/purpose.md +++ b/docs/cli/commands/purpose.md @@ -1,5 +1,6 @@ --- title: "Purpose API" +description: "epilot CLI commands for the Purpose API: quick start, common flags and every operation, callable from the command line." --- # Purpose API diff --git a/docs/cli/commands/sandbox.md b/docs/cli/commands/sandbox.md index 5aa2dbf8..2a95d570 100644 --- a/docs/cli/commands/sandbox.md +++ b/docs/cli/commands/sandbox.md @@ -1,5 +1,6 @@ --- title: "Sandbox API" +description: "epilot CLI commands for the Sandbox API: quick start, common flags and every operation, callable from the command line." --- # Sandbox API diff --git a/docs/cli/commands/submission.md b/docs/cli/commands/submission.md index f474650b..1953285c 100644 --- a/docs/cli/commands/submission.md +++ b/docs/cli/commands/submission.md @@ -1,5 +1,6 @@ --- title: "Submission API" +description: "epilot CLI commands for the Submission API: quick start, common flags and every operation, callable from the command line." --- # Submission API diff --git a/docs/cli/commands/targeting.md b/docs/cli/commands/targeting.md index 9c280a62..b2575166 100644 --- a/docs/cli/commands/targeting.md +++ b/docs/cli/commands/targeting.md @@ -1,5 +1,6 @@ --- title: "Targeting API" +description: "epilot CLI commands for the Targeting API: quick start, common flags and every operation, callable from the command line." --- # Targeting API diff --git a/docs/cli/commands/template-variables.md b/docs/cli/commands/template-variables.md index ffb046d6..621dd4b6 100644 --- a/docs/cli/commands/template-variables.md +++ b/docs/cli/commands/template-variables.md @@ -1,5 +1,6 @@ --- title: "Template Variables API" +description: "epilot CLI commands for the Template Variables API: quick start, common flags and every operation, callable from the command line." --- # Template Variables API diff --git a/docs/cli/commands/user.md b/docs/cli/commands/user.md index c4762b49..55a883aa 100644 --- a/docs/cli/commands/user.md +++ b/docs/cli/commands/user.md @@ -1,5 +1,6 @@ --- title: "User API" +description: "epilot CLI commands for the User API: quick start, common flags and every operation, callable from the command line." --- # User API diff --git a/docs/cli/commands/validation-rules.md b/docs/cli/commands/validation-rules.md index 5faff186..98f9173f 100644 --- a/docs/cli/commands/validation-rules.md +++ b/docs/cli/commands/validation-rules.md @@ -1,5 +1,6 @@ --- title: "Validation Rules API" +description: "epilot CLI commands for the Validation Rules API: quick start, common flags and every operation, callable from the command line." --- # Validation Rules API diff --git a/docs/cli/commands/webhooks.md b/docs/cli/commands/webhooks.md index 5a17e7c0..2479271e 100644 --- a/docs/cli/commands/webhooks.md +++ b/docs/cli/commands/webhooks.md @@ -1,5 +1,6 @@ --- title: "Webhooks" +description: "epilot CLI commands for the Webhooks: quick start, common flags and every operation, callable from the command line." --- # Webhooks diff --git a/docs/cli/commands/workflow-definition.md b/docs/cli/commands/workflow-definition.md index a52a6cde..671d14f9 100644 --- a/docs/cli/commands/workflow-definition.md +++ b/docs/cli/commands/workflow-definition.md @@ -1,5 +1,6 @@ --- title: "Workflows Definitions" +description: "epilot CLI commands for the Workflows Definitions: quick start, common flags and every operation, callable from the command line." --- # Workflows Definitions diff --git a/docs/cli/commands/workflow.md b/docs/cli/commands/workflow.md index 75ac26c9..20d704b8 100644 --- a/docs/cli/commands/workflow.md +++ b/docs/cli/commands/workflow.md @@ -1,5 +1,6 @@ --- title: "Workflows Executions" +description: "epilot CLI commands for the Workflows Executions: quick start, common flags and every operation, callable from the command line." --- # Workflows Executions diff --git a/docs/integrations/webhooks/intro.md b/docs/integrations/webhooks/intro.md index caf92c85..46fc78dd 100644 --- a/docs/integrations/webhooks/intro.md +++ b/docs/integrations/webhooks/intro.md @@ -2,6 +2,7 @@ title: Overview sidebar_position: 0 slug: /integrations/webhooks +description: "Subscribe to events in your epilot organization with webhooks: epilot sends an HTTP POST request to your URL whenever an event occurs, to integrate external systems." --- # Webhooks diff --git a/docs/pricing/README.mdx b/docs/pricing/README.mdx index 351eca5b..df072e86 100644 --- a/docs/pricing/README.mdx +++ b/docs/pricing/README.mdx @@ -1,6 +1,7 @@ --- title: Overview sidebar_position: 0 +description: "epilot's pricing engine for energy and utilities covers the full commercial lifecycle: product modeling, catalogs, pricing models, taxes, coupons, orders and online checkout." --- [[API Docs](/api/pricing)] [[SDK](https://www.npmjs.com/package/@epilot/pricing-client)] | Pricing Demo Playground diff --git a/docs/sdk/clients/access-token.md b/docs/sdk/clients/access-token.md index 953e7707..82f6e4ff 100644 --- a/docs/sdk/clients/access-token.md +++ b/docs/sdk/clients/access-token.md @@ -1,5 +1,6 @@ --- title: "Access Token API" +description: "TypeScript SDK client for the epilot Access Token API: usage with @epilot/sdk, all operations and schemas." --- # Access Token API diff --git a/docs/sdk/clients/address-suggestions.md b/docs/sdk/clients/address-suggestions.md index 69f9e62e..8b724318 100644 --- a/docs/sdk/clients/address-suggestions.md +++ b/docs/sdk/clients/address-suggestions.md @@ -1,5 +1,6 @@ --- title: "Address Suggestions API" +description: "TypeScript SDK client for the epilot Address Suggestions API: usage with @epilot/sdk, all operations and schemas." --- # Address Suggestions API diff --git a/docs/sdk/clients/address.md b/docs/sdk/clients/address.md index 382f0cdf..0ed0edff 100644 --- a/docs/sdk/clients/address.md +++ b/docs/sdk/clients/address.md @@ -1,5 +1,6 @@ --- title: "Address API" +description: "TypeScript SDK client for the epilot Address API: usage with @epilot/sdk, all operations and schemas." --- # Address API diff --git a/docs/sdk/clients/ai-agents.md b/docs/sdk/clients/ai-agents.md index fb7952fe..9f76b017 100644 --- a/docs/sdk/clients/ai-agents.md +++ b/docs/sdk/clients/ai-agents.md @@ -1,5 +1,6 @@ --- title: "AI Agents API - OpenAPI 3.0" +description: "TypeScript SDK client for the epilot AI Agents API - OpenAPI 3.0: usage with @epilot/sdk, all operations and schemas." --- # AI Agents API - OpenAPI 3.0 diff --git a/docs/sdk/clients/app.md b/docs/sdk/clients/app.md index 7217812b..a90e9ad5 100644 --- a/docs/sdk/clients/app.md +++ b/docs/sdk/clients/app.md @@ -1,5 +1,6 @@ --- title: "App API" +description: "TypeScript SDK client for the epilot App API: usage with @epilot/sdk, all operations and schemas." --- # App API diff --git a/docs/sdk/clients/audit-logs.md b/docs/sdk/clients/audit-logs.md index 2f4462ab..9a111055 100644 --- a/docs/sdk/clients/audit-logs.md +++ b/docs/sdk/clients/audit-logs.md @@ -1,5 +1,6 @@ --- title: "Audit Log" +description: "TypeScript SDK client for the epilot Audit Log: usage with @epilot/sdk, all operations and schemas." --- # Audit Log diff --git a/docs/sdk/clients/automation.md b/docs/sdk/clients/automation.md index e279b5e5..18d9a5ea 100644 --- a/docs/sdk/clients/automation.md +++ b/docs/sdk/clients/automation.md @@ -1,5 +1,6 @@ --- title: "Automation API" +description: "TypeScript SDK client for the epilot Automation API: usage with @epilot/sdk, all operations and schemas." --- # Automation API diff --git a/docs/sdk/clients/billing.md b/docs/sdk/clients/billing.md index 99900cc1..9f2bcd9b 100644 --- a/docs/sdk/clients/billing.md +++ b/docs/sdk/clients/billing.md @@ -1,5 +1,6 @@ --- title: "Billing API" +description: "TypeScript SDK client for the epilot Billing API: usage with @epilot/sdk, all operations and schemas." --- # Billing API diff --git a/docs/sdk/clients/blueprint-manifest.md b/docs/sdk/clients/blueprint-manifest.md index a8deabd3..e5c027f2 100644 --- a/docs/sdk/clients/blueprint-manifest.md +++ b/docs/sdk/clients/blueprint-manifest.md @@ -1,5 +1,6 @@ --- title: "Blueprint Manifest API" +description: "TypeScript SDK client for the epilot Blueprint Manifest API: usage with @epilot/sdk, all operations and schemas." --- # Blueprint Manifest API diff --git a/docs/sdk/clients/consent.md b/docs/sdk/clients/consent.md index 274650a4..3ccef7c8 100644 --- a/docs/sdk/clients/consent.md +++ b/docs/sdk/clients/consent.md @@ -1,5 +1,6 @@ --- title: "Consent API" +description: "TypeScript SDK client for the epilot Consent API: usage with @epilot/sdk, all operations and schemas." --- # Consent API diff --git a/docs/sdk/clients/customer-portal.md b/docs/sdk/clients/customer-portal.md index 7d625114..41304b09 100644 --- a/docs/sdk/clients/customer-portal.md +++ b/docs/sdk/clients/customer-portal.md @@ -1,5 +1,6 @@ --- title: "Portal API" +description: "TypeScript SDK client for the epilot Portal API: usage with @epilot/sdk, all operations and schemas." --- # Portal API diff --git a/docs/sdk/clients/dashboard.md b/docs/sdk/clients/dashboard.md index cdd0017b..eb024b09 100644 --- a/docs/sdk/clients/dashboard.md +++ b/docs/sdk/clients/dashboard.md @@ -1,5 +1,6 @@ --- title: "Dashboard API" +description: "TypeScript SDK client for the epilot Dashboard API: usage with @epilot/sdk, all operations and schemas." --- # Dashboard API diff --git a/docs/sdk/clients/data-governance.md b/docs/sdk/clients/data-governance.md index 29debd78..d41823bf 100644 --- a/docs/sdk/clients/data-governance.md +++ b/docs/sdk/clients/data-governance.md @@ -1,5 +1,6 @@ --- title: "Data Governance API" +description: "TypeScript SDK client for the epilot Data Governance API: usage with @epilot/sdk, all operations and schemas." --- # Data Governance API diff --git a/docs/sdk/clients/deduplication.md b/docs/sdk/clients/deduplication.md index 47a0045d..b22674dc 100644 --- a/docs/sdk/clients/deduplication.md +++ b/docs/sdk/clients/deduplication.md @@ -1,5 +1,6 @@ --- title: "Deduplication API" +description: "TypeScript SDK client for the epilot Deduplication API: usage with @epilot/sdk, all operations and schemas." --- # Deduplication API diff --git a/docs/sdk/clients/design.md b/docs/sdk/clients/design.md index d62fa33d..51d7f941 100644 --- a/docs/sdk/clients/design.md +++ b/docs/sdk/clients/design.md @@ -1,5 +1,6 @@ --- title: "Design Builder API v2" +description: "TypeScript SDK client for the epilot Design Builder API v2: usage with @epilot/sdk, all operations and schemas." --- # Design Builder API v2 diff --git a/docs/sdk/clients/document.md b/docs/sdk/clients/document.md index f612fb6f..f4b54099 100644 --- a/docs/sdk/clients/document.md +++ b/docs/sdk/clients/document.md @@ -1,5 +1,6 @@ --- title: "Document API" +description: "TypeScript SDK client for the epilot Document API: usage with @epilot/sdk, all operations and schemas." --- # Document API diff --git a/docs/sdk/clients/email-settings.md b/docs/sdk/clients/email-settings.md index 39672d42..ad20706b 100644 --- a/docs/sdk/clients/email-settings.md +++ b/docs/sdk/clients/email-settings.md @@ -1,5 +1,6 @@ --- title: "Messaging Settings API" +description: "TypeScript SDK client for the epilot Messaging Settings API: usage with @epilot/sdk, all operations and schemas." --- # Messaging Settings API diff --git a/docs/sdk/clients/email-template.md b/docs/sdk/clients/email-template.md index fb4d0083..2b84b1ba 100644 --- a/docs/sdk/clients/email-template.md +++ b/docs/sdk/clients/email-template.md @@ -1,5 +1,6 @@ --- title: "Email template API" +description: "TypeScript SDK client for the epilot Email template API: usage with @epilot/sdk, all operations and schemas." --- # Email template API diff --git a/docs/sdk/clients/entity-mapping.md b/docs/sdk/clients/entity-mapping.md index 2e373b56..5fd958cd 100644 --- a/docs/sdk/clients/entity-mapping.md +++ b/docs/sdk/clients/entity-mapping.md @@ -1,5 +1,6 @@ --- title: "Entity Mapping API" +description: "TypeScript SDK client for the epilot Entity Mapping API: usage with @epilot/sdk, all operations and schemas." --- # Entity Mapping API diff --git a/docs/sdk/clients/entity.md b/docs/sdk/clients/entity.md index 2474ec0e..031c7894 100644 --- a/docs/sdk/clients/entity.md +++ b/docs/sdk/clients/entity.md @@ -1,5 +1,6 @@ --- title: "Entity API" +description: "TypeScript SDK client for the epilot Entity API: usage with @epilot/sdk, all operations and schemas." --- # Entity API diff --git a/docs/sdk/clients/environments.md b/docs/sdk/clients/environments.md index 3ec47552..daebd8ee 100644 --- a/docs/sdk/clients/environments.md +++ b/docs/sdk/clients/environments.md @@ -1,5 +1,6 @@ --- title: "Environments API" +description: "TypeScript SDK client for the epilot Environments API: usage with @epilot/sdk, all operations and schemas." --- # Environments API diff --git a/docs/sdk/clients/erp-integration.md b/docs/sdk/clients/erp-integration.md index d8c5e9a6..000ef823 100644 --- a/docs/sdk/clients/erp-integration.md +++ b/docs/sdk/clients/erp-integration.md @@ -1,5 +1,6 @@ --- title: "ERP Integration API" +description: "TypeScript SDK client for the epilot ERP Integration API: usage with @epilot/sdk, all operations and schemas." --- # ERP Integration API diff --git a/docs/sdk/clients/event-catalog.md b/docs/sdk/clients/event-catalog.md index 8db8b838..db31de78 100644 --- a/docs/sdk/clients/event-catalog.md +++ b/docs/sdk/clients/event-catalog.md @@ -1,5 +1,6 @@ --- title: " Event Catalog API" +description: "TypeScript SDK client for the epilot Event Catalog API: usage with @epilot/sdk, all operations and schemas." --- # Event Catalog API diff --git a/docs/sdk/clients/file.md b/docs/sdk/clients/file.md index 5df31eb5..6f7463f0 100644 --- a/docs/sdk/clients/file.md +++ b/docs/sdk/clients/file.md @@ -1,5 +1,6 @@ --- title: "File API" +description: "TypeScript SDK client for the epilot File API: usage with @epilot/sdk, all operations and schemas." --- # File API diff --git a/docs/sdk/clients/iban.md b/docs/sdk/clients/iban.md index 70a8d4cc..68f7ac8f 100644 --- a/docs/sdk/clients/iban.md +++ b/docs/sdk/clients/iban.md @@ -1,5 +1,6 @@ --- title: "Iban API" +description: "TypeScript SDK client for the epilot Iban API: usage with @epilot/sdk, all operations and schemas." --- # Iban API diff --git a/docs/sdk/clients/journey.md b/docs/sdk/clients/journey.md index 717ae8d5..64023d85 100644 --- a/docs/sdk/clients/journey.md +++ b/docs/sdk/clients/journey.md @@ -1,5 +1,6 @@ --- title: "Journey API" +description: "TypeScript SDK client for the epilot Journey API: usage with @epilot/sdk, all operations and schemas." --- # Journey API diff --git a/docs/sdk/clients/kanban.md b/docs/sdk/clients/kanban.md index 7a02406f..76e82271 100644 --- a/docs/sdk/clients/kanban.md +++ b/docs/sdk/clients/kanban.md @@ -1,5 +1,6 @@ --- title: "Kanban API" +description: "TypeScript SDK client for the epilot Kanban API: usage with @epilot/sdk, all operations and schemas." --- # Kanban API diff --git a/docs/sdk/clients/message.md b/docs/sdk/clients/message.md index 6070c0ce..6bee3450 100644 --- a/docs/sdk/clients/message.md +++ b/docs/sdk/clients/message.md @@ -1,5 +1,6 @@ --- title: "Message API" +description: "TypeScript SDK client for the epilot Message API: usage with @epilot/sdk, all operations and schemas." --- # Message API diff --git a/docs/sdk/clients/metering.md b/docs/sdk/clients/metering.md index d073ec5e..a01d6bdb 100644 --- a/docs/sdk/clients/metering.md +++ b/docs/sdk/clients/metering.md @@ -1,5 +1,6 @@ --- title: "Metering API" +description: "TypeScript SDK client for the epilot Metering API: usage with @epilot/sdk, all operations and schemas." --- # Metering API diff --git a/docs/sdk/clients/notes.md b/docs/sdk/clients/notes.md index 0193a59e..340a6a4d 100644 --- a/docs/sdk/clients/notes.md +++ b/docs/sdk/clients/notes.md @@ -1,5 +1,6 @@ --- title: "Notes API" +description: "TypeScript SDK client for the epilot Notes API: usage with @epilot/sdk, all operations and schemas." --- # Notes API diff --git a/docs/sdk/clients/notification.md b/docs/sdk/clients/notification.md index a0ed0b1a..ac9e84d6 100644 --- a/docs/sdk/clients/notification.md +++ b/docs/sdk/clients/notification.md @@ -1,5 +1,6 @@ --- title: "Notification API" +description: "TypeScript SDK client for the epilot Notification API: usage with @epilot/sdk, all operations and schemas." --- # Notification API diff --git a/docs/sdk/clients/organization.md b/docs/sdk/clients/organization.md index 9c2ad79a..42109829 100644 --- a/docs/sdk/clients/organization.md +++ b/docs/sdk/clients/organization.md @@ -1,5 +1,6 @@ --- title: "Organization API" +description: "TypeScript SDK client for the epilot Organization API: usage with @epilot/sdk, all operations and schemas." --- # Organization API diff --git a/docs/sdk/clients/partner-directory.md b/docs/sdk/clients/partner-directory.md index f7930390..da94d86e 100644 --- a/docs/sdk/clients/partner-directory.md +++ b/docs/sdk/clients/partner-directory.md @@ -1,5 +1,6 @@ --- title: "Partner Directory API" +description: "TypeScript SDK client for the epilot Partner Directory API: usage with @epilot/sdk, all operations and schemas." --- # Partner Directory API diff --git a/docs/sdk/clients/permissions.md b/docs/sdk/clients/permissions.md index 6946d3df..a0f68348 100644 --- a/docs/sdk/clients/permissions.md +++ b/docs/sdk/clients/permissions.md @@ -1,5 +1,6 @@ --- title: "Permissions API" +description: "TypeScript SDK client for the epilot Permissions API: usage with @epilot/sdk, all operations and schemas." --- # Permissions API diff --git a/docs/sdk/clients/pricing-tier.md b/docs/sdk/clients/pricing-tier.md index 51733e4c..2cccffc1 100644 --- a/docs/sdk/clients/pricing-tier.md +++ b/docs/sdk/clients/pricing-tier.md @@ -1,5 +1,6 @@ --- title: "Pricing Tier API" +description: "TypeScript SDK client for the epilot Pricing Tier API: usage with @epilot/sdk, all operations and schemas." --- # Pricing Tier API diff --git a/docs/sdk/clients/pricing.md b/docs/sdk/clients/pricing.md index e5e6a289..70a267e3 100644 --- a/docs/sdk/clients/pricing.md +++ b/docs/sdk/clients/pricing.md @@ -1,5 +1,6 @@ --- title: "Pricing API" +description: "TypeScript SDK client for the epilot Pricing API: usage with @epilot/sdk, all operations and schemas." --- # Pricing API diff --git a/docs/sdk/clients/purpose.md b/docs/sdk/clients/purpose.md index e89aa4f1..0f0ee550 100644 --- a/docs/sdk/clients/purpose.md +++ b/docs/sdk/clients/purpose.md @@ -1,5 +1,6 @@ --- title: "Purpose API" +description: "TypeScript SDK client for the epilot Purpose API: usage with @epilot/sdk, all operations and schemas." --- # Purpose API diff --git a/docs/sdk/clients/sandbox.md b/docs/sdk/clients/sandbox.md index fe953806..9dcecff6 100644 --- a/docs/sdk/clients/sandbox.md +++ b/docs/sdk/clients/sandbox.md @@ -1,5 +1,6 @@ --- title: "Sandbox API" +description: "TypeScript SDK client for the epilot Sandbox API: usage with @epilot/sdk, all operations and schemas." --- # Sandbox API diff --git a/docs/sdk/clients/submission.md b/docs/sdk/clients/submission.md index 11f0a728..f0b7fb54 100644 --- a/docs/sdk/clients/submission.md +++ b/docs/sdk/clients/submission.md @@ -1,5 +1,6 @@ --- title: "Submission API" +description: "TypeScript SDK client for the epilot Submission API: usage with @epilot/sdk, all operations and schemas." --- # Submission API diff --git a/docs/sdk/clients/targeting.md b/docs/sdk/clients/targeting.md index 07c42390..9987fa29 100644 --- a/docs/sdk/clients/targeting.md +++ b/docs/sdk/clients/targeting.md @@ -1,5 +1,6 @@ --- title: "Targeting API" +description: "TypeScript SDK client for the epilot Targeting API: usage with @epilot/sdk, all operations and schemas." --- # Targeting API diff --git a/docs/sdk/clients/template-variables.md b/docs/sdk/clients/template-variables.md index b844b932..f39aebd1 100644 --- a/docs/sdk/clients/template-variables.md +++ b/docs/sdk/clients/template-variables.md @@ -1,5 +1,6 @@ --- title: "Template Variables API" +description: "TypeScript SDK client for the epilot Template Variables API: usage with @epilot/sdk, all operations and schemas." --- # Template Variables API diff --git a/docs/sdk/clients/user.md b/docs/sdk/clients/user.md index 6f86b7a7..0549fb8f 100644 --- a/docs/sdk/clients/user.md +++ b/docs/sdk/clients/user.md @@ -1,5 +1,6 @@ --- title: "User API" +description: "TypeScript SDK client for the epilot User API: usage with @epilot/sdk, all operations and schemas." --- # User API diff --git a/docs/sdk/clients/validation-rules.md b/docs/sdk/clients/validation-rules.md index 867b0549..df3b2900 100644 --- a/docs/sdk/clients/validation-rules.md +++ b/docs/sdk/clients/validation-rules.md @@ -1,5 +1,6 @@ --- title: "Validation Rules API" +description: "TypeScript SDK client for the epilot Validation Rules API: usage with @epilot/sdk, all operations and schemas." --- # Validation Rules API diff --git a/docs/sdk/clients/webhooks.md b/docs/sdk/clients/webhooks.md index b3c61f86..03ae1143 100644 --- a/docs/sdk/clients/webhooks.md +++ b/docs/sdk/clients/webhooks.md @@ -1,5 +1,6 @@ --- title: "Webhooks" +description: "TypeScript SDK client for the epilot Webhooks: usage with @epilot/sdk, all operations and schemas." --- # Webhooks diff --git a/docs/sdk/clients/workflow-definition.md b/docs/sdk/clients/workflow-definition.md index c45a5807..1d8e7fff 100644 --- a/docs/sdk/clients/workflow-definition.md +++ b/docs/sdk/clients/workflow-definition.md @@ -1,5 +1,6 @@ --- title: "Workflows Definitions" +description: "TypeScript SDK client for the epilot Workflows Definitions: usage with @epilot/sdk, all operations and schemas." --- # Workflows Definitions diff --git a/docs/sdk/clients/workflow.md b/docs/sdk/clients/workflow.md index 29440783..2cda8316 100644 --- a/docs/sdk/clients/workflow.md +++ b/docs/sdk/clients/workflow.md @@ -1,5 +1,6 @@ --- title: "Workflows Executions" +description: "TypeScript SDK client for the epilot Workflows Executions: usage with @epilot/sdk, all operations and schemas." --- # Workflows Executions diff --git a/scripts/update-cli-docs.sh b/scripts/update-cli-docs.sh index a9ff3084..687aefd7 100755 --- a/scripts/update-cli-docs.sh +++ b/scripts/update-cli-docs.sh @@ -38,6 +38,7 @@ for src_file in "$CLI_DOCS_SRC"/*.md; do { echo "---" echo "title: \"$title\"" + echo "description: \"epilot CLI commands for the $title: quick start, common flags and every operation, callable from the command line.\"" echo "---" echo "" cat "$src_file" diff --git a/scripts/update-sdk-docs.sh b/scripts/update-sdk-docs.sh index 4d126984..66edc497 100755 --- a/scripts/update-sdk-docs.sh +++ b/scripts/update-sdk-docs.sh @@ -36,6 +36,7 @@ for src_file in "$SDK_DOCS_SRC"/*.md; do { echo "---" echo "title: \"$title\"" + echo "description: \"TypeScript SDK client for the epilot $title: usage with @epilot/sdk, all operations and schemas.\"" echo "---" echo "" cat "$src_file" From 36f64518f6d174c2626b09431f68284aa50a8031 Mon Sep 17 00:00:00 2001 From: Viljami + Claude Date: Tue, 20 Oct 2026 06:13:31 +0000 Subject: [PATCH 3/5] fix: emit trailing-slash URLs to match what Amplify serves Amplify 301-redirects /docs/foo to /docs/foo/, so every canonical, og:url and sitemap pointed at a redirect. With trailingSlash: true the canonical, sitemap and internal links use the final URL. The SDK and CLI overview tables used route-relative links (clients/x), which only resolve correctly without the trailing slash. They are now file links (clients/x.md) that Docusaurus resolves to the page, and the update scripts generate them that way. Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_01Et6RzideGVXaP9rWvwx1QZ --- docs/cli/overview.md | 94 +++++++++++++++++++------------------- docs/sdk/overview.md | 80 ++++++++++++++++---------------- docusaurus.config.js | 4 ++ scripts/update-cli-docs.sh | 2 +- scripts/update-sdk-docs.sh | 4 +- static/robots.txt | 3 +- 6 files changed, 96 insertions(+), 91 deletions(-) diff --git a/docs/cli/overview.md b/docs/cli/overview.md index 34405e46..14fb83d7 100644 --- a/docs/cli/overview.md +++ b/docs/cli/overview.md @@ -300,56 +300,56 @@ epilot completion fish ## API Commands -Per-API command reference with all operations, parameters, and sample calls. See the [API Commands](commands/entity) section in the sidebar, or browse the table below. +Per-API command reference with all operations, parameters, and sample calls. See the [API Commands](commands/entity.md) section in the sidebar, or browse the table below. | API | Command | Reference | | --- | ------- | --------- | -| Access Token API | `epilot access-token` | [reference](commands/access-token) | -| Address Suggestions API | `epilot address-suggestions` | [reference](commands/address-suggestions) | -| Address API | `epilot address` | [reference](commands/address) | -| AI Agents API - OpenAPI 3.0 | `epilot ai-agents` | [reference](commands/ai-agents) | -| App API | `epilot app` | [reference](commands/app) | -| Audit Log | `epilot audit-logs` | [reference](commands/audit-logs) | -| Automation API | `epilot automation` | [reference](commands/automation) | -| Billing API | `epilot billing` | [reference](commands/billing) | -| Blueprint Manifest API | `epilot blueprint-manifest` | [reference](commands/blueprint-manifest) | -| Consent API | `epilot consent` | [reference](commands/consent) | -| Portal API | `epilot customer-portal` | [reference](commands/customer-portal) | -| Dashboard API | `epilot dashboard` | [reference](commands/dashboard) | -| Data Governance API | `epilot data-governance` | [reference](commands/data-governance) | -| Deduplication API | `epilot deduplication` | [reference](commands/deduplication) | -| Design Builder API v2 | `epilot design` | [reference](commands/design) | -| Document API | `epilot document` | [reference](commands/document) | -| Messaging Settings API | `epilot email-settings` | [reference](commands/email-settings) | -| Email template API | `epilot email-template` | [reference](commands/email-template) | -| Entity Mapping API | `epilot entity-mapping` | [reference](commands/entity-mapping) | -| Entity API | `epilot entity` | [reference](commands/entity) | -| Environments API | `epilot environments` | [reference](commands/environments) | -| ERP Integration API | `epilot erp-integration` | [reference](commands/erp-integration) | -| Event Catalog API | `epilot event-catalog` | [reference](commands/event-catalog) | -| File API | `epilot file` | [reference](commands/file) | -| Iban API | `epilot iban` | [reference](commands/iban) | -| Journey API | `epilot journey` | [reference](commands/journey) | -| Kanban API | `epilot kanban` | [reference](commands/kanban) | -| Message API | `epilot message` | [reference](commands/message) | -| Metering API | `epilot metering` | [reference](commands/metering) | -| Notes API | `epilot notes` | [reference](commands/notes) | -| Notification API | `epilot notification` | [reference](commands/notification) | -| Organization API | `epilot organization` | [reference](commands/organization) | -| Partner API | `epilot partner-directory` | [reference](commands/partner-directory) | -| Permissions API | `epilot permissions` | [reference](commands/permissions) | -| Pricing Tier API | `epilot pricing-tier` | [reference](commands/pricing-tier) | -| Pricing API | `epilot pricing` | [reference](commands/pricing) | -| Purpose API | `epilot purpose` | [reference](commands/purpose) | -| Sandbox API | `epilot sandbox` | [reference](commands/sandbox) | -| Submission API | `epilot submission` | [reference](commands/submission) | -| Targeting API | `epilot targeting` | [reference](commands/targeting) | -| Template Variables API | `epilot template-variables` | [reference](commands/template-variables) | -| User API | `epilot user` | [reference](commands/user) | -| Validation Rules API | `epilot validation-rules` | [reference](commands/validation-rules) | -| Webhooks | `epilot webhooks` | [reference](commands/webhooks) | -| Workflows Definitions | `epilot workflow-definition` | [reference](commands/workflow-definition) | -| Workflows Executions | `epilot workflow` | [reference](commands/workflow) | +| Access Token API | `epilot access-token` | [reference](commands/access-token.md) | +| Address Suggestions API | `epilot address-suggestions` | [reference](commands/address-suggestions.md) | +| Address API | `epilot address` | [reference](commands/address.md) | +| AI Agents API - OpenAPI 3.0 | `epilot ai-agents` | [reference](commands/ai-agents.md) | +| App API | `epilot app` | [reference](commands/app.md) | +| Audit Log | `epilot audit-logs` | [reference](commands/audit-logs.md) | +| Automation API | `epilot automation` | [reference](commands/automation.md) | +| Billing API | `epilot billing` | [reference](commands/billing.md) | +| Blueprint Manifest API | `epilot blueprint-manifest` | [reference](commands/blueprint-manifest.md) | +| Consent API | `epilot consent` | [reference](commands/consent.md) | +| Portal API | `epilot customer-portal` | [reference](commands/customer-portal.md) | +| Dashboard API | `epilot dashboard` | [reference](commands/dashboard.md) | +| Data Governance API | `epilot data-governance` | [reference](commands/data-governance.md) | +| Deduplication API | `epilot deduplication` | [reference](commands/deduplication.md) | +| Design Builder API v2 | `epilot design` | [reference](commands/design.md) | +| Document API | `epilot document` | [reference](commands/document.md) | +| Messaging Settings API | `epilot email-settings` | [reference](commands/email-settings.md) | +| Email template API | `epilot email-template` | [reference](commands/email-template.md) | +| Entity Mapping API | `epilot entity-mapping` | [reference](commands/entity-mapping.md) | +| Entity API | `epilot entity` | [reference](commands/entity.md) | +| Environments API | `epilot environments` | [reference](commands/environments.md) | +| ERP Integration API | `epilot erp-integration` | [reference](commands/erp-integration.md) | +| Event Catalog API | `epilot event-catalog` | [reference](commands/event-catalog.md) | +| File API | `epilot file` | [reference](commands/file.md) | +| Iban API | `epilot iban` | [reference](commands/iban.md) | +| Journey API | `epilot journey` | [reference](commands/journey.md) | +| Kanban API | `epilot kanban` | [reference](commands/kanban.md) | +| Message API | `epilot message` | [reference](commands/message.md) | +| Metering API | `epilot metering` | [reference](commands/metering.md) | +| Notes API | `epilot notes` | [reference](commands/notes.md) | +| Notification API | `epilot notification` | [reference](commands/notification.md) | +| Organization API | `epilot organization` | [reference](commands/organization.md) | +| Partner API | `epilot partner-directory` | [reference](commands/partner-directory.md) | +| Permissions API | `epilot permissions` | [reference](commands/permissions.md) | +| Pricing Tier API | `epilot pricing-tier` | [reference](commands/pricing-tier.md) | +| Pricing API | `epilot pricing` | [reference](commands/pricing.md) | +| Purpose API | `epilot purpose` | [reference](commands/purpose.md) | +| Sandbox API | `epilot sandbox` | [reference](commands/sandbox.md) | +| Submission API | `epilot submission` | [reference](commands/submission.md) | +| Targeting API | `epilot targeting` | [reference](commands/targeting.md) | +| Template Variables API | `epilot template-variables` | [reference](commands/template-variables.md) | +| User API | `epilot user` | [reference](commands/user.md) | +| Validation Rules API | `epilot validation-rules` | [reference](commands/validation-rules.md) | +| Webhooks | `epilot webhooks` | [reference](commands/webhooks.md) | +| Workflows Definitions | `epilot workflow-definition` | [reference](commands/workflow-definition.md) | +| Workflows Executions | `epilot workflow` | [reference](commands/workflow.md) | diff --git a/docs/sdk/overview.md b/docs/sdk/overview.md index f99f4a44..1a8f6767 100644 --- a/docs/sdk/overview.md +++ b/docs/sdk/overview.md @@ -88,7 +88,7 @@ authorize(entity, () => '') const { data } = await entity.getEntity({ slug: 'contact', id: '123' }) ``` -See [Client Usage](client-usage) for all import patterns. +See [Client Usage](client-usage.md) for all import patterns. ## Available APIs @@ -98,44 +98,44 @@ See [Client Usage](client-usage) for all import patterns. | API | Import | Reference | | --- | ------ | --------- | -| `epilot.accessToken` | `@epilot/sdk/access-token` | [SDK](clients/access-token) · [API](/api/access-token) | -| `epilot.addressSuggestions` | `@epilot/sdk/address-suggestions` | [SDK](clients/address-suggestions) · [API](/api/address-suggestions) | -| `epilot.app` | `@epilot/sdk/app` | [SDK](clients/app) · [API](/api/app) | -| `epilot.auditLogs` | `@epilot/sdk/audit-logs` | [SDK](clients/audit-logs) · [API](/api/audit-logs) | -| `epilot.automation` | `@epilot/sdk/automation` | [SDK](clients/automation) · [API](/api/automation) | -| `epilot.billing` | `@epilot/sdk/billing` | [SDK](clients/billing) · [API](/api/billing) | -| `epilot.blueprintManifest` | `@epilot/sdk/blueprint-manifest` | [SDK](clients/blueprint-manifest) · [API](/api/blueprints) | -| `epilot.consent` | `@epilot/sdk/consent` | [SDK](clients/consent) · [API](/api/consent) | -| `epilot.customerPortal` | `@epilot/sdk/customer-portal` | [SDK](clients/customer-portal) · [API](/api/customer-portal) | -| `epilot.dashboard` | `@epilot/sdk/dashboard` | [SDK](clients/dashboard) · [API](/api/dashboard) | -| `epilot.design` | `@epilot/sdk/design` | [SDK](clients/design) · [API](/api/design) | -| `epilot.document` | `@epilot/sdk/document` | [SDK](clients/document) · [API](/api/document) | -| `epilot.emailSettings` | `@epilot/sdk/email-settings` | [SDK](clients/email-settings) · [API](/api/email-settings) | -| `epilot.emailTemplate` | `@epilot/sdk/email-template` | [SDK](clients/email-template) · [API](/api/email-template) | -| `epilot.entity` | `@epilot/sdk/entity` | [SDK](clients/entity) · [API](/api/entity) | -| `epilot.entityMapping` | `@epilot/sdk/entity-mapping` | [SDK](clients/entity-mapping) · [API](/api/entity-mapping) | -| `epilot.environments` | `@epilot/sdk/environments` | [SDK](clients/environments) · [API](/api/environments) | -| `epilot.erpIntegration` | `@epilot/sdk/erp-integration` | [SDK](clients/erp-integration) · [API](/api/erp-integration) | -| `epilot.eventCatalog` | `@epilot/sdk/event-catalog` | [SDK](clients/event-catalog) · [API](/api/event-catalog) | -| `epilot.file` | `@epilot/sdk/file` | [SDK](clients/file) · [API](/api/file) | -| `epilot.journey` | `@epilot/sdk/journey` | [SDK](clients/journey) · [API](/api/journey) | -| `epilot.kanban` | `@epilot/sdk/kanban` | [SDK](clients/kanban) · [API](/api/kanban) | -| `epilot.message` | `@epilot/sdk/message` | [SDK](clients/message) · [API](/api/message) | -| `epilot.metering` | `@epilot/sdk/metering` | [SDK](clients/metering) · [API](/api/metering) | -| `epilot.notes` | `@epilot/sdk/notes` | [SDK](clients/notes) · [API](/api/notes) | -| `epilot.notification` | `@epilot/sdk/notification` | [SDK](clients/notification) · [API](/api/notification) | -| `epilot.organization` | `@epilot/sdk/organization` | [SDK](clients/organization) · [API](/api/organization) | -| `epilot.partnerDirectory` | `@epilot/sdk/partner-directory` | [SDK](clients/partner-directory) · [API](/api/partner) | -| `epilot.permissions` | `@epilot/sdk/permissions` | [SDK](clients/permissions) · [API](/api/permissions) | -| `epilot.pricing` | `@epilot/sdk/pricing` | [SDK](clients/pricing) · [API](/api/pricing) | -| `epilot.purpose` | `@epilot/sdk/purpose` | [SDK](clients/purpose) · [API](/api/purpose) | -| `epilot.submission` | `@epilot/sdk/submission` | [SDK](clients/submission) · [API](/api/submission) | -| `epilot.targeting` | `@epilot/sdk/targeting` | [SDK](clients/targeting) · [API](/api/targeting) | -| `epilot.templateVariables` | `@epilot/sdk/template-variables` | [SDK](clients/template-variables) · [API](/api/template-variables) | -| `epilot.user` | `@epilot/sdk/user` | [SDK](clients/user) · [API](/api/user) | -| `epilot.validationRules` | `@epilot/sdk/validation-rules` | [SDK](clients/validation-rules) · [API](/api/validation-rules) | -| `epilot.webhooks` | `@epilot/sdk/webhooks` | [SDK](clients/webhooks) · [API](/api/webhooks) | -| `epilot.workflow` | `@epilot/sdk/workflow` | [SDK](clients/workflow) · [API](/api/workflow-execution) | -| `epilot.workflowDefinition` | `@epilot/sdk/workflow-definition` | [SDK](clients/workflow-definition) · [API](/api/workflow-definition) | +| `epilot.accessToken` | `@epilot/sdk/access-token` | [SDK](clients/access-token.md) · [API](/api/access-token) | +| `epilot.addressSuggestions` | `@epilot/sdk/address-suggestions` | [SDK](clients/address-suggestions.md) · [API](/api/address-suggestions) | +| `epilot.app` | `@epilot/sdk/app` | [SDK](clients/app.md) · [API](/api/app) | +| `epilot.auditLogs` | `@epilot/sdk/audit-logs` | [SDK](clients/audit-logs.md) · [API](/api/audit-logs) | +| `epilot.automation` | `@epilot/sdk/automation` | [SDK](clients/automation.md) · [API](/api/automation) | +| `epilot.billing` | `@epilot/sdk/billing` | [SDK](clients/billing.md) · [API](/api/billing) | +| `epilot.blueprintManifest` | `@epilot/sdk/blueprint-manifest` | [SDK](clients/blueprint-manifest.md) · [API](/api/blueprints) | +| `epilot.consent` | `@epilot/sdk/consent` | [SDK](clients/consent.md) · [API](/api/consent) | +| `epilot.customerPortal` | `@epilot/sdk/customer-portal` | [SDK](clients/customer-portal.md) · [API](/api/customer-portal) | +| `epilot.dashboard` | `@epilot/sdk/dashboard` | [SDK](clients/dashboard.md) · [API](/api/dashboard) | +| `epilot.design` | `@epilot/sdk/design` | [SDK](clients/design.md) · [API](/api/design) | +| `epilot.document` | `@epilot/sdk/document` | [SDK](clients/document.md) · [API](/api/document) | +| `epilot.emailSettings` | `@epilot/sdk/email-settings` | [SDK](clients/email-settings.md) · [API](/api/email-settings) | +| `epilot.emailTemplate` | `@epilot/sdk/email-template` | [SDK](clients/email-template.md) · [API](/api/email-template) | +| `epilot.entity` | `@epilot/sdk/entity` | [SDK](clients/entity.md) · [API](/api/entity) | +| `epilot.entityMapping` | `@epilot/sdk/entity-mapping` | [SDK](clients/entity-mapping.md) · [API](/api/entity-mapping) | +| `epilot.environments` | `@epilot/sdk/environments` | [SDK](clients/environments.md) · [API](/api/environments) | +| `epilot.erpIntegration` | `@epilot/sdk/erp-integration` | [SDK](clients/erp-integration.md) · [API](/api/erp-integration) | +| `epilot.eventCatalog` | `@epilot/sdk/event-catalog` | [SDK](clients/event-catalog.md) · [API](/api/event-catalog) | +| `epilot.file` | `@epilot/sdk/file` | [SDK](clients/file.md) · [API](/api/file) | +| `epilot.journey` | `@epilot/sdk/journey` | [SDK](clients/journey.md) · [API](/api/journey) | +| `epilot.kanban` | `@epilot/sdk/kanban` | [SDK](clients/kanban.md) · [API](/api/kanban) | +| `epilot.message` | `@epilot/sdk/message` | [SDK](clients/message.md) · [API](/api/message) | +| `epilot.metering` | `@epilot/sdk/metering` | [SDK](clients/metering.md) · [API](/api/metering) | +| `epilot.notes` | `@epilot/sdk/notes` | [SDK](clients/notes.md) · [API](/api/notes) | +| `epilot.notification` | `@epilot/sdk/notification` | [SDK](clients/notification.md) · [API](/api/notification) | +| `epilot.organization` | `@epilot/sdk/organization` | [SDK](clients/organization.md) · [API](/api/organization) | +| `epilot.partnerDirectory` | `@epilot/sdk/partner-directory` | [SDK](clients/partner-directory.md) · [API](/api/partner) | +| `epilot.permissions` | `@epilot/sdk/permissions` | [SDK](clients/permissions.md) · [API](/api/permissions) | +| `epilot.pricing` | `@epilot/sdk/pricing` | [SDK](clients/pricing.md) · [API](/api/pricing) | +| `epilot.purpose` | `@epilot/sdk/purpose` | [SDK](clients/purpose.md) · [API](/api/purpose) | +| `epilot.submission` | `@epilot/sdk/submission` | [SDK](clients/submission.md) · [API](/api/submission) | +| `epilot.targeting` | `@epilot/sdk/targeting` | [SDK](clients/targeting.md) · [API](/api/targeting) | +| `epilot.templateVariables` | `@epilot/sdk/template-variables` | [SDK](clients/template-variables.md) · [API](/api/template-variables) | +| `epilot.user` | `@epilot/sdk/user` | [SDK](clients/user.md) · [API](/api/user) | +| `epilot.validationRules` | `@epilot/sdk/validation-rules` | [SDK](clients/validation-rules.md) · [API](/api/validation-rules) | +| `epilot.webhooks` | `@epilot/sdk/webhooks` | [SDK](clients/webhooks.md) · [API](/api/webhooks) | +| `epilot.workflow` | `@epilot/sdk/workflow` | [SDK](clients/workflow.md) · [API](/api/workflow-execution) | +| `epilot.workflowDefinition` | `@epilot/sdk/workflow-definition` | [SDK](clients/workflow-definition.md) · [API](/api/workflow-definition) | diff --git a/docusaurus.config.js b/docusaurus.config.js index d02b0bd7..c5b717ae 100644 --- a/docusaurus.config.js +++ b/docusaurus.config.js @@ -19,6 +19,10 @@ const DOCS_URL = process.env.DOCS_URL || 'https://docs.epilot.io' tagline: 'The Energy XRM - for developers.', url: DOCS_URL, baseUrl: '/', + // Amplify serves every page from /index.html and 301-redirects + // /route to /route/. Emit trailing-slash URLs everywhere (links, canonical, + // og:url, sitemap) so they point at the final URL instead of a redirect. + trailingSlash: true, onBrokenLinks: 'throw', onBrokenMarkdownLinks: 'warn', favicon: 'img/favicon.svg', diff --git a/scripts/update-cli-docs.sh b/scripts/update-cli-docs.sh index 687aefd7..9161dbb5 100755 --- a/scripts/update-cli-docs.sh +++ b/scripts/update-cli-docs.sh @@ -86,7 +86,7 @@ for doc_file in "$CLI_DOCS_DEST"/*.md; do # Extract title from the first H1 line (skip frontmatter) title="$(grep -m1 '^# ' "$doc_file" | sed 's/^# //')" TABLE_LINES="$TABLE_LINES -| $title | \`epilot $slug\` | [reference](commands/$slug) |" +| $title | \`epilot $slug\` | [reference](commands/$slug.md) |" done # Replace the table between markers in overview.md diff --git a/scripts/update-sdk-docs.sh b/scripts/update-sdk-docs.sh index 66edc497..869e1133 100755 --- a/scripts/update-sdk-docs.sh +++ b/scripts/update-sdk-docs.sh @@ -147,7 +147,7 @@ if [ -f "$SDK_README" ]; then continue fi TABLE_LINES="$TABLE_LINES -| $api_name | $import_path | [SDK](clients/$slug) · [API]($api_route) |" +| $api_name | $import_path | [SDK](clients/$slug.md) · [API]($api_route) |" fi done < "$SDK_README" else @@ -160,7 +160,7 @@ else continue fi TABLE_LINES="$TABLE_LINES -| \`@epilot/sdk/$slug\` | \`@epilot/sdk/$slug\` | [SDK](clients/$slug) · [API]($api_route) |" +| \`@epilot/sdk/$slug\` | \`@epilot/sdk/$slug\` | [SDK](clients/$slug.md) · [API]($api_route) |" done fi diff --git a/static/robots.txt b/static/robots.txt index 40310a19..4124f8f7 100644 --- a/static/robots.txt +++ b/static/robots.txt @@ -3,7 +3,8 @@ # and AI agents. LLM-friendly resources: # - /llms.txt (index for LLM agents, https://llmstxt.org/) # - /llms-full.txt (complete documentation in one file) -# - append .md to any docs URL for the raw markdown version +# - append .md to any docs URL (without the trailing slash) for the raw +# markdown version, e.g. /docs/intro.md User-agent: * Allow: / From f01dcdbf519f6663ae9af25dee934da11f20a78f Mon Sep 17 00:00:00 2001 From: Viljami + Claude Date: Tue, 20 Oct 2026 06:13:42 +0000 Subject: [PATCH 4/5] feat(llms-txt): follow the llms.txt spec and stop mangling code samples - llms.txt: blockquote summary under the H1, one H2 section per sidebar section with its sidebar label (instead of H3 path groups), descriptions for pages without frontmatter description taken from the rendered meta description, a "Documentation sets" section and an "Optional" section with the API changelog and the apis.json discovery document. - llms-full.txt: every page gets a canonical "Source:" URL; only pages that were built are included. Each docs section also gets its own docs/
/llms-full.txt, since the full file is several MB. - Markdown cleanup now skips fenced code blocks and inline code. It used to strip "import" lines and every {...} span, so TypeScript samples lost their imports and JSON samples lost their objects in the .md pages and llms-full.txt. Simple HTML (spacer paragraphs, headings, img) becomes markdown. - The frontmatter description now follows the page H1 instead of preceding it. Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_01Et6RzideGVXaP9rWvwx1QZ --- docusaurus.config.js | 4 +- src/plugins/llms-txt/index.js | 413 +++++++++++++++++++++++----------- 2 files changed, 290 insertions(+), 127 deletions(-) diff --git a/docusaurus.config.js b/docusaurus.config.js index c5b717ae..b02b5f0a 100644 --- a/docusaurus.config.js +++ b/docusaurus.config.js @@ -135,7 +135,9 @@ const DOCS_URL = process.env.DOCS_URL || 'https://docs.epilot.io' [ require.resolve('./src/plugins/llms-txt/index.js'), { - siteDescription: `epilot is a cloud-native SaaS platform (Energy XRM) designed for energy suppliers and service providers in the German energy market. + siteSummary: + 'Developer documentation for epilot, the energy XRM: a cloud-native SaaS platform for energy suppliers, grid operators and service providers in the German energy market. Covers the REST APIs, TypeScript SDK, CLI, Apps and every platform capability.', + siteDescription: `epilot is a cloud-native SaaS platform (energy XRM) designed for energy suppliers and service providers in the German energy market. The platform provides: - **Entity Management**: Flexible data modeling with schemas for contacts, products, orders, opportunities, and custom entities diff --git a/src/plugins/llms-txt/index.js b/src/plugins/llms-txt/index.js index f0035663..6781c2d4 100644 --- a/src/plugins/llms-txt/index.js +++ b/src/plugins/llms-txt/index.js @@ -7,30 +7,45 @@ const matter = require('gray-matter'); const PLUGIN_NAME = 'docusaurus-plugin-llms-txt'; /** - * Cleans markdown content for LLM consumption. - * Removes MDX-specific syntax, JSX components, and other non-standard markdown. + * Cleans the prose of an MDX document: removes imports/exports, JSX + * components and expressions, converts admonitions to blockquotes and simple + * HTML (spacer paragraphs, headings, paragraphs, images) to markdown. + * Inline code spans are left untouched. */ -function cleanMarkdownForLlm(content) { - let cleaned = content; +function cleanProse(prose) { + const codeSpans = []; + let cleaned = prose.replace(/`[^`\n]+`/g, (span) => { + codeSpans.push(span); - // Remove import statements - cleaned = cleaned.replace(/^import\s+.*?(?:from\s+)?['"].*?['"];?\s*$/gm, ''); + return `\u0000${codeSpans.length - 1}\u0000`; + }); - // Remove export statements + // Remove import and export statements + cleaned = cleaned.replace(/^import\s+.*?(?:from\s+)?['"].*?['"];?\s*$/gm, ''); cleaned = cleaned.replace(/^export\s+(?:default\s+)?.*?;?\s*$/gm, ''); - // Remove JSX self-closing components like + // Remove JSX components (self-closing, with content, and leftover tags) cleaned = cleaned.replace(/<[A-Z][a-zA-Z0-9]*\s*[^>]*\/>/g, ''); - - // Remove JSX opening and closing tags with content cleaned = cleaned.replace(/<[A-Z][a-zA-Z0-9]*[^>]*>[\s\S]*?<\/[A-Z][a-zA-Z0-9]*>/g, ''); - - // Remove remaining JSX tags cleaned = cleaned.replace(/<[A-Z][a-zA-Z0-9]*[^>]*>/g, ''); cleaned = cleaned.replace(/<\/[A-Z][a-zA-Z0-9]*>/g, ''); - // Remove MDX expressions {expression} - cleaned = cleaned.replace(/\{[^}]+\}/g, ''); + // Remove single-line MDX expressions {expression} + cleaned = cleaned.replace(/\{[^{}\n]+\}/g, ''); + + // Simple HTML to markdown + cleaned = cleaned.replace(/^[ \t]*

(?: |\s)*<\/p>[ \t]*$/gm, ''); + cleaned = cleaned.replace(/]*>/g, (tag) => { + const src = tag.match(/\ssrc="([^"]+)"/)?.[1]; + const alt = tag.match(/\salt="([^"]*)"/)?.[1] || ''; + + return src ? `![${alt}](${src})` : ''; + }); + cleaned = cleaned.replace( + /^[ \t]*]*>(.*?)<\/h\1>[ \t]*$/gm, + (_, level, text) => `${'#'.repeat(Number(level))} ${text.trim()}`, + ); + cleaned = cleaned.replace(/^[ \t]*]*>(.*?)<\/p>[ \t]*$/gm, '$1'); // Clean up Docusaurus admonitions - convert to blockquotes cleaned = cleaned.replace(/^:::\s*(note|tip|info|warning|danger|caution)(?:\s+(.+?))?$/gm, (_, type, title) => { @@ -43,14 +58,47 @@ function cleanMarkdownForLlm(content) { // Remove HTML comments cleaned = cleaned.replace(//g, ''); - // Remove multiple consecutive blank lines (keep max 2) - cleaned = cleaned.replace(/\n{3,}/g, '\n\n'); + // eslint-disable-next-line no-control-regex + return cleaned.replace(/\u0000(\d+)\u0000/g, (_, index) => codeSpans[Number(index)]); +} + +/** + * Cleans markdown content for LLM consumption. MDX-specific syntax is only + * removed from prose: fenced code blocks are kept verbatim, so code samples + * keep their imports, JSX and JSON objects. + */ +function cleanMarkdownForLlm(content) { + const output = []; + let prose = []; + let fence = null; + + for (const line of content.split('\n')) { + const marker = line.match(/^\s*(`{3,}|~{3,})/)?.[1]; + + if (fence) { + output.push(line); + if (marker && marker[0] === fence[0] && marker.length >= fence.length && line.trim() === marker) fence = null; + } else if (marker) { + output.push(cleanProse(prose.join('\n'))); + prose = []; + output.push(line); + fence = marker; + } else { + prose.push(line); + } + } + output.push(cleanProse(prose.join('\n'))); - return cleaned.trim(); + // Remove multiple consecutive blank lines (keep max 2) + return output + .join('\n') + .replace(/\n{3,}/g, '\n\n') + .trim(); } /** - * Generates plain text content from a markdown source file. + * Generates plain markdown content from a source file: the page's H1 (its own + * or the frontmatter title), then the frontmatter description, then the body. */ async function generatePageContent(filePath) { if (!(await fs.pathExists(filePath))) { @@ -59,23 +107,17 @@ async function generatePageContent(filePath) { const fileContent = await fs.readFile(filePath, 'utf-8'); const { data: frontMatter, content } = matter(fileContent); - const cleanedContent = cleanMarkdownForLlm(content); - - let result = ''; - - const title = frontMatter.title || frontMatter.sidebar_label; - // Skip the frontmatter title when the body already opens with its own H1. - if (title && !/^#\s/.test(cleanedContent)) { - result += `# ${title}\n\n`; - } - - if (frontMatter.description) { - result += `${frontMatter.description}\n\n`; + let body = cleanMarkdownForLlm(content); + + let heading = ''; + if (/^#\s/.test(body)) { + [heading] = body.split('\n', 1); + body = body.slice(heading.length).trim(); + } else if (frontMatter.title || frontMatter.sidebar_label) { + heading = `# ${frontMatter.title || frontMatter.sidebar_label}`; } - result += cleanedContent; - - return result; + return [heading, frontMatter.description, body].filter(Boolean).join('\n\n'); } // Docusaurus strips number prefixes like "1-entities" from path segments. @@ -147,7 +189,94 @@ async function collectDocs(siteDir) { return docs; } -const docTitle = (doc) => doc.frontMatter.title || doc.frontMatter.sidebar_label || doc.route.split('/').pop(); +/** Title as shown on the page: frontmatter title, else the page's own H1, else its URL segment. */ +const docTitle = (doc, content) => + doc.frontMatter.title || + doc.frontMatter.sidebar_label || + content.match(/^#\s+(.+)$/m)?.[1].trim() || + doc.route.split('/').pop(); + +const HTML_ENTITIES = { amp: '&', lt: '<', gt: '>', quot: '"', apos: "'", nbsp: ' ' }; + +function decodeHtmlEntities(text) { + return text.replace(/&(#x[0-9a-f]+|#\d+|[a-z]+);/gi, (match, entity) => { + if (entity[0] === '#') { + const code = entity[1].toLowerCase() === 'x' ? parseInt(entity.slice(2), 16) : parseInt(entity.slice(1), 10); + + return String.fromCodePoint(code); + } + + return HTML_ENTITIES[entity.toLowerCase()] ?? match; + }); +} + +/** + * Reads the meta description Docusaurus rendered for a page: the frontmatter + * `description`, or else its own excerpt of the first paragraph. Excerpts that + * are only a link row ("[API Docs] [SDK]"), a list item or whitespace are + * dropped rather than shown as a description. + */ +async function readBuiltDescription(htmlPath) { + const html = await fs.readFile(htmlPath, 'utf-8'); + const match = html.match(/]*name="description"[^>]*content="([^"]*)"/); + if (!match) return undefined; + + const description = decodeHtmlEntities(match[1]).replace(/\s+/g, ' ').trim(); + if (description.length < 30 || /^(\[|- |\* )/.test(description) || /^@[\w/.-]+$/.test(description)) return undefined; + + return description; +} + +/** + * Reads the label and position of a top-level docs section from its + * _category_.json / _category_.yml, as shown in the sidebar. + */ +async function readCategory(siteDir, section) { + const dir = path.join(siteDir, 'docs', section); + for (const name of ['_category_.json', '_category_.yml', '_category_.yaml']) { + const file = path.join(dir, name); + if (!(await fs.pathExists(file))) continue; + + const raw = await fs.readFile(file, 'utf-8'); + if (name.endsWith('.json')) { + const { label, position } = JSON.parse(raw); + + return { label, position }; + } + + const label = raw.match(/^label:\s*['"]?(.+?)['"]?\s*$/m)?.[1]; + const position = raw.match(/^position:\s*(\d+)/m)?.[1]; + + return { label, position: position === undefined ? undefined : Number(position) }; + } + + return {}; +} + +/** + * Groups doc items by their top-level docs section (/docs/

/...), + * ordered like the sidebar. Single top-level pages such as /docs/intro form + * their own section named after the page. + */ +async function groupBySection(siteDir, items) { + const sections = new Map(); + + for (const item of items) { + const key = item.path.split('/').filter(Boolean)[1] || ''; + if (!sections.has(key)) sections.set(key, { key, items: [] }); + sections.get(key).items.push(item); + } + + for (const section of sections.values()) { + const { label, position } = await readCategory(siteDir, section.key); + const isSinglePage = section.items.length === 1 && section.items[0].path === `/docs/${section.key}`; + section.label = label || (isSinglePage ? section.items[0].title : section.key); + // The docs landing page always comes first. + section.position = section.key === 'intro' ? -1 : position ?? Number.MAX_SAFE_INTEGER; + } + + return [...sections.values()].sort((a, b) => a.position - b.position || a.label.localeCompare(b.label)); +} /** * Loads the OpenAPI spec list from redoc.config.js for the llms.txt APIs section. @@ -169,34 +298,44 @@ function loadApiSpecs(siteDir) { } } +const formatSize = (bytes) => + bytes >= 1024 * 1024 ? `${(bytes / 1024 / 1024).toFixed(1)} MB` : `${Math.ceil(bytes / 1024)} KB`; + /** - * Generates the root llms.txt content with agent instructions and a page index. + * Generates the root llms.txt following https://llmstxt.org/: H1 title, + * blockquote summary, free-form details, then H2 sections of + * "- [Title](url): description" links, ending with an "Optional" section. */ -function generateRootLlmsTxt(siteConfig, items, siteDescription, apiSpecs) { +function generateRootLlmsTxt({ siteConfig, pageUrl, sections, siteSummary, siteDescription, apiSpecs, docSets }) { const siteUrl = siteConfig.url; const lines = []; lines.push(`# ${siteConfig.title}`); lines.push(''); + const summary = siteSummary || siteConfig.tagline; + if (summary) { + lines.push(`> ${summary}`); + lines.push(''); + } + if (siteDescription) { lines.push(siteDescription); lines.push(''); - } else if (siteConfig.tagline) { - lines.push(siteConfig.tagline); - lines.push(''); } lines.push('## Instructions for LLM agents'); lines.push(''); lines.push( - '- Every documentation page is available as raw markdown by appending `.md` to its URL (e.g. `' + + '- Every documentation page is available as raw markdown by appending `.md` to its URL without the trailing slash (e.g. `' + siteUrl + - '/docs/intro.md`). Prefer the markdown version over the HTML page.', + '/docs/intro.md`). The links below point at those markdown versions. Prefer them over the HTML pages.', + ); + lines.push( + `- The complete documentation in a single file: ${siteUrl}/llms-full.txt. Smaller per-section files are listed under "Documentation sets".`, ); - lines.push(`- The complete documentation in a single file: ${siteUrl}/llms-full.txt`); lines.push( - '- REST API contracts are published as raw OpenAPI 3.0 YAML specs (see the APIs section below). Use the spec, not the HTML API reference pages, which render client-side.', + '- REST API contracts are published as raw OpenAPI specs (see the APIs section below). Use the spec, not the HTML API reference pages, which render client-side.', ); lines.push( '- Official TypeScript SDK: `@epilot/sdk` on npm, plus per-API clients (e.g. `@epilot/entity-client`, `@epilot/pricing-client`). Check the npm registry for current versions instead of relying on memorized ones.', @@ -206,45 +345,66 @@ function generateRootLlmsTxt(siteConfig, items, siteDescription, apiSpecs) { if (apiSpecs.length > 0) { lines.push('## APIs'); lines.push(''); - lines.push('Raw OpenAPI 3.0 specifications for every epilot API:'); - lines.push(''); for (const spec of apiSpecs) { - lines.push(`- [${spec.title}](${spec.specUrl}): reference at ${siteUrl}${spec.routePath}`); + lines.push( + `- [${spec.title}](${spec.specUrl}): OpenAPI spec. Human-readable reference: ${pageUrl(spec.routePath)}`, + ); } lines.push(''); } - lines.push('## Documentation Pages'); - lines.push(''); - - // Group items by top-level path - const grouped = new Map(); - - for (const item of items) { - const pathParts = item.path.split('/').filter(Boolean); - const groupKey = pathParts.length > 1 ? `/${pathParts[0]}/${pathParts[1]}` : `/${pathParts[0] || ''}`; - - if (!grouped.has(groupKey)) { - grouped.set(groupKey, []); - } - grouped.get(groupKey).push(item); - } - - for (const [groupPath, groupItems] of grouped) { - lines.push(`### ${groupPath}`); + for (const section of sections) { + lines.push(`## ${section.label}`); lines.push(''); - - for (const item of groupItems) { - const fullUrl = `${siteUrl}${item.path}`; + for (const item of section.items) { const description = item.description ? `: ${item.description}` : ''; - lines.push(`- [${item.title}](${fullUrl}.md)${description}`); + lines.push(`- [${item.title}](${siteUrl}${item.path}.md)${description}`); } lines.push(''); } - lines.push('---'); + lines.push('## Documentation sets'); + lines.push(''); + for (const set of docSets) { + lines.push(`- [${set.title}](${set.url}): ${set.description} (${formatSize(set.bytes)})`); + } + lines.push(''); + + lines.push('## Optional'); + lines.push(''); + lines.push( + `- [API Changelog](${pageUrl( + '/api/changelog', + )}): Breaking changes, new features, and significant updates to epilot APIs, newest first. Also available as RSS at ${siteUrl}/api/changelog/rss.xml`, + ); + lines.push( + `- [API discovery document](${siteUrl}/openapi-specs/apis.json): Machine-readable list of every epilot API with its OpenAPI spec URL and base URL.`, + ); lines.push(''); - lines.push('> This file follows the llms.txt standard. See: https://llmstxt.org/'); + + return lines.join('\n'); +} + +/** + * Builds an llms-full style document: a header, then each page with its + * canonical Source URL, separated by horizontal rules. + */ +function generateFullText(heading, intro, pages) { + const lines = [`# ${heading}`, '']; + if (intro) lines.push(intro, ''); + lines.push('---', ''); + + for (const { url, content } of pages) { + // Put the Source line right below the page's H1 (generatePageContent + // always starts the page with one when the page has a title). + const [firstLine, ...rest] = content.split('\n'); + if (/^#\s/.test(firstLine)) { + lines.push(firstLine, '', `Source: ${url}`, ...rest); + } else { + lines.push(`Source: ${url}`, '', content); + } + lines.push('', '---', ''); + } return lines.join('\n'); } @@ -254,18 +414,20 @@ function generateRootLlmsTxt(siteConfig, items, siteDescription, apiSpecs) { * @param {object} options */ module.exports = function pluginLlmsTxt(_context, options = {}) { - const { siteDescription } = options; + const { siteSummary, siteDescription } = options; return { name: PLUGIN_NAME, async postBuild({ siteConfig, outDir, siteDir }) { const allDocs = await collectDocs(siteDir); + const siteUrl = siteConfig.url; + // Canonical page URL, matching the site's trailingSlash setting. + const pageUrl = (route) => `${siteUrl}${route}${siteConfig.trailingSlash && !route.endsWith('/') ? '/' : ''}`; console.log(`[${PLUGIN_NAME}] Found ${allDocs.length} doc files to process.`); - const items = []; - let successCount = 0; + const pages = []; let unresolvedCount = 0; // Generate per-page markdown (.md) and legacy llms.txt files @@ -278,7 +440,8 @@ module.exports = function pluginLlmsTxt(_context, options = {}) { // Only emit for routes that exist in the build output, so llms.txt // never links to pages that 404. const routeDir = path.join(outDir, doc.route); - if (!(await fs.pathExists(path.join(routeDir, 'index.html')))) { + const htmlPath = path.join(routeDir, 'index.html'); + if (!(await fs.pathExists(htmlPath))) { unresolvedCount++; console.warn(`[${PLUGIN_NAME}] No built page for ${doc.relativePath} at ${doc.route}, skipping.`); @@ -290,13 +453,13 @@ module.exports = function pluginLlmsTxt(_context, options = {}) { // Legacy per-page llms.txt location, kept for existing consumers await fs.writeFile(path.join(routeDir, 'llms.txt'), content, 'utf-8'); - successCount++; - // Collect metadata for root index - items.push({ + pages.push({ path: doc.route, - title: docTitle(doc), - description: doc.frontMatter.description, + url: pageUrl(doc.route), + title: docTitle(doc, content), + description: await readBuiltDescription(htmlPath), + content, }); } catch (err) { console.error(`[${PLUGIN_NAME}] Failed to process ${doc.relativePath}:`, err.message); @@ -305,57 +468,55 @@ module.exports = function pluginLlmsTxt(_context, options = {}) { ); console.log( - `[${PLUGIN_NAME}] Generated ${successCount} per-page .md/llms.txt files` + + `[${PLUGIN_NAME}] Generated ${pages.length} per-page .md/llms.txt files` + (unresolvedCount ? ` (${unresolvedCount} files had no matching route).` : '.'), ); - // Sort items by path - items.sort((a, b) => a.path.localeCompare(b.path)); - - const apiSpecs = loadApiSpecs(siteDir); - - // Generate root llms.txt - try { - const rootContent = generateRootLlmsTxt(siteConfig, items, siteDescription, apiSpecs); - const rootPath = path.join(outDir, 'llms.txt'); - await fs.writeFile(rootPath, rootContent, 'utf-8'); - console.log(`[${PLUGIN_NAME}] Generated root llms.txt with ${items.length} entries.`); - } catch (err) { - console.error(`[${PLUGIN_NAME}] Failed to generate root llms.txt:`, err.message); - throw err; - } - - // Generate llms-full.txt with all docs concatenated - try { - const fullLines = []; - fullLines.push(`# ${siteConfig.title} - Complete Documentation`); - fullLines.push(''); - - if (siteDescription) { - fullLines.push(siteDescription); - } else if (siteConfig.tagline) { - fullLines.push(siteConfig.tagline); - } - fullLines.push(''); - fullLines.push('---'); - fullLines.push(''); - - for (const { fullPath } of allDocs.sort((a, b) => a.relativePath.localeCompare(b.relativePath))) { - const content = await generatePageContent(fullPath); - if (content) { - fullLines.push(content); - fullLines.push(''); - fullLines.push('---'); - fullLines.push(''); - } - } - - const fullPath = path.join(outDir, 'llms-full.txt'); - await fs.writeFile(fullPath, fullLines.join('\n'), 'utf-8'); - console.log(`[${PLUGIN_NAME}] Generated llms-full.txt.`); - } catch (err) { - console.error(`[${PLUGIN_NAME}] Failed to generate llms-full.txt:`, err.message); + pages.sort((a, b) => a.path.localeCompare(b.path)); + const sections = await groupBySection(siteDir, pages); + + // llms-full.txt with every page, plus one file per multi-page section + const docSets = []; + const writeFullText = async (relativePath, title, description, heading, intro, sectionPages) => { + const text = generateFullText(heading, intro, sectionPages); + await fs.outputFile(path.join(outDir, relativePath), text, 'utf-8'); + docSets.push({ title, description, url: `${siteUrl}/${relativePath}`, bytes: Buffer.byteLength(text) }); + }; + + await writeFullText( + 'llms-full.txt', + 'Complete documentation', + 'Every documentation page in one markdown file.', + `${siteConfig.title} - Complete Documentation`, + siteSummary || siteConfig.tagline, + pages, + ); + for (const section of sections) { + if (section.items.length < 2) continue; + await writeFullText( + `docs/${section.key}/llms-full.txt`, + section.label, + `All ${section.items.length} pages of the ${section.label} section in one markdown file.`, + `${siteConfig.title} - ${section.label}`, + undefined, + section.items, + ); } + console.log(`[${PLUGIN_NAME}] Generated llms-full.txt and ${docSets.length - 1} per-section files.`); + + const rootContent = generateRootLlmsTxt({ + siteConfig, + pageUrl, + sections, + siteSummary, + siteDescription, + apiSpecs: loadApiSpecs(siteDir), + docSets, + }); + await fs.writeFile(path.join(outDir, 'llms.txt'), rootContent, 'utf-8'); + console.log( + `[${PLUGIN_NAME}] Generated root llms.txt with ${pages.length} entries in ${sections.length} sections.`, + ); }, }; }; From e8f233f450ded194c156856c12c5fe793e942b96 Mon Sep 17 00:00:00 2001 From: Viljami + Claude Date: Tue, 20 Oct 2026 06:17:53 +0000 Subject: [PATCH 5/5] feat(seo): page descriptions, og:image, JSON-LD and markdown/OpenAPI alternates - Home: real title and meta description (it had none) plus WebSite and Organization JSON-LD. - Docs pages: to the .md version the llms-txt plugin publishes, and TechArticle JSON-LD built from the page title and description (DocItem wrapper). - API reference pages: per-API description instead of "Open API Reference Docs for the API", an alternate link to the OpenAPI spec, and the API name, description and spec link rendered server-side while the client-side reference loads (the static HTML had no content at all). - /api: "REST API Reference" title instead of "Getting Started". - Changelog entries: use the entry excerpt as description, not the title. - Default og:image/twitter:image (the square logo, with a summary card). - "energy XRM" casing in the tagline and copy. Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_01Et6RzideGVXaP9rWvwx1QZ --- docs/apps/overview.md | 2 +- docusaurus.config.js | 6 ++- src/components/HeroSection.tsx | 2 +- src/components/JsonLd.tsx | 21 +++++++++ src/components/QuickStartCards.tsx | 2 +- src/components/RedocPage.module.css | 9 ++++ src/components/RedocPage.tsx | 26 +++++++++-- src/pages/api.tsx | 5 +- src/pages/index.tsx | 19 +++++++- .../changelog/theme/ChangelogPage/index.tsx | 8 +++- src/theme/DocItem/index.tsx | 46 +++++++++++++++++++ src/utils/structured-data.ts | 19 ++++++++ 12 files changed, 154 insertions(+), 11 deletions(-) create mode 100644 src/components/JsonLd.tsx create mode 100644 src/theme/DocItem/index.tsx create mode 100644 src/utils/structured-data.ts diff --git a/docs/apps/overview.md b/docs/apps/overview.md index 94a139de..ba3c49b1 100644 --- a/docs/apps/overview.md +++ b/docs/apps/overview.md @@ -10,7 +10,7 @@ import DocCards from '@site/src/components/DocCards'; # Build Apps for epilot -epilot is the Energy XRM that Apps extend. Add custom UI to entity pages, journeys, and portals, run your own code inside flows, and connect external systems — then install your App privately or publish it to the epilot Marketplace. +epilot is the energy XRM that Apps extend. Add custom UI to entity pages, journeys, and portals, run your own code inside flows, and connect external systems — then install your App privately or publish it to the epilot Marketplace. ## Get started diff --git a/docusaurus.config.js b/docusaurus.config.js index b02b5f0a..0205563e 100644 --- a/docusaurus.config.js +++ b/docusaurus.config.js @@ -16,7 +16,7 @@ const DOCS_URL = process.env.DOCS_URL || 'https://docs.epilot.io' ;( module.exports = { title: 'epilot dev center', - tagline: 'The Energy XRM - for developers.', + tagline: 'The energy XRM - for developers.', url: DOCS_URL, baseUrl: '/', // Amplify serves every page from /index.html and 301-redirects @@ -187,6 +187,10 @@ This documentation covers all aspects of the epilot platform for developers, adm colorMode: { respectPrefersColorScheme: true, }, + // Default og:image / twitter:image for pages without their own image. + // The logo is square, so use the matching "summary" Twitter card. + image: 'img/logo.png', + metadata: [{ name: 'twitter:card', content: 'summary' }], navbar: { title: 'Dev Center', logo: { diff --git a/src/components/HeroSection.tsx b/src/components/HeroSection.tsx index f404c0d9..5b54056d 100644 --- a/src/components/HeroSection.tsx +++ b/src/components/HeroSection.tsx @@ -55,7 +55,7 @@ export default function HeroSection(): JSX.Element {

Build what energy businesses need next.

- Everything you need to extend the Energy XRM—from APIs and SDKs to Apps, integrations, and agent-powered + Everything you need to extend the energy XRM—from APIs and SDKs to Apps, integrations, and agent-powered development.

diff --git a/src/components/JsonLd.tsx b/src/components/JsonLd.tsx new file mode 100644 index 00000000..24d251e2 --- /dev/null +++ b/src/components/JsonLd.tsx @@ -0,0 +1,21 @@ +import Head from '@docusaurus/Head'; +import React from 'react'; + +type Props = { + data: Record | Array>; +}; + +/** + * Renders schema.org structured data as a JSON-LD script in the page head. + * Only describe what is visible on the page. + */ +export default function JsonLd({ data }: Props): JSX.Element { + // Escape "<" so a value can never close the script tag early. + const json = JSON.stringify(data).replace(/ + + + ); +} diff --git a/src/components/QuickStartCards.tsx b/src/components/QuickStartCards.tsx index 8ea8a186..b18a3013 100644 --- a/src/components/QuickStartCards.tsx +++ b/src/components/QuickStartCards.tsx @@ -115,7 +115,7 @@ const items = [ { title: 'Documentation', description: - 'Understand the Energy XRM: entities, journeys, workflows, automation, pricing, and everything else that runs an energy business.', + 'Understand the energy XRM: entities, journeys, workflows, automation, pricing, and everything else that runs an energy business.', href: '/docs/intro', cta: 'Read the docs', art: , diff --git a/src/components/RedocPage.module.css b/src/components/RedocPage.module.css index ed4654f7..a41874e2 100644 --- a/src/components/RedocPage.module.css +++ b/src/components/RedocPage.module.css @@ -15,3 +15,12 @@ max-width: calc(100vw - var(--doc-sidebar-width) - 15px); } } + +.loadingIntro { + padding: 2rem 2.5rem 0; + max-width: 60rem; +} + +.loadingIntro p { + overflow-wrap: anywhere; +} diff --git a/src/components/RedocPage.tsx b/src/components/RedocPage.tsx index 90863ceb..d502943d 100644 --- a/src/components/RedocPage.tsx +++ b/src/components/RedocPage.tsx @@ -1,3 +1,4 @@ +import Head from '@docusaurus/Head'; import DocPageStyles from '@docusaurus/theme-classic/lib-next/theme/DocPage/styles.module.css'; import ApiSidebar from '@site/src/components/ApiSidebar'; import { enrichSpecWithPermissions } from '@site/src/utils/openapi-permissions'; @@ -43,16 +44,35 @@ function useEnrichedSpec(specUrl: string): SpecState { } function RedocPage({ layoutProps, spec: propSpec }: Props): JSX.Element { - const { title = 'API Docs', description = 'Open API Reference Docs for the API' } = layoutProps || {}; - const specUrl: string = (propSpec.type === 'url' ? propSpec.content : undefined) || propSpec.specUrl; const specState = useEnrichedSpec(specUrl); + const { title = 'API Docs' } = layoutProps || {}; + const description = + layoutProps?.description || + `Reference for the epilot ${title}: endpoints, parameters, and request and response schemas, with the OpenAPI spec to download for SDK clients and AI agents.`; + return ( + + {/* The reference renders client-side; point crawlers and agents at the machine-readable contract. */} + +
- {specState.status === 'loading' && } + {specState.status === 'loading' && ( + <> + {/* Server-rendered while the spec loads; replaced by the full reference. */} +
+

{title}

+

{description}

+

+ OpenAPI spec: {specUrl} +

+
+ + + )} {specState.status === 'loaded' && } {/* Fall back to plain Redoc, which shows its own error when the spec cannot be loaded */} {specState.status === 'failed' && } diff --git a/src/pages/api.tsx b/src/pages/api.tsx index 3f81c66f..3ad22305 100644 --- a/src/pages/api.tsx +++ b/src/pages/api.tsx @@ -33,7 +33,10 @@ function ApiIntro(): JSX.Element { const specs: Spec[] = redocusaurusOpts?.[1]?.['specs'] ?? []; return ( - +
diff --git a/src/pages/index.tsx b/src/pages/index.tsx index 2f5c5270..8b46471a 100644 --- a/src/pages/index.tsx +++ b/src/pages/index.tsx @@ -1,15 +1,32 @@ +import useDocusaurusContext from '@docusaurus/useDocusaurusContext'; +import { organization, website } from '@site/src/utils/structured-data'; import Layout from '@theme/Layout'; import React from 'react'; import CliSection from '../components/CliSection'; import ExplorePlatform from '../components/ExplorePlatform'; import HeroSection from '../components/HeroSection'; +import JsonLd from '../components/JsonLd'; import QuickStartCards from '../components/QuickStartCards'; import ResourcesFooter from '../components/ResourcesFooter'; +const DESCRIPTION = + 'Build on epilot, the energy XRM: developer documentation, REST API reference with OpenAPI specs, TypeScript SDK, CLI, Apps, integrations and agent tooling.'; + export default function Home(): JSX.Element { + const { siteConfig } = useDocusaurusContext(); + return ( - + + diff --git a/src/plugins/changelog/theme/ChangelogPage/index.tsx b/src/plugins/changelog/theme/ChangelogPage/index.tsx index ef05d7f4..f6c9c774 100644 --- a/src/plugins/changelog/theme/ChangelogPage/index.tsx +++ b/src/plugins/changelog/theme/ChangelogPage/index.tsx @@ -13,13 +13,17 @@ import styles from './styles.module.css'; function ChangelogPage(props: Props): JSX.Element { const { content: ChangelogContent } = props; const { metadata, toc } = ChangelogContent; - const { title, nextItem, prevItem } = metadata; + const { title, description, nextItem, prevItem } = metadata; const windowSize = useWindowSize(); const renderTocDesktop = toc && toc.length > 0 && (windowSize === 'desktop' || windowSize === 'ssr'); return ( - +
diff --git a/src/theme/DocItem/index.tsx b/src/theme/DocItem/index.tsx new file mode 100644 index 00000000..6533a78c --- /dev/null +++ b/src/theme/DocItem/index.tsx @@ -0,0 +1,46 @@ +/** + * Wraps the default DocItem to add per-page machine-readable metadata: + * - a pointing at the raw markdown + * version of the page, which the llms-txt plugin writes next to every doc + * (/docs/foo/ -> /docs/foo.md) + * - TechArticle JSON-LD built from the page's own title and description + */ +import Head from '@docusaurus/Head'; +import useDocusaurusContext from '@docusaurus/useDocusaurusContext'; +import { organization, website } from '@site/src/utils/structured-data'; +import OriginalDocItem from '@theme-original/DocItem'; +import type { Props } from '@theme/DocItem'; +import React from 'react'; + +import JsonLd from '../../components/JsonLd'; + +export default function DocItem(props: Props): JSX.Element { + const { siteConfig } = useDocusaurusContext(); + const { metadata } = props.content; + const siteUrl = siteConfig.url; + const pageUrl = `${siteUrl}${metadata.permalink}`; + const markdownUrl = `${siteUrl}${metadata.permalink.replace(/\/$/, '')}.md`; + + const article: Record = { + '@context': 'https://schema.org', + '@type': 'TechArticle', + headline: metadata.title, + url: pageUrl, + inLanguage: 'en', + isPartOf: website(siteUrl, siteConfig.title), + publisher: organization(siteUrl), + }; + + if (metadata.description) article.description = metadata.description; + if (metadata.lastUpdatedAt) article.dateModified = new Date(metadata.lastUpdatedAt * 1000).toISOString(); + + return ( + <> + + + + + + + ); +} diff --git a/src/utils/structured-data.ts b/src/utils/structured-data.ts new file mode 100644 index 00000000..5dce4ddc --- /dev/null +++ b/src/utils/structured-data.ts @@ -0,0 +1,19 @@ +/** Shared schema.org nodes for JSON-LD on docs.epilot.io. */ + +export const organization = (siteUrl: string) => ({ + '@type': 'Organization', + '@id': 'https://www.epilot.cloud/#organization', + name: 'epilot', + url: 'https://www.epilot.cloud', + logo: `${siteUrl}/img/logo.png`, + sameAs: ['https://github.com/epilot-dev', 'https://dev.to/epilot'], +}); + +export const website = (siteUrl: string, name: string) => ({ + '@type': 'WebSite', + '@id': `${siteUrl}/#website`, + name, + url: `${siteUrl}/`, + inLanguage: 'en', + publisher: { '@id': 'https://www.epilot.cloud/#organization' }, +});