Documentation Skill - Zelaxy
Purpose
Create, update, and maintain documentation in apps/docs, and keep docs synchronized with product changes.
When to Use
- Adding or updating docs pages
- Creating or revising block/tool/trigger docs
- Modifying docs navigation or page metadata
- Updating docs for any product feature change (new/changed/removed)
- Working on docs site UI/layout and rendering behavior
Docs Site Architecture
- Framework: Next.js 15 + Fumadocs (
fumadocs-core,fumadocs-ui,fumadocs-mdx) - Docs app root:
apps/docs - Content source:
apps/docs/content/docs - Loader:
apps/docs/lib/source.tswithbaseUrl: '/docs' - MDX config:
apps/docs/source.config.ts+apps/docs/next.config.mjs(createMDX()) - Docs route:
apps/docs/app/docs/[[...slug]]/page.tsx - Navigation layout:
apps/docs/app/docs/layout.tsx - Dev host:
docs.localhost:3001(and proxied from main app)
Key Files
apps/docs/content/docs/meta.json- top-level navigationapps/docs/content/docs/blocks/meta.json- core blocks navapps/docs/content/docs/tools/meta.json- tools navapps/docs/content/docs/triggers/meta.json- triggers navapps/docs/content/docs/index.mdx- docs landing pageapps/docs/content/docs/blocks/index.mdx- blocks indexapps/docs/content/docs/tools/index.mdx- tools indexapps/docs/content/docs/triggers/index.mdx- triggers indexapps/docs/mdx-components.tsx- custom MDX rendering rulesapps/docs/lib/colored-icons.tsx- colored icon plugin for page tree
Content Structure
apps/docs/content/docs/
├── meta.json # Navigation structure
├── index.mdx # Introduction
├── blocks/ # Core block docs pages
│ ├── meta.json
│ ├── index.mdx
│ └── *.mdx
├── tools/ # Integration docs pages
│ ├── meta.json
│ ├── index.mdx
│ └── *.mdx
└── triggers/ # Trigger docs pages
├── meta.json
├── index.mdx
└── *.mdx
Top-level docs sections are expected to stay under blocks, tools, and triggers so docs page badges and section styling behave correctly.
Navigation (meta.json)
{
"title": "Documentation",
"icon": "BookOpen",
"pages": [
"---Getting Started---", "index",
"---Core Blocks---", "blocks",
"---Tool Integrations---", "tools",
"---Triggers---", "triggers"
]
}
- Use
---Section Name---separators for grouping in navigation - Page references must match MDX filenames (without extension)
- Update
meta.jsonin the same change when adding/renaming/removing pages
MDX Frontmatter
---
title: Block Name
description: One-line description of what this block does
icon: IconName
---
- Required:
title,description - Usually include:
icon - Icon names should be valid Lucide icon names (unknown names trigger warnings in colored icon plugin)
Writing Conventions
- Variable references: use
{{blockName.fieldName}}syntax - Use fenced code blocks with language tags
- Prefer tables for config/inputs/outputs
- Include practical examples and sample payloads where relevant
- Prefer internal links as absolute docs routes (
/docs/...) for consistency - Use H2/H3 for visible sections
Note on headings:
- Page title is rendered from frontmatter (
DocsTitlein page route) h1is suppressed byapps/docs/mdx-components.tsx- Do not rely on markdown
# H1for visible headings
Block Documentation Template
---
title: My Block
description: Brief description
icon: BlockIcon
---
## Overview
What this block does and when to use it.
## When to Use
Decision criteria and common use cases.
## Configuration
| Field | Type | Required | Description |
|-------|------|----------|-------------|
| field1 | string | Yes | What it does |
| field2 | number | No | Optional config |
## Inputs
- `{{starter.input}}` - Main input from the starter block
## Outputs
- `result` - The block's output value
- `metadata` - Additional metadata
## Examples
### Basic Usage
Description of the example.
```text
[Starter] -> [Block] -> [Response]
Advanced Usage
Description of advanced patterns.
## Tool/Trigger Pages
For tools/triggers, also include when relevant:
- Operations table
- Auth requirements
- Provider-specific configuration
- Output schema table
- Sample request/response payloads
- Troubleshooting notes
## Mandatory Docs Sync Policy
When any feature changes, docs must be updated in the same work unless the user explicitly says to skip docs.
Treat docs updates as required for:
- New block, tool integration, or trigger
- Renamed or removed feature
- Changed config fields, defaults, auth, or output schema
- Changed execution behavior visible to users
- New major workflow patterns or user-facing UX flow changes
Minimum sync actions per feature change:
1. Update or add the feature page under `blocks`, `tools`, or `triggers`
2. Update the relevant section `meta.json`
3. Update section `index.mdx` if lists/tables/examples changed
4. Update root docs landing page if category summaries changed
5. Update cross-links referencing old names/routes
If counts/claims changed materially, also review:
- `apps/docs/app/layout.tsx` sidebar stats text
- `apps/docs/app/layout.tsx` metadata copy
- top-level `README.md` claims that mirror docs positioning
## Dev Setup
```bash
# Run docs site
cd apps/docs
bun run dev # Starts on port 3001
# Docs type-check
bun run type-check
# Access via
# http://localhost:3001 (direct)
# http://docs.localhost:3000 (via proxy)
Pre-merge Checklist
- New/changed docs pages exist for all user-facing feature changes
- All affected
meta.jsonfiles are updated - No stale links/slugs after renames
- Frontmatter includes valid
titleanddescription - Docs app runs and changed pages render correctly
apps/docstype-check passes
Common Issues
- Missing from nav: page exists but not listed in section
meta.json - Frontmatter errors: invalid YAML or missing required fields
- Hidden title confusion: markdown
#heading not displayed becauseh1is overridden - Broken links after rename: slug changed but cross-links/meta not updated
- Docs drift: feature behavior changed in app, but docs examples/tables still old
- Invalid icon names: unknown icon in frontmatter logs warning and may not render as expected
- Incomplete feature updates: code changed without docs updates in same task
Source: manu14357/Zelaxy — distributed by TomeVault.