Skip to content

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 locally

Tech Stack

ComponentTechnology
FrameworkVitePress 1.6.4
LanguageTypeScript (ES modules)
Node22.x required
ThemeForced dark mode, custom CSS tokens
FontsSora (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 #c8553a as primary accent throughout
  • Custom landing: Landing page uses a fully custom Vue SFC (LandingLayout.vue), not VitePress home template
  • Design tokens: custom.css maps kendo design system tokens (surfaces, text hierarchy, borders) to VitePress CSS variables
  • Clean URLs: Enabled — no .html extensions

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.txt and llms-full.txt in /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.php and 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 sectionSource 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.mdbackend/app/Actions/Github/ + webhook handlers
Landing page featuresMust 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 — Cloudflare cds into this before building)
  • Build command: npm run build
  • Build output: .vitepress/dist
  • Node version: 22 (set via NODE_VERSION environment 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)

Last updated: