Appearance
Site - Claude Code Configuration
VitePress 1.6.4 documentation and landing page for kendo.dev. Dark-only theme with custom Vue 3 layouts.
Quick Commands
bash
# Run from site/
npm run dev # Start VitePress dev server
npm run build # Build static site to .vitepress/dist/
npm run preview # Preview production build locallyTech Stack
| Component | Technology |
|---|---|
| Framework | VitePress 1.6.4 |
| Language | TypeScript (ES modules) |
| Node | 22.x required |
| Theme | Forced dark mode, custom CSS tokens |
| Fonts | Sora (body), JetBrains Mono (code), Instrument Serif (accents) |
Site Structure
site/
├── index.md # Landing page (layout: false → LandingLayout.vue)
├── docs/
│ ├── index.md # Docs home
│ ├── guides/ # User guides (quick-start, projects, issues, sprints, time-tracking)
│ ├── integrations/ # GitHub
│ ├── mcp/ # MCP tools reference (9 pages)
│ └── api/ # API reference (7 pages)
├── public/ # Static assets (logo, OG image, robots.txt, llms.txt)
└── .vitepress/
├── config.ts # VitePress config (SEO, nav, sidebar, JSON-LD)
└── theme/
├── index.ts # Theme entry
├── custom.css # Design tokens mapped to VitePress CSS vars
├── Layout.vue # Default layout wrapper
├── NotFound.vue # 404 page
└── layouts/
└── LandingLayout.vue # Custom landing page (hero, features, FAQ, comparison)Key Design Decisions
- Dark-only:
appearance: 'dark'in config — no light mode toggle - Brand color: Kendo-red
#c8553aas primary accent throughout - Custom landing: Landing page uses a fully custom Vue SFC (
LandingLayout.vue), not VitePress home template - Design tokens:
custom.cssmaps kendo design system tokens (surfaces, text hierarchy, borders) to VitePress CSS variables - Clean URLs: Enabled — no
.htmlextensions
SEO & Structured Data
The config generates comprehensive SEO metadata:
- Open Graph + Twitter Card meta tags (with frontmatter overrides per page)
- Canonical URLs on every page
- Sitemap at
https://kendo.dev/sitemap.xml - JSON-LD schemas: Organization, WebSite, SoftwareApplication, FAQPage, Article, BreadcrumbList
llms.txtandllms-full.txtin/public/for AI discovery
Content Guidelines
- Documentation accuracy: Docs must reflect current app functionality — check the actual codebase when updating
- MCP docs: Mirror the tools defined in
backend/app/Mcp/Tools/— keep parameters and examples in sync - API docs: Must match routes in
backend/routes/api.phpand ResourceData response shapes - Landing page: Marketing copy lives in
LandingLayout.vue— feature descriptions should match real capabilities
Cross-Reference Sources
When updating docs, always verify against the actual implementation:
| Doc section | Source of truth |
|---|---|
docs/api/ | backend/routes/api.php + app/Http/Resources/*ResourceData.php |
docs/mcp/ | backend/app/Mcp/Tools/*.php (parameters, descriptions, examples) |
docs/guides/ | Frontend components + backend Actions (actual feature behavior) |
docs/integrations/github.md | backend/app/Actions/Github/ + webhook handlers |
| Landing page features | Must match what actually ships — no aspirational claims |
Deployment
The site builds to .vitepress/dist/ as static files, deployed via Cloudflare Pages (global CDN).
- Platform: Cloudflare Pages
- Domain:
https://kendo.dev - Root directory:
site(monorepo subfolder — Cloudflarecds into this before building) - Build command:
npm run build - Build output:
.vitepress/dist - Node version: 22 (set via
NODE_VERSIONenvironment variable) - Production branch:
main(auto-deploys on push) - Preview deployments: auto-generated for every non-production branch/PR push
- Note: Any push to the repo triggers a build (Cloudflare Pages doesn't support path-based filters), but VitePress builds are fast (~seconds)