diff --git a/.github/workflows/check-links.yml b/.github/workflows/check-links.yml new file mode 100644 index 0000000..81b382b --- /dev/null +++ b/.github/workflows/check-links.yml @@ -0,0 +1,48 @@ +name: Check Links + +on: + push: + branches: + - main + pull_request: + branches: + - main + +jobs: + link-checker: + name: Check Documentation Links + runs-on: ubuntu-latest + permissions: + contents: read + issues: write + + steps: + - name: Checkout repository + uses: actions/checkout@v4 + + - name: Check links with lychee + uses: lycheeverse/lychee-action@v2 + with: + # Use configuration file for path remapping and settings + args: >- + --config lychee.toml + 'content/**/*.md' + 'content/**/*.mdx' + 'README.md' + # Fail the job if broken links are found + fail: true + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + + - name: Create Issue on Failure + if: failure() + uses: actions/github-script@v7 + with: + script: | + github.rest.issues.create({ + owner: context.repo.owner, + repo: context.repo.repo, + title: '🔗 Broken links detected in documentation', + body: `Link checker found broken links in the documentation.\n\nPlease review the [workflow run](${context.payload.repository.html_url}/actions/runs/${context.runId}) for details.`, + labels: ['documentation', 'bug'] + }); diff --git a/.lycheeignore b/.lycheeignore new file mode 100644 index 0000000..ccccf9c --- /dev/null +++ b/.lycheeignore @@ -0,0 +1,19 @@ +# Lychee Link Checker Ignore Rules +# This file contains patterns for links that should be ignored during link checking + +# Local development links +http://localhost* +http://127.0.0.1* + +# Example/placeholder links +https://example.com +https://example.org +http://example.com +http://example.org + +# Social media (prevents anti-bot false positives) +https://twitter.com* +https://x.com* + +# Common false positives +mailto:* diff --git a/content/docs/guides/advanced/ai-integration-guide.mdx b/content/docs/guides/advanced/ai-integration-guide.mdx index a8d52d2..344f70e 100644 --- a/content/docs/guides/advanced/ai-integration-guide.mdx +++ b/content/docs/guides/advanced/ai-integration-guide.mdx @@ -698,7 +698,7 @@ const trainingExamples: NLQTrainingExample[] = [ ## Example Applications ### 1. AI Support Assistant -[View Example](../examples/ai-support) +[View Example](/docs/guides/examples/ai-support) **Features:** - RAG knowledge base @@ -712,7 +712,7 @@ Customer → GPT-4 Agent → RAG (Pinecone) → Actions → ObjectQL ``` ### 2. AI Data Analyst -[View Example](../examples/ai-analyst) +[View Example](/docs/guides/examples/ai-analyst) **Features:** - Natural language queries @@ -721,7 +721,7 @@ Customer → GPT-4 Agent → RAG (Pinecone) → Actions → ObjectQL - Query templates ### 3. AI Code Generator -[View Example](../examples/ai-codegen) +[View Example](/docs/guides/examples/ai-codegen) **Features:** - Generate ObjectStack apps @@ -730,7 +730,7 @@ Customer → GPT-4 Agent → RAG (Pinecone) → Actions → ObjectQL - RAG for documentation ### 4. AI Sales Assistant -[View Example](../examples/ai-sales) +[View Example](/docs/guides/examples/ai-sales) **Features:** - Lead qualification @@ -792,8 +792,8 @@ if (response.parseResult.confidence < 0.7) { ## Resources - [ObjectStack Documentation](https://docs.objectstack.ai) -- [AI Protocol Reference](../packages/spec/src/ai) -- [Example Applications](../examples) +- [AI Protocol Reference](/docs/guides/packages/spec/src/ai) +- [Example Applications](/docs/guides/examples) - [Discord Community](https://discord.gg/objectstack) --- diff --git a/content/docs/guides/advanced/ai-integration/quick-start.mdx b/content/docs/guides/advanced/ai-integration/quick-start.mdx index 80a9660..c6e7939 100644 --- a/content/docs/guides/advanced/ai-integration/quick-start.mdx +++ b/content/docs/guides/advanced/ai-integration/quick-start.mdx @@ -166,12 +166,12 @@ const generated = await ai.generate({ See the following example implementations: -- [AI Sales Assistant](../../../examples/ai-sales/) -- [AI Support Agent](../../../examples/ai-support/) -- [AI Code Generator](../../../examples/ai-codegen/) -- [AI Analyst](../../../examples/ai-analyst/) +- [AI Sales Assistant](/docs/examples/ai-sales/) +- [AI Support Agent](/docs/examples/ai-support/) +- [AI Code Generator](/docs/examples/ai-codegen/) +- [AI Analyst](/docs/examples/ai-analyst/) -For complete documentation, see [AI_INTEGRATION_GUIDE.md](../../AI_INTEGRATION_GUIDE.md) +For complete documentation, see [AI_INTEGRATION_GUIDE.md](/docs/guides/AI_INTEGRATION_GUIDE.md) --- diff --git a/content/docs/guides/advanced/security/best-practices.mdx b/content/docs/guides/advanced/security/best-practices.mdx index a232b0f..9a3823d 100644 --- a/content/docs/guides/advanced/security/best-practices.mdx +++ b/content/docs/guides/advanced/security/best-practices.mdx @@ -98,7 +98,7 @@ const authConfig = { - [ ] Audit logging enabled - [ ] Regular security updates -For detailed information, see [AUTHENTICATION_STANDARD.md](../../../AUTHENTICATION_STANDARD.md) +For detailed information, see [AUTHENTICATION_STANDARD.md](/docs/AUTHENTICATION_STANDARD.md) --- diff --git a/content/docs/guides/field-types.cn.mdx b/content/docs/guides/field-types.cn.mdx index d149ad6..3e9436b 100644 --- a/content/docs/guides/field-types.cn.mdx +++ b/content/docs/guides/field-types.cn.mdx @@ -737,7 +737,7 @@ created_at: Field.datetime({ ## CRM 示例 -参见 **[CRM 示例](/examples/crm)** 了解所有字段类型的实际使用: +参见 **[CRM 示例](https://github.com/objectstack-ai/spec/tree/main/examples/crm)** 了解所有字段类型的实际使用: - **账户:** 自动编号、公式、货币、带颜色的选择 - **联系人:** 主从关系、公式(全名)、头像、电子邮件、电话 diff --git a/content/docs/guides/field-types.mdx b/content/docs/guides/field-types.mdx index b088c75..2f1edd4 100644 --- a/content/docs/guides/field-types.mdx +++ b/content/docs/guides/field-types.mdx @@ -737,7 +737,7 @@ created_at: Field.datetime({ ## Examples from CRM -See the **[CRM Example](/examples/crm)** for real-world usage of all field types: +See the **[CRM Example](https://github.com/objectstack-ai/spec/tree/main/examples/crm)** for real-world usage of all field types: - **Account:** Autonumber, formula, currency, select with colors - **Contact:** Master-detail, formula (full_name), avatar, email, phone diff --git a/content/docs/guides/getting-started.cn.mdx b/content/docs/guides/getting-started.cn.mdx index fface86..e3da5bc 100644 --- a/content/docs/guides/getting-started.cn.mdx +++ b/content/docs/guides/getting-started.cn.mdx @@ -275,7 +275,7 @@ views: { 现在你有了有效的元数据,你可以: -1. **探索示例**:查看 [CRM 示例](/examples/crm) 了解完整功能实现 +1. **探索示例**:查看 [CRM 示例](https://github.com/objectstack-ai/spec/tree/main/examples/crm) 了解完整功能实现 2. **学习字段类型**:参见 [字段类型指南](/docs/guides/field-types) 了解所有 30+ 种字段类型 3. **构建 UI**:使用 ObjectStack 运行时的元数据来生成界面 4. **部署**:推送到 ObjectStack 内核用于生产环境 diff --git a/content/docs/guides/getting-started.mdx b/content/docs/guides/getting-started.mdx index 21654c3..9b042dc 100644 --- a/content/docs/guides/getting-started.mdx +++ b/content/docs/guides/getting-started.mdx @@ -275,7 +275,7 @@ views: { Now that you have valid metadata, you can: -1. **Explore Examples**: Check out the [CRM Example](/examples/crm) for a full-featured implementation +1. **Explore Examples**: Check out the [CRM Example](https://github.com/objectstack-ai/spec/tree/main/examples/crm) for a full-featured implementation 2. **Learn Field Types**: See the [Field Types Guide](/docs/guides/field-types) for all 30+ field types 3. **Build UI**: Use the metadata with ObjectStack runtime to generate interfaces 4. **Deploy**: Push to an ObjectStack kernel for production use diff --git a/content/docs/guides/migration/v0-to-v1.mdx b/content/docs/guides/migration/v0-to-v1.mdx index ee80c7a..d5c35b8 100644 --- a/content/docs/guides/migration/v0-to-v1.mdx +++ b/content/docs/guides/migration/v0-to-v1.mdx @@ -145,8 +145,8 @@ The following features are deprecated and will be removed in v2.0.0: If you encounter issues: -1. Check the [CHANGELOG.md](../../CHANGELOG.md) -2. Review [CONTRIBUTING.md](../../CONTRIBUTING.md) +1. Check the [CHANGELOG.md](/docs/CHANGELOG.md) +2. Review [CONTRIBUTING.md](/docs/CONTRIBUTING.md) 3. Open an issue on GitHub --- diff --git a/content/docs/guides/view-configuration.mdx b/content/docs/guides/view-configuration.mdx index b8fd77b..31c0f51 100644 --- a/content/docs/guides/view-configuration.mdx +++ b/content/docs/guides/view-configuration.mdx @@ -803,4 +803,4 @@ export const Opportunity = ObjectSchema.create({ - [Field Types Guide](/docs/guides/field-types) - [Workflows & Validation](/docs/guides/workflows-validation) - [Dashboard Configuration](/docs/guides/dashboards) -- [CRM Example](/examples/crm) - See all view types in action +- [CRM Example](https://github.com/objectstack-ai/spec/tree/main/examples/crm) - See all view types in action diff --git a/content/docs/guides/workflows-validation.mdx b/content/docs/guides/workflows-validation.mdx index 9872f2c..a3cf47a 100644 --- a/content/docs/guides/workflows-validation.mdx +++ b/content/docs/guides/workflows-validation.mdx @@ -730,4 +730,4 @@ export const Opportunity = ObjectSchema.create({ - [Field Types Guide](/docs/guides/field-types) - [Object Schema Reference](/docs/references/data/core/Object) - [Formula Functions](/docs/references/data/formulas) -- [CRM Example](/examples/crm) - See validations and workflows in action +- [CRM Example](https://github.com/objectstack-ai/spec/tree/main/examples/crm) - See validations and workflows in action diff --git a/content/docs/index.cn.mdx b/content/docs/index.cn.mdx index e2e3fbd..45b4f4f 100644 --- a/content/docs/index.cn.mdx +++ b/content/docs/index.cn.mdx @@ -48,8 +48,8 @@ import { Book, Compass, FileText, Layers } from 'lucide-react'; - **[项目结构](/docs/guides/project-structure)** - 组织代码的最佳实践 ### 示例 -- **[CRM 示例](/examples/crm)** - 全功能应用,包含 6 个对象、工作流、视图、仪表板 -- **[Todo 示例](/examples/todo)** - 快速入门最小化示例 +- **[CRM 示例](https://github.com/objectstack-ai/spec/tree/main/examples/crm)** - 全功能应用,包含 6 个对象、工作流、视图、仪表板 +- **[Todo 示例](https://github.com/objectstack-ai/spec/tree/main/examples/todo)** - 快速入门最小化示例 ## "五位一体"架构 diff --git a/content/docs/index.mdx b/content/docs/index.mdx index 360d498..ce9d5a8 100644 --- a/content/docs/index.mdx +++ b/content/docs/index.mdx @@ -77,8 +77,8 @@ This documentation is the authoritative reference for the ObjectStack Protocol. - **[Project Structure](/docs/guides/project-structure)** - Best practices for organizing your code ### Examples -- **[CRM Example](/examples/crm)** - Full-featured application with 6 objects, workflows, views, dashboards -- **[Todo Example](/examples/todo)** - Quick-start minimal example +- **[CRM Example](https://github.com/objectstack-ai/spec/tree/main/examples/crm)** - Full-featured application with 6 objects, workflows, views, dashboards +- **[Todo Example](https://github.com/objectstack-ai/spec/tree/main/examples/todo)** - Quick-start minimal example ## The "Trinity" Architecture diff --git a/content/docs/quick-start.mdx b/content/docs/quick-start.mdx index 162419f..16b5f38 100644 --- a/content/docs/quick-start.mdx +++ b/content/docs/quick-start.mdx @@ -13,25 +13,25 @@ Welcome to ObjectStack! This quick start guide will help you get up and running } title="I want to build an app" - href="/docs/quick-start/build-first-app" + href="./quick-start/build-first-app" description="Complete tutorial: Build a task management app in 10 minutes" /> } title="I'm a backend developer" - href="/docs/quick-start/backend-developers" + href="./quick-start/backend-developers" description="Learn how to define Objects, Fields, and Business Logic" /> } title="I'm a frontend developer" - href="/docs/quick-start/frontend-developers" + href="./quick-start/frontend-developers" description="Understand Views, Pages, and UI Components" /> } title="I'm a platform architect" - href="/docs/quick-start/architects" + href="./quick-start/architects" description="Deep dive into the protocol architecture and design decisions" /> diff --git a/content/docs/specifications/architecture/data-layer.mdx b/content/docs/specifications/architecture/data-layer.mdx index 205330a..82d3ba4 100644 --- a/content/docs/specifications/architecture/data-layer.mdx +++ b/content/docs/specifications/architecture/data-layer.mdx @@ -276,9 +276,9 @@ const indexes = [ ## Related Documentation -- [Field Types Guide](../../content/docs/guides/field-types.mdx) -- [Query Protocol Guide](../../packages/spec/QUERY_PROTOCOL_GUIDE.md) -- [Schema Definition Specification](../../content/docs/specifications/data/schema-definition.mdx) -- [Driver Interface](../../content/docs/references/system/DriverInterface.mdx) +- [Field Types Guide](/docs/guides/field-types.mdx) +- [Query Protocol Guide](/docs/packages/spec/QUERY_PROTOCOL_GUIDE.md) +- [Schema Definition Specification](/docs/specifications/data/schema-definition.mdx) +- [Driver Interface](/docs/references/system/DriverInterface.mdx) -For complete API reference, see [Data Protocol References](../../content/docs/references/data/). +For complete API reference, see [Data Protocol References](/docs/references/data/). diff --git a/content/docs/specifications/architecture/system-layer.mdx b/content/docs/specifications/architecture/system-layer.mdx index 76df94d..ca3ee17 100644 --- a/content/docs/specifications/architecture/system-layer.mdx +++ b/content/docs/specifications/architecture/system-layer.mdx @@ -446,9 +446,9 @@ const datasource = { ## Related Documentation -- [Plugin Architecture](../../content/docs/concepts/plugin-architecture.mdx) -- [Kernel Architecture](../../content/docs/specifications/server/kernel-architecture.mdx) -- [Authentication Standard](../AUTHENTICATION_STANDARD.md) -- [System Protocol References](../../content/docs/references/system/) +- [Plugin Architecture](/docs/concepts/plugin-architecture.mdx) +- [Kernel Architecture](/docs/specifications/server/kernel-architecture.mdx) +- [Authentication Standard](/docs/specifications/AUTHENTICATION_STANDARD.md) +- [System Protocol References](/docs/references/system/) -For complete API reference, see [System Protocol References](../../content/docs/references/system/). +For complete API reference, see [System Protocol References](/docs/references/system/). diff --git a/content/docs/specifications/architecture/ui-layer.mdx b/content/docs/specifications/architecture/ui-layer.mdx index 5e0cf71..a51ab9f 100644 --- a/content/docs/specifications/architecture/ui-layer.mdx +++ b/content/docs/specifications/architecture/ui-layer.mdx @@ -359,9 +359,9 @@ const page = { ## Related Documentation -- [View Configuration Guide](../../content/docs/guides/view-configuration.mdx) -- [SDUI Protocol Specification](../../content/docs/specifications/ui/sdui-protocol.mdx) -- [Component Schema](../../content/docs/specifications/ui/component-schema.mdx) -- [UI Protocol References](../../content/docs/references/ui/) +- [View Configuration Guide](/docs/guides/view-configuration.mdx) +- [SDUI Protocol Specification](/docs/specifications/ui/sdui-protocol.mdx) +- [Component Schema](/docs/specifications/ui/component-schema.mdx) +- [UI Protocol References](/docs/references/ui/) -For complete API reference, see [UI Protocol References](../../content/docs/references/ui/). +For complete API reference, see [UI Protocol References](/docs/references/ui/). diff --git a/content/docs/specifications/data/architecture.cn.mdx b/content/docs/specifications/data/architecture.cn.mdx index 42c5fd2..f3e5ded 100644 --- a/content/docs/specifications/data/architecture.cn.mdx +++ b/content/docs/specifications/data/architecture.cn.mdx @@ -46,9 +46,9 @@ ObjectQL 由三个核心规范组成: | 规范 | 范围 | 职责 | | :--- | :--- | :--- | -| **[Schema 定义](./schema-definition)** | 静态 | 如何定义对象、字段和关系。 | -| **[AST 结构](./ast-structure)** | 运行时 | JSON 查询对象("IR")的结构。 | -| **[传输协议](./wire-protocol)** | 传输 | 客户端和服务器如何通过 HTTP 交换这些结构。 | +| **[Schema 定义](/docs/specifications/data/schema-definition)** | 静态 | 如何定义对象、字段和关系。 | +| **[AST 结构](/docs/specifications/data/ast-structure)** | 运行时 | JSON 查询对象("IR")的结构。 | +| **[传输协议](/docs/specifications/data/wire-protocol)** | 传输 | 客户端和服务器如何通过 HTTP 交换这些结构。 | ## 设计约束 diff --git a/content/docs/specifications/data/architecture.mdx b/content/docs/specifications/data/architecture.mdx index a585876..b88cd7b 100644 --- a/content/docs/specifications/data/architecture.mdx +++ b/content/docs/specifications/data/architecture.mdx @@ -46,9 +46,9 @@ ObjectQL is comprised of three core specifications: | Specification | Scope | Responsibility | | :--- | :--- | :--- | -| **[Schema Definition](./schema-definition)** | Static | How to define Objects, Fields, and Relationships. | -| **[AST Structure](./ast-structure)** | Runtime | The structure of the JSON Query Object (The "IR"). | -| **[Wire Protocol](./wire-protocol)** | Transport | How Clients and Servers exchange these structures over HTTP. | +| **[Schema Definition](/docs/specifications/data/schema-definition)** | Static | How to define Objects, Fields, and Relationships. | +| **[AST Structure](/docs/specifications/data/ast-structure)** | Runtime | The structure of the JSON Query Object (The "IR"). | +| **[Wire Protocol](/docs/specifications/data/wire-protocol)** | Transport | How Clients and Servers exchange these structures over HTTP. | ## Design Constraints diff --git a/content/docs/specifications/data/schema-definition.mdx b/content/docs/specifications/data/schema-definition.mdx index df15d83..2246297 100644 --- a/content/docs/specifications/data/schema-definition.mdx +++ b/content/docs/specifications/data/schema-definition.mdx @@ -62,7 +62,7 @@ unique: false # Enforce Uniqueness ``` ### Core Field Types -See [Advanced Types](./advanced-types) for the full list. +See [Advanced Types](/docs/specifications/data/advanced-types) for the full list. * `text`, `textarea`, `html` * `number`, `currency`, `percent` * `date`, `datetime` diff --git a/content/docs/specifications/ui/index.mdx b/content/docs/specifications/ui/index.mdx index cf79ecc..b5b2a0e 100644 --- a/content/docs/specifications/ui/index.mdx +++ b/content/docs/specifications/ui/index.mdx @@ -269,7 +269,7 @@ Building a renderer for ObjectUI? Start here: Using ObjectUI to build interfaces? See: - [View Configuration Guide](/docs/guides/view-configuration) - [Theming Guide](/docs/guides/theming) -- [Dashboard Examples](/docs/tutorials/dashboards) +- [Dashboard Examples](/docs/specifications/ui/dashboard) ## Related Documentation diff --git a/content/docs/standards/api-design.mdx b/content/docs/standards/api-design.mdx index 487e9d4..0a0882e 100644 --- a/content/docs/standards/api-design.mdx +++ b/content/docs/standards/api-design.mdx @@ -320,6 +320,6 @@ Response (200 OK): ## Related -- [Naming Conventions](./naming-conventions.md) -- [Error Handling](./error-handling.md) -- [REST API Specification](../../content/docs/specifications/server/rest-api.mdx) +- [Naming Conventions](/docs/standards/naming-conventions.md) +- [Error Handling](/docs/standards/error-handling.md) +- [REST API Specification](/docs/specifications/server/rest-api.mdx) diff --git a/content/docs/standards/authentication.mdx b/content/docs/standards/authentication.mdx index 2ba972a..18f707e 100644 --- a/content/docs/standards/authentication.mdx +++ b/content/docs/standards/authentication.mdx @@ -534,7 +534,7 @@ const authConfig: AuthConfig = { ## Examples -See [examples/auth-better-examples.ts](../examples/auth-better-examples.ts) for comprehensive usage examples including: +See [examples/auth-better-examples.ts](/docs/examples/auth-better-examples.ts) for comprehensive usage examples including: - Basic email/password authentication - OAuth with Google and GitHub @@ -604,7 +604,7 @@ Following ObjectStack conventions: - [Better-Auth Documentation](https://better-auth.com) - [ObjectStack Documentation](https://objectstack.ai) -- [JSON Schema Reference](../packages/spec/json-schema/AuthConfig.json) +- [JSON Schema Reference](/docs/packages/spec/json-schema/AuthConfig.json) ## License diff --git a/content/docs/standards/error-handling.mdx b/content/docs/standards/error-handling.mdx index 166d979..0fd3213 100644 --- a/content/docs/standards/error-handling.mdx +++ b/content/docs/standards/error-handling.mdx @@ -180,5 +180,5 @@ if (process.env.NODE_ENV === 'development') { ## Related -- [API Design Principles](./api-design.md) -- [Security Best Practices](../guides/security/best-practices.md) +- [API Design Principles](/docs/standards/api-design.md) +- [Security Best Practices](/docs/guides/security/best-practices.md) diff --git a/content/docs/standards/naming-conventions.mdx b/content/docs/standards/naming-conventions.mdx index a34fa3d..b35d580 100644 --- a/content/docs/standards/naming-conventions.mdx +++ b/content/docs/standards/naming-conventions.mdx @@ -78,4 +78,4 @@ const field = { | **Enum Values** | lowercase | `text`, `number`, `date` | | **Constants** | UPPER_SNAKE_CASE | `MAX_LENGTH`, `DEFAULT_TIMEOUT` | -For complete details and validation patterns, see [CONTRIBUTING.md](../../CONTRIBUTING.md#naming-conventions). +For complete details and validation patterns, see [CONTRIBUTING.md](/docs/CONTRIBUTING.md#naming-conventions). diff --git a/content/docs/tutorials.mdx b/content/docs/tutorials.mdx index 754ded1..b4b31ed 100644 --- a/content/docs/tutorials.mdx +++ b/content/docs/tutorials.mdx @@ -10,17 +10,17 @@ Learn ObjectStack through practical, hands-on tutorials. Each tutorial is design @@ -32,22 +32,22 @@ Learn ObjectStack through practical, hands-on tutorials. Each tutorial is design @@ -57,17 +57,17 @@ Learn ObjectStack through practical, hands-on tutorials. Each tutorial is design @@ -77,17 +77,17 @@ Learn ObjectStack through practical, hands-on tutorials. Each tutorial is design @@ -114,9 +114,9 @@ Not sure where to start? Follow this recommended path: Complete [Build Your First App](/docs/quick-start/build-first-app) (10 minutes) ### 2. Choose Your Path -- **Backend Focus:** [Field Types](/docs/tutorials/field-types) → [Formulas](/docs/tutorials/formulas) → [Workflows](/docs/tutorials/workflows) -- **Frontend Focus:** [Custom Views](/docs/tutorials/custom-views) → [Forms](/docs/tutorials/forms) → [Dashboards](/docs/tutorials/dashboards) -- **Full-Stack:** [CRM System](/docs/tutorials/crm-system) → [Multi-Tenancy](/docs/tutorials/multi-tenancy) +- **Backend Focus:** [Field Types](/docs/guides/field-types) → [Formulas](/docs/references/data/core/Field) → [Workflows](/docs/guides/workflows-validation) +- **Frontend Focus:** [Custom Views](/docs/guides/view-configuration) → [Forms](/docs/guides/view-configuration) → [Dashboards](/docs/references/ui/analytics/Dashboard) +- **Full-Stack:** [CRM System](https://github.com/objectstack-ai/spec/tree/main/examples/crm) → [Multi-Tenancy](/docs/guides/advanced/multi-tenancy) ### 3. Build Your Own Apply what you've learned to build your own application! @@ -132,6 +132,6 @@ Check out community-contributed examples: ## Get Help Stuck on a tutorial? -- Check the [Troubleshooting Guide](/docs/guides/troubleshooting) +- Check the [Troubleshooting Guide](/docs/troubleshooting) - Ask in [GitHub Discussions](https://github.com/objectstack-ai/spec/discussions) -- Review the [FAQ](/docs/guides/faq) +- Review the [FAQ](/docs/faq) diff --git a/lychee.toml b/lychee.toml new file mode 100644 index 0000000..e08261c --- /dev/null +++ b/lychee.toml @@ -0,0 +1,62 @@ +# Lychee Link Checker Configuration +# This configuration enables checking of internal Fumadocs links by remapping +# Next.js routes to actual file system paths + +# Maximum number of concurrent requests +max_concurrency = 10 + +# Accept status codes (2xx = success) +accept = [200, 204, 206, 301, 302, 307, 308, 429] + +# Timeout for requests (in seconds) +timeout = 30 + +# Retry failed requests +max_retries = 2 + +# Follow redirects +follow_redirects = true + +# Check anchors/fragments in links +include_fragments = false + +# Verbose output +verbose = true + +# Remap internal documentation links to actual file paths +# Maps /docs/* routes to content/docs/*.mdx or content/docs/*.md files +# Lychee remap uses simple "pattern" = "replacement" syntax +remap = [ + # Primary remapping for .mdx files + "^/docs/(.*)$ content/docs/$1.mdx", + # Fallback for .md files + "^/docs/(.*)$ content/docs/$1.md" +] + +# Exclude patterns (loaded from .lycheeignore file) +exclude_path = [".lycheeignore"] + +# Additional exclude patterns for internal paths +exclude = [ + # Local development + "http://localhost*", + "http://127.0.0.1*", + + # Example/placeholder links + "https://example.com*", + "http://example.com*", + + # Social media (prevents anti-bot false positives) + "https://twitter.com*", + "https://x.com*", + + # Email links + "mailto:*" +] + +# Cache results to speed up subsequent runs +cache = true + +# Specify schemes to check (include file:// for local files) +# Leaving this unset allows all schemes including file:// +# scheme = ["https", "http", "file"]