---
name: contribute
description: |
Guide for contributing to Trellis documentation. Use when someone wants to:
- Add a new spec template
- Add a new skill to the marketplace
- Add or update documentation pages
- Submit a PR to this project
---
# Contributing to Trellis Docs
This skill guides you through contributing to the Trellis documentation project.
## Project Structure
```
docs/
├── docs.json # Navigation config (MUST update for new pages)
│
├── index.mdx # English homepage
├── quickstart.mdx # English quickstart
├── zh/index.mdx # Chinese homepage
├── zh/quickstart.mdx # Chinese quickstart
│
├── guides/ # English guide pages
├── zh/guides/ # Chinese guide pages
│
├── templates/ # English template pages
├── zh/templates/ # Chinese template pages
│
├── skills-market/ # English skill marketplace pages
├── zh/skills-market/ # Chinese skill marketplace pages
│
├── blog/ # English tech blog
├── zh/blog/ # Chinese tech blog
│
├── changelog/ # English changelog
├── zh/changelog/ # Chinese changelog
│
├── contribute/ # English contribution guide
├── zh/contribute/ # Chinese contribution guide
│
├── showcase/ # English showcase
├── zh/showcase/ # Chinese showcase
│
├── plugins/ # Claude Code plugins (one plugin per skill)
│ └── trellis-meta/
│ ├── plugin.json
│ └── skills/trellis-meta/
│ └── SKILL.md
│
└── marketplace/ # Other downloadable assets
└── specs/ # Spec template directories
```
**Note**: Plugin skills follow Claude Code plugin structure. Content in `marketplace/` is excluded from Mintlify rendering.
## Understanding docs.json
The navigation uses a **language-based structure**:
```json
{
"navigation": {
"languages": [
{
"language": "en",
"groups": [
{
"group": "Getting started",
"pages": ["index", "quickstart"]
},
{
"group": "Guides",
"pages": ["guides/specs", "guides/tasks", ...]
},
{
"group": "Resource Marketplace",
"pages": [
{
"group": "Skills",
"expanded": false,
"pages": ["skills-market/index", "skills-market/trellis-meta"]
},
{
"group": "Spec Templates",
"expanded": false,
"pages": ["templates/specs-index", "templates/specs-electron"]
}
]
}
]
},
{
"language": "zh",
"groups": [
// Same structure with zh/ prefix
]
}
]
}
}
```
**Key points**:
- English pages: no prefix (e.g., `guides/specs`)
- Chinese pages: `zh/` prefix (e.g., `zh/guides/specs`)
- Nested groups supported (e.g., Skills inside Resource Marketplace)
- `expanded: false` keeps groups collapsed by default
## Contributing a Spec Template
### 1. Create template directory
```
marketplace/specs/your-template-name/
├── README.md # Template overview (required)
├── frontend/ # Frontend guidelines
│ ├── index.md
│ └── ...
├── backend/ # Backend guidelines
│ ├── index.md
│ └── ...
├── guides/ # Thinking guides
│ └── ...
└── shared/ # Cross-cutting concerns (optional)
└── ...
```
Structure varies by stack. Include directories relevant to your template.
### 2. Create documentation pages (both languages)
**English**: `templates/specs-your-template.mdx`
**Chinese**: `zh/templates/specs-your-template.mdx`
Use this frontmatter:
```yaml
---
title: 'Your Template Name'
description: 'Brief description'
---
```
### 3. Update navigation in docs.json
Find the `Spec Templates` nested group and add your page:
```json
{
"group": "Spec Templates",
"expanded": false,
"pages": ["templates/specs-index", "templates/specs-electron", "templates/specs-your-template"]
}
```
Do the same for Chinese under `"language": "zh"`:
```json
{
"group": "Spec Templates",
"expanded": false,
"pages": [
"zh/templates/specs-index",
"zh/templates/specs-electron",
"zh/templates/specs-your-template"
]
}
```
### 4. Update the overview page
Add your template to the table in:
- `templates/specs-index.mdx`
- `zh/templates/specs-index.mdx`
## Contributing a Skill
### 1. Create plugin directory
```
plugins/your-plugin/
├── plugin.json # Plugin manifest
└── skills/
└── your-skill/
├── SKILL.md # Skill definition (required)
└── references/ # Reference docs (optional)
```
### 2. Create plugin.json
```json
{
"name": "your-plugin",
"version": "1.0.0",
"description": "Your plugin description",
"author": { "name": "Your Name" },
"skills": ["./skills/"]
}
```
### 3. Register in marketplace.json
Add your plugin to `.claude-plugin/marketplace.json`:
```json
{
"plugins": [
{
"name": "your-plugin",
"source": "./plugins/your-plugin",
"description": "Your plugin description"
}
]
}
```
### 4. Create documentation pages
**English**: `skills-market/your-skill.mdx`
**Chinese**: `zh/skills-market/your-skill.mdx`
### 5. Update navigation in docs.json
Find the `Skills` nested group and add your page to both languages.
### 6. Update the overview page
Add your skill to the table in:
- `skills-market/index.mdx`
- `zh/skills-market/index.mdx`
## Contributing a Showcase Project
### 1. Copy the template
```bash
cp showcase/template.mdx showcase/your-project.mdx
cp zh/showcase/template.mdx zh/showcase/your-project.mdx
```
### 2. Fill in project details
- Update `sidebarTitle` with your project name
- Add project description
- Replace GitHub OG image URL with your repo
- Describe how you used Trellis
### 3. Update navigation in docs.json
Find the `Showcase` / `项目展示` group and add your page:
```json
{
"group": "Showcase",
"expanded": false,
"pages": ["showcase/index", "showcase/open-typeless", "showcase/your-project"]
}
```
Do the same for Chinese.
### 4. Add Card to overview page
Add a Card component to display your project:
**English** (`showcase/index.mdx`):
```mdx
One-line description
```
**Chinese** (`zh/showcase/index.mdx`):
```mdx
一句话描述
```
## Contributing Documentation
### Adding a new guide
1. Create the page in `guides/your-guide.mdx`
2. Create Chinese version in `zh/guides/your-guide.mdx`
3. Update `docs.json` - add to `Guides` group in both languages
### Adding a blog post
1. Create the page in `blog/your-post.mdx`
2. Create Chinese version in `zh/blog/your-post.mdx`
3. Update `docs.json` - add to `Tech Blog` group in both languages
### Updating existing pages
1. Find the file in the appropriate directory
2. Make your changes
3. Ensure both language versions stay in sync
## Bilingual Requirements
**All user-facing content must have both English and Chinese versions.**
| Content Type | English Path | Chinese Path |
| ------------ | --------------------- | ------------------------ |
| Homepage | `index.mdx` | `zh/index.mdx` |
| Guides | `guides/*.mdx` | `zh/guides/*.mdx` |
| Templates | `templates/*.mdx` | `zh/templates/*.mdx` |
| Skills | `skills-market/*.mdx` | `zh/skills-market/*.mdx` |
| Showcase | `showcase/*.mdx` | `zh/showcase/*.mdx` |
| Blog | `blog/*.mdx` | `zh/blog/*.mdx` |
| Changelog | `changelog/*.mdx` | `zh/changelog/*.mdx` |
## Development Setup
```bash
# Install dependencies
pnpm install
# Start local dev server
pnpm dev
# Check markdown lint
pnpm lint:md
# Verify docs structure
pnpm verify
# Format files
pnpm format
```
**Pre-commit hooks**: The project uses husky with lint-staged. On commit:
- Markdown files are auto-linted and formatted
- `verify-docs.py` checks docs.json and frontmatter
## MDX Components
Mintlify supports MDX components. Common ones:
```mdx
Card content here
...
...
Hidden content
...
```
Inline HTML is allowed (MDX). See [Mintlify docs](https://mintlify.com/docs/components) for all components.
## Submitting a PR
1. Fork the repo on GitHub: `https://github.com/mindfold-ai/docs`
2. Clone your fork: `git clone https://github.com/YOUR_USERNAME/docs.git`
3. Install dependencies: `pnpm install`
4. Create a branch: `git checkout -b feat/your-contribution`
5. Make changes following this guide
6. Test locally: `pnpm dev`
7. Commit with conventional message (e.g., `docs: add xxx template`)
8. Push to your fork and create PR to original repo's `main` branch
## Checklist Before PR
- [ ] Both EN and ZH versions created
- [ ] `docs.json` updated for both languages
- [ ] Overview/index pages updated with new entries
- [ ] Local preview tested (`pnpm dev`)
- [ ] No broken links
- [ ] Code blocks have correct language tags
- [ ] Frontmatter includes title and description
- [ ] Images placed in `images/` directory (if any)