Skip to content

migrate: docusarus to vitepress#394

Open
sriramveeraghanta wants to merge 13 commits intomasterfrom
migrate-vitepress
Open

migrate: docusarus to vitepress#394
sriramveeraghanta wants to merge 13 commits intomasterfrom
migrate-vitepress

Conversation

@sriramveeraghanta
Copy link
Member

@sriramveeraghanta sriramveeraghanta commented Feb 2, 2026

Summary by CodeRabbit

  • New Features

    • Added keyboard shortcuts reference, a comprehensive permissions matrix, new tutorials, and an improved docs homepage with richer landing cards and navigation.
  • Documentation

    • Large migration and reorganization of docs: many formatting, clarity, and content updates; new/importer pages (Notion, importers overview) and refreshed integration guides.
  • Chores

    • Switched docs tooling and site build, updated CI and formatting/configuration for the documentation site.

@vercel
Copy link

vercel bot commented Feb 2, 2026

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
docs Error Error Feb 24, 2026 9:08pm
docs-vitepress Ready Ready Preview, Comment Feb 24, 2026 9:08pm

Request Review

@coderabbitai
Copy link

coderabbitai bot commented Feb 2, 2026

📝 Walkthrough

Walkthrough

Migrates the docs site from Docusaurus/React to VitePress/Vue: replaces site config and build scripts, adds a VitePress theme and Vue components, removes legacy React components and global CSS, updates dependencies/CI, and converts numerous docs from JSX/MDX to Vue/Markdown syntax.

Changes

Cohort / File(s) Summary
Framework & Build
package.json, tsconfig.json, .gitignore, .oxfmtrc.json
Added "type":"module", switched scripts to VitePress, updated engine/packageManager, removed TS config and Prettier; updated .gitignore for VitePress caches/dist and top-level build artifacts; added oxfmt config.
VitePress Site & Theme
docs/.vitepress/config.mts, docs/.vitepress/theme/index.ts, docs/.vitepress/theme/Layout.vue, docs/.vitepress/theme/style.css
Introduced full VitePress config, theme entry, custom Layout and large stylesheet (fonts, variables, light/dark modes, extensive UI styles). Review theme config, head tags, analytics, and heavy CSS.
Vue Theme Components
docs/.vitepress/theme/components/*
Card.vue, CardGroup.vue, Tags.vue, HomeLanding.vue
Added new Vue SFCs (icon-aware Card, responsive CardGroup, Tags renderer, home landing). Check props, icon mappings, and global registration in theme index.
Docs Content Migration
docs/**/* (many files, e.g., docs/core-concepts/*, docs/introduction/*, docs/integrations/*, docs/importers/*, docs/support/*)
Converted ~100 docs from React/MDX patterns to Vue/Markdown: classNameclass, <Tags tags={[...]}/><Tags :tags='[...]'/>, standardized admonitions (::: info), removed legacy frontmatter keys, reflowed content. Mostly formatting; scan notable large edits (visualise_filter, many importer/integration pages).
Removed React Site Assets
src/components/..., src/css/custom.css, src/components/index.ts
Deleted React components (Card.tsx, CardGroup.tsx, Tags.tsx), their re-exports, and the global Docusaurus CSS. Verify no remaining imports reference these files.
New & Removed Docs Pages
docs/index.md, docs/importers/overview.md, docs/importers/notion.md, docs/integrations/about.md, docs/support/keyboard-shortcuts.md, docs/workspaces-and-users/permissions.md, removed .mdx variants (e.g., docs/integrations/about.mdx)
Added several new Markdown pages and removed older MDX/Docusaurus-specific pages. Check sidebar and internal links for updated targets and removed resources.
Tooling & CI
.github/workflows/build.yml, postcss.config.js, .prettierrc (removed)
Added CI workflow (format check + build), PostCSS config (Tailwind/autoprefixer), and removed Prettier config. Verify CI Node/pnpm versions and new format tools.
Developer Docs
CLAUDE.md
Added migration/developer guide describing VitePress architecture, conventions, and repo layout.
Sidebars / Navigation
sidebars.ts
Reformatted sidebar file (quote/indent changes) without content additions/removals; confirm formatting-only edits didn't alter entries.

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~55 minutes

Poem

🐰 I hopped through code and pages bright,

Swapping React for VitePress light,
Cards now hum in Vue’s soft tune,
Docs bloom clean beneath the moon,
A tidy burrow—dawn’s delight.

🚥 Pre-merge checks | ✅ 3
✅ Passed checks (3 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title accurately summarizes the main change: migrating the documentation from Docusaurus to VitePress. The pullrequest involves extensive configuration updates, component rewrites, and documentation file conversions across the entire repository to support the VitePress platform.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch migrate-vitepress

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 3

Note

Due to the large number of review comments, Critical, Major severity comments were prioritized as inline comments.

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
docs/templates/work-item-templates.md (1)

68-70: ⚠️ Potential issue | 🟡 Minor

Remove the duplicated lead-in line.
The two consecutive lead-ins are redundant; keep one for clarity.

Proposed diff
-From either location you can:
-
-From here you can:
+From either location you can:
🤖 Fix all issues with AI agents
In `@docs/.vitepress/theme/components/HomeLanding.vue`:
- Around line 94-95: Several Tailwind "important" modifiers use the old prefix
form (e.g., "!text-2xl !font-[640]") which breaks with Tailwind v4; update every
class string that uses a leading "!" to the postfix form (e.g., "text-2xl!
font-[640]!") so the important marker is suffixed after each utility; search for
the instances that include "!text-2xl", "!font-[640]", "!mb-6", "!mt-0",
"!border-none", "!pt-0" and other classes with leading "!" (there are nine
occurrences in this component) and replace each leading "!" by moving it to the
end of the corresponding utility token.

In `@docs/importers/github-imp.md`:
- Line 8: The tip directive is malformed: change the inline ":::tipIntegrations
and importers..." into a proper VitePress tip block by separating the marker and
content (use "::: tip" on its own line, then the text on the next line) and
ensure the block is closed with a standalone ":::"; update the instance of
":::tip" and the corresponding closing marker so the directive renders
correctly.

In `@docs/importers/jira.md`:
- Line 67: Replace the incorrect VitePress admonition token ":::warning" with
the correct syntax "::: warning" in the docs/importers/jira.md file (the
occurrence shown as :::warning in the diff); locate the stanza that opens with
:::warning and add a space after the colons so it matches the other admonitions
(e.g., ::: info and ::: tip) and closes properly with the matching ::: end
marker.
🟡 Minor comments (23)
docs/communication-and-collaboration/comments-and-activity.md-66-68 (1)

66-68: ⚠️ Potential issue | 🟡 Minor

Use a real heading instead of bold text for “What happens”.

Line 66 appears to be a section heading but is formatted as bold text. Please convert it to a proper heading for consistency and to satisfy MD036.

✅ Suggested fix
-**What happens**
+### What happens
docs/core-concepts/projects/manage-project-members.md-132-135 (1)

132-135: ⚠️ Potential issue | 🟡 Minor

Move the heading outside the HTML wrapper for correct parsing in VitePress.

In VitePress, Markdown inside a block-level HTML element (like <div>) without blank line separation is treated as raw HTML content and won't be parsed as a heading. The heading text will remain literal.

✅ Suggested fix
-<div class="tag-wrapper">
-  ## View project member activity
-  <Tags :tags='[{ name: "Enterprise", link: "https://plane.so/pricing", additionalClass: "enterprise" }]' />
-</div>
+## View project member activity
+<div class="tag-wrapper">
+  <Tags :tags='[{ name: "Enterprise", link: "https://plane.so/pricing", additionalClass: "enterprise" }]' />
+</div>

Alternatively, add blank lines inside the div to allow Markdown parsing:

<div class="tag-wrapper">

  ## View project member activity
  <Tags :tags='[{ name: "Enterprise", link: "https://plane.so/pricing", additionalClass: "enterprise" }]' />

</div>
docs/importers/linear.md-11-11 (1)

11-11: ⚠️ Potential issue | 🟡 Minor

Fix typo: "importert" → "importer".

There's a spelling error in the info callout.

🔤 Proposed fix
-The Linear importert is available on Plane Cloud and on all plans of the Commercial Edition for self-hosted instances.
+The Linear importer is available on Plane Cloud and on all plans of the Commercial Edition for self-hosted instances.
docs/introduction/tutorials/collaborate-on-work-items.md-35-37 (1)

35-37: ⚠️ Potential issue | 🟡 Minor

Add language identifier to code block.

The code block is missing a language identifier after the opening fence, which is a markdown best practice for proper syntax highlighting and accessibility.

📝 Proposed fix
-   ```
+   ```text
    Started working on this - I've identified the CSS issue and should have a fix ready by tomorrow. The problem is with the media query breakpoint at 375px.
    ```
docs/importers/asana.md-11-11 (1)

11-11: ⚠️ Potential issue | 🟡 Minor

Fix typo in documentation text.

The word "importert" should be "importer".

📝 Proposed fix for the typo
-The Asana importert is available on Plane Cloud and on all plans of the Commercial Edition for self-hosted instances.
+The Asana importer is available on Plane Cloud and on all plans of the Commercial Edition for self-hosted instances.
docs/devices/mobile.md-234-237 (1)

234-237: ⚠️ Potential issue | 🟡 Minor

Fix the GitHub callback URL code fence.
The current single-backtick block won’t render as a code block.

🛠️ Proposed fix
-- For GitHub Sign-In: Add the following URL to the Callback URL section in your GitHub OAuth app:
-  `bash
-  https://<plane.example.com>/auth/mobile/github/callback/
-  `
+- For GitHub Sign-In: Add the following URL to the Callback URL section in your GitHub OAuth app:
+  ```bash
+  https://<plane.example.com>/auth/mobile/github/callback/
+  ```
docs/workspaces-and-users/add-remove-seats.md-21-32 (1)

21-32: ⚠️ Potential issue | 🟡 Minor

Split the image and numbered steps; fix admonition closing indentation.
The merged line likely breaks the ordered list and can render the admonition incorrectly.

🛠️ Proposed fix
-![Add seats](https://media.docs.plane.so/activate-license/add-paid-seats.webp#hero) 4. Enter the number of seats to add. 5. Click **Change**. 6. Complete payment in Stripe.
+![Add seats](https://media.docs.plane.so/activate-license/add-paid-seats.webp#hero)
+4. Enter the number of seats to add.
+5. Click **Change**.
+6. Complete payment in Stripe.

 ::: info Billing impact

 - New seats are charged immediately.
 - Future bills include the full price of all seats.
-  :::
+:::
docs/core-concepts/issues/visualise_filter.md-52-55 (1)

52-55: ⚠️ Potential issue | 🟡 Minor

Fix the extra bracket in the date range placeholder.
The current text renders as a typo.

🛠️ Proposed fix
-- Set **Target date** → **between** → [[Select date range]
+- Set **Target date** → **between** → [Select date range]
docs/core-concepts/issues/visualise_filter.md-137-142 (1)

137-142: ⚠️ Potential issue | 🟡 Minor

Hyphenate compound adjective (“high-priority”).
This reads better and is standard for noun modifiers.

🛠️ Proposed fix
-| `is`            | Exactly matches one priority      | Only high priority items       |
+| `is`            | Exactly matches one priority      | Only high-priority items       |
docs/intake/overview.md-54-56 (1)

54-56: ⚠️ Potential issue | 🟡 Minor

Fix typo in section title (“responsbility”).
The heading should read “Intake responsibility.”

✏️ Proposed fix
-  ## Intake responsbility
+  ## Intake responsibility
docs/introduction/tutorials/organize-and-view-work.md-12-15 (1)

12-15: ⚠️ Potential issue | 🟡 Minor

Hyphenate “project-level.”

✏️ Proposed fix
-- Navigate workspace and project level views
+- Navigate workspace and project-level views
docs/workspaces-and-users/customize-navigation.md-29-38 (1)

29-38: ⚠️ Potential issue | 🟡 Minor

Use headings instead of bold text for section titles.
This improves TOC generation and structure.

✏️ Proposed fix
-**Accordion navigation control**
+### Accordion navigation control
...
-**Horizontal navigation bar**
+### Horizontal navigation bar
docs/core-concepts/projects/initiatives.md-6-11 (1)

6-11: ⚠️ Potential issue | 🟡 Minor

Replace Markdown heading with HTML element inside the <div> block.

VitePress uses markdown-it, which follows CommonMark spec—Markdown is not parsed inside HTML block elements without blank-line separation. The heading # Group multiple projects using Initiatives will render as literal text instead of a styled heading.

Note: The same issue exists in docs/core-concepts/projects/project-states.md (lines 8-11).

🔧 Suggested fix (HTML heading)
 <div class="tag-wrapper">
-  # Group multiple projects using Initiatives
+  <h2>Group multiple projects using Initiatives</h2>
   <Tags :tags='[{ name: "Pro", link: "https://plane.so/pricing", additionalClass: "pro" }]' />
 </div>
docs/core-concepts/projects/project-states.md-6-11 (1)

6-11: ⚠️ Potential issue | 🟡 Minor

Heading inside the <div> renders as literal text in VitePress.

VitePress uses markdown-it, which follows CommonMark behavior: Markdown is not parsed inside block-level HTML elements like <div>. The # Track your projects with states will appear as plain text instead of being rendered as a heading.

Replace the Markdown heading with an HTML <h2> tag:

🔧 Suggested fix
 <div class="tag-wrapper">
-  # Track your projects with states
+  <h2>Track your projects with states</h2>
   <Tags :tags='[{ name: "Pro", link: "https://plane.so/pricing", additionalClass: "pro" }]' />
 </div>
docs/core-concepts/pages/overview.md-57-60 (1)

57-60: ⚠️ Potential issue | 🟡 Minor

Fix the merged bullet in the AI helper list.
Line 59 has two sentences fused with a stray hyphen, which reads awkwardly in Markdown. Suggest splitting into two bullets.

Proposed diff
- - Expand on ideas to add context, detail, or depth to your writing. - Get suggestions for clear, catchy titles.
+ - Expand on ideas to add context, detail, or depth to your writing.
+ - Get suggestions for clear, catchy titles.
docs/core-concepts/pages/wiki.md-6-6 (1)

6-6: ⚠️ Potential issue | 🟡 Minor

Minor grammar: use "company-wide" (hyphenated).

The compound adjective "company-wide" should be hyphenated when it modifies a noun.

📝 Proposed fix
-# Wiki for company wide knowledge base
+# Wiki for company-wide knowledge base
docs/introduction/tutorials/create-project.md-31-33 (1)

31-33: ⚠️ Potential issue | 🟡 Minor

Fix typo in sentence.
Line 32 has a missing space: “part ofdisplay”.

Proposed fix
- - Projects you're part ofdisplay directly in your sidebar under the **Projects** section.
+ - Projects you're part of display directly in your sidebar under the **Projects** section.
docs/introduction/tutorials/create-project.md-87-89 (1)

87-89: ⚠️ Potential issue | 🟡 Minor

Resolve MD007 list indentation warning.
Lines 88–89 are indented inconsistently, which trips markdownlint’s list indentation rule.

Proposed fix
 3. **Save your changes**
-   - Click **Update project** to apply your modifications.
-   - Your project now reflects the updated configuration.
+    - Click **Update project** to apply your modifications.
+    - Your project now reflects the updated configuration.
docs/core-concepts/pages/editor-blocks.md-115-117 (1)

115-117: ⚠️ Potential issue | 🟡 Minor

Add a language to the fenced LaTeX examples.

This addresses MD040 and improves readability.

Proposed fix
-```
+```latex
 \lim_{x \to \infty} \frac{1}{x} = 0

@@
- +latex
\bar{x} = \frac{1}{n}\sum_{i=1}^{n} x_i

Also applies to: 131-133

docs/core-concepts/pages/editor-blocks.md-73-75 (1)

73-75: ⚠️ Potential issue | 🟡 Minor

Keep heading levels incremental for markdownlint.

This H4 should be H3 under the Attachment section.

Proposed fix
-#### Show video preview
+### Show video preview
docs/automations/custom-automations.md-6-6 (1)

6-6: ⚠️ Potential issue | 🟡 Minor

Hyphenate the compound modifier in the heading.

Use “trigger-based” instead of “trigger based”.

Proposed fix
-# Automate project tasks with trigger based workflows
+# Automate project tasks with trigger-based workflows
docs/integrations/github.md-265-270 (1)

265-270: ⚠️ Potential issue | 🟡 Minor

Use a real heading for “Example” and align the code block style with markdownlint.

This resolves MD036 and MD046.

Proposed fix
-_Example_
-
-```bash
-PR Title: [WEB-344] Add user authentication feature
-PR Description: Implements login functionality for WEB-345
-```
+##### Example
+
+    PR Title: [WEB-344] Add user authentication feature
+    PR Description: Implements login functionality for WEB-345
docs/integrations/gitlab.md-240-245 (1)

240-245: ⚠️ Potential issue | 🟡 Minor

Use a real heading for “Example” and align the code block style with markdownlint.

This resolves MD036 and MD046.

Proposed fix
-_Example_
-
-```bash
-PR Title: [WEB-344] Add user authentication feature
-PR Description: Implements login functionality for WEB-345
-```
+##### Example
+
+    PR Title: [WEB-344] Add user authentication feature
+    PR Description: Implements login functionality for WEB-345
🧹 Nitpick comments (9)
docs/importers/jira.md (1)

46-46: Optional: Consider varying the phrasing.

The phrase "where you want to import" appears in both step 6 (line 41) and step 7 (line 46). Consider rephrasing for variety, such as: "Choose the source workspace and project in Jira."

docs/core-concepts/account/settings.md (1)

21-123: Consider using proper headings instead of bold text for subsections.

Several subsections use bold text (e.g., **Profile picture and cover image**, **Personal information**, **Property changes**) instead of Markdown headings. Using proper heading levels (###) would improve semantic structure, accessibility, and navigation.

For example:

  • Line 21: **Profile picture and cover image**### Profile picture and cover image
  • Line 27: **Personal information**### Personal information
  • Line 101: **Property changes**### Property changes
  • And similar patterns throughout the document
📝 Example refactor for a few subsections
-**Profile picture and cover image**
+### Profile picture and cover image

 - Profile picture appears throughout Plane (work items, comments, assignments).

...

-**Personal information**
+### Personal information

 - **First name** - Your given name (required)

...

-**Property changes**
+### Property changes

 - Notifies when work item properties change (assignees, priority, estimates, etc.)
postcss.config.js (1)

1-1: Autoprefixer may be redundant with Tailwind v4’s Lightning CSS.

Tailwind v4 already applies vendor prefixes via Lightning CSS, so running autoprefixer can add extra processing. Consider dropping it unless you still need it for non‑Tailwind CSS.

🔧 Suggested simplification
-export default { plugins: { "@tailwindcss/postcss": {}, autoprefixer: {} } };
+export default { plugins: { "@tailwindcss/postcss": {} } };
docs/integrations/slack.md (1)

217-233: Add language identifiers to code blocks for better rendering.

The code blocks showing Slack command examples should specify a language identifier for proper syntax highlighting in VitePress.

📝 Suggested improvement for syntax highlighting
 **Create work items conversationally:**
-```
+```text
 `@Plane` create a work item 'live tail' and assign it to Mike.

Get project information:
- +text
@Plane can you provide the identifiers of these projects?


**Check cycle progress:**
-```
+```text
`@Plane` how are we doing in the current cycle for the AI project?

</details>

</blockquote></details>
<details>
<summary>docs/.vitepress/theme/components/Tags.vue (1)</summary><blockquote>

`13-13`: **Consider using a unique key instead of index.**

Using `index` as the `:key` works for static lists but can cause issues if tags are dynamically reordered or filtered. Since `tag.name` should be unique within a tag list, consider using it as the key.


<details>
<summary>💡 Suggested improvement</summary>

```diff
-    <template v-for="(tag, index) in tags" :key="index">
+    <template v-for="tag in tags" :key="tag.name">
docs/core-concepts/workspaces/members.md (1)

55-57: Add language specifier to fenced code block.

The code block showing CSV column headers lacks a language specifier. Consider adding text or csv for consistency and to satisfy linting rules.

Suggested fix
-```
+```text
 Email, Display Name, First Name, Last Name, Role
</details>

</blockquote></details>
<details>
<summary>docs/importers/notion.md (1)</summary><blockquote>

`31-33`: **Minor inconsistency in admonition syntax.**

This file uses `:::info` (no space) while other files in this PR use `::: info` (with space). Both work in VitePress, but consider aligning for consistency.

<details>
<summary>Suggested fix for consistency</summary>

```diff
-:::info
+::: info
 Only HTML exports from Notion are supported. Make sure to select HTML as your export format.
 :::
docs/intake/intake-forms.md (1)

6-8: Tags component placement differs from other files.

This file places the Tags component directly after the H1 heading without the <div class="tag-wrapper"> wrapper used in other files (e.g., estimates.md, members.md). Both approaches work, but the tag-wrapper provides consistent alignment styling. Consider wrapping for visual consistency.

Optional: Wrap with tag-wrapper for consistency
-# Intake to collect and triage external work requests
-
-<Tags :tags='[{ name: "Business", link: "https://plane.so/pricing", additionalClass: "business" }]' />
+<div class="tag-wrapper">
+  # Intake to collect and triage external work requests
+  <Tags :tags='[{ name: "Business", link: "https://plane.so/pricing", additionalClass: "business" }]' />
+</div>
docs/.vitepress/theme/components/HomeLanding.vue (1)

17-22: Avoid any for icon components to keep TS safety.

Use a Vue component type instead of any.

Proposed fix
 import {
   Building2,
   LayoutDashboard,
   Inbox,
@@
   ArrowRight,
 } from "lucide-vue-next";
+import type { Component } from "vue";

 interface LinkItem {
-  icon: any;
+  icon: Component;
   title: string;
   description: string;
   href: string;

Comment on lines 94 to 95
<h2 class="!text-2xl !font-[640] !mb-6 !mt-0 !border-none !pt-0 tracking-tight text-[var(--vp-c-text-1)]">Explore by Topic</h2>
<div class="grid grid-cols-1 sm:grid-cols-2 min-[960px]:grid-cols-3 gap-4">
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟠 Major

🧩 Analysis chain

🏁 Script executed:

# First, check the project's Tailwind version
find . -type f \( -name "package.json" -o -name "tailwind.config.*" \) | head -20

Repository: makeplane/docs

Length of output: 72


🏁 Script executed:

# Check the actual file content at the specified lines
wc -l docs/.vitepress/theme/components/HomeLanding.vue

Repository: makeplane/docs

Length of output: 110


🏁 Script executed:

# Read the file to see the code at specified lines
sed -n '90,160p' docs/.vitepress/theme/components/HomeLanding.vue

Repository: makeplane/docs

Length of output: 3833


🏁 Script executed:

# Check Tailwind version in package.json
cat package.json | grep -i tailwind

Repository: makeplane/docs

Length of output: 123


🌐 Web query:

Tailwind CSS v4 important modifier syntax

💡 Result:

In Tailwind CSS v4, the important modifier uses a postfix !:

  • Utility: bg-red-500! (preferred) instead of !bg-red-500 (old style) [1]
  • With variants: put ! at the very end: hover:bg-red-500!, md:hover:bg-red-500! [1]
  • The change was made so the ! is always in a consistent position (at the end), even when variants are present [1].

Example:

<div class="bg-sky-500 bg-red-500! hover:bg-green-500!"></div>

Sources: [1]


🏁 Script executed:

# Count all instances of prefix important modifier in the file
rg '!\w+' docs/.vitepress/theme/components/HomeLanding.vue | wc -l

Repository: makeplane/docs

Length of output: 59


🏁 Script executed:

# Find all lines with prefix important modifiers to verify scope
rg -n '!\w+' docs/.vitepress/theme/components/HomeLanding.vue | head -20

Repository: makeplane/docs

Length of output: 1538


Update all prefix ! important modifiers to suffix form for Tailwind v4 compatibility.

This file uses the old prefix syntax (!text-2xl) which is incompatible with Tailwind v4. The project has @tailwindcss/postcss@^4.0.6 installed, which requires the postfix form (text-2xl!). There are 9 instances across the file (lines 94, 100, 123, 130, 135, 150, 157, 169, 177) that need updating.

Example fix
-<h2 class="!text-2xl !font-[640] !mb-6 !mt-0 !border-none !pt-0 tracking-tight text-[var(--vp-c-text-1)]">Explore by Topic</h2>
+<h2 class="text-2xl! font-[640]! mb-6! mt-0! border-none! pt-0! tracking-tight text-[var(--vp-c-text-1)]">Explore by Topic</h2>
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
<h2 class="!text-2xl !font-[640] !mb-6 !mt-0 !border-none !pt-0 tracking-tight text-[var(--vp-c-text-1)]">Explore by Topic</h2>
<div class="grid grid-cols-1 sm:grid-cols-2 min-[960px]:grid-cols-3 gap-4">
<h2 class="text-2xl! font-[640]! mb-6! mt-0! border-none! pt-0! tracking-tight text-[var(--vp-c-text-1)]">Explore by Topic</h2>
<div class="grid grid-cols-1 sm:grid-cols-2 min-[960px]:grid-cols-3 gap-4">
🤖 Prompt for AI Agents
In `@docs/.vitepress/theme/components/HomeLanding.vue` around lines 94 - 95,
Several Tailwind "important" modifiers use the old prefix form (e.g., "!text-2xl
!font-[640]") which breaks with Tailwind v4; update every class string that uses
a leading "!" to the postfix form (e.g., "text-2xl! font-[640]!") so the
important marker is suffixed after each utility; search for the instances that
include "!text-2xl", "!font-[640]", "!mb-6", "!mt-0", "!border-none", "!pt-0"
and other classes with leading "!" (there are nine occurrences in this
component) and replace each leading "!" by moving it to the end of the
corresponding utility token.


# GitHub Importer

:::tipIntegrations and importers are only available on the cloud version. We plan to open-source our SDKs in the near future so that the community can request or contribute integrations as needed.:::
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🔴 Critical

Fix malformed directive syntax.

The tip directive is malformed - there's no space or newline between :::tip and the content. This will cause rendering issues in VitePress.

🔧 Proposed fix
-:::tipIntegrations and importers are only available on the cloud version. We plan to open-source our SDKs in the near future so that the community can request or contribute integrations as needed.:::
+:::tip
+Integrations and importers are only available on the cloud version. We plan to open-source our SDKs in the near future so that the community can request or contribute integrations as needed.
+:::
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
:::tipIntegrations and importers are only available on the cloud version. We plan to open-source our SDKs in the near future so that the community can request or contribute integrations as needed.:::
:::tip
Integrations and importers are only available on the cloud version. We plan to open-source our SDKs in the near future so that the community can request or contribute integrations as needed.
:::
🤖 Prompt for AI Agents
In `@docs/importers/github-imp.md` at line 8, The tip directive is malformed:
change the inline ":::tipIntegrations and importers..." into a proper VitePress
tip block by separating the marker and content (use "::: tip" on its own line,
then the text on the next line) and ensure the block is closed with a standalone
":::"; update the instance of ":::tip" and the corresponding closing marker so
the directive renders correctly.

@@ -68,27 +67,27 @@ To import Jira issues to a Plane project, follow these steps:
:::warning
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🔴 Critical

🧩 Analysis chain

🌐 Web query:

VitePress admonition blocks syntax spacing rules

💡 Result:

VitePress “admonition” (callout) syntax + spacing rules

1) Custom container admonitions (::: ...)

  • Opening fence must be on its own line and starts with :::, then a space, then the type:
    ::: tip
    Content...
    :::
  • Custom title (optional) goes on the same opening line, after a space following the type:
    ::: danger STOP
    Danger zone, do not proceed
    :::
  • Attributes (optional) go at the end of the same opening line in {...}, typically separated by a space from the title/type:
    ::: details Click me {open}
    Content...
    :::
  • Closing fence is ::: alone on its own line. (vitepress.dev)

2) GitHub-flavored alert blocks (> [!NOTE])

  • The marker line is a blockquote with > then [!TYPE]:
    > [!NOTE]
    > Your text...
  • Every line in the alert block should be prefixed with > (including blank lines if you want a blank line inside the callout).
  • Separate multiple alerts with a blank line between blockquote groups (as in the docs examples). (vitepress.dev)

Citations:


🏁 Script executed:

# Check the actual content of the file at the relevant lines
sed -n '10p;18p;50p;67p' docs/importers/jira.md

Repository: makeplane/docs

Length of output: 120


Update line 67 to use correct VitePress admonition syntax.

Lines 10, 18, and 50 were updated to use ::: info and ::: tip with a space after :::, but line 67 still contains :::warning without a space. VitePress requires a space between ::: and the admonition type. Update line 67 to ::: warning.

🤖 Prompt for AI Agents
In `@docs/importers/jira.md` at line 67, Replace the incorrect VitePress
admonition token ":::warning" with the correct syntax "::: warning" in the
docs/importers/jira.md file (the occurrence shown as :::warning in the diff);
locate the stanza that opens with :::warning and add a space after the colons so
it matches the other admonitions (e.g., ::: info and ::: tip) and closes
properly with the matching ::: end marker.

Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 2

Note

Due to the large number of review comments, Critical, Major severity comments were prioritized as inline comments.

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (6)
docs/automations/custom-automations.md (1)

67-67: ⚠️ Potential issue | 🟡 Minor

Remove duplicate word and smooth phrasing.
Currently reads “to to start turn on”.

✏️ Proposed edit
-8. Click **Enable** on the top right corner of the screen to to start turn on the automation on your project.
+8. Click **Enable** in the top-right corner of the screen to turn on the automation for your project.
docs/core-concepts/account/settings.md (1)

139-141: ⚠️ Potential issue | 🟡 Minor

Incomplete or placeholder Connections section.

The Connections section contains only a header and a single descriptive line with no actionable content or details about managing integrations. Users would expect information about what connections are available, how to add/remove them, and their purposes.

Consider either:

  • Expanding this section with complete documentation about connection management
  • Removing it entirely if this feature is not yet implemented or documented
  • Adding a note indicating this section is under construction
docs/core-concepts/issues/visualise_filter.md (1)

81-87: ⚠️ Potential issue | 🟡 Minor

Remove extra space before the period.
There’s an extra space before the final period in the operator list sentence.

✏️ Suggested fix
-... `is empty`, etc. .
+... `is empty`, etc.
docs/core-concepts/projects/manage-project-members.md (1)

162-170: ⚠️ Potential issue | 🟡 Minor

Remove duplicated “How users join projects” section.

The same section appears earlier (Lines 122–131). This duplication reads like a merge artifact.

🧹 Suggested removal (keep earlier section)
-## How users join projects
-
-Users can become project members in two different ways, and understanding both helps you manage your project team effectively.
-
-**Direct project membership** is where you specifically invite users to your project and assign them roles. These members have access only to the projects you've added them to, and you have full control over their permissions.
-
-**Teamspace-based membership** happens automatically when your project is linked to a [Teamspace](/core-concepts/workspaces/teamspaces). All members of that teamspace automatically receive `Member` access to your project, making it perfect for teams that collaborate across multiple projects.
-
-Users can have both types of access simultaneously. When this happens, Plane automatically applies whichever role gives them higher permissions. For example, if someone is a `Guest` on your project but joins a linked teamspace, they're automatically upgraded to `Member` access. If they're already an `Admin`, they keep their `Admin` role.
docs/templates/work-item-templates.md (1)

31-71: ⚠️ Potential issue | 🟡 Minor

Fix minor typos and remove the duplicated lead‑in.
Improves readability and removes repetition.

✏️ Suggested fix
-   - Fill in any default fields you want pre-populated (title format, description,..)
+   - Fill in any default fields you want pre-populated (title format, description...)

-4. Click the templates icon and choose and from available templates in the dropdown menu.
+4. Click the templates icon and choose one from the available templates in the dropdown menu.

-From either location you can:
-
-From here you can:
+From either location you can:
docs/importers/jira.md (1)

40-69: ⚠️ Potential issue | 🟡 Minor

Fix duplicated word and align admonition syntax.

Line 41 has "and and"; Line 67 should use ::: warning (with space) for correct VitePress parsing.

✏️ Suggested fix
-    Select the Plane project where you want to import your Jira data and and click **Next**.
+    Select the Plane project where you want to import your Jira data and click **Next**.

-      :::warning
+      ::: warning
🤖 Fix all issues with AI agents
In `@docs/importers/asana.md`:
- Around line 10-12: Fix the typo in the Asana importer documentation by
replacing the misspelled word "importert" with "importer" in the sentence that
currently reads "The Asana importert is available on Plane Cloud and on all
plans of the Commercial Edition for self-hosted instances." Update that phrase
to "The Asana importer is available on Plane Cloud and on all plans of the
Commercial Edition for self-hosted instances."

In `@docs/workspaces-and-users/permissions.md`:
- Line 17: The table elements in permissions.md are missing accessible context
and rely on color-only cues; add a <caption> to each <table> to provide
screen-reader context and update the permission indicator markup (the
checkmark/cross icons and their container elements) to include accessible text
or aria attributes (e.g., aria-label or visually-hidden descriptive text) so
status isn't conveyed by color alone; ensure every permission cell or icon (the
checkmark/cross nodes) has an explicit accessible name and consider adding
aria-labels on the table when appropriate.
🟡 Minor comments (28)
docs/workspaces-and-users/add-remove-seats.md-26-26 (1)

26-26: ⚠️ Potential issue | 🟡 Minor

Fix ordered list formatting — steps 4–6 are embedded in the image line.

This breaks the numbered list and makes the steps hard to read in VitePress. Put the image on its own line and keep steps 4–6 as separate list items.

✅ Suggested fix
-![Add seats](https://media.docs.plane.so/activate-license/add-paid-seats.webp#hero) 4. Enter the number of seats to add. 5. Click **Change**. 6. Complete payment in Stripe.
+![Add seats](https://media.docs.plane.so/activate-license/add-paid-seats.webp#hero)
+
+4. Enter the number of seats to add.
+5. Click **Change**.
+6. Complete payment in Stripe.
docs/workspaces-and-users/add-remove-seats.md-28-32 (1)

28-32: ⚠️ Potential issue | 🟡 Minor

Unindented closing fence needed to terminate the admonition.

The closing ::: is indented, which can render as a code block and leave the info block unclosed.

✅ Suggested fix
-  :::
+:::
docs/core-concepts/issues/visualise_filter.md-54-54 (1)

54-54: ⚠️ Potential issue | 🟡 Minor

Fix stray bracket in date-range placeholder.
There’s a double [ in the placeholder text.

✏️ Suggested fix
-- Set **Target date** → **between** → [[Select date range]
+- Set **Target date** → **between** → [Select date range]
docs/core-concepts/issues/visualise_filter.md-159-164 (1)

159-164: ⚠️ Potential issue | 🟡 Minor

Use lowercase “labels” in the use case.
Capital “Labels” looks inconsistent with other rows.

✏️ Suggested fix
-| `is any of`     | Matches any of the Labels | frontend or backend     |
+| `is any of`     | Matches any of the labels | frontend or backend     |
docs/core-concepts/issues/visualise_filter.md-137-142 (1)

137-142: ⚠️ Potential issue | 🟡 Minor

Tighten wording in Priority use cases.
“high priority” should be hyphenated, and “none priority” reads awkwardly.

✏️ Suggested fix
-| `is`            | Exactly matches one priority      | Only high priority items       |
+| `is`            | Exactly matches one priority      | Only high-priority items       |
 ...
-| `is not any of` | Excludes several priorities       | Not low or none priority       |
+| `is not any of` | Excludes several priorities       | Not low or no-priority items   |
docs/introduction/tutorials/create-workspace.md-45-47 (1)

45-47: ⚠️ Potential issue | 🟡 Minor

Fix admonition syntax for VitePress.

Use ::: warning (with a space) to ensure the block renders correctly.

🛠️ Suggested fix
-   :::warning
+   ::: warning
    This URL choice is permanent and cannot be changed later. Make sure it's exactly how you want it.
    :::
docs/importers/linear.md-10-12 (1)

10-12: ⚠️ Potential issue | 🟡 Minor

Fix typo in user-facing text.

“importert” should be “importer”.

✏️ Suggested fix
- The Linear importert is available on Plane Cloud and on all plans of the Commercial Edition for self-hosted instances.
+ The Linear importer is available on Plane Cloud and on all plans of the Commercial Edition for self-hosted instances.
docs/importers/github-imp.md-8-8 (1)

8-8: ⚠️ Potential issue | 🟡 Minor

Fix admonition syntax to ensure VitePress renders tip blocks.

Both tip blocks are missing the required space after the directive (::: tip). Without it, VitePress may not parse the block as an admonition.

✅ Suggested fix
-:::tipIntegrations and importers are only available on the cloud version. We plan to open-source our SDKs in the near future so that the community can request or contribute integrations as needed.:::
+::: tip
+Integrations and importers are only available on the cloud version. We plan to open-source our SDKs in the near future so that the community can request or contribute integrations as needed.
+:::
-:::tipPlease note that the importer services are still a work in progress. We plan to make this open-source soon and will also extend its features based on community requirements.:::
+::: tip
+Please note that the importer services are still a work in progress. We plan to make this open-source soon and will also extend its features based on community requirements.
+:::

Also applies to: 89-89

docs/intake/overview.md-54-56 (1)

54-56: ⚠️ Potential issue | 🟡 Minor

Fix typo in section title (“responsibility”).

The heading currently reads “responsbility”.

✏️ Proposed edit
-  ## Intake responsbility
+  ## Intake responsibility
docs/workspaces-and-users/billing-and-plans.md-9-9 (1)

9-9: ⚠️ Potential issue | 🟡 Minor

Fix grammar: “per-user” (not “per-users”).

Minor wording issue in the opening paragraph.

✏️ Proposed edit
-Unlike a majority of SaaS, our subscription models on Pro and higher plans are per-seat, not per-users.
+Unlike a majority of SaaS, our subscription models on Pro and higher plans are per-seat, not per-user.
docs/support/keyboard-shortcuts.md-79-105 (1)

79-105: ⚠️ Potential issue | 🟡 Minor

Add context clarification for duplicate keyboard shortcuts.

The documentation lists duplicate shortcut sequences without explaining their context-dependent application:

  • O then S: "Open a project setting" (line 84) and "Open a workspace setting" (line 89)
  • G then S: "Go to project settings" (line 101) and "Go to workspace settings" (line 104)
  • G then R: "Go to project archives" (line 102) and "Go to workspace archives" (line 106)

Since the action labels clearly distinguish project-level vs workspace-level actions, these shortcuts appear to be context-dependent. Consider adding a note to the Navigate section explaining that shortcuts trigger based on the current context (e.g., "project setting shortcuts apply when viewing a project"), so users understand these aren't actual conflicts.

docs/workspaces-and-users/roles.md-15-15 (1)

15-15: ⚠️ Potential issue | 🟡 Minor

Fix subject-verb agreement (“It provide” → “It provides”).

Small grammar issue in the Admin description.

✍️ Suggested edit
-Admins control the workspace itself - settings, members, features, and access. They determine what capabilities are available to all Members. It provide complete control for workspace owners and senior stakeholders who need to manage team structure and configuration. This centralized authority prevents configuration conflicts and maintains consistent workspace policies.
+Admins control the workspace itself - settings, members, features, and access. They determine what capabilities are available to all Members. It provides complete control for workspace owners and senior stakeholders who need to manage team structure and configuration. This centralized authority prevents configuration conflicts and maintains consistent workspace policies.
docs/communication-and-collaboration/comments-and-activity.md-66-66 (1)

66-66: ⚠️ Potential issue | 🟡 Minor

Use a proper heading instead of bold text.

markdownlint MD036 flags emphasis used as a heading.

📝 Suggested change
-**What happens**
+### What happens
docs/introduction/tutorials/create-pages.md-61-76 (1)

61-76: ⚠️ Potential issue | 🟡 Minor

Add a language identifier to the fenced code block.

markdownlint MD040 is triggered here.

✅ Suggested fix
-   ```
+   ```markdown
    # Project Requirements Document
    ...
    ```
docs/importers/notion.md-24-33 (1)

24-33: ⚠️ Potential issue | 🟡 Minor

Indent the sublist and info block under step 4.

Unindented bullets break the ordered list structure.

📑 Suggested indentation
 4. In the export dialog:
-
-- **Export format**: Choose **HTML**
-- **Include databases**: Select **Current view**
-- **Include content**: Choose **Everything**
-- **Include subpages**: Toggle this **ON**
-- **Create folders for subpages**: Toggle this **ON**
-- **Export comments**: Toggle this **OFF** (unless you want comments included)
-
-:::info
-Only HTML exports from Notion are supported. Make sure to select HTML as your export format.
-:::
+   - **Export format**: Choose **HTML**
+   - **Include databases**: Select **Current view**
+   - **Include content**: Choose **Everything**
+   - **Include subpages**: Toggle this **ON**
+   - **Create folders for subpages**: Toggle this **ON**
+   - **Export comments**: Toggle this **OFF** (unless you want comments included)
+
+   :::info
+   Only HTML exports from Notion are supported. Make sure to select HTML as your export format.
+   :::
docs/ai/pi-chat.md-151-165 (1)

151-165: ⚠️ Potential issue | 🟡 Minor

Fix the broken relations link and trailing punctuation. The Markdown link is missing a closing ) and the URL references line ends with a double period.

Suggested fix
-- Add [relations](/core-concepts/issues/overview#add-relations to work items (blocking, blocked by, relates to, duplicate of, etc.).
+- Add [relations](/core-concepts/issues/overview#add-relations) to work items (blocking, blocked by, relates to, duplicate of, etc.).
...
-- Add, edit, or remove external URL references..
+- Add, edit, or remove external URL references.
docs/ai/pi-chat.md-6-6 (1)

6-6: ⚠️ Potential issue | 🟡 Minor

Hyphenate “AI-powered” in the H1. This reads better and matches standard usage.

Suggested fix
-# AI powered assistant for project management
+# AI-powered assistant for project management
docs/introduction/tutorials/collaborate-on-work-items.md-33-37 (1)

33-37: ⚠️ Potential issue | 🟡 Minor

Add a language to the fenced example block. This resolves MD040 and improves rendering consistency.

Suggested fix
-   ```
+   ```text
   Started working on this - I've identified the CSS issue and should have a fix ready by tomorrow. The problem is with the media query breakpoint at 375px.
</details>

</blockquote></details>
<details>
<summary>docs/core-concepts/projects/overview.md-82-87 (1)</summary><blockquote>

`82-87`: _⚠️ Potential issue_ | _🟡 Minor_

**Use a heading instead of bold for “Change visibility.”**  
Line 82 uses bold as a heading; switching to a real heading fixes MD036 and improves TOC/navigation.  

<details>
<summary>✏️ Suggested fix</summary>

```diff
- **Change visibility**
+ ### Change visibility
docs/introduction/quickstart.md-62-66 (1)

62-66: ⚠️ Potential issue | 🟡 Minor

Add missing punctuation after “Public.”
Line 65 reads as a run-on sentence.

✏️ Suggested fix
-   3. By default, the project access is **Public** This means that all Workspace Admins and Members can see and join this project. Change this to **Private** if you want members to join only through invite.
+   3. By default, the project access is **Public**. This means that all Workspace Admins and Members can see and join this project. Change this to **Private** if you want members to join only through invite.
docs/core-concepts/projects/project-states.md-8-10 (1)

8-10: ⚠️ Potential issue | 🟡 Minor

Fix Markdown heading rendering inside HTML block.

Line 9 uses a Markdown heading # inside a block-level <div>. Per CommonMark/markdown-it rules that VitePress follows, Markdown is not parsed inside block HTML elements and will render as plain text. Replace with an explicit HTML heading:

Suggested fix
-  # Track your projects with states
+  <h2>Track your projects with states</h2>
docs/templates/project-templates.md-8-8 (1)

8-8: ⚠️ Potential issue | 🟡 Minor

Add missing link property to Business tag for consistency.

The Business tag is missing the link: "https://plane.so/pricing" property used in most other Business tags across the documentation (e.g., workflows.md, draw-io.md, intake-forms.md). Update line 8 to match the standard pattern:

<Tags :tags='[{ name: "Business", link: "https://plane.so/pricing", additionalClass: "business" }]' />

Note: docs/intake/overview.md and docs/intake/intake-email.md have the same issue.

docs/core-concepts/workspaces/members.md-42-43 (1)

42-43: ⚠️ Potential issue | 🟡 Minor

Convert bold pseudo-heading to proper Markdown heading (MD036).
Markdownlint detects emphasis used as a heading; use heading syntax instead.

Suggested fix
-**To import members:**
+### To import members
docs/devices/mobile.md-234-237 (1)

234-237: ⚠️ Potential issue | 🟡 Minor

Fix malformed code fence for the GitHub callback URL.

Lines 235-237 use single backticks instead of triple backticks, preventing proper code block rendering. The Google Sign-In block above (lines 231-233) uses the correct triple-backtick syntax; the GitHub block should match:

Suggested fix
- For GitHub Sign-In: Add the following URL to the Callback URL section in your GitHub OAuth app:
-  `bash
-  https://<plane.example.com>/auth/mobile/github/callback/
-  `
+  ```bash
+  https://<plane.example.com>/auth/mobile/github/callback/
+  ```
docs/introduction/tutorials/create-project.md-32-32 (1)

32-32: ⚠️ Potential issue | 🟡 Minor

Typo: Missing space between words.

"part ofdisplay" should be "part of display".

✏️ Proposed fix
-- Projects you're part ofdisplay directly in your sidebar under the **Projects** section.
+- Projects you're part of display directly in your sidebar under the **Projects** section.
docs/introduction/tutorials/create-project.md-79-89 (1)

79-89: ⚠️ Potential issue | 🟡 Minor

Markdown formatting issue with image and list structure.

Line 79 has an image reference immediately followed by list content on the same line, which creates rendering ambiguity. The nested list items on lines 81-86 also have inconsistent indentation (3 spaces instead of 4), flagged by markdownlint.

✏️ Proposed fix
-![Project general settings](https://media.docs.plane.so/tutorials/project-general-settings.webp#hero) - **Project icon and cover**: Choose an emoji and a header image for your project.
+   ![Project general settings](https://media.docs.plane.so/tutorials/project-general-settings.webp#hero)
 
-    - **Project visibility (Network)**: Choose based on your team's collaboration needs.
-        - **Public**: All workspace members can see and join the project.
-        - **Private**: Only invited members can access the project.
+   - **Project icon and cover**: Choose an emoji and a header image for your project.
+   - **Project visibility (Network)**: Choose based on your team's collaboration needs.
+       - **Public**: All workspace members can see and join the project.
+       - **Private**: Only invited members can access the project.
 
-    - **Project timezone**: Set the timezone for project scheduling and deadlines.
+   - **Project timezone**: Set the timezone for project scheduling and deadlines.
docs/core-concepts/projects/milestones.md-6-11 (1)

6-11: ⚠️ Potential issue | 🟡 Minor

Duplicate h1 headings detected.

There are two # (h1) headings on this page:

  • Line 6: # Align work toward target dates with Milestones
  • Line 9: # Track goals with Milestones

This is problematic for SEO and accessibility. A page should have only one h1 heading. Based on the pattern used elsewhere in this PR, it appears the intent is to have a single heading with the Tags component. Consider removing one of the headings.

Proposed fix
-# Align work toward target dates with Milestones
-
 <div class="tag-wrapper">
-  # Track goals with Milestones
+  # Align work toward target dates with Milestones
   <Tags :tags='[{ name: "Pro", link: "https://plane.so/pricing", additionalClass: "pro" }]' />
 </div>
docs/core-concepts/issues/epics.md-6-11 (1)

6-11: ⚠️ Potential issue | 🟡 Minor

Duplicate h1 headings detected.

Same issue as in milestones.md - there are two h1 headings:

  • Line 6: # Organize related work items with Epics
  • Line 9: # Organize and track your work items with Epics
Proposed fix
-# Organize related work items with Epics
-
 <div class="tag-wrapper">
-  # Organize and track your work items with Epics
+  # Organize related work items with Epics
   <Tags :tags='[{ name: "Pro", link: "https://plane.so/pricing", additionalClass: "pro" }]' />
 </div>
🧹 Nitpick comments (14)
docs/automations/custom-automations.md (1)

6-6: Fix compound adjective in heading.
Use “trigger-based” as a hyphenated compound adjective.

✏️ Proposed edit
-# Automate project tasks with trigger based workflows
+# Automate project tasks with trigger-based workflows
docs/communication-and-collaboration/project-updates.md (1)

63-63: Consider using proper heading levels for subsections.

The subsections "Start discussions", "Use emoji reactions", and "Mention team members" use bold text instead of proper markdown headings. Converting these to level 3 headings would improve document structure, accessibility (screen readers can navigate by headings), and semantic HTML output.

📝 Proposed refactor to use proper headings
-**Start discussions**
+### Start discussions
 
 - Add comments in the thread below the update.
-**Use emoji reactions**
+### Use emoji reactions
 
 - React to updates with emojis for quick feedback.
-**Mention team members** _(Coming soon)_
+### Mention team members _(Coming soon)_
 
 - Tag specific team members in update comments to notify them directly.

Also applies to: 69-69, 74-74

docs/core-concepts/account/settings.md (1)

27-27: Use proper markdown headings instead of bold text for subsections.

Several subsection labels use bold text (**text**) instead of proper markdown headings. This affects document structure, navigation, and accessibility. As per static analysis, lines 27, 106, 111, 116, and 121 should use heading syntax.

📝 Proposed fix to convert bold text to proper headings
-**Personal information**
+#### Personal information
-**Property changes**
+#### Property changes
-**State change**
+#### State change
-**Work item completed**
+#### Work item completed
-**Comments**
+#### Comments
-**Mentions**
+#### Mentions

Apply similar changes to other bold subsection headers like "Profile picture and cover image" (line 21), "Account deactivation" (line 34), "Default:" (line 45), "Theme options:" (line 47), "Custom theme" (line 55), "Customizable colors:" (line 58), "Timezone:" (line 83), and "Language:" (line 88) for consistency.

Also applies to: 101-123

docs/core-concepts/pages/nested-pages.md (1)

10-10: Consider using consistent quote styles.

The Vue prop binding syntax is correct, but mixing single quotes (outer) with double quotes (inner strings) can be less readable. Consider using double quotes for the attribute value for consistency.

♻️ Suggested improvement for quote consistency
-  <Tags :tags='[{ name: "Business", link: "https://plane.so/pricing", additionalClass: "business" }]' />
+  <Tags :tags="[{ name: 'Business', link: 'https://plane.so/pricing', additionalClass: 'business' }]" />
docs/workspaces-and-users/permissions.md (2)

29-31: Use proper cross mark symbol instead of lowercase "x".

For visual consistency and clarity, replace the lowercase "x" with the proper cross mark symbol "✗" to match the style of the checkmark "✓".

✨ Proposed change for better visual consistency
-<td align="center"><span style="color: red; font-weight: bold; font-size: 16px">x</span></td>
+<td align="center"><span style="color: red; font-weight: bold; font-size: 16px">✗</span></td>

This change should be applied consistently across all tables in the document (appears in hundreds of locations).

Also applies to: 36-37, 42-43


17-17: Refactor inline styles to CSS classes for better maintainability.

The extensive use of inline style attributes throughout the tables makes the document harder to maintain and prevents proper theme integration. Consider extracting these styles into CSS classes that VitePress can manage.

♻️ Recommended refactoring approach

Define CSS classes in your VitePress theme:

.permissions-table {
  width: 100%;
  display: table;
  margin-left: 2px;
}

.permission-allowed {
  color: var(--vp-c-green);
  font-weight: bold;
  font-size: 16px;
}

.permission-denied {
  color: var(--vp-c-red);
  font-weight: bold;
  font-size: 16px;
}

Then update the tables:

-<table style="width: 100%; display: table; margin-left: 2px">
+<table class="permissions-table">
  ...
-<span style="color: green; font-weight: bold; font-size: 16px">✓</span>
+<span class="permission-allowed">✓</span>

This approach allows theme-aware colors and centralized style management.

Also applies to: 29-31, 206-207

docs/introduction/tutorials/invite-members.md (1)

21-21: Use proper headings instead of bold text for section markers.

The bold text at these lines (**From the workspace switcher** and **From workspace settings**) should be converted to proper headings (e.g., ###) to improve document structure and accessibility. Screen readers rely on heading hierarchy for navigation.

♻️ Suggested fix
-**From the workspace switcher**
+### From the workspace switcher

...

-**From workspace settings**
+### From workspace settings

Also applies to: 28-28

docs/importers/overview.md (1)

14-33: Standardize Card component formatting.

The Card components have inconsistent spacing. Some have blank lines after the opening tag (Linear and Asana cards), while others don't (Jira and CSV cards). This inconsistency affects readability.

♻️ Proposed fix for consistent formatting
 <CardGroup :cols="2">
   <Card title="Jira" icon="FaJira" href="/importers/jira">
     Import boards from Jira into Plane, streamlining your project setup.
   </Card>
 
-<Card title="Linear" icon="linear" href="/importers/linear">
-
-Bring Linear tasks into Plane, ensuring smooth transitions and continued progress.
-</Card>
-
-<Card title="Asana" icon="asana" href="/importers/asana">
-
-Migrate tasks from Asana to Plane, keeping your workflow intact and organized.
-</Card>
+  <Card title="Linear" icon="linear" href="/importers/linear">
+    Bring Linear tasks into Plane, ensuring smooth transitions and continued progress.
+  </Card>
+
+  <Card title="Asana" icon="asana" href="/importers/asana">
+    Migrate tasks from Asana to Plane, keeping your workflow intact and organized.
+  </Card>
 
-<Card title="CSV" icon="FaFileCsv" href="/importers/csv">
-  Import work items from CSV files, perfect for migrating data from spreadsheets or other tools.
-</Card>
+  <Card title="CSV" icon="FaFileCsv" href="/importers/csv">
+    Import work items from CSV files, perfect for migrating data from spreadsheets or other tools.
+  </Card>
 
 </CardGroup>
docs/integrations/github.md (1)

265-270: Consider using proper heading syntax instead of emphasis.

Line 265 uses emphasis (_Example_) where a heading would be more semantically appropriate for document structure.

♻️ Proposed fix
-_Example_
+**Example:**
 
 ```bash
 PR Title: [WEB-344] Add user authentication feature
 PR Description: Implements login functionality for WEB-345

</details>

</blockquote></details>
<details>
<summary>docs/.vitepress/theme/components/HomeLanding.vue (1)</summary><blockquote>

`17-23`: **Tighten icon typing to avoid `any`**

Consider using Vue’s `Component` type to keep TS safety without sacrificing flexibility.  
 

<details>
<summary>♻️ Suggested typing update</summary>

```diff
 import {
   Building2,
   LayoutDashboard,
   Inbox,
   BarChart3,
   Sparkles,
   Import,
   Cloud,
   Server,
   Code2,
   MessageCircle,
   Newspaper,
   ArrowRight,
 } from "lucide-vue-next";
+import type { Component } from "vue";

 interface LinkItem {
-  icon: any;
+  icon: Component;
   title: string;
   description: string;
   href: string;
   cta?: string;
 }
docs/support/get-help.md (1)

36-36: Optional: soften wording with a polite nudge

Minor copy tweak for tone (matches the LanguageTool hint).

✏️ Suggested copy adjustment
-Notice something unclear or missing in our documentation? Let us know on the [docs GitHub repository](https://github.com/makeplane/docs). Your feedback helps us create better resources for everyone.
+Notice something unclear or missing in our documentation? Please let us know on the [docs GitHub repository](https://github.com/makeplane/docs). Your feedback helps us create better resources for everyone.
docs/integrations/slack.md (1)

217-233: Add language specifier to fenced code blocks.

The code blocks for Slack commands/messages lack language specifiers. Adding text or plaintext improves consistency and satisfies markdown linting rules.

✏️ Proposed fix
 **Create work items conversationally:**
 
-```
+```text
 `@Plane` create a work item 'live tail' and assign it to Mike.

...

Get project information:

- +text
@Plane can you provide the identifiers of these projects?


**Check cycle progress:**

-```
+```text
`@Plane` how are we doing in the current cycle for the AI project?
</details>

</blockquote></details>
<details>
<summary>docs/core-concepts/pages/wiki.md (1)</summary><blockquote>

`6-6`: **Consider hyphenating "company-wide" as a compound adjective.**

"Company wide" as a compound adjective modifying "knowledge base" should typically be hyphenated as "company-wide". This also appears in line 2 (front matter title) and line 9.

<details>
<summary>✏️ Proposed fix</summary>

```diff
-# Wiki for company wide knowledge base
+# Wiki for company-wide knowledge base

Also update the front matter on line 2:

-title: Wiki for company wide knowledge base
+title: Wiki for company-wide knowledge base
docs/integrations/gitlab.md (1)

240-241: Consider using a proper heading instead of emphasis.

Using _Example_ (emphasis/italics) as a pseudo-heading is flagged by markdownlint (MD036). Consider using a proper heading level or removing the emphasis if it's just introductory text.

Proposed fix
-_Example_
-
+**Example:**

Or use a heading if appropriate:

-_Example_
+#### Example

Comment on lines +10 to 12
::: info
The Asana importert is available on Plane Cloud and on all plans of the Commercial Edition for self-hosted instances.
:::
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🔴 Critical

Fix typo: "importert" should be "importer".

Line 11 contains a typo that needs correction.

🐛 Proposed fix
 ::: info
-The Asana importert is available on Plane Cloud and on all plans of the Commercial Edition for self-hosted instances.
+The Asana importer is available on Plane Cloud and on all plans of the Commercial Edition for self-hosted instances.
 :::
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
::: info
The Asana importert is available on Plane Cloud and on all plans of the Commercial Edition for self-hosted instances.
:::
::: info
The Asana importer is available on Plane Cloud and on all plans of the Commercial Edition for self-hosted instances.
:::
🧰 Tools
🪛 LanguageTool

[grammar] ~11-~11: Ensure spelling is correct
Context: ... existing projects. ::: info The Asana importert is available on Plane Cloud and on all ...

(QB_NEW_EN_ORTHOGRAPHY_ERROR_IDS_1)

🤖 Prompt for AI Agents
In `@docs/importers/asana.md` around lines 10 - 12, Fix the typo in the Asana
importer documentation by replacing the misspelled word "importert" with
"importer" in the sentence that currently reads "The Asana importert is
available on Plane Cloud and on all plans of the Commercial Edition for
self-hosted instances." Update that phrase to "The Asana importer is available
on Plane Cloud and on all plans of the Commercial Edition for self-hosted
instances."

<details>
<summary><b>Workspaces</b></summary>
<div>
<table style="width: 100%; display: table; margin-left: 2px">
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟠 Major

Improve accessibility: Add table captions and reconsider color-only indicators.

The tables lack <caption> elements, which are important for screen readers to provide context. Additionally, while the checkmark/cross symbols provide some redundancy, the heavy reliance on color (green/red) to convey permission status may not be sufficient for users with color vision deficiencies.

♿ Suggested improvements for accessibility

Add a <caption> element to each table:

       <div>
       <table style="width: 100%; display: table; margin-left: 2px">
+        <caption>Workspace permissions by role</caption>
         <thead>

Consider adding aria-label attributes to the permission indicators or using more descriptive text alongside the symbols to ensure the information is conveyed through multiple channels, not just color.

Also applies to: 29-31, 206-206

🤖 Prompt for AI Agents
In `@docs/workspaces-and-users/permissions.md` at line 17, The table elements in
permissions.md are missing accessible context and rely on color-only cues; add a
<caption> to each <table> to provide screen-reader context and update the
permission indicator markup (the checkmark/cross icons and their container
elements) to include accessible text or aria attributes (e.g., aria-label or
visually-hidden descriptive text) so status isn't conveyed by color alone;
ensure every permission cell or icon (the checkmark/cross nodes) has an explicit
accessible name and consider adding aria-labels on the table when appropriate.

Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 9

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (3)
docs/core-concepts/issues/visualise_filter.md (1)

85-86: ⚠️ Potential issue | 🟡 Minor

Remove extra punctuation.
There’s an extra space before the period in “etc. .”.

✏️ Proposed fix
-We will be adding more conditions here such as `not in`, `contains`, `is empty`, etc. .
+We will be adding more conditions here such as `not in`, `contains`, `is empty`, etc.
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@docs/core-concepts/issues/visualise_filter.md` around lines 85 - 86, In the
"Paid plans" paragraph (the sentence that currently ends with "etc. ."), remove
the stray extra space and duplicated period so the sentence ends with "etc." —
locate the string "etc. ." in visualise_filter.md and replace it with "etc.".
docs/ai/pi-chat.md (1)

548-548: ⚠️ Potential issue | 🟡 Minor

Remove the editorial instruction from published content.
“Add this section at the very end…” reads like a note to editors and shouldn’t ship in the doc.

🧹 Proposed fix
-Add this section at the very end of the document, after "What's coming next":
-
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@docs/ai/pi-chat.md` at line 548, Remove the editorial instruction line "Add
this section at the very end of the document, after 'What's coming next':" from
the markdown (docs/ai/pi-chat.md) so it doesn't appear in published content; if
the intent was to add new content, place the actual section content after the
"What's coming next" heading instead of leaving the editor note.
sidebars.ts (1)

1-341: ⚠️ Potential issue | 🟠 Major

sidebars.ts is not migrated to VitePress format and is now orphaned — the entire file is still Docusaurus-specific.

This file was only reformatted (quote style, indentation, inline arrays) but the schema was never converted. All of the following are Docusaurus-only conventions that VitePress does not recognize:

Docusaurus construct Lines (examples)
import type { SidebarsConfig } from "@docusaurus/plugin-content-docs" 1
Named sidebar key tutorialSidebar 3
type: "category" 6, 41, 93, …
type: "link" with href 29–32, 34–37, 68–71, …
link: { type: "doc", id: "..." } 16, 216, 258
Bare string doc IDs ("introduction/home") 10–12, 49–53, …

Since @docusaurus/plugin-content-docs is no longer a dependency and no file in the codebase imports sidebars.ts, this file is currently dead code. VitePress configures the sidebar via themeConfig.sidebar using objects with { text, link, items?, collapsed? } — there is no type discriminator, no href, no id, and no bare string shorthand. The exported type is DefaultTheme.Sidebar (from vitepress, not @docusaurus/plugin-content-docs).

The file must either be fully rewritten in VitePress format or deleted during the migration. A sketch of the required shape:

♻️ Suggested VitePress sidebar skeleton
-import type { SidebarsConfig } from "@docusaurus/plugin-content-docs";
+import type { DefaultTheme } from "vitepress";

-const sidebars: SidebarsConfig = {
-  tutorialSidebar: [
-    {
-      type: "category",
-      collapsed: false,
-      label: "Get started",
-      items: [
-        "introduction/home",
-        "introduction/quickstart",
-        "introduction/core-concepts",
-        {
-          type: "category",
-          label: "Tutorials",
-          link: { type: "doc", id: "introduction/tutorials/overview" },
-          items: [
-            "introduction/tutorials/create-workspace",
-            // ...
-          ],
-        },
-        {
-          type: "link",
-          label: "Download Plane",
-          href: "https://plane.so/download",
-        },
-      ],
-    },
-    // ...
-  ],
-};
+const sidebar: DefaultTheme.Sidebar = [
+  {
+    text: "Get started",
+    collapsed: false,
+    items: [
+      { text: "Home",          link: "/introduction/home" },
+      { text: "Quickstart",    link: "/introduction/quickstart" },
+      { text: "Core Concepts", link: "/introduction/core-concepts" },
+      {
+        text: "Tutorials",
+        link: "/introduction/tutorials/overview",
+        items: [
+          { text: "Create a workspace", link: "/introduction/tutorials/create-workspace" },
+          // ...
+        ],
+      },
+      { text: "Download Plane", link: "https://plane.so/download" },
+    ],
+  },
+  // ...
+];

-export default sidebars;
+export default sidebar;

Then consume it in .vitepress/config.ts:

import sidebar from "../sidebars";
export default defineConfig({
  themeConfig: { sidebar },
});
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@sidebars.ts` around lines 1 - 341, The file sidebars.ts is still in
Docusaurus format and must be migrated or removed; update the export named
sidebars (and remove the Docusaurus-only import of SidebarsConfig) to a
VitePress-compatible DefaultTheme.Sidebar object shape (use {text, link, items?,
collapsed?} instead of Docusaurus constructs like tutorialSidebar, type:
"category", type: "link", link: { type: "doc", id: "..." } or bare string doc
IDs), or delete sidebars.ts if no sidebar is needed; then ensure
.vitepress/config.ts consumes the new export via themeConfig.sidebar.
🧹 Nitpick comments (2)
docs/ai/pi-chat.md (1)

267-271: Optional: reduce repetitive sentence starts.
Two bullets start with “Create new pages…”, which reads repetitive in a short list.

✍️ Example rewording
-- Create new pages within projects.
-- Create new pages within workspaces.
+- Create new pages within projects.
+- Create workspace-level pages.
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@docs/ai/pi-chat.md` around lines 267 - 271, The two bullets "Create new pages
within projects." and "Create new pages within workspaces." are repetitive;
rewrite them to avoid repeated sentence starts by combining or rephrasing—for
example, merge into a single bullet like "Create new pages within projects and
workspaces" or change to "Add new pages to projects" and "Add new pages to
workspaces"; update the list items in the Create and organize knowledge section
accordingly to keep tone consistent with surrounding bullets.
docs/.vitepress/config.mts (1)

320-330: Native integrations sidebar group is missing collapsed: true.

Every other sidebar group that contains child items is declared with collapsed: true, keeping the sidebar compact by default. The Native integrations group omits it, so those five sub-links will always be expanded on page load — an inconsistency likely to look unintentional.

♻️ Proposed fix
  {
    text: "Native integrations",
    link: "/integrations/about",
+   collapsed: true,
    items: [
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@docs/.vitepress/config.mts` around lines 320 - 330, The "Native integrations"
sidebar group object (the entry with text: "Native integrations" and items:
[...]) is missing collapsed: true; update that object to include collapsed: true
so it follows the same collapsed-by-default behavior as the other groups — add
the collapsed: true property alongside text, link, and items in that group
definition.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@CLAUDE.md`:
- Around line 1-85: CI failed due to formatting; run the repository formatter
and commit the changes: locally run pnpm format (which runs oxfmt --write),
verify formatting passes pnpm format:check, stage and commit the modified files
(the CLAUDE.md and any other files changed by oxfmt), and push the commit to
update the PR so the GitHub Actions "format" job succeeds.

In `@docs/ai/pi-chat.md`:
- Around line 94-96: The fenced code blocks in the doc examples (e.g., the
blocks containing "Create a bug report for the login page crash", "Create a
teamspace called \"Frontend Team\"...", and "Enable Initiatives for this
workspace...") lack a language specifier; update each triple-backtick fence to
include a language token (use "text") so they become ```text ... ``` to satisfy
markdownlint MD040 and ensure consistent rendering.
- Line 6: Update the document H1 text "AI powered assistant for project
management" to include a hyphen so it reads "AI-powered assistant for project
management"; locate the header line containing that exact string and replace it
with the hyphenated version.

In `@docs/core-concepts/cycles.md`:
- Around line 31-33: The markdown list item is being terminated by unindented
blank lines around the embedded image (the "Empty cycle" image), causing the
image to render outside its bullet; fix by preserving the list-item
structure—either indent the blank lines under the list bullet or remove the
extraneous blank lines so the image markdown remains part of the bullet (apply
the same change to the similar block referenced at lines 35–37).

In `@docs/core-concepts/issues/visualise_filter.md`:
- Around line 161-164: Update the table entry under the "Use case" column for
the `is` operator to hyphenate the compound adjective: change "Only high
priority items" to "Only high-priority items" so the phrase reads correctly;
locate the table rows containing the `is` and `is any of` operator labels to
make this edit (the row with `is` is the one to modify).
- Around line 52-55: Replace the malformed placeholder string `[[Select date
range]` with a correctly balanced bracketed placeholder (e.g. `[Select date
range]`) so the markdown renders properly; locate the text `[[Select date
range]` in the "Set Target date → between →" line and update it to the balanced
form.

In `@docs/core-concepts/projects/milestones.md`:
- Around line 6-11: Remove the stale top-level heading to avoid duplicate H1s:
delete the standalone "Align work toward target dates with Milestones" line (the
pre-migration heading) so only the intended H1 inside the <div
class="tag-wrapper"> — "Track goals with Milestones" rendered via the Tags block
remains; update the surrounding markup if needed to ensure the <div
class="tag-wrapper"> and Tags component are the sole header/title for this page.

In `@docs/devices/mobile.md`:
- Around line 234-238: Replace the malformed inline code fence in the GitHub
Sign-In callback URL snippet with a proper triple-backtick fenced code block
using the bash language tag so the URL is rendered and syntax-highlighted like
the Google Sign-In example; specifically change the single-backtick span around
"https://<plane.example.com>/auth/mobile/github/callback/" in the GitHub Sign-In
section to a fenced block starting with ```bash and ending with ``` so the
snippet matches the Google Sign-In formatting.

In `@docs/integrations/slack.md`:
- Around line 221-223: The fenced code blocks containing the example commands
(the lines with "@Plane create a work item 'live tail' and assign it to Mike."
and "@Plane can you provide the identifiers of these projects?") are missing
language identifiers; update each triple-backtick fence to include a language
(use "text") so they read ```text ... ``` to satisfy MD040 and improve
readability, and apply the same change to the other occurrence noted (lines
229-231).

---

Outside diff comments:
In `@docs/ai/pi-chat.md`:
- Line 548: Remove the editorial instruction line "Add this section at the very
end of the document, after 'What's coming next':" from the markdown
(docs/ai/pi-chat.md) so it doesn't appear in published content; if the intent
was to add new content, place the actual section content after the "What's
coming next" heading instead of leaving the editor note.

In `@docs/core-concepts/issues/visualise_filter.md`:
- Around line 85-86: In the "Paid plans" paragraph (the sentence that currently
ends with "etc. ."), remove the stray extra space and duplicated period so the
sentence ends with "etc." — locate the string "etc. ." in visualise_filter.md
and replace it with "etc.".

In `@sidebars.ts`:
- Around line 1-341: The file sidebars.ts is still in Docusaurus format and must
be migrated or removed; update the export named sidebars (and remove the
Docusaurus-only import of SidebarsConfig) to a VitePress-compatible
DefaultTheme.Sidebar object shape (use {text, link, items?, collapsed?} instead
of Docusaurus constructs like tutorialSidebar, type: "category", type: "link",
link: { type: "doc", id: "..." } or bare string doc IDs), or delete sidebars.ts
if no sidebar is needed; then ensure .vitepress/config.ts consumes the new
export via themeConfig.sidebar.

---

Nitpick comments:
In `@docs/.vitepress/config.mts`:
- Around line 320-330: The "Native integrations" sidebar group object (the entry
with text: "Native integrations" and items: [...]) is missing collapsed: true;
update that object to include collapsed: true so it follows the same
collapsed-by-default behavior as the other groups — add the collapsed: true
property alongside text, link, and items in that group definition.

In `@docs/ai/pi-chat.md`:
- Around line 267-271: The two bullets "Create new pages within projects." and
"Create new pages within workspaces." are repetitive; rewrite them to avoid
repeated sentence starts by combining or rephrasing—for example, merge into a
single bullet like "Create new pages within projects and workspaces" or change
to "Add new pages to projects" and "Add new pages to workspaces"; update the
list items in the Create and organize knowledge section accordingly to keep tone
consistent with surrounding bullets.

ℹ️ Review info

Configuration used: defaults

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 2df8c12 and b9932ca.

⛔ Files ignored due to path filters (1)
  • pnpm-lock.yaml is excluded by !**/pnpm-lock.yaml
📒 Files selected for processing (16)
  • .github/workflows/build.yml
  • .gitignore
  • .oxfmtrc.json
  • .prettierrc
  • CLAUDE.md
  • docs/.vitepress/config.mts
  • docs/.vitepress/theme/components/HomeLanding.vue
  • docs/ai/pi-chat.md
  • docs/core-concepts/cycles.md
  • docs/core-concepts/issues/visualise_filter.md
  • docs/core-concepts/issues/work-item-url.md
  • docs/core-concepts/projects/milestones.md
  • docs/devices/mobile.md
  • docs/integrations/slack.md
  • package.json
  • sidebars.ts
💤 Files with no reviewable changes (1)
  • .prettierrc
✅ Files skipped from review due to trivial changes (1)
  • .oxfmtrc.json
🚧 Files skipped from review as they are similar to previous changes (3)
  • package.json
  • docs/.vitepress/theme/components/HomeLanding.vue
  • .gitignore

<Tags tags={[{ name: "Pro", additionalClass: "pro" }]} />
<Tags tags={[{ name: "Business", additionalClass: "business" }]} />
</div>
# AI powered assistant for project management
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

Hyphenate “AI-powered” in the H1.
Static analysis flagged the missing hyphen; this is a minor grammar fix.

✏️ Proposed fix
-# AI powered assistant for project management
+# AI-powered assistant for project management
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
# AI powered assistant for project management
# AI-powered assistant for project management
🧰 Tools
🪛 LanguageTool

[grammar] ~6-~6: Use a hyphen to join words.
Context: ... tasks using natural language. --- # AI powered assistant for project management...

(QB_NEW_EN_HYPHEN)

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@docs/ai/pi-chat.md` at line 6, Update the document H1 text "AI powered
assistant for project management" to include a hyphen so it reads "AI-powered
assistant for project management"; locate the header line containing that exact
string and replace it with the hyphenated version.

Comment on lines +94 to +96
```
Create a bug report for the login page crash
```
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

Add languages to fenced code blocks.
Markdownlint MD040 requires a language specifier on fenced code blocks.

🧩 Proposed fix
-   ```
+   ```text
      Create a bug report for the login page crash
    ```
-```
+```text
 Create a teamspace called "Frontend Team"
 Add Sarah and Mike to the Design teamspace

```diff
-```
+```text
 Enable Initiatives for this workspace
 Disable the Customers feature
</details>


Also applies to: 323-327, 363-366

<details>
<summary>🧰 Tools</summary>

<details>
<summary>🪛 markdownlint-cli2 (0.21.0)</summary>

[warning] 94-94: Fenced code blocks should have a language specified

(MD040, fenced-code-language)

</details>

</details>

<details>
<summary>🤖 Prompt for AI Agents</summary>

Verify each finding against the current code and only fix it if needed.

In @docs/ai/pi-chat.md around lines 94 - 96, The fenced code blocks in the doc
examples (e.g., the blocks containing "Create a bug report for the login page
crash", "Create a teamspace called "Frontend Team"...", and "Enable
Initiatives for this workspace...") lack a language specifier; update each
triple-backtick fence to include a language token (use "text") so they become
text ... to satisfy markdownlint MD040 and ensure consistent rendering.


</details>

<!-- fingerprinting:phantom:triton:eagle -->

<!-- This is an auto-generated comment by CodeRabbit -->

Comment on lines 31 to 33
- After you create a cycle, you can start adding new work items or bringing in existing work items right in the Cycle page.

![Empty cycle](https://media.docs.plane.so/cycles/cycle-empty-state.webp#hero)
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

Keep list item structure intact by indenting the blank line.

The unindented blank lines (Lines 32 and 36) can terminate the list item, causing the images to render outside their bullets. Indent the blank lines or remove them.

💡 Suggested fix
- 
-  ![Empty cycle](https://media.docs.plane.so/cycles/cycle-empty-state.webp#hero)
+  
+  ![Empty cycle](https://media.docs.plane.so/cycles/cycle-empty-state.webp#hero)
- 
-  ![Cycle property](https://media.docs.plane.so/cycles/cycle-property.webp#hero-br)
+  
+  ![Cycle property](https://media.docs.plane.so/cycles/cycle-property.webp#hero-br)

Also applies to: 35-37

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@docs/core-concepts/cycles.md` around lines 31 - 33, The markdown list item is
being terminated by unindented blank lines around the embedded image (the "Empty
cycle" image), causing the image to render outside its bullet; fix by preserving
the list-item structure—either indent the blank lines under the list bullet or
remove the extraneous blank lines so the image markdown remains part of the
bullet (apply the same change to the similar block referenced at lines 35–37).

Comment on lines 52 to 55
**This week's deliverables:**

- Set **Target date** → **between** → [[Select date range]

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

Fix the placeholder brackets.
Line 54 shows [[Select date range], which appears to be a typo and renders incorrectly.

✏️ Proposed fix
-- Set **Target date** → **between** → [[Select date range]
+- Set **Target date** → **between** → [Select date range]
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
**This week's deliverables:**
- Set **Target date****between**[[Select date range]
**This week's deliverables:**
- Set **Target date****between**[Select date range]
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@docs/core-concepts/issues/visualise_filter.md` around lines 52 - 55, Replace
the malformed placeholder string `[[Select date range]` with a correctly
balanced bracketed placeholder (e.g. `[Select date range]`) so the markdown
renders properly; locate the text `[[Select date range]` in the "Set Target date
→ between →" line and update it to the balanced form.

Comment on lines +161 to +164
| Operator | Description | Use case |
| --------------- | --------------------------------- | ------------------------------ |
| `is` | Exactly matches one priority | Only high priority items |
| `is any of` | Matches any of several priorities | High or medium priority |
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

Hyphenate the compound adjective.
“High priority items” reads better as “high-priority items.”

✏️ Proposed fix
-| `is`            | Exactly matches one priority      | Only high priority items       |
+| `is`            | Exactly matches one priority      | Only high-priority items       |
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
| Operator | Description | Use case |
| --------------- | --------------------------------- | ------------------------------ |
| `is` | Exactly matches one priority | Only high priority items |
| `is any of` | Matches any of several priorities | High or medium priority |
| Operator | Description | Use case |
| --------------- | --------------------------------- | ------------------------------ |
| `is` | Exactly matches one priority | Only high-priority items |
| `is any of` | Matches any of several priorities | High or medium priority |
🧰 Tools
🪛 LanguageTool

[uncategorized] ~163-~163: If this is a compound adjective that modifies the following noun, use a hyphen.
Context: ...xactly matches one priority | Only high priority items | | is any of | Match...

(EN_COMPOUND_ADJECTIVE_INTERNAL)

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@docs/core-concepts/issues/visualise_filter.md` around lines 161 - 164, Update
the table entry under the "Use case" column for the `is` operator to hyphenate
the compound adjective: change "Only high priority items" to "Only high-priority
items" so the phrase reads correctly; locate the table rows containing the `is`
and `is any of` operator labels to make this edit (the row with `is` is the one
to modify).

Comment on lines 6 to 11
# Align work toward target dates with Milestones

<div className="tag-wrapper">
<div class="tag-wrapper">
# Track goals with Milestones
<Tags tags={[{ name: "Pro", link: "https://plane.so/pricing", additionalClass: "pro" }]} />
<Tags :tags='[{ name: "Pro", link: "https://plane.so/pricing", additionalClass: "pro" }]' />
</div>
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟠 Major

Duplicate H1 — the old heading at line 6 was not removed.

The page now has two <h1> elements: one at line 6 (Align work toward target dates with Milestones) and one inside the tag-wrapper div at line 9 (Track goals with Milestones). VitePress processes Markdown inside HTML blocks, so both render as real H1s. This breaks the ToC, produces invalid document structure, and harms SEO. The line 6 heading appears to be the pre-migration heading left behind when the new heading+Tags block was introduced.

🐛 Proposed fix — remove the stale top-level heading
-# Align work toward target dates with Milestones
-
 <div class="tag-wrapper">
   # Track goals with Milestones
   <Tags :tags='[{ name: "Pro", link: "https://plane.so/pricing", additionalClass: "pro" }]' />
 </div>
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@docs/core-concepts/projects/milestones.md` around lines 6 - 11, Remove the
stale top-level heading to avoid duplicate H1s: delete the standalone "Align
work toward target dates with Milestones" line (the pre-migration heading) so
only the intended H1 inside the <div class="tag-wrapper"> — "Track goals with
Milestones" rendered via the Tags block remains; update the surrounding markup
if needed to ensure the <div class="tag-wrapper"> and Tags component are the
sole header/title for this page.

Comment on lines 234 to 238
- For GitHub Sign-In: Add the following URL to the Callback URL section in your GitHub OAuth app:
`bash
https://<plane.example.com>/auth/mobile/github/callback/
`
https://<plane.example.com>/auth/mobile/github/callback/
`
Verify that the `<plane.example.com>` part of the URL matches your self-hosted instance's domain.
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

Malformed code fence for the GitHub callback URL snippet.

Lines 235–237 use a single-backtick inline code span (`bash\n...\n`) instead of a triple-backtick fenced block, unlike the identical Google Sign-In snippet directly above it. The word bash will appear as literal inline content and no syntax highlighting will be applied.

🐛 Proposed fix
-- For GitHub Sign-In: Add the following URL to the Callback URL section in your GitHub OAuth app:
-  `bash
-https://<plane.example.com>/auth/mobile/github/callback/
-`
+- For GitHub Sign-In: Add the following URL to the Callback URL section in your GitHub OAuth app:
+  ```bash
+  https://<plane.example.com>/auth/mobile/github/callback/
+  ```
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
- For GitHub Sign-In: Add the following URL to the Callback URL section in your GitHub OAuth app:
`bash
https://<plane.example.com>/auth/mobile/github/callback/
`
https://<plane.example.com>/auth/mobile/github/callback/
`
Verify that the `<plane.example.com>` part of the URL matches your self-hosted instance's domain.
- For GitHub Sign-In: Add the following URL to the Callback URL section in your GitHub OAuth app:
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@docs/devices/mobile.md` around lines 234 - 238, Replace the malformed inline
code fence in the GitHub Sign-In callback URL snippet with a proper
triple-backtick fenced code block using the bash language tag so the URL is
rendered and syntax-highlighted like the Google Sign-In example; specifically
change the single-backtick span around
"https://<plane.example.com>/auth/mobile/github/callback/" in the GitHub Sign-In
section to a fenced block starting with ```bash and ending with ``` so the
snippet matches the Google Sign-In formatting.

Comment on lines 221 to 223
```
@Plane create a work item 'live tail' and assign it to Mike.
```
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

Add language identifiers to fenced code blocks.

Markdownlint flags these blocks; please specify a language (e.g., text) to satisfy MD040 and improve readability.

✏️ Suggested fix
-```
+```text
 `@Plane` create a work item 'live tail' and assign it to Mike.
-```
+```

-```
+```text
 `@Plane` can you provide the identifiers of these projects?
-```
+```

Also applies to: 229-231

🧰 Tools
🪛 markdownlint-cli2 (0.21.0)

[warning] 221-221: Fenced code blocks should have a language specified

(MD040, fenced-code-language)

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@docs/integrations/slack.md` around lines 221 - 223, The fenced code blocks
containing the example commands (the lines with "@Plane create a work item 'live
tail' and assign it to Mike." and "@Plane can you provide the identifiers of
these projects?") are missing language identifiers; update each triple-backtick
fence to include a language (use "text") so they read ```text ... ``` to satisfy
MD040 and improve readability, and apply the same change to the other occurrence
noted (lines 229-231).

Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

♻️ Duplicate comments (1)
CLAUDE.md (1)

83-89: Formatting CI failure previously flagged — still needs resolution.

The past review noted that pnpm format:check is failing in CI. Ensure oxfmt --write has been run across the full working tree and the result committed before merging.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@CLAUDE.md` around lines 83 - 89, CI is failing because formatting check (pnpm
format:check) detects unformatted files; run the formatter (oxfmt --write)
across the full working tree, review and stage all changes, commit them, and
push so the build job (`pnpm format:check` in the CI workflow) passes; if the
project uses a package script or toolchain hook, ensure the same command is
invoked (pnpm format:check / oxfmt --write) locally before creating the PR.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Duplicate comments:
In `@CLAUDE.md`:
- Around line 83-89: CI is failing because formatting check (pnpm format:check)
detects unformatted files; run the formatter (oxfmt --write) across the full
working tree, review and stage all changes, commit them, and push so the build
job (`pnpm format:check` in the CI workflow) passes; if the project uses a
package script or toolchain hook, ensure the same command is invoked (pnpm
format:check / oxfmt --write) locally before creating the PR.

ℹ️ Review info

Configuration used: defaults

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between b9932ca and 1801714.

📒 Files selected for processing (1)
  • CLAUDE.md

Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 7

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
docs/ai/pi-chat.md (1)

547-547: ⚠️ Potential issue | 🟡 Minor

Remove the internal instruction from published content.

The line “Add this section at the very end of the document, after ‘What’s coming next’” reads like an authoring note and shouldn’t ship in user-facing docs.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@docs/ai/pi-chat.md` at line 547, Remove the authoring note "Add this section
at the very end of the document, after 'What's coming next'" from the published
docs (docs/ai/pi-chat.md) so it doesn't appear in user-facing content; instead
move that instruction into the PR description or an editorial/comment block, and
ensure the final document only contains the intended section heading/content and
not the internal instruction text.
♻️ Duplicate comments (2)
docs/ai/pi-chat.md (2)

93-95: ⚠️ Potential issue | 🟡 Minor

Add language identifiers to fenced code blocks.

Markdownlint MD040 requires a language specifier (e.g., text) on all fenced blocks; several remain bare.

Also applies to: 167-172, 185-189, 204-209, 222-226, 240-244, 258-262, 273-276, 288-291, 322-325, 334-337, 349-352, 362-365

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@docs/ai/pi-chat.md` around lines 93 - 95, Several fenced code blocks are
missing language identifiers (e.g., the block containing "Create a bug report
for the login page crash"); update each bare triple-backtick block to include an
appropriate language token such as ```text or ```markdown. Search for the shown
snippet and the other affected blocks mentioned (blocks at the additional
ranges) and add the language specifier to each fenced block so they comply with
MD040.

6-6: ⚠️ Potential issue | 🟡 Minor

Hyphenate “AI-powered” in the H1.

This repeats a prior review note; the header still lacks the hyphen.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@docs/ai/pi-chat.md` at line 6, Update the H1 string in the docs file where it
reads "AI powered assistant for project management" to hyphenate AI-powered so
it becomes "AI-powered assistant for project management"; locate the header line
in docs/ai/pi-chat.md (the H1) and replace the unhyphenated phrase accordingly.
🧹 Nitpick comments (2)
docs/core-concepts/pages/wiki.md (1)

43-45: Nit: missing space after link: in the Business tag prop

Line 44 has link:"https://..." while line 8 uses link: "https://..." (with a space). Minor inconsistency — covered by the proposed fix above.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@docs/core-concepts/pages/wiki.md` around lines 43 - 45, The Tags component's
inline prop array has an inconsistent spacing for the Business tag's link
property; update the Tags :tags value so the Business tag uses `link:
"https://plane.so/pricing"` (add a space after `link:`) to match the other
entries and maintain consistent formatting for the Tags :tags prop and the
Business tag object.
docs/.vitepress/theme/style.css (1)

201-205: Add a fallback for --cols to avoid invalid grid templates.

If --cols is missing, repeat(var(--cols), 1fr) becomes invalid and collapses the layout.

♻️ Suggested change
 .card-group {
   display: grid;
   gap: 16px;
-  grid-template-columns: repeat(var(--cols), 1fr);
+  grid-template-columns: repeat(var(--cols, 1), 1fr);
 }
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@docs/.vitepress/theme/style.css` around lines 201 - 205, The .card-group rule
can produce an invalid grid when the CSS variable --cols is unset; update the
grid-template-columns declaration to use a fallback for --cols (e.g.,
var(--cols, 1) or another sensible default) so repeat() always receives a valid
number; modify the grid-template-columns in the .card-group selector to use
var(--cols, <fallback>) to avoid collapsing layouts.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@docs/.vitepress/theme/style.css`:
- Around line 1-3: Add Tailwind v4 at-rule allowlisting to the stylelint config
so the `@source` directive in docs/.vitepress/theme/style.css is not flagged:
update .stylelintrc.json's rules.at-rule-no-unknown to ignore at-rules like
"source" (and any other Tailwind v4 at-rules you use, e.g., "tailwind") by
adding them to the ignoreAtRules array, or alternatively add this file to
stylelint's ignoreFiles list to exclude it from linting; edit the
.stylelintrc.json entry rather than changing the CSS file.
- Around line 6-12: The `@font-face` rule for font-family "Satoshi" uses an
invalid combined descriptor "font-style: normal italic"; replace the single
`@font-face` block with two separate `@font-face` rules for "Satoshi" that reuse the
same src and font-weight range: one rule with font-style: normal and one rule
with font-style: italic (preserve font-display: swap and other descriptors like
src and font-weight), so the font selection is valid per CSS Fonts Level 4.

In `@docs/core-concepts/issues/epics.md`:
- Around line 90-93: The markdown heading "## Duplicate Epics" is currently
inside the HTML block <div class="tag-wrapper"> so it will not be parsed as an
<h2> or included in the TOC; move the "## Duplicate Epics" heading out of the
<div class="tag-wrapper"> and make the <Tags :tags='[...]' /> component an
inline sibling (e.g., heading first, then the tag wrapper containing only <Tags
/>), ensuring the wrapper only contains the <Tags /> component and not the
Markdown heading.
- Around line 163-166: The heading "Convert Epics to Work Items" is wrapped
inside a <div class="tag-wrapper"> which causes it to render as plain text and
be excluded from the table of contents; move the markdown heading out of that
wrapper (place the ## Convert Epics to Work Items line above or below the <div
class="tag-wrapper">) and keep the <Tags ... /> component inside the wrapper (or
wrap only the <Tags> element) so the heading is a top-level markdown heading
that will be picked up by the TOC.

In `@docs/core-concepts/pages/wiki.md`:
- Around line 2-6: Update the two occurrences of the phrase to use the
hyphenated compound modifier "company-wide": change the front matter title value
(the `title:` string) and the H1 heading text ("# Wiki for company wide
knowledge base") to "company-wide knowledge base" so both the `title` and the
displayed heading are corrected.

In `@docs/importers/notion.md`:
- Line 26: There's a contradiction between the "Export comments" guidance (the
"Export comments" toggle line) and the mapping table row "Comments | Not
supported"; pick one behavior and make both docs consistent: either (A) if
comments are not supported, change the "Export comments" line to instruct users
to keep the toggle OFF unconditionally and remove the parenthetical caveat,
leaving the mapping table as "Not supported", or (B) if comments are partially
supported, update the mapping table row "Comments | Not supported" to describe
the level of support and any limitations and adjust the "Export comments"
guidance to explain when to toggle ON and what will be imported; ensure both the
"Export comments" sentence and the mapping table row use the same wording and
include any caveats.
- Line 37: The image line in docs/importers/notion.md is indented by four spaces
so Markdown treats it as a code block; remove the leading spaces from the line
containing "![Import from
Notion](https://media.docs.plane.so/importers/notion/import-notion.webp#hero)"
so it becomes a normal top-level Markdown image line (no surrounding backticks
or additional indentation) and verify it renders as an image rather than inside
a <pre> block.

---

Outside diff comments:
In `@docs/ai/pi-chat.md`:
- Line 547: Remove the authoring note "Add this section at the very end of the
document, after 'What's coming next'" from the published docs
(docs/ai/pi-chat.md) so it doesn't appear in user-facing content; instead move
that instruction into the PR description or an editorial/comment block, and
ensure the final document only contains the intended section heading/content and
not the internal instruction text.

---

Duplicate comments:
In `@docs/ai/pi-chat.md`:
- Around line 93-95: Several fenced code blocks are missing language identifiers
(e.g., the block containing "Create a bug report for the login page crash");
update each bare triple-backtick block to include an appropriate language token
such as ```text or ```markdown. Search for the shown snippet and the other
affected blocks mentioned (blocks at the additional ranges) and add the language
specifier to each fenced block so they comply with MD040.
- Line 6: Update the H1 string in the docs file where it reads "AI powered
assistant for project management" to hyphenate AI-powered so it becomes
"AI-powered assistant for project management"; locate the header line in
docs/ai/pi-chat.md (the H1) and replace the unhyphenated phrase accordingly.

---

Nitpick comments:
In `@docs/.vitepress/theme/style.css`:
- Around line 201-205: The .card-group rule can produce an invalid grid when the
CSS variable --cols is unset; update the grid-template-columns declaration to
use a fallback for --cols (e.g., var(--cols, 1) or another sensible default) so
repeat() always receives a valid number; modify the grid-template-columns in the
.card-group selector to use var(--cols, <fallback>) to avoid collapsing layouts.

In `@docs/core-concepts/pages/wiki.md`:
- Around line 43-45: The Tags component's inline prop array has an inconsistent
spacing for the Business tag's link property; update the Tags :tags value so the
Business tag uses `link: "https://plane.so/pricing"` (add a space after `link:`)
to match the other entries and maintain consistent formatting for the Tags :tags
prop and the Business tag object.

ℹ️ Review info

Configuration used: defaults

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 1801714 and 598549e.

📒 Files selected for processing (15)
  • docs/.vitepress/theme/style.css
  • docs/ai/pi-chat.md
  • docs/core-concepts/issues/epics.md
  • docs/core-concepts/pages/inline-comments.md
  • docs/core-concepts/pages/nested-pages.md
  • docs/core-concepts/pages/wiki.md
  • docs/core-concepts/projects/initiatives.md
  • docs/core-concepts/projects/milestones.md
  • docs/core-concepts/projects/project-overview.md
  • docs/core-concepts/projects/project-states.md
  • docs/core-concepts/projects/recurring-work-items.md
  • docs/core-concepts/workspaces/teamspaces.md
  • docs/importers/confluence.md
  • docs/importers/notion.md
  • package.json
🚧 Files skipped from review as they are similar to previous changes (7)
  • docs/core-concepts/projects/project-states.md
  • docs/core-concepts/pages/inline-comments.md
  • docs/core-concepts/projects/initiatives.md
  • docs/core-concepts/projects/recurring-work-items.md
  • docs/core-concepts/workspaces/teamspaces.md
  • docs/importers/confluence.md
  • docs/core-concepts/pages/nested-pages.md

Comment on lines +1 to +3
@import "tailwindcss";
@source "../../**/*.md";
@source "../theme/**/*.vue";
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
# Locate lint config files and check Tailwind directive handling
echo "=== Looking for lint configuration files ==="
find . -maxdepth 3 -type f \( -name ".stylelintrc*" -o -name "stylelint.config.*" -o -name "biome.json" -o -name ".biomeignore" \) 2>/dev/null | head -20

echo -e "\n=== Checking for lint configs in root ==="
ls -la | grep -E 'stylelint|biome|lint'

echo -e "\n=== Checking for lint configs in docs or config directories ==="
find . -path ./node_modules -prune -o -type f -name "*.config.*" -print 2>/dev/null | grep -iE 'stylelint|biome|lint' | head -20

Repository: makeplane/docs

Length of output: 542


🏁 Script executed:

#!/bin/bash
# Check package.json for stylelint/biome configuration
echo "=== Checking package.json for lint config ==="
if [ -f "package.json" ]; then
  cat package.json | grep -A 20 -E '"stylelint"|"biome"' || echo "No stylelint/biome in package.json root"
fi

# Check if there's a biome.json or stylelint config
echo -e "\n=== Checking for biome.json ==="
[ -f "biome.json" ] && cat biome.json || echo "No biome.json found"

echo -e "\n=== Checking for .stylelintrc ==="
for file in .stylelintrc .stylelintrc.json .stylelintrc.js .stylelintrc.yaml .stylelintrc.yml; do
  [ -f "$file" ] && echo "Found: $file" && cat "$file"
done

Repository: makeplane/docs

Length of output: 3017


🏁 Script executed:

#!/bin/bash
# Check if Tailwind CSS v4 at-rules are mentioned anywhere in config
echo "=== Searching for Tailwind or at-rule mentions in config files ==="
rg -i "tailwind|@source|@import|at-rule" --type-list | head -10

rg -i "tailwind|@source|at-rule-no-unknown" . --type json -A 3 -B 1 2>/dev/null | head -50

# Also check for Tailwind in CSS files
echo -e "\n=== Checking Tailwind mentions in CSS files ==="
fd -e css -x rg -l "tailwind|@source" {} \; 2>/dev/null

Repository: makeplane/docs

Length of output: 928


🏁 Script executed:

#!/bin/bash
# Check if style.css is linted in CI or scripts
echo "=== Checking for CI/linting scripts ==="
fd -e yml -e yaml | xargs grep -l "stylelint\|biome" 2>/dev/null | head -10

echo -e "\n=== Checking for stylelint in package.json scripts ==="
if [ -f "package.json" ]; then
  rg '"scripts"' -A 30 package.json | grep -E "lint|style" || echo "No lint scripts found"
fi

# Check Tailwind v4 documentation requirements
echo -e "\n=== Checking if stylelint has known issues with Tailwind v4 ==="
rg "at-rule-no-unknown" . 2>/dev/null || echo "No at-rule-no-unknown config found"

Repository: makeplane/docs

Length of output: 275


🏁 Script executed:

#!/bin/bash
# Check what Tailwind v4 at-rules need allowlisting
echo "=== Tailwind v4 directives used in CSS files ==="
fd -e css -x rg "@import|@source|@layer|@utility|@tailwind" {} + 2>/dev/null | head -20

# Check the specific style.css file for all at-rules
echo -e "\n=== All at-rules in docs/.vitepress/theme/style.css ==="
cat docs/.vitepress/theme/style.css | grep "^@" || echo "No at-rules found at line start"
cat docs/.vitepress/theme/style.css | rg "^\s*@" || echo "No at-rules found"

Repository: makeplane/docs

Length of output: 559


Add Tailwind v4 @source directive to stylelint allowlist.

The .stylelintrc.json config doesn't explicitly allowlist Tailwind v4 at-rules like @source. While linting isn't currently enforced in CI, the stylelint configuration extends stylelint-config-standard-scss which will flag @source as an unknown at-rule. Either add an at-rule-no-unknown allowlist for Tailwind v4 directives to .stylelintrc.json, or exclude this file from linting.

🧰 Tools
🪛 Biome (2.4.4)

[error] 2-2: Tailwind-specific syntax is disabled.

(parse)


[error] 3-3: Tailwind-specific syntax is disabled.

(parse)

🪛 Stylelint (17.3.0)

[error] 2-2: Unexpected unknown at-rule "@source" (scss/at-rule-no-unknown)

(scss/at-rule-no-unknown)


[error] 3-3: Unexpected unknown at-rule "@source" (scss/at-rule-no-unknown)

(scss/at-rule-no-unknown)

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@docs/.vitepress/theme/style.css` around lines 1 - 3, Add Tailwind v4 at-rule
allowlisting to the stylelint config so the `@source` directive in
docs/.vitepress/theme/style.css is not flagged: update .stylelintrc.json's
rules.at-rule-no-unknown to ignore at-rules like "source" (and any other
Tailwind v4 at-rules you use, e.g., "tailwind") by adding them to the
ignoreAtRules array, or alternatively add this file to stylelint's ignoreFiles
list to exclude it from linting; edit the .stylelintrc.json entry rather than
changing the CSS file.

Comment on lines +6 to +12
@font-face {
font-family: "Satoshi";
src: url("/fonts/Satoshi/Satoshi-Variable.ttf") format("truetype");
font-weight: 400 680;
font-style: normal italic;
font-display: swap;
}
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
# Check the current state of the CSS file
echo "=== CSS File Content ==="
cat -n docs/.vitepress/theme/style.css | head -20

echo -e "\n=== Looking for Satoshi font files ==="
fd 'Satoshi' . --type f 2>/dev/null || echo "No files found with 'Satoshi' in name"

echo -e "\n=== Checking fonts directory structure ==="
find docs -type d -name fonts 2>/dev/null | head -5

Repository: makeplane/docs

Length of output: 831


🌐 Web query:

CSS @font-face font-style descriptor specification - can it accept multiple keywords?

💡 Result:

No. In @font-face, the font-style descriptor takes one style keyword, not multiple keywords.

Per CSS Fonts Level 4, the grammar is: auto | normal | italic | oblique [ <angle>{1,2} ]?—i.e., a single keyword, and only for oblique you may add one angle (oblique 20deg) or two angles to declare a range (oblique 20deg 50deg). Values like normal italic are invalid. [1][2]

If you need both normal and italic faces, declare separate @font-face rules (one with font-style: normal, one with font-style: italic). [2]

Sources:
[1] W3C, CSS Fonts Module Level 4 (@font-face font-style descriptor definition)
[2] MDN, @font-face: font-style (syntax + oblique angle/range examples)


font-style: normal italic is not a valid @font-face descriptor.

Per W3C CSS Fonts Level 4, the font-style descriptor accepts only a single keyword: auto | normal | italic | oblique [ <angle>{1,2} ]?. Multiple keywords invalidate the rule and break font selection. Split into separate @font-face rules—one with font-style: normal and one with font-style: italic.

🛠️ Suggested fix
 `@font-face` {
   font-family: "Satoshi";
   src: url("/fonts/Satoshi/Satoshi-Variable.ttf") format("truetype");
   font-weight: 400 680;
-  font-style: normal italic;
+  font-style: normal;
   font-display: swap;
 }
+
+@font-face {
+  font-family: "Satoshi";
+  src: url("/fonts/Satoshi/Satoshi-Variable.ttf") format("truetype");
+  font-weight: 400 680;
+  font-style: italic;
+  font-display: swap;
+}
🧰 Tools
🪛 Stylelint (17.3.0)

[error] 7-7: Unexpected quotes around "Satoshi" (font-family-name-quotes)

(font-family-name-quotes)

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@docs/.vitepress/theme/style.css` around lines 6 - 12, The `@font-face` rule for
font-family "Satoshi" uses an invalid combined descriptor "font-style: normal
italic"; replace the single `@font-face` block with two separate `@font-face` rules
for "Satoshi" that reuse the same src and font-weight range: one rule with
font-style: normal and one rule with font-style: italic (preserve font-display:
swap and other descriptors like src and font-weight), so the font selection is
valid per CSS Fonts Level 4.

Comment on lines +90 to 93
<div class="tag-wrapper">
## Duplicate Epics
<Tags tags={[{ name: "Pro", link: "https://plane.so/pricing", additionalClass: "pro" }]} />
<Tags :tags='[{ name: "Pro", link: "https://plane.so/pricing", additionalClass: "pro" }]' />
</div>
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟠 Major

## heading inside <div> won't render as <h2> and will be absent from the page TOC.

It's not possible to use Markdown inside an HTML block — ## Duplicate Epics on Line 91, nested inside the <div class="tag-wrapper">, will be emitted as the literal string ## Duplicate Epics rather than an <h2> element. The parsed headers are handled by VitePress and used for both the sidebar and document title, so this section will also be missing from the page's table of contents.

Move the heading outside the wrapper and position the <Tags /> component as an inline sibling:

🐛 Proposed fix
-<div class="tag-wrapper">
-  ## Duplicate Epics
-  <Tags :tags='[{ name: "Pro", link: "https://plane.so/pricing", additionalClass: "pro" }]' />
-</div>
+## Duplicate Epics <Tags :tags='[{ name: "Pro", link: "https://plane.so/pricing", additionalClass: "pro" }]' />
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
<div class="tag-wrapper">
## Duplicate Epics
<Tags tags={[{ name: "Pro", link: "https://plane.so/pricing", additionalClass: "pro" }]} />
<Tags :tags='[{ name: "Pro", link: "https://plane.so/pricing", additionalClass: "pro" }]' />
</div>
## Duplicate Epics <Tags :tags='[{ name: "Pro", link: "https://plane.so/pricing", additionalClass: "pro" }]' />
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@docs/core-concepts/issues/epics.md` around lines 90 - 93, The markdown
heading "## Duplicate Epics" is currently inside the HTML block <div
class="tag-wrapper"> so it will not be parsed as an <h2> or included in the TOC;
move the "## Duplicate Epics" heading out of the <div class="tag-wrapper"> and
make the <Tags :tags='[...]' /> component an inline sibling (e.g., heading
first, then the tag wrapper containing only <Tags />), ensuring the wrapper only
contains the <Tags /> component and not the Markdown heading.

Comment on lines +163 to 166
<div class="tag-wrapper">
## Convert Epics to Work Items
<Tags tags={[{ name: "Business", link: "https://plane.so/pricing", additionalClass: "business" }]} />
<Tags :tags='[{ name: "Business", link: "https://plane.so/pricing", additionalClass: "business" }]' />
</div>
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟠 Major

Same heading-inside-<div> problem as the "Duplicate Epics" block above — ## Convert Epics to Work Items will render as plain text and be missing from the TOC.

🐛 Proposed fix
-<div class="tag-wrapper">
-  ## Convert Epics to Work Items
-  <Tags :tags='[{ name: "Business", link: "https://plane.so/pricing", additionalClass: "business" }]' />
-</div>
+## Convert Epics to Work Items <Tags :tags='[{ name: "Business", link: "https://plane.so/pricing", additionalClass: "business" }]' />
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
<div class="tag-wrapper">
## Convert Epics to Work Items
<Tags tags={[{ name: "Business", link: "https://plane.so/pricing", additionalClass: "business" }]} />
<Tags :tags='[{ name: "Business", link: "https://plane.so/pricing", additionalClass: "business" }]' />
</div>
## Convert Epics to Work Items <Tags :tags='[{ name: "Business", link: "https://plane.so/pricing", additionalClass: "business" }]' />
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@docs/core-concepts/issues/epics.md` around lines 163 - 166, The heading
"Convert Epics to Work Items" is wrapped inside a <div class="tag-wrapper">
which causes it to render as plain text and be excluded from the table of
contents; move the markdown heading out of that wrapper (place the ## Convert
Epics to Work Items line above or below the <div class="tag-wrapper">) and keep
the <Tags ... /> component inside the wrapper (or wrap only the <Tags> element)
so the heading is a top-level markdown heading that will be picked up by the
TOC.

Comment on lines 2 to +6
title: Wiki for company wide knowledge base
sidebar_label: Wiki
hide_title: true
description: Create and organize company-wide documentation, policies, guides, and knowledge that extends beyond individual projects.
---

import Tags from "@site/src/components/Tags";
# Wiki for company wide knowledge base
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

Fix hyphenation: "company-wide knowledge base"

"Company-wide" is a compound modifier and should be hyphenated. The issue appears in both the front matter title (line 2) and the H1 heading (line 6).

✏️ Proposed fix
-title: Wiki for company wide knowledge base
+title: Wiki for company-wide knowledge base
-# Wiki for company wide knowledge base
+# Wiki for company-wide knowledge base
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
title: Wiki for company wide knowledge base
sidebar_label: Wiki
hide_title: true
description: Create and organize company-wide documentation, policies, guides, and knowledge that extends beyond individual projects.
---
import Tags from "@site/src/components/Tags";
# Wiki for company wide knowledge base
title: Wiki for company-wide knowledge base
description: Create and organize company-wide documentation, policies, guides, and knowledge that extends beyond individual projects.
---
# Wiki for company-wide knowledge base
🧰 Tools
🪛 LanguageTool

[grammar] ~6-~6: Use a hyphen to join words.
Context: ...vidual projects. --- # Wiki for company wide knowledge base <Tags :tags='[{ nam...

(QB_NEW_EN_HYPHEN)

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@docs/core-concepts/pages/wiki.md` around lines 2 - 6, Update the two
occurrences of the phrase to use the hyphenated compound modifier
"company-wide": change the front matter title value (the `title:` string) and
the H1 heading text ("# Wiki for company wide knowledge base") to "company-wide
knowledge base" so both the `title` and the displayed heading are corrected.

- **Include content**: Choose **Everything**
- **Include subpages**: Toggle this **ON**
- **Create folders for subpages**: Toggle this **ON**
- **Export comments**: Toggle this **OFF** (unless you want comments included)
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

Contradiction between export guidance and the import mapping table for Comments.

Line 26 tells users they can toggle Export comments ON (implying comments will be imported), but the mapping table at Line 78 explicitly states Comments | Not supported. One of these must be incorrect:

  • If comments are truly unsupported, Line 26 should advise users to keep the toggle OFF unconditionally and remove the parenthetical caveat.
  • If comments are partially supported, the mapping table should reflect that accurately instead of "Not supported."
✏️ Proposed fix (if comments are unsupported)
-  - **Export comments**: Toggle this **OFF** (unless you want comments included)
+  - **Export comments**: Toggle this **OFF** (comments are not supported by the importer)

Also applies to: 78-78

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@docs/importers/notion.md` at line 26, There's a contradiction between the
"Export comments" guidance (the "Export comments" toggle line) and the mapping
table row "Comments | Not supported"; pick one behavior and make both docs
consistent: either (A) if comments are not supported, change the "Export
comments" line to instruct users to keep the toggle OFF unconditionally and
remove the parenthetical caveat, leaving the mapping table as "Not supported",
or (B) if comments are partially supported, update the mapping table row
"Comments | Not supported" to describe the level of support and any limitations
and adjust the "Export comments" guidance to explain when to toggle ON and what
will be imported; ensure both the "Export comments" sentence and the mapping
table row use the same wording and include any caveats.


## Import Notion content

![Import from Notion](https://media.docs.plane.so/importers/notion/import-notion.webp#hero)
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

Standalone image will render as a code block due to 4-space indentation.

In Markdown (including VitePress/markdown-it), a block indented with 4 spaces at the top level is treated as a fenced code block, not rendered content. This image will appear as literal text ![Import from Notion](https://...) inside a <pre> element.

Remove the leading spaces so the image renders correctly:

🐛 Proposed fix
-    ![Import from Notion](https://media.docs.plane.so/importers/notion/import-notion.webp#hero)
+![Import from Notion](https://media.docs.plane.so/importers/notion/import-notion.webp#hero)
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
![Import from Notion](https://media.docs.plane.so/importers/notion/import-notion.webp#hero)
![Import from Notion](https://media.docs.plane.so/importers/notion/import-notion.webp#hero)
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@docs/importers/notion.md` at line 37, The image line in
docs/importers/notion.md is indented by four spaces so Markdown treats it as a
code block; remove the leading spaces from the line containing "![Import from
Notion](https://media.docs.plane.so/importers/notion/import-notion.webp#hero)"
so it becomes a normal top-level Markdown image line (no surrounding backticks
or additional indentation) and verify it renders as an image rather than inside
a <pre> block.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant