Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
37 changes: 37 additions & 0 deletions .github/workflows/build.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
name: Build

on:
pull_request:
branches: [master]
push:
branches: [master]

jobs:
format:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: pnpm/action-setup@v4
- uses: actions/setup-node@v4
with:
node-version: 20
cache: pnpm
- run: pnpm install --frozen-lockfile
- run: pnpm format:check

build:
runs-on: ubuntu-latest

steps:
- uses: actions/checkout@v4

- uses: pnpm/action-setup@v4

- uses: actions/setup-node@v4
with:
node-version: 20
cache: pnpm

- run: pnpm install --frozen-lockfile

- run: pnpm build
17 changes: 9 additions & 8 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,14 +1,9 @@
# Dependencies
/node_modules

.next

# Production
/build

# Generated files
.docusaurus
.cache-loader
# VitePress
docs/.vitepress/cache
docs/.vitepress/dist

# Misc
.DS_Store
Expand All @@ -20,3 +15,9 @@
npm-debug.log*
yarn-debug.log*
yarn-error.log*

build/
dist/
.docusaurus/
.next/
.turbo/
8 changes: 8 additions & 0 deletions .oxfmtrc.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
{
"$schema": "./node_modules/oxfmt/configuration_schema.json",
"printWidth": 120,
"tabWidth": 2,
"trailingComma": "es5",
"sortPackageJson": false,
"ignorePatterns": ["node_modules", "docs/.vitepress/cache", "docs/.vitepress/dist", "pnpm-lock.yaml"]
}
5 changes: 0 additions & 5 deletions .prettierrc

This file was deleted.

92 changes: 92 additions & 0 deletions CLAUDE.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,92 @@
# CLAUDE.md

This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.

## Project Overview

This is the **Plane product documentation site** ([docs.plane.so](https://docs.plane.so)), built with VitePress. It was recently migrated from Docusaurus — the old `sidebars.ts` is a legacy artifact and is no longer used.

## Commands

```bash
pnpm dev # Start local dev server
pnpm build # Production build (outputs to docs/.vitepress/dist/)
pnpm preview # Preview production build locally
pnpm format # Format all files with oxfmt
pnpm format:check # Validate formatting (runs in CI)
```

## Architecture

### Directory Layout

- `docs/` — all documentation content as Markdown files
- `docs/.vitepress/config.mts` — main VitePress config: sidebar navigation, head tags, analytics, theme settings
- `docs/.vitepress/theme/` — custom theme layer extending VitePress default theme
- `docs/.vitepress/theme/index.ts` — theme entry: registers custom components and tabs plugin
- `docs/.vitepress/theme/style.css` — global CSS (Tailwind v4, custom properties, component styles)
- `docs/.vitepress/theme/components/` — custom Vue components used in Markdown
- `docs/public/` — static assets (fonts, logos)
- `vercel.json` — 200+ URL redirects for backward compatibility with old Docusaurus paths
- `sidebars.ts` — **legacy file from Docusaurus migration, not used by VitePress**

### Sidebar Navigation

The sidebar is defined entirely in `docs/.vitepress/config.mts` under `themeConfig.sidebar`. When adding or reorganizing pages, edit this array directly.

### Custom Vue Components

These are globally registered and can be used directly in any Markdown file:

- **`<Card>`** — content card with optional icon and link. Has built-in SVG icons for GitHub, Slack, GitLab, Sentry, Linear, Asana, Jira, CSV.
- **`<CardGroup>`** — responsive grid wrapper. Prop: `cols` (default 2).
- **`<Tags>`** — pricing tier badges (Pro, Business, Enterprise). Accepts `:tags` array with `name`, `link`, and `additionalClass` (`pro`, `business`, `enterprise`).

### Markdown Conventions

```markdown
<!-- Pricing tags -->
<Tags :tags='[{ name: "Pro", link: "/url", additionalClass: "pro" }]' />

<!-- Card groups -->
<CardGroup :cols="2">
<Card title="Title" icon="github" href="/path">
Description
</Card>
</CardGroup>

<!-- Admonitions -->

::: tip
::: warning
::: danger

<!-- Tabs (via vitepress-plugin-tabs) -->

:::tabs
== Tab 1
Content
== Tab 2
Content
:::

<!-- Image styling via hash fragments -->

![Alt](https://url#hero) <!-- rounded corners + shadow -->
![Alt](https://url#hero-tl) <!-- top-left corner only -->
```

### Image Hosting

All documentation images are hosted externally at `https://media.docs.plane.so/`. Reference them by full URL in Markdown.

## CI

GitHub Actions (`.github/workflows/build.yml`) runs two jobs on PRs and pushes to `master`:

1. **format** — `pnpm format:check`
2. **build** — `pnpm build`

## Formatting

Uses oxfmt (`.oxfmtrc.json`): 120 char width, 2-space indent, ES5 trailing commas.
Loading