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"]