Pulled ALL skills from 15 source repositories: - anthropics/skills: 16 (docs, design, MCP, testing) - obra/superpowers: 14 (TDD, debugging, agents, planning) - coreyhaines31/marketingskills: 25 (marketing, CRO, SEO, growth) - better-auth/skills: 5 (auth patterns) - vercel-labs/agent-skills: 5 (React, design, Vercel) - antfu/skills: 16 (Vue, Vite, Vitest, pnpm, Turborepo) - Plus 13 individual skills from various repos Mosaic Stack is not limited to coding — the Orchestrator and subagents serve coding, business, design, marketing, writing, logistics, analysis, and more. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
3.6 KiB
3.6 KiB
name, description
| name | description |
|---|---|
| vitepress-routing | File-based routing, source directory structure, clean URLs, and route rewrites |
Routing
VitePress uses file-based routing where markdown files map directly to HTML pages.
File to URL Mapping
.
├─ index.md → /index.html (/)
├─ about.md → /about.html
├─ guide/
│ ├─ index.md → /guide/index.html (/guide/)
│ └─ getting-started.md → /guide/getting-started.html
Project Structure
.
├─ docs # Project root
│ ├─ .vitepress # VitePress directory
│ │ ├─ config.ts # Configuration
│ │ ├─ theme/ # Custom theme
│ │ ├─ cache/ # Dev server cache (gitignore)
│ │ └─ dist/ # Build output (gitignore)
│ ├─ public/ # Static assets (copied as-is)
│ ├─ index.md # Home page
│ └─ guide/
│ └─ intro.md
Source Directory
Separate source files from project root:
// .vitepress/config.ts
export default {
srcDir: './src' // Markdown files live in ./src/
}
With srcDir: 'src':
.
├─ .vitepress/ # Config stays at project root
└─ src/ # Source directory
├─ index.md → /
└─ guide/intro.md → /guide/intro.html
Linking Between Pages
Use relative or absolute paths. Omit file extensions:
<!-- Recommended -->
[Getting Started](./getting-started)
[Guide](/guide/)
<!-- Works but not recommended -->
[Getting Started](./getting-started.md)
[Getting Started](./getting-started.html)
Clean URLs
Remove .html extension from URLs (requires server support):
export default {
cleanUrls: true
}
Server requirements:
- Netlify, GitHub Pages: Supported by default
- Vercel: Enable
cleanUrlsinvercel.json - Nginx: Configure
try_files $uri $uri.html $uri/ =404
Route Rewrites
Customize the mapping between source and output paths:
export default {
rewrites: {
// Static mapping
'packages/pkg-a/src/index.md': 'pkg-a/index.md',
'packages/pkg-a/src/foo.md': 'pkg-a/foo.md',
// Dynamic parameters
'packages/:pkg/src/:slug*': ':pkg/:slug*'
}
}
This maps packages/pkg-a/src/intro.md → /pkg-a/intro.html.
Important: Relative links in rewritten files should be based on the rewritten path, not the source path.
Rewrites can also be a function:
export default {
rewrites(id) {
return id.replace(/^packages\/([^/]+)\/src\//, '$1/')
}
}
Public Directory
Files in public/ are copied to output root as-is:
docs/public/
├─ favicon.ico → /favicon.ico
├─ robots.txt → /robots.txt
└─ images/logo.png → /images/logo.png
Reference with absolute paths:

Base URL
For sub-path deployment (e.g., GitHub Pages):
export default {
base: '/repo-name/'
}
All absolute paths are automatically prefixed with base. For dynamic paths in components, use withBase:
<script setup>
import { withBase } from 'vitepress'
</script>
<template>
<img :src="withBase('/logo.png')" />
</template>
Key Points
index.mdfiles map to directory root (/guide/instead of/guide/index)- Use paths without extensions in links for flexibility
srcDirseparates source from configcleanUrlsremoves.htmlbut requires server supportrewritesenables complex source structures with clean output URLs