Skip to content

172 proper docs site#173

Merged
InfinityBowman merged 10 commits into
mainfrom
172-proper-docs-site
Dec 27, 2025
Merged

172 proper docs site#173
InfinityBowman merged 10 commits into
mainfrom
172-proper-docs-site

Conversation

@InfinityBowman
Copy link
Copy Markdown
Owner

@InfinityBowman InfinityBowman commented Dec 26, 2025

Summary by CodeRabbit

  • Documentation

    • Launched a VitePress docs site with many new guides (architecture, API, auth, testing, Yjs sync, error handling, style guide, etc.) and removed legacy diagram viewer and several standalone docs.
  • Chores

    • Added docs package, new docs scripts, CI/tooling ignore updates, and packaging metadata for the docs site.
  • Accessibility / Style

    • Improved focus/keyboard accessibility and updated focus color/shade across many UI controls.
  • Misc

    • Minor docs URL and UI guidance updates (Ark UI references).

✏️ Tip: You can customize this high-level summary in your review settings.

@InfinityBowman InfinityBowman linked an issue Dec 26, 2025 that may be closed by this pull request
@coderabbitai
Copy link
Copy Markdown

coderabbitai Bot commented Dec 26, 2025

📝 Walkthrough

Walkthrough

Migrates docs from a custom HTML/Mermaid viewer to a VitePress site under packages/docs/, deletes legacy docs/architecture viewer files, adds many new guide pages and site config, updates package scripts/build tooling and ignore rules, and applies numerous UI focus/accessibility styling tweaks plus small script and runtime fixes.

Changes

Cohort / File(s) Summary
Removed legacy architecture viewer
docs/architecture/index.html, docs/architecture/diagrams.md
Deleted the custom Mermaid HTML viewer and the standalone diagrams index.
Docs workspace added
packages/docs/package.json, packages/docs/README.md, packages/docs/index.md, packages/docs/...
New private @corates/docs package, README, site root and content files for the VitePress docs site.
VitePress config & docs tooling
packages/docs/.vitepress/config.js, packages/docs/.gitignore, package.json
Added VitePress config (with mermaid integration), docs .gitignore, and replaced old docs serve script with docs:dev, docs:build, docs:preview scripts in root package.json.
Docs content (many guides)
packages/docs/architecture/index.md, packages/docs/guides/*.md
Added architecture index and broad set of guides (error handling, style guide, API dev, auth, testing, Yjs sync, components, state, DB, primitives, etc.).
Cursor quick-reference rules
.cursor/rules/*.mdc (many new/updated files)
Added/updated numerous quick-reference rule docs (Yjs sync, durable objects, form-state, pdf-handling, reconciliation, workers, error-handling, UI components, etc.).
Deleted legacy docs
packages/web/TESTING.md, packages/workers/TESTING.md, packages/workers/DRIZZLE_README.md
Removed older testing and Drizzle README files.
Lint / ignore updates
eslint.config.js, packages/docs/.gitignore
Added .vitepress/cache/.vitepress/dist ignore patterns and node_modules to docs .gitignore; removed commented import lines in ESLint config.
Minor runtime / script fixes
scripts/loc-report.mjs, packages/web/src/components/project-ui/overview-tab/AMSTAR2ResultsTable.jsx
Adjusted LOC report ordering (per-package before total) and made hasOwnProperty checks safer.
UI focus / accessibility styling updates
packages/web/src/components/...
Examples: auth-ui/*.jsx, profile-ui/*.jsx, project-ui/**, checklist-ui/**, billing/*, sidebar/*, admin-ui/*, pdf/*, compare/*
Widespread presentational changes: updated focus ring classes (mostly to focus:ring-2 focus:ring-blue-500 focus:outline-none), some color tweaks (text-red-600), and adjusted disabled styling to disabled:opacity-50. No logic changes.

Sequence Diagram(s)

(omitted)

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~22 minutes

Possibly related PRs

  • 70 zag package #71 — Related: consolidates UI components into @corates/ui and updates import/guidance, matching .clauderc / copilot docs edits.
  • 26 improve studies #61 — Related: edits to repository copilot/instructions and component guidance that overlap with this PR's UI docs updates.
  • 76 minor adjustments to studies and checklists #77 — Related: touches packages/web/src/components/checklist-ui/ChecklistsDashboard.jsx (this PR adds focus/accessibility styling to the same component).

Poem

🐰 I hopped from HTML to VitePress bright,
Diagrams moved in, the guides feel right.
Scripts refreshed and focus rings tuned too,
A carrot of docs — neat, new, and true! 🥕

Pre-merge checks and finishing touches

❌ Failed checks (1 warning)
Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 40.82% which is insufficient. The required threshold is 80.00%. You can run @coderabbitai generate docstrings to improve docstring coverage.
✅ Passed checks (2 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title '172 proper docs site' references the issue/ticket number and describes a primary change—establishing a proper documentation site—which aligns with the extensive additions of VitePress documentation infrastructure and comprehensive guides.
✨ Finishing touches
  • 📝 Generate docstrings
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch 172-proper-docs-site

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

@cloudflare-workers-and-pages
Copy link
Copy Markdown

cloudflare-workers-and-pages Bot commented Dec 26, 2025

Deploying with  Cloudflare Workers  Cloudflare Workers

The latest updates on your project. Learn more about integrating Git with Workers.

Status Name Latest Commit Preview URL Updated (UTC)
✅ Deployment successful!
View logs
corates 429b362 Commit Preview URL Dec 26 2025, 10:15 PM

Copy link
Copy Markdown

@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: 1

🧹 Nitpick comments (1)
packages/docs/index.md (1)

3-3: Consider using a heading instead of bold text for semantic correctness.

The subtitle uses bold emphasis instead of a proper heading level (e.g., ## Collaborative Research...). Using a heading improves document structure, accessibility, and SEO.

🔎 Proposed fix
-**Collaborative Research Appraisal Tool for Evidence Synthesis**
+## Collaborative Research Appraisal Tool for Evidence Synthesis
📜 Review details

Configuration used: defaults

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 9987be2 and 7bf3847.

⛔ Files ignored due to path filters (1)
  • pnpm-lock.yaml is excluded by !**/pnpm-lock.yaml
📒 Files selected for processing (21)
  • .github/Contributing.md
  • docs/architecture/diagrams.md
  • docs/architecture/index.html
  • package.json
  • packages/docs/.gitignore
  • packages/docs/.vitepress/config.js
  • packages/docs/README.md
  • packages/docs/architecture/diagrams/01-package-architecture.md
  • packages/docs/architecture/diagrams/02-system-architecture.md
  • packages/docs/architecture/diagrams/03-sync-flow.md
  • packages/docs/architecture/diagrams/04-data-model.md
  • packages/docs/architecture/diagrams/05-frontend-routes.md
  • packages/docs/architecture/diagrams/06-api-routes.md
  • packages/docs/architecture/diagrams/07-api-actions.md
  • packages/docs/architecture/diagrams/08-yjs-sync.md
  • packages/docs/architecture/index.md
  • packages/docs/guides/error-handling.md
  • packages/docs/guides/index.md
  • packages/docs/guides/style-guide.md
  • packages/docs/index.md
  • packages/docs/package.json
💤 Files with no reviewable changes (2)
  • docs/architecture/index.html
  • docs/architecture/diagrams.md
🧰 Additional context used
📓 Path-based instructions (1)
**/*

📄 CodeRabbit inference engine (.github/copilot-instructions.md)

Do not use emojis in code, comments, documentation, or commit messages

NEVER use emojis anywhere in code, comments, documentation, plan files, or commit messages. This includes unicode symbols. For UI icons, use solid-icons library or SVGs only.

Files:

  • packages/docs/guides/error-handling.md
  • packages/docs/guides/style-guide.md
  • packages/docs/guides/index.md
  • package.json
  • packages/docs/index.md
  • packages/docs/README.md
  • packages/docs/package.json
  • packages/docs/architecture/index.md
🧠 Learnings (18)
📚 Learning: 2025-12-24T17:22:56.372Z
Learnt from: CR
Repo: InfinityBowman/corates PR: 0
File: .cursor/rules/error-handling.mdc:0-0
Timestamp: 2025-12-24T17:22:56.372Z
Learning: Applies to packages/workers/src/**/*.{js,ts} : Always use `createDomainError` from `corates/shared` for error handling in backend routes with predefined error constants (PROJECT_ERRORS, AUTH_ERRORS, VALIDATION_ERRORS, SYSTEM_ERRORS, USER_ERRORS)

Applied to files:

  • packages/docs/guides/error-handling.md
📚 Learning: 2025-12-24T17:22:31.782Z
Learnt from: CR
Repo: InfinityBowman/corates PR: 0
File: .cursor/rules/api-routes.mdc:0-0
Timestamp: 2025-12-24T17:22:31.782Z
Learning: Applies to packages/workers/src/routes/**/*.js : Always use `createDomainError` from `corates/shared` for error responses, with appropriate error constants (PROJECT_ERRORS, AUTH_ERRORS, VALIDATION_ERRORS, SYSTEM_ERRORS, USER_ERRORS)

Applied to files:

  • packages/docs/guides/error-handling.md
📚 Learning: 2025-12-24T17:22:56.372Z
Learnt from: CR
Repo: InfinityBowman/corates PR: 0
File: .cursor/rules/error-handling.mdc:0-0
Timestamp: 2025-12-24T17:22:56.372Z
Learning: Applies to packages/{web,workers}/src/**/*.{js,ts,jsx,tsx} : Use error utility functions like `isErrorCode` from `corates/shared` or `@/lib/error-utils.js` to check specific error types instead of manual string comparisons

Applied to files:

  • packages/docs/guides/error-handling.md
📚 Learning: 2025-12-24T17:22:31.782Z
Learnt from: CR
Repo: InfinityBowman/corates PR: 0
File: .cursor/rules/api-routes.mdc:0-0
Timestamp: 2025-12-24T17:22:31.782Z
Learning: Applies to packages/workers/src/routes/**/*.js : Never create error objects manually or throw error strings; use error constants from `corates/shared`

Applied to files:

  • packages/docs/guides/error-handling.md
📚 Learning: 2025-12-24T17:22:56.372Z
Learnt from: CR
Repo: InfinityBowman/corates PR: 0
File: .cursor/rules/error-handling.mdc:0-0
Timestamp: 2025-12-24T17:22:56.372Z
Learning: Applies to packages/web/src/**/*.{js,ts,jsx,tsx} : Use `createFormErrorSignals` from `@/lib/form-errors.js` for form validation error handling with field-level and global error management

Applied to files:

  • packages/docs/guides/error-handling.md
📚 Learning: 2025-12-24T17:22:56.372Z
Learnt from: CR
Repo: InfinityBowman/corates PR: 0
File: .cursor/rules/error-handling.mdc:0-0
Timestamp: 2025-12-24T17:22:56.372Z
Learning: Applies to packages/{web,workers}/src/**/*.{js,ts,jsx,tsx} : Never throw string literals; always throw Error objects or return domain errors from API routes

Applied to files:

  • packages/docs/guides/error-handling.md
📚 Learning: 2025-12-24T17:22:56.372Z
Learnt from: CR
Repo: InfinityBowman/corates PR: 0
File: .cursor/rules/error-handling.mdc:0-0
Timestamp: 2025-12-24T17:22:56.372Z
Learning: Applies to packages/workers/src/**/*.{js,ts} : Wrap database operations in try-catch blocks and return domain errors using `createDomainError(SYSTEM_ERRORS.DB_ERROR, {...})` instead of throwing raw errors

Applied to files:

  • packages/docs/guides/error-handling.md
📚 Learning: 2025-12-24T17:22:56.372Z
Learnt from: CR
Repo: InfinityBowman/corates PR: 0
File: .cursor/rules/error-handling.mdc:0-0
Timestamp: 2025-12-24T17:22:56.372Z
Learning: Applies to packages/web/src/**/*.{js,ts,jsx,tsx} : Always use `handleFetchError` from `@/lib/error-utils.js` for fetch calls in frontend code with options like `{ showToast: true }` for error handling

Applied to files:

  • packages/docs/guides/error-handling.md
📚 Learning: 2025-12-24T17:22:56.372Z
Learnt from: CR
Repo: InfinityBowman/corates PR: 0
File: .cursor/rules/error-handling.mdc:0-0
Timestamp: 2025-12-24T17:22:56.372Z
Learning: Applies to packages/workers/src/**/*.{js,ts} : Use validation middleware with `validateRequest(schema)` to handle validation errors automatically rather than manually creating validation errors in routes

Applied to files:

  • packages/docs/guides/error-handling.md
📚 Learning: 2025-12-24T17:23:17.309Z
Learnt from: CR
Repo: InfinityBowman/corates PR: 0
File: .cursor/rules/ui-components.mdc:0-0
Timestamp: 2025-12-24T17:23:17.309Z
Learning: Applies to packages/web/**/*.{js,jsx,ts,tsx} : Use import aliases from 'packages/web/jsconfig.json' instead of relative paths. Aliases include: '@/*' (src/*), 'components/*' (src/components/*), 'auth-ui/*' (src/components/auth-ui/*), 'checklist-ui/*' (src/components/checklist-ui/*), 'project-ui/*' (src/components/project-ui/*), 'routes/*' (src/routes/*), 'primitives/*' (src/primitives/*), 'api/*' (src/api/*), 'config/*' (src/config/*), and 'lib/*' (src/lib/*)

Applied to files:

  • packages/docs/.vitepress/config.js
📚 Learning: 2025-12-24T17:23:17.309Z
Learnt from: CR
Repo: InfinityBowman/corates PR: 0
File: .cursor/rules/ui-components.mdc:0-0
Timestamp: 2025-12-24T17:23:17.309Z
Learning: Reference 'style-guide.md' for design system patterns when building UI components

Applied to files:

  • packages/docs/guides/style-guide.md
  • packages/docs/guides/index.md
📚 Learning: 2025-12-24T17:23:17.309Z
Learnt from: CR
Repo: InfinityBowman/corates PR: 0
File: .cursor/rules/ui-components.mdc:0-0
Timestamp: 2025-12-24T17:23:17.309Z
Learning: Applies to packages/{web,ui}/**/*.{jsx,tsx} : Use Tailwind CSS classes for styling components

Applied to files:

  • packages/docs/guides/style-guide.md
📚 Learning: 2025-12-24T17:23:17.309Z
Learnt from: CR
Repo: InfinityBowman/corates PR: 0
File: .cursor/rules/ui-components.mdc:0-0
Timestamp: 2025-12-24T17:23:17.309Z
Learning: Applies to packages/{web,ui}/**/*.{js,jsx,ts,tsx} : Always use 'solid-icons' library for icons. Never use emoji characters or text as icon replacements. Import from specific icon sets like 'solid-icons/bi', 'solid-icons/fi', 'solid-icons/ai', etc.

Applied to files:

  • packages/docs/guides/style-guide.md
📚 Learning: 2025-12-19T14:49:49.730Z
Learnt from: CR
Repo: InfinityBowman/corates PR: 0
File: .github/copilot-instructions.md:0-0
Timestamp: 2025-12-19T14:49:49.730Z
Learning: Applies to packages/web/src/components/**/*.{js,jsx,ts,tsx} : Use responsive design principles for UI components

Applied to files:

  • packages/docs/guides/style-guide.md
📚 Learning: 2025-12-24T17:23:17.309Z
Learnt from: CR
Repo: InfinityBowman/corates PR: 0
File: .cursor/rules/ui-components.mdc:0-0
Timestamp: 2025-12-24T17:23:17.309Z
Learning: Follow mobile-first responsive design approach using Tailwind CSS responsive utilities

Applied to files:

  • packages/docs/guides/style-guide.md
📚 Learning: 2025-12-24T17:22:48.927Z
Learnt from: CR
Repo: InfinityBowman/corates PR: 0
File: .cursor/rules/corates.mdc:0-0
Timestamp: 2025-12-24T17:22:48.927Z
Learning: This project (CoRATES) is a SolidJS-based web application deployed on Cloudflare Workers, not Cloudflare Pages

Applied to files:

  • packages/docs/guides/style-guide.md
  • packages/docs/index.md
  • packages/docs/README.md
📚 Learning: 2025-12-24T17:22:48.927Z
Learnt from: CR
Repo: InfinityBowman/corates PR: 0
File: .cursor/rules/corates.mdc:0-0
Timestamp: 2025-12-24T17:22:48.927Z
Learning: Applies to packages/{web,landing}/src/**/*.{jsx,tsx} : Use Ark UI components from corates/ui package, not local component implementations

Applied to files:

  • packages/docs/guides/style-guide.md
📚 Learning: 2025-12-19T14:49:49.730Z
Learnt from: CR
Repo: InfinityBowman/corates PR: 0
File: .github/copilot-instructions.md:0-0
Timestamp: 2025-12-19T14:49:49.730Z
Learning: Use the Corates MCP tools to explore local documentation sources for Better-Auth, Drizzle, Icons, and Zag documentation

Applied to files:

  • packages/docs/index.md
  • packages/docs/README.md
🪛 markdownlint-cli2 (0.18.1)
packages/docs/index.md

3-3: Emphasis used instead of a heading

(MD036, no-emphasis-as-heading)

⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (1)
  • GitHub Check: Workers Builds: corates
🔇 Additional comments (10)
packages/docs/.gitignore (1)

1-3: LGTM!

Standard VitePress ignore patterns are correctly configured.

packages/docs/README.md (1)

1-39: LGTM!

The documentation clearly describes the VitePress setup, commands align with the package.json scripts, and the structure matches the new docs organization.

.github/Contributing.md (1)

159-159: LGTM!

The port update to 8080 correctly aligns with the new VitePress dev server configuration.

package.json (1)

35-37: LGTM!

The docs scripts correctly migrate from the old serve-based approach to the new VitePress workflow using pnpm workspace filters.

packages/docs/guides/style-guide.md (1)

1-402: LGTM!

Comprehensive style guide that correctly adheres to project coding guidelines by using solid-icons library and avoiding emojis. The documentation aligns with established learnings about Tailwind CSS, mobile-first design, and SolidJS patterns.

packages/docs/guides/index.md (1)

7-7: No action needed. The error-handling guide exists at packages/docs/guides/error-handling.md.

packages/docs/architecture/index.md (1)

13-55: All referenced architecture diagram files exist.

The documentation references are complete. All 8 diagram pages in packages/docs/architecture/diagrams/ are present and correctly linked:

  • 01-package-architecture.md
  • 02-system-architecture.md
  • 03-sync-flow.md
  • 04-data-model.md
  • 05-frontend-routes.md
  • 06-api-routes.md
  • 07-api-actions.md
  • 08-yjs-sync.md
packages/docs/index.md (1)

1-47: Documentation overview is well-structured.

The landing page provides a clear introduction to CoRATES with appropriate sections for tech stack, documentation navigation, and getting started information.

packages/docs/guides/error-handling.md (1)

1-201: Excellent documentation of the error handling system.

The guide comprehensively covers the centralized error system with clear examples for domain, transport, and validation errors. The structure aligns well with the project's error handling conventions documented in the learnings.

Also applies to: 218-241

packages/docs/.vitepress/config.js (1)

1-98: VitePress configuration is well-structured.

The configuration properly sets up the documentation site with clear navigation, comprehensive sidebars for architecture and guides sections, and local search. The commented GitHub links are appropriately left as placeholders.

Comment on lines +202 to +217
### ✅ DO

- Use error helpers from `@corates/shared`
- Handle domain errors with `handleDomainError()`
- Handle transport errors with `handleTransportError()`
- Use form error utilities for validation errors
- Wrap fetch calls with `handleFetchError()`
- Use error boundaries for rendering errors

### ❌ DON'T

- Throw string literals (use `no-throw-literal` ESLint rule)
- Create raw `Error()` objects without error codes
- Use string matching for error codes
- Mix domain and transport error handling
- Ignore error boundaries
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🔴 Critical

Remove emojis from documentation.

The "Best Practices" section uses ✅ and ❌ emojis, which violates the project's coding guidelines that explicitly prohibit emojis anywhere in documentation.

Based on coding guidelines: "NEVER use emojis anywhere in code, comments, documentation, plan files, or commit messages. This includes unicode symbols."

🔎 Proposed fix
-### ✅ DO
+### DO
 
 - Use error helpers from `@corates/shared`
 - Handle domain errors with `handleDomainError()`
 - Handle transport errors with `handleTransportError()`
 - Use form error utilities for validation errors
 - Wrap fetch calls with `handleFetchError()`
 - Use error boundaries for rendering errors
 
-### ❌ DON'T
+### DON'T
 
 - Throw string literals (use `no-throw-literal` ESLint rule)
 - Create raw `Error()` objects without error codes
 - Use string matching for error codes
 - Mix domain and transport error handling
 - Ignore error boundaries
📝 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
### DO
- Use error helpers from `@corates/shared`
- Handle domain errors with `handleDomainError()`
- Handle transport errors with `handleTransportError()`
- Use form error utilities for validation errors
- Wrap fetch calls with `handleFetchError()`
- Use error boundaries for rendering errors
### DON'T
- Throw string literals (use `no-throw-literal` ESLint rule)
- Create raw `Error()` objects without error codes
- Use string matching for error codes
- Mix domain and transport error handling
- Ignore error boundaries
### DO
- Use error helpers from `@corates/shared`
- Handle domain errors with `handleDomainError()`
- Handle transport errors with `handleTransportError()`
- Use form error utilities for validation errors
- Wrap fetch calls with `handleFetchError()`
- Use error boundaries for rendering errors
### DON'T
- Throw string literals (use `no-throw-literal` ESLint rule)
- Create raw `Error()` objects without error codes
- Use string matching for error codes
- Mix domain and transport error handling
- Ignore error boundaries
🤖 Prompt for AI Agents
In packages/docs/guides/error-handling.md around lines 202 to 217, the "Best
Practices" section contains emoji characters (✅ and ❌) which violate project
guidelines; remove the emojis from the headings and list items so the text reads
using plain ASCII only (e.g., replace "✅ DO" with "DO" and "❌ DON'T" with
"DON'T"), ensure no other unicode emoji remain in that block, and run a quick
grep/scan of the surrounding lines to confirm all emojis are removed from the
document.

Copy link
Copy Markdown

@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: 0

🧹 Nitpick comments (2)
eslint.config.js (1)

8-13: Consider removing commented-out plugin code.

The commented-out unicorn and sonarjs plugin configurations could be removed if these plugins aren't planned for future use. If they're being kept for reference, consider adding a brief comment explaining why.

Also applies to: 16-18, 118-118

packages/web/src/components/project-ui/overview-tab/AMSTAR2ResultsTable.jsx (1)

77-77: Safer property check, but consider simplifying.

The change to use Object.prototype.hasOwnProperty.call() is correct and follows defensive programming practices. However, since counts is a locally-defined plain object with known keys and item.score is already validated (line 52), the in operator would be simpler and equally safe.

Simpler alternative using the `in` operator
-      if (Object.prototype.hasOwnProperty.call(counts, item.score)) {
+      if (item.score in counts) {
         counts[item.score]++;
       }
📜 Review details

Configuration used: defaults

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 7bf3847 and fa5199d.

⛔ Files ignored due to path filters (1)
  • pnpm-lock.yaml is excluded by !**/pnpm-lock.yaml
📒 Files selected for processing (5)
  • eslint.config.js
  • packages/docs/.vitepress/config.js
  • packages/docs/package.json
  • packages/web/src/components/project-ui/overview-tab/AMSTAR2ResultsTable.jsx
  • scripts/loc-report.mjs
🚧 Files skipped from review as they are similar to previous changes (2)
  • packages/docs/package.json
  • packages/docs/.vitepress/config.js
🧰 Additional context used
📓 Path-based instructions (14)
**/*

📄 CodeRabbit inference engine (.github/copilot-instructions.md)

Do not use emojis in code, comments, documentation, or commit messages

NEVER use emojis anywhere in code, comments, documentation, plan files, or commit messages. This includes unicode symbols. For UI icons, use solid-icons library or SVGs only.

Files:

  • eslint.config.js
  • packages/web/src/components/project-ui/overview-tab/AMSTAR2ResultsTable.jsx
  • scripts/loc-report.mjs
**/*.{js,jsx,ts,tsx}

📄 CodeRabbit inference engine (.github/copilot-instructions.md)

**/*.{js,jsx,ts,tsx}: Prefer modern ES6+ syntax and features
Use aliases for imports when appropriate to improve readability

**/*.{js,jsx,ts,tsx}: Prefer modern ES6+ syntax and features in JavaScript/TypeScript code
Comments should explain why something is being done, not narrate what the code does. Avoid comments that repeat variable names or describe obvious code behavior.

Files:

  • eslint.config.js
  • packages/web/src/components/project-ui/overview-tab/AMSTAR2ResultsTable.jsx
packages/web/src/**/*.{js,jsx,ts,tsx}

📄 CodeRabbit inference engine (.github/copilot-instructions.md)

packages/web/src/**/*.{js,jsx,ts,tsx}: For UI icons, use the solid-icons library or SVGs only. Do not use emojis
Ensure browser compatibility for all frontend code (Safari is usually problematic)
Keep files small, focused, and modular. If a file exceeds a high number of lines, consider refactoring by extracting sub-modules into a folder with index.jsx and helper components, moving complex logic into separate utility files or primitives, or splitting large forms into section components
Do NOT prop-drill application state. Shared or cross-feature state must live in external stores under packages/web/src/stores/ or relative to the component file
Use createMemo for derived values to ensure they update reactively

Use import aliases from jsconfig.json instead of relative paths

Files:

  • packages/web/src/components/project-ui/overview-tab/AMSTAR2ResultsTable.jsx
packages/web/src/components/**/*.{js,jsx,ts,tsx}

📄 CodeRabbit inference engine (.github/copilot-instructions.md)

packages/web/src/components/**/*.{js,jsx,ts,tsx}: Use responsive design principles for UI components
Group related components in subdirectories with an index.js barrel export
Use Zag.js for UI components and design system
Zag component exist in packages/web/src/components/zag/* and should be reused. Check the README.md in that folder for a list of existing components before adding new components and when debugging
Components should receive at most 1–5 props, and only for local configuration, not shared state. If a component would need more than 5 props, move the shared data into an external store, a primitive, or Solid context
Do not destructure props in SolidJS components as it breaks reactivity. Instead, access props directly from the props object or wrap them in a function to ensure they are always up-to-date
Components should be lean and focused. They should not implement business logic; move that into stores, utilities, or primitives
Never have a component act as a God component coordinating multiple large concerns

Files:

  • packages/web/src/components/project-ui/overview-tab/AMSTAR2ResultsTable.jsx
packages/{web,ui}/src/**/*.{jsx,tsx}

📄 CodeRabbit inference engine (.cursor/rules/corates.mdc)

Group related components in subdirectories with barrel exports

Files:

  • packages/web/src/components/project-ui/overview-tab/AMSTAR2ResultsTable.jsx
packages/{web,landing}/src/**/*.{jsx,tsx}

📄 CodeRabbit inference engine (.cursor/rules/corates.mdc)

packages/{web,landing}/src/**/*.{jsx,tsx}: Use Ark UI components from @corates/ui package, not local component implementations
Use solid-icons library (e.g., solid-icons/bi, solid-icons/fi) for icon imports

Files:

  • packages/web/src/components/project-ui/overview-tab/AMSTAR2ResultsTable.jsx
packages/web/src/**/*.{jsx,tsx}

📄 CodeRabbit inference engine (.cursor/rules/corates.mdc)

packages/web/src/**/*.{jsx,tsx}: In SolidJS, do NOT prop-drill application state. Import stores directly where needed instead.
In SolidJS, do NOT destructure props. Access props.field directly or wrap in a function: () => props.field
In SolidJS components, components should receive at most 1-5 props (local config only, not shared state)

Files:

  • packages/web/src/components/project-ui/overview-tab/AMSTAR2ResultsTable.jsx
packages/web/src/**/*.{jsx,tsx,js,ts}

📄 CodeRabbit inference engine (.cursor/rules/corates.mdc)

In SolidJS, use createMemo for derived values

Files:

  • packages/web/src/components/project-ui/overview-tab/AMSTAR2ResultsTable.jsx
packages/web/src/**/*.{js,ts,jsx,tsx}

📄 CodeRabbit inference engine (.cursor/rules/error-handling.mdc)

packages/web/src/**/*.{js,ts,jsx,tsx}: Always use handleFetchError from @/lib/error-utils.js for fetch calls in frontend code with options like { showToast: true } for error handling
Use createFormErrorSignals from @/lib/form-errors.js for form validation error handling with field-level and global error management

Files:

  • packages/web/src/components/project-ui/overview-tab/AMSTAR2ResultsTable.jsx
packages/{web,workers}/src/**/*.{js,ts,jsx,tsx}

📄 CodeRabbit inference engine (.cursor/rules/error-handling.mdc)

packages/{web,workers}/src/**/*.{js,ts,jsx,tsx}: Never throw string literals; always throw Error objects or return domain errors from API routes
Use error utility functions like isErrorCode from @corates/shared or @/lib/error-utils.js to check specific error types instead of manual string comparisons

Files:

  • packages/web/src/components/project-ui/overview-tab/AMSTAR2ResultsTable.jsx
{packages/web/**,packages/landing/**}/**/*.{jsx,tsx,js,ts}

📄 CodeRabbit inference engine (.cursor/rules/solidjs.mdc)

{packages/web/**,packages/landing/**}/**/*.{jsx,tsx,js,ts}: Never destructure props in SolidJS components - destructuring breaks reactivity. Access props directly (e.g., props.name) or wrap in a function (e.g., const name = () => props.name) to maintain reactivity.
Import stores directly in components rather than prop-drilling store data through component hierarchies.
Use separate read and write patterns for stores: import the store directly for reading data (e.g., projectStore.getProjectList()) and import action stores separately for writing (e.g., projectActionsStore.createProject()).
Use createSignal from solid-js for managing simple reactive values. Prefer derived state with signals or memo over effects when possible.
Use createStore from solid-js/store for managing complex objects and arrays that require granular reactivity, enabling fine-grained updates where only affected parts re-render.
Use createMemo from solid-js for derived values that depend on reactive state, ensuring computed values update only when their dependencies change.
Always clean up effects that create subscriptions or timers using the onCleanup function from solid-js. Use effects sparingly, only when derived values won't work well.
Keep components lean and focused on rendering. Move business logic to stores (for shared state and operations), primitives (for reusable hooks/logic), or utilities (for pure functions).
Use the Show component from solid-js for conditional rendering instead of JavaScript ternary operators or logical AND operators.
Use the For component from solid-js for rendering lists. It provides better performance and keying compared to JavaScript's map function in JSX.
When manipulating children in wrapper components, use the children helper from solid-js to ensure proper reactivity and handling of child elements.

Files:

  • packages/web/src/components/project-ui/overview-tab/AMSTAR2ResultsTable.jsx
packages/{web,ui}/**/*.{js,jsx,ts,tsx}

📄 CodeRabbit inference engine (.cursor/rules/ui-components.mdc)

packages/{web,ui}/**/*.{js,jsx,ts,tsx}: Import UI components from '@corates/ui' package instead of local component files. Do not import Ark UI components from local paths like '@/components/zag/' or 'packages/web/src/components/zag/'
Always use 'solid-icons' library for icons. Never use emoji characters or text as icon replacements. Import from specific icon sets like 'solid-icons/bi', 'solid-icons/fi', 'solid-icons/ai', etc.

Files:

  • packages/web/src/components/project-ui/overview-tab/AMSTAR2ResultsTable.jsx
packages/web/**/*.{js,jsx,ts,tsx}

📄 CodeRabbit inference engine (.cursor/rules/ui-components.mdc)

Use import aliases from 'packages/web/jsconfig.json' instead of relative paths. Aliases include: '@/' (src/), '@components/' (src/components/), '@auth-ui/' (src/components/auth-ui/), '@checklist-ui/' (src/components/checklist-ui/), '@project-ui/' (src/components/project-ui/), '@routes/' (src/routes/), '@primitives/' (src/primitives/), '@api/' (src/api/), '@config/' (src/config/), and '@lib/' (src/lib/)

Files:

  • packages/web/src/components/project-ui/overview-tab/AMSTAR2ResultsTable.jsx
packages/{web,ui}/**/*.{jsx,tsx}

📄 CodeRabbit inference engine (.cursor/rules/ui-components.mdc)

Use Tailwind CSS classes for styling components

Files:

  • packages/web/src/components/project-ui/overview-tab/AMSTAR2ResultsTable.jsx
🧠 Learnings (3)
📚 Learning: 2025-12-24T17:23:17.309Z
Learnt from: CR
Repo: InfinityBowman/corates PR: 0
File: .cursor/rules/ui-components.mdc:0-0
Timestamp: 2025-12-24T17:23:17.309Z
Learning: Applies to packages/web/**/*.{js,jsx,ts,tsx} : Use import aliases from 'packages/web/jsconfig.json' instead of relative paths. Aliases include: '@/*' (src/*), 'components/*' (src/components/*), 'auth-ui/*' (src/components/auth-ui/*), 'checklist-ui/*' (src/components/checklist-ui/*), 'project-ui/*' (src/components/project-ui/*), 'routes/*' (src/routes/*), 'primitives/*' (src/primitives/*), 'api/*' (src/api/*), 'config/*' (src/config/*), and 'lib/*' (src/lib/*)

Applied to files:

  • eslint.config.js
📚 Learning: 2025-12-19T14:49:49.730Z
Learnt from: CR
Repo: InfinityBowman/corates PR: 0
File: .github/copilot-instructions.md:0-0
Timestamp: 2025-12-19T14:49:49.730Z
Learning: Applies to **/*.{js,jsx,ts,tsx} : Prefer modern ES6+ syntax and features

Applied to files:

  • eslint.config.js
📚 Learning: 2025-12-24T17:22:48.927Z
Learnt from: CR
Repo: InfinityBowman/corates PR: 0
File: .cursor/rules/corates.mdc:0-0
Timestamp: 2025-12-24T17:22:48.927Z
Learning: Applies to **/*.{js,jsx,ts,tsx} : Prefer modern ES6+ syntax and features in JavaScript/TypeScript code

Applied to files:

  • eslint.config.js
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (1)
  • GitHub Check: Workers Builds: corates
🔇 Additional comments (2)
scripts/loc-report.mjs (1)

164-167: LGTM! Improved output ordering.

Moving the total LOC output after the per-package breakdown makes the report more intuitive to read—users see the detailed breakdown first, followed by the overall summary. The change is purely presentational with no functional impact.

eslint.config.js (1)

177-178: LGTM! VitePress ignore patterns correctly added.

The new ignore patterns appropriately exclude VitePress-generated cache and dist directories from ESLint, which aligns with the PR's migration to a VitePress-based docs site.

Copy link
Copy Markdown

@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: 0

🧹 Nitpick comments (7)
.cursor/rules/ui-components.mdc (1)

128-131: Consolidate or clarify the documentation reference structure.

The "Related Documentation" section (lines 128–131) reiterates the same guides mentioned in the introductory guidance (lines 9–10). Consider whether both locations are necessary or if one can be removed to reduce redundancy in the rules file.

packages/docs/guides/state-management.md (1)

59-69: Consider adding language specifier to decision tree block.

The decision tree is clear and helpful. Adding a language specifier (e.g., text or markdown) would silence the markdown linter.

Proposed fix
 ### Decision Tree
 
-```
+```text
 Is this state shared across multiple components/features?
 ├─ YES → Use a store
packages/docs/guides/yjs-sync.md (2)

20-32: Consider adding language specifier for document structure.

The document structure visualization is clear. Adding text as the language specifier would silence the markdown linter.

Proposed fix
 ### Yjs Document Structure
 
 The Yjs document is organized hierarchically:
 
-```
+```text
 Project (Y.Doc)
 ├── meta (Y.Map) - Project metadata (name, description, etc.)

258-268: Consider adding language specifier for WebSocket example.

Adding js as the language specifier would provide syntax highlighting and silence the linter.

Proposed fix
 ### Handling Updates
 
-```js
+```javascript
 // Client receives update
 ws.onmessage = event => {
packages/docs/guides/development-workflow.md (2)

137-142: Consider adding language specifier for commit message examples.

Adding text as the language specifier would silence the markdown linter.

Proposed fix
 Follow conventional commits:
 
-```
+```text
 feat: add project creation form
 fix: handle offline state in project store

260-260: Consider capitalizing GitHub.

The official platform name is "GitHub" with a capital "H".

Proposed fix
-- [Contributing Guide](/.github/Contributing.md) - Detailed contribution guidelines
+- [Contributing Guide](/.github/CONTRIBUTING.md) - Detailed contribution guidelines
packages/docs/guides/configuration.md (1)

13-22: Add language identifier to fenced code block.

The directory structure code block is missing a language identifier. While this is a minor formatting issue, adding a language (e.g., text or bash) will improve rendering and satisfy linting rules.

🔎 Proposed fix
-```
+```text
 packages/
 ├── web/          # Frontend application (SolidJS)
 ├── workers/      # Backend API (Cloudflare Workers)

Based on static analysis hints.

📜 Review details

Configuration used: defaults

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between fa5199d and 2ecca69.

📒 Files selected for processing (29)
  • .clauderc
  • .cursor/rules/api-routes.mdc
  • .cursor/rules/checklist-operations.mdc
  • .cursor/rules/corates.mdc
  • .cursor/rules/durable-objects.mdc
  • .cursor/rules/error-handling.mdc
  • .cursor/rules/form-state.mdc
  • .cursor/rules/pdf-handling.mdc
  • .cursor/rules/reconciliation.mdc
  • .cursor/rules/solidjs.mdc
  • .cursor/rules/ui-components.mdc
  • .cursor/rules/workers.mdc
  • .cursor/rules/yjs-sync.mdc
  • .github/copilot-instructions.md
  • packages/docs/.vitepress/config.js
  • packages/docs/guides/api-development.md
  • packages/docs/guides/authentication.md
  • packages/docs/guides/components.md
  • packages/docs/guides/configuration.md
  • packages/docs/guides/database.md
  • packages/docs/guides/development-workflow.md
  • packages/docs/guides/index.md
  • packages/docs/guides/primitives.md
  • packages/docs/guides/state-management.md
  • packages/docs/guides/testing.md
  • packages/docs/guides/yjs-sync.md
  • packages/web/TESTING.md
  • packages/workers/DRIZZLE_README.md
  • packages/workers/TESTING.md
💤 Files with no reviewable changes (3)
  • packages/web/TESTING.md
  • packages/workers/TESTING.md
  • packages/workers/DRIZZLE_README.md
✅ Files skipped from review due to trivial changes (9)
  • .cursor/rules/durable-objects.mdc
  • .cursor/rules/api-routes.mdc
  • .cursor/rules/pdf-handling.mdc
  • packages/docs/guides/database.md
  • packages/docs/guides/api-development.md
  • packages/docs/guides/primitives.md
  • .cursor/rules/reconciliation.mdc
  • .cursor/rules/solidjs.mdc
  • .cursor/rules/error-handling.mdc
🚧 Files skipped from review as they are similar to previous changes (1)
  • packages/docs/guides/index.md
🧰 Additional context used
📓 Path-based instructions (1)
**/*

📄 CodeRabbit inference engine (.github/copilot-instructions.md)

Do not use emojis in code, comments, documentation, or commit messages

NEVER use emojis anywhere in code, comments, documentation, plan files, or commit messages. This includes unicode symbols. For UI icons, use solid-icons library or SVGs only.

Files:

  • packages/docs/guides/state-management.md
  • packages/docs/guides/yjs-sync.md
  • packages/docs/guides/development-workflow.md
  • packages/docs/guides/components.md
  • packages/docs/guides/configuration.md
  • packages/docs/guides/authentication.md
  • packages/docs/guides/testing.md
🧠 Learnings (50)
📚 Learning: 2025-12-24T17:23:10.082Z
Learnt from: CR
Repo: InfinityBowman/corates PR: 0
File: .cursor/rules/solidjs.mdc:0-0
Timestamp: 2025-12-24T17:23:10.082Z
Learning: Organize shared cross-feature state in external stores located in `packages/web/src/stores/`. Use Solid Context sparingly for feature-scoped state.

Applied to files:

  • packages/docs/guides/state-management.md
  • .cursor/rules/form-state.mdc
  • .cursor/rules/yjs-sync.mdc
📚 Learning: 2025-12-19T14:49:49.730Z
Learnt from: CR
Repo: InfinityBowman/corates PR: 0
File: .github/copilot-instructions.md:0-0
Timestamp: 2025-12-19T14:49:49.730Z
Learning: Applies to packages/web/src/stores/**/*.{js,ts} : Use Solid's `createStore` for complex state or state objects for better performance and reactivity

Applied to files:

  • packages/docs/guides/state-management.md
📚 Learning: 2025-12-24T17:23:10.082Z
Learnt from: CR
Repo: InfinityBowman/corates PR: 0
File: .cursor/rules/solidjs.mdc:0-0
Timestamp: 2025-12-24T17:23:10.082Z
Learning: Applies to {packages/web/**,packages/landing/**}/**/*.{jsx,tsx,js,ts} : Use `createStore` from solid-js/store for managing complex objects and arrays that require granular reactivity, enabling fine-grained updates where only affected parts re-render.

Applied to files:

  • packages/docs/guides/state-management.md
  • .cursor/rules/form-state.mdc
  • packages/docs/guides/components.md
  • .cursor/rules/yjs-sync.mdc
📚 Learning: 2025-12-24T17:23:10.082Z
Learnt from: CR
Repo: InfinityBowman/corates PR: 0
File: .cursor/rules/solidjs.mdc:0-0
Timestamp: 2025-12-24T17:23:10.082Z
Learning: Applies to {packages/web/**,packages/landing/**}/**/*.{jsx,tsx,js,ts} : Use separate read and write patterns for stores: import the store directly for reading data (e.g., `projectStore.getProjectList()`) and import action stores separately for writing (e.g., `projectActionsStore.createProject()`).

Applied to files:

  • packages/docs/guides/state-management.md
  • packages/docs/guides/yjs-sync.md
  • .cursor/rules/corates.mdc
  • .cursor/rules/form-state.mdc
  • packages/docs/guides/components.md
  • .cursor/rules/yjs-sync.mdc
📚 Learning: 2025-12-24T17:22:48.927Z
Learnt from: CR
Repo: InfinityBowman/corates PR: 0
File: .cursor/rules/corates.mdc:0-0
Timestamp: 2025-12-24T17:22:48.927Z
Learning: Applies to packages/web/src/stores/**/*.{js,ts} : In SolidJS, shared state should live in external stores under packages/web/src/stores/

Applied to files:

  • packages/docs/guides/state-management.md
📚 Learning: 2025-12-24T17:22:48.927Z
Learnt from: CR
Repo: InfinityBowman/corates PR: 0
File: .cursor/rules/corates.mdc:0-0
Timestamp: 2025-12-24T17:22:48.927Z
Learning: Applies to packages/web/src/stores/**/*.{js,ts} : In SolidJS, use createStore for complex state objects

Applied to files:

  • packages/docs/guides/state-management.md
📚 Learning: 2025-12-19T14:49:49.730Z
Learnt from: CR
Repo: InfinityBowman/corates PR: 0
File: .github/copilot-instructions.md:0-0
Timestamp: 2025-12-19T14:49:49.730Z
Learning: Applies to packages/web/src/**/*.{js,jsx,ts,tsx} : Do NOT prop-drill application state. Shared or cross-feature state must live in external stores under packages/web/src/stores/ or relative to the component file

Applied to files:

  • packages/docs/guides/state-management.md
  • .cursor/rules/form-state.mdc
📚 Learning: 2025-12-24T17:22:48.927Z
Learnt from: CR
Repo: InfinityBowman/corates PR: 0
File: .cursor/rules/corates.mdc:0-0
Timestamp: 2025-12-24T17:22:48.927Z
Learning: Applies to packages/web/src/**/*.{jsx,tsx} : In SolidJS, do NOT prop-drill application state. Import stores directly where needed instead.

Applied to files:

  • packages/docs/guides/state-management.md
📚 Learning: 2025-12-24T17:23:10.082Z
Learnt from: CR
Repo: InfinityBowman/corates PR: 0
File: .cursor/rules/solidjs.mdc:0-0
Timestamp: 2025-12-24T17:23:10.082Z
Learning: Applies to {packages/web/**,packages/landing/**}/**/*.{jsx,tsx,js,ts} : Keep components lean and focused on rendering. Move business logic to stores (for shared state and operations), primitives (for reusable hooks/logic), or utilities (for pure functions).

Applied to files:

  • packages/docs/guides/state-management.md
  • .cursor/rules/ui-components.mdc
  • .cursor/rules/corates.mdc
  • packages/docs/guides/components.md
📚 Learning: 2025-12-24T17:23:10.082Z
Learnt from: CR
Repo: InfinityBowman/corates PR: 0
File: .cursor/rules/solidjs.mdc:0-0
Timestamp: 2025-12-24T17:23:10.082Z
Learning: Applies to {packages/web/**,packages/landing/**}/**/*.{jsx,tsx,js,ts} : Import stores directly in components rather than prop-drilling store data through component hierarchies.

Applied to files:

  • packages/docs/guides/state-management.md
📚 Learning: 2025-12-24T17:23:17.309Z
Learnt from: CR
Repo: InfinityBowman/corates PR: 0
File: .cursor/rules/ui-components.mdc:0-0
Timestamp: 2025-12-24T17:23:17.309Z
Learning: Reference 'style-guide.md' for design system patterns when building UI components

Applied to files:

  • .cursor/rules/ui-components.mdc
  • .cursor/rules/corates.mdc
  • packages/docs/guides/components.md
📚 Learning: 2025-12-24T17:22:48.927Z
Learnt from: CR
Repo: InfinityBowman/corates PR: 0
File: .cursor/rules/corates.mdc:0-0
Timestamp: 2025-12-24T17:22:48.927Z
Learning: Applies to packages/{web,landing}/src/**/*.{jsx,tsx} : Use Ark UI components from corates/ui package, not local component implementations

Applied to files:

  • .cursor/rules/ui-components.mdc
  • .clauderc
  • .cursor/rules/corates.mdc
  • packages/docs/guides/components.md
  • .github/copilot-instructions.md
📚 Learning: 2025-12-24T17:23:17.309Z
Learnt from: CR
Repo: InfinityBowman/corates PR: 0
File: .cursor/rules/ui-components.mdc:0-0
Timestamp: 2025-12-24T17:23:17.309Z
Learning: Applies to packages/{web,ui}/**/*.{js,jsx,ts,tsx} : Import UI components from 'corates/ui' package instead of local component files. Do not import Ark UI components from local paths like '@/components/zag/' or 'packages/web/src/components/zag/'

Applied to files:

  • .cursor/rules/ui-components.mdc
  • .clauderc
  • .cursor/rules/corates.mdc
  • packages/docs/guides/components.md
  • .github/copilot-instructions.md
📚 Learning: 2025-12-19T14:49:49.730Z
Learnt from: CR
Repo: InfinityBowman/corates PR: 0
File: .github/copilot-instructions.md:0-0
Timestamp: 2025-12-19T14:49:49.730Z
Learning: Applies to packages/web/src/components/**/*.{js,jsx,ts,tsx} : Use Zag.js for UI components and design system

Applied to files:

  • .cursor/rules/ui-components.mdc
  • .clauderc
  • .github/copilot-instructions.md
📚 Learning: 2025-12-19T14:49:49.730Z
Learnt from: CR
Repo: InfinityBowman/corates PR: 0
File: .github/copilot-instructions.md:0-0
Timestamp: 2025-12-19T14:49:49.730Z
Learning: Applies to packages/web/src/components/**/*.{js,jsx,ts,tsx} : Zag component exist in `packages/web/src/components/zag/*` and should be reused. Check the README.md in that folder for a list of existing components before adding new components and when debugging

Applied to files:

  • .cursor/rules/ui-components.mdc
  • .clauderc
  • .cursor/rules/corates.mdc
  • packages/docs/guides/components.md
  • .github/copilot-instructions.md
📚 Learning: 2025-12-19T14:49:49.730Z
Learnt from: CR
Repo: InfinityBowman/corates PR: 0
File: .github/copilot-instructions.md:0-0
Timestamp: 2025-12-19T14:49:49.730Z
Learning: Applies to packages/web/src/components/**/*.{js,jsx,ts,tsx} : Use responsive design principles for UI components

Applied to files:

  • .cursor/rules/ui-components.mdc
📚 Learning: 2025-12-24T17:23:17.309Z
Learnt from: CR
Repo: InfinityBowman/corates PR: 0
File: .cursor/rules/ui-components.mdc:0-0
Timestamp: 2025-12-24T17:23:17.309Z
Learning: Applies to packages/{web,ui}/**/*.{jsx,tsx} : Use Tailwind CSS classes for styling components

Applied to files:

  • .cursor/rules/ui-components.mdc
📚 Learning: 2025-12-24T17:23:10.082Z
Learnt from: CR
Repo: InfinityBowman/corates PR: 0
File: .cursor/rules/solidjs.mdc:0-0
Timestamp: 2025-12-24T17:23:10.082Z
Learning: Applies to {packages/web/**,packages/landing/**}/src/primitives/**/*.{jsx,tsx,js,ts} : Create reusable component logic in primitives (custom hooks) rather than embedding business logic directly in components. Primitives should encapsulate store access and complex logic patterns.

Applied to files:

  • .cursor/rules/ui-components.mdc
  • .cursor/rules/corates.mdc
  • packages/docs/guides/components.md
📚 Learning: 2025-12-24T17:23:17.309Z
Learnt from: CR
Repo: InfinityBowman/corates PR: 0
File: .cursor/rules/ui-components.mdc:0-0
Timestamp: 2025-12-24T17:23:17.309Z
Learning: Applies to packages/{web,ui}/**/*.{js,jsx,ts,tsx} : Always use 'solid-icons' library for icons. Never use emoji characters or text as icon replacements. Import from specific icon sets like 'solid-icons/bi', 'solid-icons/fi', 'solid-icons/ai', etc.

Applied to files:

  • .cursor/rules/ui-components.mdc
📚 Learning: 2025-12-24T17:22:48.927Z
Learnt from: CR
Repo: InfinityBowman/corates PR: 0
File: .cursor/rules/corates.mdc:0-0
Timestamp: 2025-12-24T17:22:48.927Z
Learning: Applies to packages/{web,landing}/src/**/*.{jsx,tsx} : Use solid-icons library (e.g., solid-icons/bi, solid-icons/fi) for icon imports

Applied to files:

  • .cursor/rules/ui-components.mdc
📚 Learning: 2025-12-19T14:49:49.730Z
Learnt from: CR
Repo: InfinityBowman/corates PR: 0
File: .github/copilot-instructions.md:0-0
Timestamp: 2025-12-19T14:49:49.730Z
Learning: Use the Corates MCP tools to explore local documentation sources for Better-Auth, Drizzle, Icons, and Zag documentation

Applied to files:

  • .clauderc
  • .cursor/rules/corates.mdc
  • packages/docs/guides/authentication.md
  • .github/copilot-instructions.md
📚 Learning: 2025-12-19T14:49:49.730Z
Learnt from: CR
Repo: InfinityBowman/corates PR: 0
File: .github/copilot-instructions.md:0-0
Timestamp: 2025-12-19T14:49:49.730Z
Learning: Applies to packages/workers/src/**/*.{js,ts} : Use Zod for schema and input validation on the backend

Applied to files:

  • .clauderc
  • .github/copilot-instructions.md
📚 Learning: 2025-12-19T14:49:49.730Z
Learnt from: CR
Repo: InfinityBowman/corates PR: 0
File: .github/copilot-instructions.md:0-0
Timestamp: 2025-12-19T14:49:49.730Z
Learning: Applies to packages/workers/src/**/*.{js,ts} : Use Drizzle ORM for database interactions and migrations

Applied to files:

  • .clauderc
  • .cursor/rules/workers.mdc
  • packages/docs/guides/authentication.md
  • .github/copilot-instructions.md
📚 Learning: 2025-12-24T17:22:48.927Z
Learnt from: CR
Repo: InfinityBowman/corates PR: 0
File: .cursor/rules/corates.mdc:0-0
Timestamp: 2025-12-24T17:22:48.927Z
Learning: Applies to packages/workers/**/*.{ts,sql} : Use Drizzle ORM for ALL database interactions and migrations

Applied to files:

  • .clauderc
  • .cursor/rules/workers.mdc
  • .github/copilot-instructions.md
📚 Learning: 2025-12-24T17:22:48.927Z
Learnt from: CR
Repo: InfinityBowman/corates PR: 0
File: .cursor/rules/corates.mdc:0-0
Timestamp: 2025-12-24T17:22:48.927Z
Learning: Applies to packages/workers/src/**/*.{js,ts} : Use Better-Auth for authentication and user management

Applied to files:

  • .clauderc
  • packages/docs/guides/authentication.md
  • .github/copilot-instructions.md
📚 Learning: 2025-12-24T17:22:48.927Z
Learnt from: CR
Repo: InfinityBowman/corates PR: 0
File: .cursor/rules/corates.mdc:0-0
Timestamp: 2025-12-24T17:22:48.927Z
Learning: Applies to packages/{web,ui}/src/**/*.{jsx,tsx} : Group related components in subdirectories with barrel exports

Applied to files:

  • .cursor/rules/corates.mdc
📚 Learning: 2025-12-19T14:49:49.730Z
Learnt from: CR
Repo: InfinityBowman/corates PR: 0
File: .github/copilot-instructions.md:0-0
Timestamp: 2025-12-19T14:49:49.730Z
Learning: Applies to packages/web/src/components/**/*.{js,jsx,ts,tsx} : Group related components in subdirectories with an index.js barrel export

Applied to files:

  • .cursor/rules/corates.mdc
📚 Learning: 2025-12-24T17:22:56.372Z
Learnt from: CR
Repo: InfinityBowman/corates PR: 0
File: .cursor/rules/error-handling.mdc:0-0
Timestamp: 2025-12-24T17:22:56.372Z
Learning: Applies to packages/{web,workers}/src/**/*.{js,ts,jsx,tsx} : Use error utility functions like `isErrorCode` from `corates/shared` or `@/lib/error-utils.js` to check specific error types instead of manual string comparisons

Applied to files:

  • .cursor/rules/corates.mdc
📚 Learning: 2025-12-24T17:22:56.372Z
Learnt from: CR
Repo: InfinityBowman/corates PR: 0
File: .cursor/rules/error-handling.mdc:0-0
Timestamp: 2025-12-24T17:22:56.372Z
Learning: Applies to packages/workers/src/**/*.{js,ts} : Always use `createDomainError` from `corates/shared` for error handling in backend routes with predefined error constants (PROJECT_ERRORS, AUTH_ERRORS, VALIDATION_ERRORS, SYSTEM_ERRORS, USER_ERRORS)

Applied to files:

  • .cursor/rules/corates.mdc
📚 Learning: 2025-12-24T17:22:31.782Z
Learnt from: CR
Repo: InfinityBowman/corates PR: 0
File: .cursor/rules/api-routes.mdc:0-0
Timestamp: 2025-12-24T17:22:31.782Z
Learning: Applies to packages/workers/src/routes/**/*.js : Always use `createDomainError` from `corates/shared` for error responses, with appropriate error constants (PROJECT_ERRORS, AUTH_ERRORS, VALIDATION_ERRORS, SYSTEM_ERRORS, USER_ERRORS)

Applied to files:

  • .cursor/rules/corates.mdc
📚 Learning: 2025-12-19T14:49:49.730Z
Learnt from: CR
Repo: InfinityBowman/corates PR: 0
File: .github/copilot-instructions.md:0-0
Timestamp: 2025-12-19T14:49:49.730Z
Learning: Applies to packages/web/src/**/*.{js,jsx,ts,tsx} : Keep files small, focused, and modular. If a file exceeds a high number of lines, consider refactoring by extracting sub-modules into a folder with index.jsx and helper components, moving complex logic into separate utility files or primitives, or splitting large forms into section components

Applied to files:

  • .cursor/rules/corates.mdc
📚 Learning: 2025-12-19T14:49:49.730Z
Learnt from: CR
Repo: InfinityBowman/corates PR: 0
File: .github/copilot-instructions.md:0-0
Timestamp: 2025-12-19T14:49:49.730Z
Learning: Follow standard JavaScript/SolidJS/Cloudflare best practices

Applied to files:

  • .cursor/rules/corates.mdc
📚 Learning: 2025-12-19T14:49:49.730Z
Learnt from: CR
Repo: InfinityBowman/corates PR: 0
File: .github/copilot-instructions.md:0-0
Timestamp: 2025-12-19T14:49:49.730Z
Learning: Applies to packages/web/src/components/**/*.{js,jsx,ts,tsx} : Components should receive at most 1–5 props, and only for local configuration, not shared state. If a component would need more than 5 props, move the shared data into an external store, a primitive, or Solid context

Applied to files:

  • packages/docs/guides/components.md
📚 Learning: 2025-12-24T17:22:48.927Z
Learnt from: CR
Repo: InfinityBowman/corates PR: 0
File: .cursor/rules/corates.mdc:0-0
Timestamp: 2025-12-24T17:22:48.927Z
Learning: Applies to packages/web/src/**/*.{jsx,tsx} : In SolidJS components, components should receive at most 1-5 props (local config only, not shared state)

Applied to files:

  • packages/docs/guides/components.md
📚 Learning: 2025-12-19T14:49:49.730Z
Learnt from: CR
Repo: InfinityBowman/corates PR: 0
File: .github/copilot-instructions.md:0-0
Timestamp: 2025-12-19T14:49:49.730Z
Learning: Applies to packages/web/src/components/**/*.{js,jsx,ts,tsx} : Do not destructure props in SolidJS components as it breaks reactivity. Instead, access props directly from the props object or wrap them in a function to ensure they are always up-to-date

Applied to files:

  • packages/docs/guides/components.md
📚 Learning: 2025-12-19T14:49:49.730Z
Learnt from: CR
Repo: InfinityBowman/corates PR: 0
File: .github/copilot-instructions.md:0-0
Timestamp: 2025-12-19T14:49:49.730Z
Learning: Applies to packages/web/src/components/**/*.{js,jsx,ts,tsx} : Never have a component act as a God component coordinating multiple large concerns

Applied to files:

  • packages/docs/guides/components.md
📚 Learning: 2025-12-19T14:49:49.730Z
Learnt from: CR
Repo: InfinityBowman/corates PR: 0
File: .github/copilot-instructions.md:0-0
Timestamp: 2025-12-19T14:49:49.730Z
Learning: Applies to packages/web/src/components/**/*.{js,jsx,ts,tsx} : Components should be lean and focused. They should not implement business logic; move that into stores, utilities, or primitives

Applied to files:

  • packages/docs/guides/components.md
📚 Learning: 2025-12-24T17:23:10.082Z
Learnt from: CR
Repo: InfinityBowman/corates PR: 0
File: .cursor/rules/solidjs.mdc:0-0
Timestamp: 2025-12-24T17:23:10.082Z
Learning: Applies to {packages/web/**,packages/landing/**}/**/*.{jsx,tsx,js,ts} : Use `createSignal` from solid-js for managing simple reactive values. Prefer derived state with signals or memo over effects when possible.

Applied to files:

  • packages/docs/guides/components.md
📚 Learning: 2025-12-24T17:23:10.082Z
Learnt from: CR
Repo: InfinityBowman/corates PR: 0
File: .cursor/rules/solidjs.mdc:0-0
Timestamp: 2025-12-24T17:23:10.082Z
Learning: Applies to {packages/web/**,packages/landing/**}/**/*.{jsx,tsx,js,ts} : Never destructure props in SolidJS components - destructuring breaks reactivity. Access props directly (e.g., `props.name`) or wrap in a function (e.g., `const name = () => props.name`) to maintain reactivity.

Applied to files:

  • packages/docs/guides/components.md
📚 Learning: 2025-12-24T17:23:22.147Z
Learnt from: CR
Repo: InfinityBowman/corates PR: 0
File: .cursor/rules/workers.mdc:0-0
Timestamp: 2025-12-24T17:23:22.147Z
Learning: Applies to packages/workers/src/**/*.{js,ts,jsx,tsx} : ALWAYS use `db.batch()` for multiple related database operations to ensure atomicity in Drizzle transactions. Single independent operations do not need batch.

Applied to files:

  • .cursor/rules/workers.mdc
📚 Learning: 2025-12-24T17:22:31.782Z
Learnt from: CR
Repo: InfinityBowman/corates PR: 0
File: .cursor/rules/api-routes.mdc:0-0
Timestamp: 2025-12-24T17:22:31.782Z
Learning: Applies to packages/workers/src/routes/**/*.js : Use `db.batch()` for related database operations that must be atomic (succeed or fail together)

Applied to files:

  • .cursor/rules/workers.mdc
📚 Learning: 2025-12-24T17:22:31.782Z
Learnt from: CR
Repo: InfinityBowman/corates PR: 0
File: .cursor/rules/api-routes.mdc:0-0
Timestamp: 2025-12-24T17:22:31.782Z
Learning: Applies to packages/workers/src/routes/**/*.js : Always use Drizzle ORM for database queries; never use raw SQL

Applied to files:

  • .cursor/rules/workers.mdc
📚 Learning: 2025-12-24T17:22:56.372Z
Learnt from: CR
Repo: InfinityBowman/corates PR: 0
File: .cursor/rules/error-handling.mdc:0-0
Timestamp: 2025-12-24T17:22:56.372Z
Learning: Applies to packages/workers/src/**/*.{js,ts} : Wrap database operations in try-catch blocks and return domain errors using `createDomainError(SYSTEM_ERRORS.DB_ERROR, {...})` instead of throwing raw errors

Applied to files:

  • .cursor/rules/workers.mdc
📚 Learning: 2025-12-19T14:49:49.730Z
Learnt from: CR
Repo: InfinityBowman/corates PR: 0
File: .github/copilot-instructions.md:0-0
Timestamp: 2025-12-19T14:49:49.730Z
Learning: Applies to packages/workers/migrations/*.sql : All migrations should go in a single file: `packages/workers/migrations/0001_init.sql`. Do NOT create separate migration files since this project is not yet in production

Applied to files:

  • .cursor/rules/workers.mdc
📚 Learning: 2025-12-24T17:23:22.147Z
Learnt from: CR
Repo: InfinityBowman/corates PR: 0
File: .cursor/rules/workers.mdc:0-0
Timestamp: 2025-12-24T17:23:22.147Z
Learning: Applies to packages/workers/src/routes/**/*.{js,ts,jsx,tsx} : ALWAYS validate request bodies using `validateRequest` middleware from validation config. Do not perform manual validation.

Applied to files:

  • .cursor/rules/workers.mdc
📚 Learning: 2025-12-24T17:22:31.782Z
Learnt from: CR
Repo: InfinityBowman/corates PR: 0
File: .cursor/rules/api-routes.mdc:0-0
Timestamp: 2025-12-24T17:22:31.782Z
Learning: Applies to packages/workers/src/routes/**/*.js : Always use `validateRequest` middleware for request body validation in API routes, passing appropriate schema from validation config

Applied to files:

  • .cursor/rules/workers.mdc
📚 Learning: 2025-12-24T17:22:48.927Z
Learnt from: CR
Repo: InfinityBowman/corates PR: 0
File: .cursor/rules/corates.mdc:0-0
Timestamp: 2025-12-24T17:22:48.927Z
Learning: This project (CoRATES) is a SolidJS-based web application deployed on Cloudflare Workers, not Cloudflare Pages

Applied to files:

  • packages/docs/guides/configuration.md
📚 Learning: 2025-12-24T17:23:17.309Z
Learnt from: CR
Repo: InfinityBowman/corates PR: 0
File: .cursor/rules/ui-components.mdc:0-0
Timestamp: 2025-12-24T17:23:17.309Z
Learning: Applies to packages/web/**/*.{js,jsx,ts,tsx} : Use import aliases from 'packages/web/jsconfig.json' instead of relative paths. Aliases include: '@/*' (src/*), 'components/*' (src/components/*), 'auth-ui/*' (src/components/auth-ui/*), 'checklist-ui/*' (src/components/checklist-ui/*), 'project-ui/*' (src/components/project-ui/*), 'routes/*' (src/routes/*), 'primitives/*' (src/primitives/*), 'api/*' (src/api/*), 'config/*' (src/config/*), and 'lib/*' (src/lib/*)

Applied to files:

  • packages/docs/guides/configuration.md
📚 Learning: 2025-12-24T17:22:31.782Z
Learnt from: CR
Repo: InfinityBowman/corates PR: 0
File: .cursor/rules/api-routes.mdc:0-0
Timestamp: 2025-12-24T17:22:31.782Z
Learning: Applies to packages/workers/src/routes/**/*.js : Use `getAuth(c)` to retrieve authenticated user information in route handlers

Applied to files:

  • packages/docs/guides/authentication.md
📚 Learning: 2025-12-19T14:49:49.730Z
Learnt from: CR
Repo: InfinityBowman/corates PR: 0
File: .github/copilot-instructions.md:0-0
Timestamp: 2025-12-19T14:49:49.730Z
Learning: Do NOT add tests unless specifically asked. See TESTING.md for testing guidelines and best practices

Applied to files:

  • packages/docs/guides/testing.md
🪛 LanguageTool
packages/docs/guides/development-workflow.md

[uncategorized] ~260-~260: The official name of this software platform is spelled with a capital “H”.
Context: ...ies ## Resources - Contributing Guide - Detailed contributio...

(GITHUB)

🪛 markdownlint-cli2 (0.18.1)
packages/docs/guides/state-management.md

13-13: Fenced code blocks should have a language specified

(MD040, fenced-code-language)

packages/docs/guides/yjs-sync.md

54-54: Fenced code blocks should have a language specified

(MD040, fenced-code-language)


331-331: Fenced code blocks should have a language specified

(MD040, fenced-code-language)

packages/docs/guides/development-workflow.md

54-54: Fenced code blocks should have a language specified

(MD040, fenced-code-language)

packages/docs/guides/configuration.md

13-13: Fenced code blocks should have a language specified

(MD040, fenced-code-language)

⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (1)
  • GitHub Check: Workers Builds: corates
🔇 Additional comments (17)
.cursor/rules/workers.mdc (2)

57-60: Ensure guide links are discoverable from cursor rules context.

The new "Related Documentation" section adds helpful references to the comprehensive guides. Confirm these links will be accessible when the docs site is deployed, particularly if there's a specific base path or domain.

As a follow-up to the verification script above, also check:

  • Whether the docs site has a baseUrl or base configuration in VitePress
  • If the guide pages are explicitly included in the VitePress sidebar/navigation config
  • Whether relative paths or absolute paths are expected from .cursor files

Once verified, consider updating the link format if needed to match the actual deployed structure.


9-10: The linked guide files are correctly configured. Both /guides/database and /guides/api-development exist in packages/docs/guides/ and are properly registered in the VitePress sidebar navigation. The links will resolve correctly.

.cursor/rules/corates.mdc (3)

21-21: Documentation of new /docs package is clear.

The addition of the /docs package to the package structure list at line 21 is appropriate and clearly documents the new VitePress docs site. No issues here.


140-148: All referenced Complex Area Rules files are present in the .cursor/rules/ directory:

  • yjs-sync.mdc
  • reconciliation.mdc
  • pdf-handling.mdc
  • form-state.mdc
  • durable-objects.mdc
  • checklist-operations.mdc

No action needed.


116-129: All referenced documentation guides and rule files exist and are correctly routed. The documentation links in lines 116–129 point to valid guides in packages/docs/guides/, and the six rule files referenced in the Complex Area Rules section (lines 140–148) all exist in .cursor/rules/. The VitePress routing format using absolute paths like /guides/testing is correct.

.cursor/rules/checklist-operations.mdc (1)

1-275: LGTM! Comprehensive checklist operations reference.

This documentation provides clear patterns for working with AMSTAR2, ROBINS-I, and generic checklists, including data models, operations, and best practices.

packages/docs/guides/testing.md (1)

1-443: LGTM! Thorough testing guide.

The testing guide comprehensively covers both frontend and backend testing patterns, including setup, utilities, common patterns, and best practices. The behavior-driven testing philosophy aligns well with the retrieved learnings.

packages/docs/guides/state-management.md (1)

1-539: LGTM! Excellent state management guide.

This guide comprehensively covers the store architecture pattern used in CoRATES, aligning perfectly with the retrieved learnings about using createStore, separating read/write operations, and avoiding prop-drilling.

packages/docs/guides/yjs-sync.md (1)

1-388: LGTM! Comprehensive Yjs sync guide.

This guide provides excellent coverage of the Yjs-based collaborative editing architecture, including document structure, Durable Object implementation, client-side sync, and offline support.

packages/docs/.vitepress/config.js (1)

1-161: LGTM! Well-structured VitePress configuration.

The configuration properly integrates Mermaid support, sets up comprehensive navigation and sidebar structure, and includes appropriate Vite optimizations. The three-tier navigation (Home, Architecture, Guides) is clean and logical.

packages/docs/guides/development-workflow.md (1)

1-270: LGTM! Comprehensive development workflow guide.

This guide provides clear instructions for getting started, development commands, code organization, Git workflow, and common tasks. The structure and examples are well-organized and practical.

.cursor/rules/form-state.mdc (1)

1-214: LGTM! Clear form state persistence patterns.

This documentation provides practical patterns for handling form state across OAuth redirects, with clear examples of serialization constraints and restore flows.

packages/docs/guides/authentication.md (1)

1-571: LGTM! Excellent authentication guide.

This guide provides comprehensive coverage of Better Auth integration, including setup, API endpoints, frontend usage, protected routes, session management, admin features, and best practices. The documentation aligns perfectly with the retrieved learnings about using Better Auth and getAuth(c) in route handlers.

.cursor/rules/yjs-sync.mdc (1)

1-228: LGTM! Well-structured Yjs synchronization reference.

The documentation provides clear patterns and examples for AI agents working with Yjs synchronization. The DO/DON'T sections effectively communicate best practices, and code examples demonstrate proper usage patterns.

.clauderc (1)

36-57: LGTM! Clear migration guidance from Zag.js to Ark UI.

The updated documentation clearly communicates the shift to Ark UI components and provides correct import patterns. The code examples effectively demonstrate the right way to import UI components from @corates/ui.

.github/copilot-instructions.md (1)

36-67: LGTM! Consistent Ark UI migration guidance.

The updates align with the changes in .clauderc, maintaining consistency across AI agent instruction files. The documentation correctly directs developers to import UI components from @corates/ui and provides clear examples.

packages/docs/guides/components.md (1)

1-638: LGTM! Comprehensive and accurate component development guide.

This guide excellently covers all aspects of component development in CoRATES. Key strengths include:

  • Clear emphasis on the critical SolidJS pattern of never destructuring props (lines 39-74)
  • Proper state management guidance distinguishing local UI state, store usage, and primitives
  • Correct import patterns from @corates/ui for Ark UI components
  • Strict emoji prohibition with proper icon library usage
  • Practical, working code examples throughout
  • Appropriate best practices aligned with SolidJS reactivity model

Copy link
Copy Markdown

@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: 0

Caution

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

⚠️ Outside diff range comments (1)
packages/web/src/components/auth-ui/StrengthIndicator.jsx (1)

47-47: Fix typo in Tailwind spacing class.

The class pace-y-0.5 should be space-y-0.5. This typo prevents proper vertical spacing between password requirement list items.

Proposed fix
-        <ul class='pace-y-0.5 sm:space-y-1'>
+        <ul class='space-y-0.5 sm:space-y-1'>
🧹 Nitpick comments (6)
packages/web/src/components/billing/SubscriptionCard.jsx (1)

45-45: Dynamic Tailwind classes may not be generated by JIT compiler.

String interpolation prevents Tailwind's JIT compiler from detecting class names at build time. These dynamic classes (bg-${color}-100, text-${color}-800) might not be included in the final CSS bundle.

Suggested fix using explicit class mapping
+ const statusColorClasses = {
+   green: 'bg-green-100 text-green-800',
+   blue: 'bg-blue-100 text-blue-800',
+   red: 'bg-red-100 text-red-800',
+   gray: 'bg-gray-100 text-gray-800',
+   yellow: 'bg-yellow-100 text-yellow-800',
+ };

  return (
    <div class='overflow-hidden rounded-xl border border-gray-200 bg-white'>
      {/* Header */}
      <div class='border-b border-gray-200 bg-gray-50 px-6 py-4'>
        <div class='flex items-center justify-between'>
          <div class='flex items-center space-x-2'>
            <FiCreditCard class='h-5 w-5 text-gray-600' />
            <h2 class='text-lg font-medium text-gray-900'>Current Plan</h2>
          </div>
          <span
-           class={`inline-flex items-center rounded-full px-2.5 py-0.5 text-xs font-medium bg-${currentStatus().color}-100 text-${currentStatus().color}-800`}
+           class={`inline-flex items-center rounded-full px-2.5 py-0.5 text-xs font-medium ${statusColorClasses[currentStatus().color]}`}
          >
            {currentStatus().label}
          </span>
packages/web/src/components/project-ui/add-studies/PdfUploadSection.jsx (1)

130-136: Consider adding an aria-label for screen reader users.

The icon-only remove button lacks a text label or aria-label, which may make it unclear to screen reader users what the button does. While the context makes it somewhat clear, adding an explicit label improves accessibility.

Proposed enhancement
 <button
   type='button'
   onClick={() => studies.removePdf(pdf.id)}
   class='rounded p-1.5 text-gray-400 transition-colors hover:bg-red-50 hover:text-red-600 focus:ring-2 focus:ring-blue-500 focus:outline-none'
+  aria-label='Remove PDF'
 >
   <BiRegularTrash class='h-4 w-4' />
 </button>
packages/web/src/components/project-ui/ChecklistRow.jsx (1)

40-40: Excellent keyboard accessibility fix!

The focus:opacity-100 addition is crucial—it ensures the delete button is visible to keyboard users even when not hovering. Without this, the button would remain invisible when tabbed to, creating an accessibility barrier.

The focus ring implementation is solid. One optional refinement: consider using focus:ring-red-500 instead of focus:ring-blue-500 to semantically match the destructive nature of the delete action (since the button uses red on hover). However, this is purely stylistic and the current implementation works well.

Optional: Match focus ring to destructive button semantics
-          class='rounded-lg p-2 text-gray-400 opacity-0 transition-colors group-hover:opacity-100 hover:bg-red-50 hover:text-red-600 focus:opacity-100 focus:ring-2 focus:ring-blue-500 focus:outline-none'
+          class='rounded-lg p-2 text-gray-400 opacity-0 transition-colors group-hover:opacity-100 hover:bg-red-50 hover:text-red-600 focus:opacity-100 focus:ring-2 focus:ring-red-500 focus:outline-none'
packages/web/src/components/admin-ui/UserTable.jsx (1)

557-563: Consider adding focus styling for consistency.

The "Update Plan" button in the Change Access dialog appears to be missing the focus ring styling that was added to other action buttons in this file (Ban User at line 493, Confirm at line 608). For consistency and complete keyboard accessibility coverage, consider adding the same focus styling pattern.

Proposed focus styling addition
           <button
             onClick={handleChangeAccess}
             disabled={loading()}
-            class='rounded-lg bg-blue-600 px-4 py-2 text-sm font-medium text-white hover:bg-blue-700 disabled:opacity-50'
+            class='rounded-lg bg-blue-600 px-4 py-2 text-sm font-medium text-white hover:bg-blue-700 focus:ring-2 focus:ring-blue-500 focus:outline-none disabled:opacity-50'
           >
             {loading() ? 'Updating...' : 'Update Plan'}
           </button>
packages/web/src/components/project-ui/reconcile-tab/ReconcileStudyRow.jsx (1)

146-146: Improve focus ring contrast for better visibility.

The focus ring color (focus:ring-blue-500) is very close to the button background (bg-blue-600), which may not provide sufficient contrast for keyboard users to clearly see the focus state.

Consider one of these alternatives for better accessibility:

  • White ring with offset (recommended): focus:ring-2 focus:ring-white focus:ring-offset-2 focus:outline-none
  • Lighter blue ring: focus:ring-2 focus:ring-blue-300 focus:outline-none
Proposed fix for better focus visibility
-                  'bg-blue-600 text-white hover:bg-blue-700 focus:ring-2 focus:ring-blue-500 focus:outline-none'
+                  'bg-blue-600 text-white hover:bg-blue-700 focus:ring-2 focus:ring-white focus:ring-offset-2 focus:outline-none'
packages/web/src/components/billing/PricingTable.jsx (1)

146-152: Consider extracting button class logic for readability.

The nested ternary for button classes spans multiple conditions (current tier, pro, enterprise, default). While functionally correct, extracting this to a helper function would improve readability and maintainability.

Optional refactor to improve readability

Add a helper function before the return statement:

+  const getButtonClasses = tier => {
+    const baseClasses = 'w-full rounded-lg px-4 py-2.5 text-sm font-medium transition-colors focus:outline-none';
+    
+    if (tier === currentTier()) {
+      return `${baseClasses} cursor-not-allowed bg-gray-100 text-gray-500`;
+    }
+    if (tier === 'pro') {
+      return `${baseClasses} bg-blue-600 text-white hover:bg-blue-700 focus:ring-2 focus:ring-blue-500`;
+    }
+    if (tier === 'enterprise') {
+      return `${baseClasses} bg-gray-900 text-white hover:bg-gray-800 focus:ring-2 focus:ring-gray-500`;
+    }
+    return `${baseClasses} bg-gray-100 text-gray-700 hover:bg-gray-200 focus:ring-2 focus:ring-gray-500`;
+  };
+
   return (

Then simplify the button:

 <button
   type='button'
-  class={`w-full rounded-lg px-4 py-2.5 text-sm font-medium transition-colors focus:outline-none ${
-    plan.tier === currentTier() ? 'cursor-not-allowed bg-gray-100 text-gray-500'
-    : plan.tier === 'pro' ?
-      'bg-blue-600 text-white hover:bg-blue-700 focus:ring-2 focus:ring-blue-500'
-    : plan.tier === 'enterprise' ?
-      'bg-gray-900 text-white hover:bg-gray-800 focus:ring-2 focus:ring-gray-500'
-    : 'bg-gray-100 text-gray-700 hover:bg-gray-200 focus:ring-2 focus:ring-gray-500'
-  }`}
+  class={getButtonClasses(plan.tier)}
   onClick={() => handleUpgrade(plan.tier)}
   disabled={isButtonDisabled(plan.tier)}
 >
📜 Review details

Configuration used: defaults

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 2ecca69 and 429b362.

📒 Files selected for processing (46)
  • packages/web/src/components/ErrorBoundary.jsx
  • packages/web/src/components/Navbar.jsx
  • packages/web/src/components/admin-ui/StorageManagement.jsx
  • packages/web/src/components/admin-ui/UserTable.jsx
  • packages/web/src/components/auth-ui/CompleteProfile.jsx
  • packages/web/src/components/auth-ui/MagicLinkForm.jsx
  • packages/web/src/components/auth-ui/ResetPassword.jsx
  • packages/web/src/components/auth-ui/RoleSelector.jsx
  • packages/web/src/components/auth-ui/SignIn.jsx
  • packages/web/src/components/auth-ui/StrengthIndicator.jsx
  • packages/web/src/components/auth-ui/TwoFactorVerify.jsx
  • packages/web/src/components/billing/PricingTable.jsx
  • packages/web/src/components/billing/SubscriptionCard.jsx
  • packages/web/src/components/checklist-ui/ChecklistsDashboard.jsx
  • packages/web/src/components/checklist-ui/ROBINSIChecklist/PlanningSection.jsx
  • packages/web/src/components/checklist-ui/ROBINSIChecklist/SectionA.jsx
  • packages/web/src/components/checklist-ui/ROBINSIChecklist/SectionB.jsx
  • packages/web/src/components/checklist-ui/ROBINSIChecklist/SectionC.jsx
  • packages/web/src/components/checklist-ui/ROBINSIChecklist/SectionD.jsx
  • packages/web/src/components/checklist-ui/ROBINSIChecklist/SignallingQuestion.jsx
  • packages/web/src/components/checklist-ui/compare/Footer.jsx
  • packages/web/src/components/checklist-ui/compare/ReconciliationWrapper.jsx
  • packages/web/src/components/checklist-ui/pdf/PdfListItem.jsx
  • packages/web/src/components/checklist-ui/pdf/PdfToolbar.jsx
  • packages/web/src/components/profile-ui/LinkedAccountsSection.jsx
  • packages/web/src/components/profile-ui/MergeAccountsDialog.jsx
  • packages/web/src/components/profile-ui/ProfilePage.jsx
  • packages/web/src/components/profile-ui/SettingsPage.jsx
  • packages/web/src/components/profile-ui/TwoFactorSetup.jsx
  • packages/web/src/components/project-ui/AddStudiesForm.jsx
  • packages/web/src/components/project-ui/ChecklistForm.jsx
  • packages/web/src/components/project-ui/ChecklistRow.jsx
  • packages/web/src/components/project-ui/ContactPrompt.jsx
  • packages/web/src/components/project-ui/CreateProjectForm.jsx
  • packages/web/src/components/project-ui/ProjectCard.jsx
  • packages/web/src/components/project-ui/ProjectDashboard.jsx
  • packages/web/src/components/project-ui/add-studies/DoiLookupSection.jsx
  • packages/web/src/components/project-ui/add-studies/GoogleDriveSection.jsx
  • packages/web/src/components/project-ui/add-studies/PdfUploadSection.jsx
  • packages/web/src/components/project-ui/completed-tab/CompletedStudyRow.jsx
  • packages/web/src/components/project-ui/overview-tab/AddMemberModal.jsx
  • packages/web/src/components/project-ui/overview-tab/OverviewTab.jsx
  • packages/web/src/components/project-ui/overview-tab/ReviewerAssignment.jsx
  • packages/web/src/components/project-ui/reconcile-tab/ReconcileStudyRow.jsx
  • packages/web/src/components/project-ui/todo-tab/TodoStudyRow.jsx
  • packages/web/src/components/sidebar/LocalChecklistItem.jsx
✅ Files skipped from review due to trivial changes (4)
  • packages/web/src/components/project-ui/overview-tab/ReviewerAssignment.jsx
  • packages/web/src/components/project-ui/ChecklistForm.jsx
  • packages/web/src/components/auth-ui/SignIn.jsx
  • packages/web/src/components/project-ui/ProjectDashboard.jsx
🧰 Additional context used
📓 Path-based instructions (14)
**/*

📄 CodeRabbit inference engine (.github/copilot-instructions.md)

Do not use emojis in code, comments, documentation, or commit messages

NEVER use emojis anywhere in code, comments, documentation, plan files, or commit messages. This includes unicode symbols. For UI icons, use solid-icons library or SVGs only.

Files:

  • packages/web/src/components/checklist-ui/pdf/PdfToolbar.jsx
  • packages/web/src/components/profile-ui/LinkedAccountsSection.jsx
  • packages/web/src/components/billing/SubscriptionCard.jsx
  • packages/web/src/components/project-ui/overview-tab/OverviewTab.jsx
  • packages/web/src/components/checklist-ui/ChecklistsDashboard.jsx
  • packages/web/src/components/project-ui/add-studies/GoogleDriveSection.jsx
  • packages/web/src/components/project-ui/reconcile-tab/ReconcileStudyRow.jsx
  • packages/web/src/components/admin-ui/UserTable.jsx
  • packages/web/src/components/checklist-ui/ROBINSIChecklist/SignallingQuestion.jsx
  • packages/web/src/components/project-ui/AddStudiesForm.jsx
  • packages/web/src/components/auth-ui/StrengthIndicator.jsx
  • packages/web/src/components/ErrorBoundary.jsx
  • packages/web/src/components/project-ui/overview-tab/AddMemberModal.jsx
  • packages/web/src/components/project-ui/completed-tab/CompletedStudyRow.jsx
  • packages/web/src/components/billing/PricingTable.jsx
  • packages/web/src/components/checklist-ui/ROBINSIChecklist/SectionD.jsx
  • packages/web/src/components/project-ui/CreateProjectForm.jsx
  • packages/web/src/components/auth-ui/ResetPassword.jsx
  • packages/web/src/components/auth-ui/MagicLinkForm.jsx
  • packages/web/src/components/profile-ui/TwoFactorSetup.jsx
  • packages/web/src/components/checklist-ui/ROBINSIChecklist/SectionA.jsx
  • packages/web/src/components/profile-ui/SettingsPage.jsx
  • packages/web/src/components/admin-ui/StorageManagement.jsx
  • packages/web/src/components/auth-ui/RoleSelector.jsx
  • packages/web/src/components/checklist-ui/compare/ReconciliationWrapper.jsx
  • packages/web/src/components/Navbar.jsx
  • packages/web/src/components/project-ui/ChecklistRow.jsx
  • packages/web/src/components/project-ui/ProjectCard.jsx
  • packages/web/src/components/sidebar/LocalChecklistItem.jsx
  • packages/web/src/components/checklist-ui/ROBINSIChecklist/SectionC.jsx
  • packages/web/src/components/checklist-ui/ROBINSIChecklist/SectionB.jsx
  • packages/web/src/components/project-ui/ContactPrompt.jsx
  • packages/web/src/components/project-ui/add-studies/PdfUploadSection.jsx
  • packages/web/src/components/profile-ui/MergeAccountsDialog.jsx
  • packages/web/src/components/checklist-ui/pdf/PdfListItem.jsx
  • packages/web/src/components/project-ui/add-studies/DoiLookupSection.jsx
  • packages/web/src/components/checklist-ui/compare/Footer.jsx
  • packages/web/src/components/auth-ui/TwoFactorVerify.jsx
  • packages/web/src/components/checklist-ui/ROBINSIChecklist/PlanningSection.jsx
  • packages/web/src/components/profile-ui/ProfilePage.jsx
  • packages/web/src/components/auth-ui/CompleteProfile.jsx
  • packages/web/src/components/project-ui/todo-tab/TodoStudyRow.jsx
packages/web/src/**/*.{js,jsx,ts,tsx}

📄 CodeRabbit inference engine (.github/copilot-instructions.md)

packages/web/src/**/*.{js,jsx,ts,tsx}: For UI icons, use the solid-icons library or SVGs only. Do not use emojis
Ensure browser compatibility for all frontend code (Safari is usually problematic)
Keep files small, focused, and modular. If a file exceeds a high number of lines, consider refactoring by extracting sub-modules into a folder with index.jsx and helper components, moving complex logic into separate utility files or primitives, or splitting large forms into section components
Do NOT prop-drill application state. Shared or cross-feature state must live in external stores under packages/web/src/stores/ or relative to the component file
Use createMemo for derived values to ensure they update reactively

Use import aliases from jsconfig.json instead of relative paths

Files:

  • packages/web/src/components/checklist-ui/pdf/PdfToolbar.jsx
  • packages/web/src/components/profile-ui/LinkedAccountsSection.jsx
  • packages/web/src/components/billing/SubscriptionCard.jsx
  • packages/web/src/components/project-ui/overview-tab/OverviewTab.jsx
  • packages/web/src/components/checklist-ui/ChecklistsDashboard.jsx
  • packages/web/src/components/project-ui/add-studies/GoogleDriveSection.jsx
  • packages/web/src/components/project-ui/reconcile-tab/ReconcileStudyRow.jsx
  • packages/web/src/components/admin-ui/UserTable.jsx
  • packages/web/src/components/checklist-ui/ROBINSIChecklist/SignallingQuestion.jsx
  • packages/web/src/components/project-ui/AddStudiesForm.jsx
  • packages/web/src/components/auth-ui/StrengthIndicator.jsx
  • packages/web/src/components/ErrorBoundary.jsx
  • packages/web/src/components/project-ui/overview-tab/AddMemberModal.jsx
  • packages/web/src/components/project-ui/completed-tab/CompletedStudyRow.jsx
  • packages/web/src/components/billing/PricingTable.jsx
  • packages/web/src/components/checklist-ui/ROBINSIChecklist/SectionD.jsx
  • packages/web/src/components/project-ui/CreateProjectForm.jsx
  • packages/web/src/components/auth-ui/ResetPassword.jsx
  • packages/web/src/components/auth-ui/MagicLinkForm.jsx
  • packages/web/src/components/profile-ui/TwoFactorSetup.jsx
  • packages/web/src/components/checklist-ui/ROBINSIChecklist/SectionA.jsx
  • packages/web/src/components/profile-ui/SettingsPage.jsx
  • packages/web/src/components/admin-ui/StorageManagement.jsx
  • packages/web/src/components/auth-ui/RoleSelector.jsx
  • packages/web/src/components/checklist-ui/compare/ReconciliationWrapper.jsx
  • packages/web/src/components/Navbar.jsx
  • packages/web/src/components/project-ui/ChecklistRow.jsx
  • packages/web/src/components/project-ui/ProjectCard.jsx
  • packages/web/src/components/sidebar/LocalChecklistItem.jsx
  • packages/web/src/components/checklist-ui/ROBINSIChecklist/SectionC.jsx
  • packages/web/src/components/checklist-ui/ROBINSIChecklist/SectionB.jsx
  • packages/web/src/components/project-ui/ContactPrompt.jsx
  • packages/web/src/components/project-ui/add-studies/PdfUploadSection.jsx
  • packages/web/src/components/profile-ui/MergeAccountsDialog.jsx
  • packages/web/src/components/checklist-ui/pdf/PdfListItem.jsx
  • packages/web/src/components/project-ui/add-studies/DoiLookupSection.jsx
  • packages/web/src/components/checklist-ui/compare/Footer.jsx
  • packages/web/src/components/auth-ui/TwoFactorVerify.jsx
  • packages/web/src/components/checklist-ui/ROBINSIChecklist/PlanningSection.jsx
  • packages/web/src/components/profile-ui/ProfilePage.jsx
  • packages/web/src/components/auth-ui/CompleteProfile.jsx
  • packages/web/src/components/project-ui/todo-tab/TodoStudyRow.jsx
**/*.{js,jsx,ts,tsx}

📄 CodeRabbit inference engine (.github/copilot-instructions.md)

**/*.{js,jsx,ts,tsx}: Prefer modern ES6+ syntax and features
Use aliases for imports when appropriate to improve readability

**/*.{js,jsx,ts,tsx}: Prefer modern ES6+ syntax and features in JavaScript/TypeScript code
Comments should explain why something is being done, not narrate what the code does. Avoid comments that repeat variable names or describe obvious code behavior.

Files:

  • packages/web/src/components/checklist-ui/pdf/PdfToolbar.jsx
  • packages/web/src/components/profile-ui/LinkedAccountsSection.jsx
  • packages/web/src/components/billing/SubscriptionCard.jsx
  • packages/web/src/components/project-ui/overview-tab/OverviewTab.jsx
  • packages/web/src/components/checklist-ui/ChecklistsDashboard.jsx
  • packages/web/src/components/project-ui/add-studies/GoogleDriveSection.jsx
  • packages/web/src/components/project-ui/reconcile-tab/ReconcileStudyRow.jsx
  • packages/web/src/components/admin-ui/UserTable.jsx
  • packages/web/src/components/checklist-ui/ROBINSIChecklist/SignallingQuestion.jsx
  • packages/web/src/components/project-ui/AddStudiesForm.jsx
  • packages/web/src/components/auth-ui/StrengthIndicator.jsx
  • packages/web/src/components/ErrorBoundary.jsx
  • packages/web/src/components/project-ui/overview-tab/AddMemberModal.jsx
  • packages/web/src/components/project-ui/completed-tab/CompletedStudyRow.jsx
  • packages/web/src/components/billing/PricingTable.jsx
  • packages/web/src/components/checklist-ui/ROBINSIChecklist/SectionD.jsx
  • packages/web/src/components/project-ui/CreateProjectForm.jsx
  • packages/web/src/components/auth-ui/ResetPassword.jsx
  • packages/web/src/components/auth-ui/MagicLinkForm.jsx
  • packages/web/src/components/profile-ui/TwoFactorSetup.jsx
  • packages/web/src/components/checklist-ui/ROBINSIChecklist/SectionA.jsx
  • packages/web/src/components/profile-ui/SettingsPage.jsx
  • packages/web/src/components/admin-ui/StorageManagement.jsx
  • packages/web/src/components/auth-ui/RoleSelector.jsx
  • packages/web/src/components/checklist-ui/compare/ReconciliationWrapper.jsx
  • packages/web/src/components/Navbar.jsx
  • packages/web/src/components/project-ui/ChecklistRow.jsx
  • packages/web/src/components/project-ui/ProjectCard.jsx
  • packages/web/src/components/sidebar/LocalChecklistItem.jsx
  • packages/web/src/components/checklist-ui/ROBINSIChecklist/SectionC.jsx
  • packages/web/src/components/checklist-ui/ROBINSIChecklist/SectionB.jsx
  • packages/web/src/components/project-ui/ContactPrompt.jsx
  • packages/web/src/components/project-ui/add-studies/PdfUploadSection.jsx
  • packages/web/src/components/profile-ui/MergeAccountsDialog.jsx
  • packages/web/src/components/checklist-ui/pdf/PdfListItem.jsx
  • packages/web/src/components/project-ui/add-studies/DoiLookupSection.jsx
  • packages/web/src/components/checklist-ui/compare/Footer.jsx
  • packages/web/src/components/auth-ui/TwoFactorVerify.jsx
  • packages/web/src/components/checklist-ui/ROBINSIChecklist/PlanningSection.jsx
  • packages/web/src/components/profile-ui/ProfilePage.jsx
  • packages/web/src/components/auth-ui/CompleteProfile.jsx
  • packages/web/src/components/project-ui/todo-tab/TodoStudyRow.jsx
packages/web/src/components/**/*.{js,jsx,ts,tsx}

📄 CodeRabbit inference engine (.github/copilot-instructions.md)

packages/web/src/components/**/*.{js,jsx,ts,tsx}: Use responsive design principles for UI components
Group related components in subdirectories with an index.js barrel export
Use Zag.js for UI components and design system
Zag component exist in packages/web/src/components/zag/* and should be reused. Check the README.md in that folder for a list of existing components before adding new components and when debugging
Components should receive at most 1–5 props, and only for local configuration, not shared state. If a component would need more than 5 props, move the shared data into an external store, a primitive, or Solid context
Do not destructure props in SolidJS components as it breaks reactivity. Instead, access props directly from the props object or wrap them in a function to ensure they are always up-to-date
Components should be lean and focused. They should not implement business logic; move that into stores, utilities, or primitives
Never have a component act as a God component coordinating multiple large concerns

Files:

  • packages/web/src/components/checklist-ui/pdf/PdfToolbar.jsx
  • packages/web/src/components/profile-ui/LinkedAccountsSection.jsx
  • packages/web/src/components/billing/SubscriptionCard.jsx
  • packages/web/src/components/project-ui/overview-tab/OverviewTab.jsx
  • packages/web/src/components/checklist-ui/ChecklistsDashboard.jsx
  • packages/web/src/components/project-ui/add-studies/GoogleDriveSection.jsx
  • packages/web/src/components/project-ui/reconcile-tab/ReconcileStudyRow.jsx
  • packages/web/src/components/admin-ui/UserTable.jsx
  • packages/web/src/components/checklist-ui/ROBINSIChecklist/SignallingQuestion.jsx
  • packages/web/src/components/project-ui/AddStudiesForm.jsx
  • packages/web/src/components/auth-ui/StrengthIndicator.jsx
  • packages/web/src/components/ErrorBoundary.jsx
  • packages/web/src/components/project-ui/overview-tab/AddMemberModal.jsx
  • packages/web/src/components/project-ui/completed-tab/CompletedStudyRow.jsx
  • packages/web/src/components/billing/PricingTable.jsx
  • packages/web/src/components/checklist-ui/ROBINSIChecklist/SectionD.jsx
  • packages/web/src/components/project-ui/CreateProjectForm.jsx
  • packages/web/src/components/auth-ui/ResetPassword.jsx
  • packages/web/src/components/auth-ui/MagicLinkForm.jsx
  • packages/web/src/components/profile-ui/TwoFactorSetup.jsx
  • packages/web/src/components/checklist-ui/ROBINSIChecklist/SectionA.jsx
  • packages/web/src/components/profile-ui/SettingsPage.jsx
  • packages/web/src/components/admin-ui/StorageManagement.jsx
  • packages/web/src/components/auth-ui/RoleSelector.jsx
  • packages/web/src/components/checklist-ui/compare/ReconciliationWrapper.jsx
  • packages/web/src/components/Navbar.jsx
  • packages/web/src/components/project-ui/ChecklistRow.jsx
  • packages/web/src/components/project-ui/ProjectCard.jsx
  • packages/web/src/components/sidebar/LocalChecklistItem.jsx
  • packages/web/src/components/checklist-ui/ROBINSIChecklist/SectionC.jsx
  • packages/web/src/components/checklist-ui/ROBINSIChecklist/SectionB.jsx
  • packages/web/src/components/project-ui/ContactPrompt.jsx
  • packages/web/src/components/project-ui/add-studies/PdfUploadSection.jsx
  • packages/web/src/components/profile-ui/MergeAccountsDialog.jsx
  • packages/web/src/components/checklist-ui/pdf/PdfListItem.jsx
  • packages/web/src/components/project-ui/add-studies/DoiLookupSection.jsx
  • packages/web/src/components/checklist-ui/compare/Footer.jsx
  • packages/web/src/components/auth-ui/TwoFactorVerify.jsx
  • packages/web/src/components/checklist-ui/ROBINSIChecklist/PlanningSection.jsx
  • packages/web/src/components/profile-ui/ProfilePage.jsx
  • packages/web/src/components/auth-ui/CompleteProfile.jsx
  • packages/web/src/components/project-ui/todo-tab/TodoStudyRow.jsx
packages/{web,ui}/src/**/*.{jsx,tsx}

📄 CodeRabbit inference engine (.cursor/rules/corates.mdc)

Group related components in subdirectories with barrel exports

Files:

  • packages/web/src/components/checklist-ui/pdf/PdfToolbar.jsx
  • packages/web/src/components/profile-ui/LinkedAccountsSection.jsx
  • packages/web/src/components/billing/SubscriptionCard.jsx
  • packages/web/src/components/project-ui/overview-tab/OverviewTab.jsx
  • packages/web/src/components/checklist-ui/ChecklistsDashboard.jsx
  • packages/web/src/components/project-ui/add-studies/GoogleDriveSection.jsx
  • packages/web/src/components/project-ui/reconcile-tab/ReconcileStudyRow.jsx
  • packages/web/src/components/admin-ui/UserTable.jsx
  • packages/web/src/components/checklist-ui/ROBINSIChecklist/SignallingQuestion.jsx
  • packages/web/src/components/project-ui/AddStudiesForm.jsx
  • packages/web/src/components/auth-ui/StrengthIndicator.jsx
  • packages/web/src/components/ErrorBoundary.jsx
  • packages/web/src/components/project-ui/overview-tab/AddMemberModal.jsx
  • packages/web/src/components/project-ui/completed-tab/CompletedStudyRow.jsx
  • packages/web/src/components/billing/PricingTable.jsx
  • packages/web/src/components/checklist-ui/ROBINSIChecklist/SectionD.jsx
  • packages/web/src/components/project-ui/CreateProjectForm.jsx
  • packages/web/src/components/auth-ui/ResetPassword.jsx
  • packages/web/src/components/auth-ui/MagicLinkForm.jsx
  • packages/web/src/components/profile-ui/TwoFactorSetup.jsx
  • packages/web/src/components/checklist-ui/ROBINSIChecklist/SectionA.jsx
  • packages/web/src/components/profile-ui/SettingsPage.jsx
  • packages/web/src/components/admin-ui/StorageManagement.jsx
  • packages/web/src/components/auth-ui/RoleSelector.jsx
  • packages/web/src/components/checklist-ui/compare/ReconciliationWrapper.jsx
  • packages/web/src/components/Navbar.jsx
  • packages/web/src/components/project-ui/ChecklistRow.jsx
  • packages/web/src/components/project-ui/ProjectCard.jsx
  • packages/web/src/components/sidebar/LocalChecklistItem.jsx
  • packages/web/src/components/checklist-ui/ROBINSIChecklist/SectionC.jsx
  • packages/web/src/components/checklist-ui/ROBINSIChecklist/SectionB.jsx
  • packages/web/src/components/project-ui/ContactPrompt.jsx
  • packages/web/src/components/project-ui/add-studies/PdfUploadSection.jsx
  • packages/web/src/components/profile-ui/MergeAccountsDialog.jsx
  • packages/web/src/components/checklist-ui/pdf/PdfListItem.jsx
  • packages/web/src/components/project-ui/add-studies/DoiLookupSection.jsx
  • packages/web/src/components/checklist-ui/compare/Footer.jsx
  • packages/web/src/components/auth-ui/TwoFactorVerify.jsx
  • packages/web/src/components/checklist-ui/ROBINSIChecklist/PlanningSection.jsx
  • packages/web/src/components/profile-ui/ProfilePage.jsx
  • packages/web/src/components/auth-ui/CompleteProfile.jsx
  • packages/web/src/components/project-ui/todo-tab/TodoStudyRow.jsx
packages/{web,landing}/src/**/*.{jsx,tsx}

📄 CodeRabbit inference engine (.cursor/rules/corates.mdc)

packages/{web,landing}/src/**/*.{jsx,tsx}: Use Ark UI components from @corates/ui package, not local component implementations
Use solid-icons library (e.g., solid-icons/bi, solid-icons/fi) for icon imports

Files:

  • packages/web/src/components/checklist-ui/pdf/PdfToolbar.jsx
  • packages/web/src/components/profile-ui/LinkedAccountsSection.jsx
  • packages/web/src/components/billing/SubscriptionCard.jsx
  • packages/web/src/components/project-ui/overview-tab/OverviewTab.jsx
  • packages/web/src/components/checklist-ui/ChecklistsDashboard.jsx
  • packages/web/src/components/project-ui/add-studies/GoogleDriveSection.jsx
  • packages/web/src/components/project-ui/reconcile-tab/ReconcileStudyRow.jsx
  • packages/web/src/components/admin-ui/UserTable.jsx
  • packages/web/src/components/checklist-ui/ROBINSIChecklist/SignallingQuestion.jsx
  • packages/web/src/components/project-ui/AddStudiesForm.jsx
  • packages/web/src/components/auth-ui/StrengthIndicator.jsx
  • packages/web/src/components/ErrorBoundary.jsx
  • packages/web/src/components/project-ui/overview-tab/AddMemberModal.jsx
  • packages/web/src/components/project-ui/completed-tab/CompletedStudyRow.jsx
  • packages/web/src/components/billing/PricingTable.jsx
  • packages/web/src/components/checklist-ui/ROBINSIChecklist/SectionD.jsx
  • packages/web/src/components/project-ui/CreateProjectForm.jsx
  • packages/web/src/components/auth-ui/ResetPassword.jsx
  • packages/web/src/components/auth-ui/MagicLinkForm.jsx
  • packages/web/src/components/profile-ui/TwoFactorSetup.jsx
  • packages/web/src/components/checklist-ui/ROBINSIChecklist/SectionA.jsx
  • packages/web/src/components/profile-ui/SettingsPage.jsx
  • packages/web/src/components/admin-ui/StorageManagement.jsx
  • packages/web/src/components/auth-ui/RoleSelector.jsx
  • packages/web/src/components/checklist-ui/compare/ReconciliationWrapper.jsx
  • packages/web/src/components/Navbar.jsx
  • packages/web/src/components/project-ui/ChecklistRow.jsx
  • packages/web/src/components/project-ui/ProjectCard.jsx
  • packages/web/src/components/sidebar/LocalChecklistItem.jsx
  • packages/web/src/components/checklist-ui/ROBINSIChecklist/SectionC.jsx
  • packages/web/src/components/checklist-ui/ROBINSIChecklist/SectionB.jsx
  • packages/web/src/components/project-ui/ContactPrompt.jsx
  • packages/web/src/components/project-ui/add-studies/PdfUploadSection.jsx
  • packages/web/src/components/profile-ui/MergeAccountsDialog.jsx
  • packages/web/src/components/checklist-ui/pdf/PdfListItem.jsx
  • packages/web/src/components/project-ui/add-studies/DoiLookupSection.jsx
  • packages/web/src/components/checklist-ui/compare/Footer.jsx
  • packages/web/src/components/auth-ui/TwoFactorVerify.jsx
  • packages/web/src/components/checklist-ui/ROBINSIChecklist/PlanningSection.jsx
  • packages/web/src/components/profile-ui/ProfilePage.jsx
  • packages/web/src/components/auth-ui/CompleteProfile.jsx
  • packages/web/src/components/project-ui/todo-tab/TodoStudyRow.jsx
packages/web/src/**/*.{jsx,tsx}

📄 CodeRabbit inference engine (.cursor/rules/corates.mdc)

packages/web/src/**/*.{jsx,tsx}: In SolidJS, do NOT prop-drill application state. Import stores directly where needed instead.
In SolidJS, do NOT destructure props. Access props.field directly or wrap in a function: () => props.field
In SolidJS components, components should receive at most 1-5 props (local config only, not shared state)

Files:

  • packages/web/src/components/checklist-ui/pdf/PdfToolbar.jsx
  • packages/web/src/components/profile-ui/LinkedAccountsSection.jsx
  • packages/web/src/components/billing/SubscriptionCard.jsx
  • packages/web/src/components/project-ui/overview-tab/OverviewTab.jsx
  • packages/web/src/components/checklist-ui/ChecklistsDashboard.jsx
  • packages/web/src/components/project-ui/add-studies/GoogleDriveSection.jsx
  • packages/web/src/components/project-ui/reconcile-tab/ReconcileStudyRow.jsx
  • packages/web/src/components/admin-ui/UserTable.jsx
  • packages/web/src/components/checklist-ui/ROBINSIChecklist/SignallingQuestion.jsx
  • packages/web/src/components/project-ui/AddStudiesForm.jsx
  • packages/web/src/components/auth-ui/StrengthIndicator.jsx
  • packages/web/src/components/ErrorBoundary.jsx
  • packages/web/src/components/project-ui/overview-tab/AddMemberModal.jsx
  • packages/web/src/components/project-ui/completed-tab/CompletedStudyRow.jsx
  • packages/web/src/components/billing/PricingTable.jsx
  • packages/web/src/components/checklist-ui/ROBINSIChecklist/SectionD.jsx
  • packages/web/src/components/project-ui/CreateProjectForm.jsx
  • packages/web/src/components/auth-ui/ResetPassword.jsx
  • packages/web/src/components/auth-ui/MagicLinkForm.jsx
  • packages/web/src/components/profile-ui/TwoFactorSetup.jsx
  • packages/web/src/components/checklist-ui/ROBINSIChecklist/SectionA.jsx
  • packages/web/src/components/profile-ui/SettingsPage.jsx
  • packages/web/src/components/admin-ui/StorageManagement.jsx
  • packages/web/src/components/auth-ui/RoleSelector.jsx
  • packages/web/src/components/checklist-ui/compare/ReconciliationWrapper.jsx
  • packages/web/src/components/Navbar.jsx
  • packages/web/src/components/project-ui/ChecklistRow.jsx
  • packages/web/src/components/project-ui/ProjectCard.jsx
  • packages/web/src/components/sidebar/LocalChecklistItem.jsx
  • packages/web/src/components/checklist-ui/ROBINSIChecklist/SectionC.jsx
  • packages/web/src/components/checklist-ui/ROBINSIChecklist/SectionB.jsx
  • packages/web/src/components/project-ui/ContactPrompt.jsx
  • packages/web/src/components/project-ui/add-studies/PdfUploadSection.jsx
  • packages/web/src/components/profile-ui/MergeAccountsDialog.jsx
  • packages/web/src/components/checklist-ui/pdf/PdfListItem.jsx
  • packages/web/src/components/project-ui/add-studies/DoiLookupSection.jsx
  • packages/web/src/components/checklist-ui/compare/Footer.jsx
  • packages/web/src/components/auth-ui/TwoFactorVerify.jsx
  • packages/web/src/components/checklist-ui/ROBINSIChecklist/PlanningSection.jsx
  • packages/web/src/components/profile-ui/ProfilePage.jsx
  • packages/web/src/components/auth-ui/CompleteProfile.jsx
  • packages/web/src/components/project-ui/todo-tab/TodoStudyRow.jsx
packages/web/src/**/*.{jsx,tsx,js,ts}

📄 CodeRabbit inference engine (.cursor/rules/corates.mdc)

In SolidJS, use createMemo for derived values

Files:

  • packages/web/src/components/checklist-ui/pdf/PdfToolbar.jsx
  • packages/web/src/components/profile-ui/LinkedAccountsSection.jsx
  • packages/web/src/components/billing/SubscriptionCard.jsx
  • packages/web/src/components/project-ui/overview-tab/OverviewTab.jsx
  • packages/web/src/components/checklist-ui/ChecklistsDashboard.jsx
  • packages/web/src/components/project-ui/add-studies/GoogleDriveSection.jsx
  • packages/web/src/components/project-ui/reconcile-tab/ReconcileStudyRow.jsx
  • packages/web/src/components/admin-ui/UserTable.jsx
  • packages/web/src/components/checklist-ui/ROBINSIChecklist/SignallingQuestion.jsx
  • packages/web/src/components/project-ui/AddStudiesForm.jsx
  • packages/web/src/components/auth-ui/StrengthIndicator.jsx
  • packages/web/src/components/ErrorBoundary.jsx
  • packages/web/src/components/project-ui/overview-tab/AddMemberModal.jsx
  • packages/web/src/components/project-ui/completed-tab/CompletedStudyRow.jsx
  • packages/web/src/components/billing/PricingTable.jsx
  • packages/web/src/components/checklist-ui/ROBINSIChecklist/SectionD.jsx
  • packages/web/src/components/project-ui/CreateProjectForm.jsx
  • packages/web/src/components/auth-ui/ResetPassword.jsx
  • packages/web/src/components/auth-ui/MagicLinkForm.jsx
  • packages/web/src/components/profile-ui/TwoFactorSetup.jsx
  • packages/web/src/components/checklist-ui/ROBINSIChecklist/SectionA.jsx
  • packages/web/src/components/profile-ui/SettingsPage.jsx
  • packages/web/src/components/admin-ui/StorageManagement.jsx
  • packages/web/src/components/auth-ui/RoleSelector.jsx
  • packages/web/src/components/checklist-ui/compare/ReconciliationWrapper.jsx
  • packages/web/src/components/Navbar.jsx
  • packages/web/src/components/project-ui/ChecklistRow.jsx
  • packages/web/src/components/project-ui/ProjectCard.jsx
  • packages/web/src/components/sidebar/LocalChecklistItem.jsx
  • packages/web/src/components/checklist-ui/ROBINSIChecklist/SectionC.jsx
  • packages/web/src/components/checklist-ui/ROBINSIChecklist/SectionB.jsx
  • packages/web/src/components/project-ui/ContactPrompt.jsx
  • packages/web/src/components/project-ui/add-studies/PdfUploadSection.jsx
  • packages/web/src/components/profile-ui/MergeAccountsDialog.jsx
  • packages/web/src/components/checklist-ui/pdf/PdfListItem.jsx
  • packages/web/src/components/project-ui/add-studies/DoiLookupSection.jsx
  • packages/web/src/components/checklist-ui/compare/Footer.jsx
  • packages/web/src/components/auth-ui/TwoFactorVerify.jsx
  • packages/web/src/components/checklist-ui/ROBINSIChecklist/PlanningSection.jsx
  • packages/web/src/components/profile-ui/ProfilePage.jsx
  • packages/web/src/components/auth-ui/CompleteProfile.jsx
  • packages/web/src/components/project-ui/todo-tab/TodoStudyRow.jsx
packages/web/src/**/*.{js,ts,jsx,tsx}

📄 CodeRabbit inference engine (.cursor/rules/error-handling.mdc)

packages/web/src/**/*.{js,ts,jsx,tsx}: Always use handleFetchError from @/lib/error-utils.js for fetch calls in frontend code with options like { showToast: true } for error handling
Use createFormErrorSignals from @/lib/form-errors.js for form validation error handling with field-level and global error management

Files:

  • packages/web/src/components/checklist-ui/pdf/PdfToolbar.jsx
  • packages/web/src/components/profile-ui/LinkedAccountsSection.jsx
  • packages/web/src/components/billing/SubscriptionCard.jsx
  • packages/web/src/components/project-ui/overview-tab/OverviewTab.jsx
  • packages/web/src/components/checklist-ui/ChecklistsDashboard.jsx
  • packages/web/src/components/project-ui/add-studies/GoogleDriveSection.jsx
  • packages/web/src/components/project-ui/reconcile-tab/ReconcileStudyRow.jsx
  • packages/web/src/components/admin-ui/UserTable.jsx
  • packages/web/src/components/checklist-ui/ROBINSIChecklist/SignallingQuestion.jsx
  • packages/web/src/components/project-ui/AddStudiesForm.jsx
  • packages/web/src/components/auth-ui/StrengthIndicator.jsx
  • packages/web/src/components/ErrorBoundary.jsx
  • packages/web/src/components/project-ui/overview-tab/AddMemberModal.jsx
  • packages/web/src/components/project-ui/completed-tab/CompletedStudyRow.jsx
  • packages/web/src/components/billing/PricingTable.jsx
  • packages/web/src/components/checklist-ui/ROBINSIChecklist/SectionD.jsx
  • packages/web/src/components/project-ui/CreateProjectForm.jsx
  • packages/web/src/components/auth-ui/ResetPassword.jsx
  • packages/web/src/components/auth-ui/MagicLinkForm.jsx
  • packages/web/src/components/profile-ui/TwoFactorSetup.jsx
  • packages/web/src/components/checklist-ui/ROBINSIChecklist/SectionA.jsx
  • packages/web/src/components/profile-ui/SettingsPage.jsx
  • packages/web/src/components/admin-ui/StorageManagement.jsx
  • packages/web/src/components/auth-ui/RoleSelector.jsx
  • packages/web/src/components/checklist-ui/compare/ReconciliationWrapper.jsx
  • packages/web/src/components/Navbar.jsx
  • packages/web/src/components/project-ui/ChecklistRow.jsx
  • packages/web/src/components/project-ui/ProjectCard.jsx
  • packages/web/src/components/sidebar/LocalChecklistItem.jsx
  • packages/web/src/components/checklist-ui/ROBINSIChecklist/SectionC.jsx
  • packages/web/src/components/checklist-ui/ROBINSIChecklist/SectionB.jsx
  • packages/web/src/components/project-ui/ContactPrompt.jsx
  • packages/web/src/components/project-ui/add-studies/PdfUploadSection.jsx
  • packages/web/src/components/profile-ui/MergeAccountsDialog.jsx
  • packages/web/src/components/checklist-ui/pdf/PdfListItem.jsx
  • packages/web/src/components/project-ui/add-studies/DoiLookupSection.jsx
  • packages/web/src/components/checklist-ui/compare/Footer.jsx
  • packages/web/src/components/auth-ui/TwoFactorVerify.jsx
  • packages/web/src/components/checklist-ui/ROBINSIChecklist/PlanningSection.jsx
  • packages/web/src/components/profile-ui/ProfilePage.jsx
  • packages/web/src/components/auth-ui/CompleteProfile.jsx
  • packages/web/src/components/project-ui/todo-tab/TodoStudyRow.jsx
packages/{web,workers}/src/**/*.{js,ts,jsx,tsx}

📄 CodeRabbit inference engine (.cursor/rules/error-handling.mdc)

packages/{web,workers}/src/**/*.{js,ts,jsx,tsx}: Never throw string literals; always throw Error objects or return domain errors from API routes
Use error utility functions like isErrorCode from @corates/shared or @/lib/error-utils.js to check specific error types instead of manual string comparisons

Files:

  • packages/web/src/components/checklist-ui/pdf/PdfToolbar.jsx
  • packages/web/src/components/profile-ui/LinkedAccountsSection.jsx
  • packages/web/src/components/billing/SubscriptionCard.jsx
  • packages/web/src/components/project-ui/overview-tab/OverviewTab.jsx
  • packages/web/src/components/checklist-ui/ChecklistsDashboard.jsx
  • packages/web/src/components/project-ui/add-studies/GoogleDriveSection.jsx
  • packages/web/src/components/project-ui/reconcile-tab/ReconcileStudyRow.jsx
  • packages/web/src/components/admin-ui/UserTable.jsx
  • packages/web/src/components/checklist-ui/ROBINSIChecklist/SignallingQuestion.jsx
  • packages/web/src/components/project-ui/AddStudiesForm.jsx
  • packages/web/src/components/auth-ui/StrengthIndicator.jsx
  • packages/web/src/components/ErrorBoundary.jsx
  • packages/web/src/components/project-ui/overview-tab/AddMemberModal.jsx
  • packages/web/src/components/project-ui/completed-tab/CompletedStudyRow.jsx
  • packages/web/src/components/billing/PricingTable.jsx
  • packages/web/src/components/checklist-ui/ROBINSIChecklist/SectionD.jsx
  • packages/web/src/components/project-ui/CreateProjectForm.jsx
  • packages/web/src/components/auth-ui/ResetPassword.jsx
  • packages/web/src/components/auth-ui/MagicLinkForm.jsx
  • packages/web/src/components/profile-ui/TwoFactorSetup.jsx
  • packages/web/src/components/checklist-ui/ROBINSIChecklist/SectionA.jsx
  • packages/web/src/components/profile-ui/SettingsPage.jsx
  • packages/web/src/components/admin-ui/StorageManagement.jsx
  • packages/web/src/components/auth-ui/RoleSelector.jsx
  • packages/web/src/components/checklist-ui/compare/ReconciliationWrapper.jsx
  • packages/web/src/components/Navbar.jsx
  • packages/web/src/components/project-ui/ChecklistRow.jsx
  • packages/web/src/components/project-ui/ProjectCard.jsx
  • packages/web/src/components/sidebar/LocalChecklistItem.jsx
  • packages/web/src/components/checklist-ui/ROBINSIChecklist/SectionC.jsx
  • packages/web/src/components/checklist-ui/ROBINSIChecklist/SectionB.jsx
  • packages/web/src/components/project-ui/ContactPrompt.jsx
  • packages/web/src/components/project-ui/add-studies/PdfUploadSection.jsx
  • packages/web/src/components/profile-ui/MergeAccountsDialog.jsx
  • packages/web/src/components/checklist-ui/pdf/PdfListItem.jsx
  • packages/web/src/components/project-ui/add-studies/DoiLookupSection.jsx
  • packages/web/src/components/checklist-ui/compare/Footer.jsx
  • packages/web/src/components/auth-ui/TwoFactorVerify.jsx
  • packages/web/src/components/checklist-ui/ROBINSIChecklist/PlanningSection.jsx
  • packages/web/src/components/profile-ui/ProfilePage.jsx
  • packages/web/src/components/auth-ui/CompleteProfile.jsx
  • packages/web/src/components/project-ui/todo-tab/TodoStudyRow.jsx
{packages/web/**,packages/landing/**}/**/*.{jsx,tsx,js,ts}

📄 CodeRabbit inference engine (.cursor/rules/solidjs.mdc)

{packages/web/**,packages/landing/**}/**/*.{jsx,tsx,js,ts}: Never destructure props in SolidJS components - destructuring breaks reactivity. Access props directly (e.g., props.name) or wrap in a function (e.g., const name = () => props.name) to maintain reactivity.
Import stores directly in components rather than prop-drilling store data through component hierarchies.
Use separate read and write patterns for stores: import the store directly for reading data (e.g., projectStore.getProjectList()) and import action stores separately for writing (e.g., projectActionsStore.createProject()).
Use createSignal from solid-js for managing simple reactive values. Prefer derived state with signals or memo over effects when possible.
Use createStore from solid-js/store for managing complex objects and arrays that require granular reactivity, enabling fine-grained updates where only affected parts re-render.
Use createMemo from solid-js for derived values that depend on reactive state, ensuring computed values update only when their dependencies change.
Always clean up effects that create subscriptions or timers using the onCleanup function from solid-js. Use effects sparingly, only when derived values won't work well.
Keep components lean and focused on rendering. Move business logic to stores (for shared state and operations), primitives (for reusable hooks/logic), or utilities (for pure functions).
Use the Show component from solid-js for conditional rendering instead of JavaScript ternary operators or logical AND operators.
Use the For component from solid-js for rendering lists. It provides better performance and keying compared to JavaScript's map function in JSX.
When manipulating children in wrapper components, use the children helper from solid-js to ensure proper reactivity and handling of child elements.

Files:

  • packages/web/src/components/checklist-ui/pdf/PdfToolbar.jsx
  • packages/web/src/components/profile-ui/LinkedAccountsSection.jsx
  • packages/web/src/components/billing/SubscriptionCard.jsx
  • packages/web/src/components/project-ui/overview-tab/OverviewTab.jsx
  • packages/web/src/components/checklist-ui/ChecklistsDashboard.jsx
  • packages/web/src/components/project-ui/add-studies/GoogleDriveSection.jsx
  • packages/web/src/components/project-ui/reconcile-tab/ReconcileStudyRow.jsx
  • packages/web/src/components/admin-ui/UserTable.jsx
  • packages/web/src/components/checklist-ui/ROBINSIChecklist/SignallingQuestion.jsx
  • packages/web/src/components/project-ui/AddStudiesForm.jsx
  • packages/web/src/components/auth-ui/StrengthIndicator.jsx
  • packages/web/src/components/ErrorBoundary.jsx
  • packages/web/src/components/project-ui/overview-tab/AddMemberModal.jsx
  • packages/web/src/components/project-ui/completed-tab/CompletedStudyRow.jsx
  • packages/web/src/components/billing/PricingTable.jsx
  • packages/web/src/components/checklist-ui/ROBINSIChecklist/SectionD.jsx
  • packages/web/src/components/project-ui/CreateProjectForm.jsx
  • packages/web/src/components/auth-ui/ResetPassword.jsx
  • packages/web/src/components/auth-ui/MagicLinkForm.jsx
  • packages/web/src/components/profile-ui/TwoFactorSetup.jsx
  • packages/web/src/components/checklist-ui/ROBINSIChecklist/SectionA.jsx
  • packages/web/src/components/profile-ui/SettingsPage.jsx
  • packages/web/src/components/admin-ui/StorageManagement.jsx
  • packages/web/src/components/auth-ui/RoleSelector.jsx
  • packages/web/src/components/checklist-ui/compare/ReconciliationWrapper.jsx
  • packages/web/src/components/Navbar.jsx
  • packages/web/src/components/project-ui/ChecklistRow.jsx
  • packages/web/src/components/project-ui/ProjectCard.jsx
  • packages/web/src/components/sidebar/LocalChecklistItem.jsx
  • packages/web/src/components/checklist-ui/ROBINSIChecklist/SectionC.jsx
  • packages/web/src/components/checklist-ui/ROBINSIChecklist/SectionB.jsx
  • packages/web/src/components/project-ui/ContactPrompt.jsx
  • packages/web/src/components/project-ui/add-studies/PdfUploadSection.jsx
  • packages/web/src/components/profile-ui/MergeAccountsDialog.jsx
  • packages/web/src/components/checklist-ui/pdf/PdfListItem.jsx
  • packages/web/src/components/project-ui/add-studies/DoiLookupSection.jsx
  • packages/web/src/components/checklist-ui/compare/Footer.jsx
  • packages/web/src/components/auth-ui/TwoFactorVerify.jsx
  • packages/web/src/components/checklist-ui/ROBINSIChecklist/PlanningSection.jsx
  • packages/web/src/components/profile-ui/ProfilePage.jsx
  • packages/web/src/components/auth-ui/CompleteProfile.jsx
  • packages/web/src/components/project-ui/todo-tab/TodoStudyRow.jsx
packages/{web,ui}/**/*.{js,jsx,ts,tsx}

📄 CodeRabbit inference engine (.cursor/rules/ui-components.mdc)

packages/{web,ui}/**/*.{js,jsx,ts,tsx}: Import UI components from '@corates/ui' package instead of local component files. Do not import Ark UI components from local paths like '@/components/zag/' or 'packages/web/src/components/zag/'
Always use 'solid-icons' library for icons. Never use emoji characters or text as icon replacements. Import from specific icon sets like 'solid-icons/bi', 'solid-icons/fi', 'solid-icons/ai', etc.

Files:

  • packages/web/src/components/checklist-ui/pdf/PdfToolbar.jsx
  • packages/web/src/components/profile-ui/LinkedAccountsSection.jsx
  • packages/web/src/components/billing/SubscriptionCard.jsx
  • packages/web/src/components/project-ui/overview-tab/OverviewTab.jsx
  • packages/web/src/components/checklist-ui/ChecklistsDashboard.jsx
  • packages/web/src/components/project-ui/add-studies/GoogleDriveSection.jsx
  • packages/web/src/components/project-ui/reconcile-tab/ReconcileStudyRow.jsx
  • packages/web/src/components/admin-ui/UserTable.jsx
  • packages/web/src/components/checklist-ui/ROBINSIChecklist/SignallingQuestion.jsx
  • packages/web/src/components/project-ui/AddStudiesForm.jsx
  • packages/web/src/components/auth-ui/StrengthIndicator.jsx
  • packages/web/src/components/ErrorBoundary.jsx
  • packages/web/src/components/project-ui/overview-tab/AddMemberModal.jsx
  • packages/web/src/components/project-ui/completed-tab/CompletedStudyRow.jsx
  • packages/web/src/components/billing/PricingTable.jsx
  • packages/web/src/components/checklist-ui/ROBINSIChecklist/SectionD.jsx
  • packages/web/src/components/project-ui/CreateProjectForm.jsx
  • packages/web/src/components/auth-ui/ResetPassword.jsx
  • packages/web/src/components/auth-ui/MagicLinkForm.jsx
  • packages/web/src/components/profile-ui/TwoFactorSetup.jsx
  • packages/web/src/components/checklist-ui/ROBINSIChecklist/SectionA.jsx
  • packages/web/src/components/profile-ui/SettingsPage.jsx
  • packages/web/src/components/admin-ui/StorageManagement.jsx
  • packages/web/src/components/auth-ui/RoleSelector.jsx
  • packages/web/src/components/checklist-ui/compare/ReconciliationWrapper.jsx
  • packages/web/src/components/Navbar.jsx
  • packages/web/src/components/project-ui/ChecklistRow.jsx
  • packages/web/src/components/project-ui/ProjectCard.jsx
  • packages/web/src/components/sidebar/LocalChecklistItem.jsx
  • packages/web/src/components/checklist-ui/ROBINSIChecklist/SectionC.jsx
  • packages/web/src/components/checklist-ui/ROBINSIChecklist/SectionB.jsx
  • packages/web/src/components/project-ui/ContactPrompt.jsx
  • packages/web/src/components/project-ui/add-studies/PdfUploadSection.jsx
  • packages/web/src/components/profile-ui/MergeAccountsDialog.jsx
  • packages/web/src/components/checklist-ui/pdf/PdfListItem.jsx
  • packages/web/src/components/project-ui/add-studies/DoiLookupSection.jsx
  • packages/web/src/components/checklist-ui/compare/Footer.jsx
  • packages/web/src/components/auth-ui/TwoFactorVerify.jsx
  • packages/web/src/components/checklist-ui/ROBINSIChecklist/PlanningSection.jsx
  • packages/web/src/components/profile-ui/ProfilePage.jsx
  • packages/web/src/components/auth-ui/CompleteProfile.jsx
  • packages/web/src/components/project-ui/todo-tab/TodoStudyRow.jsx
packages/web/**/*.{js,jsx,ts,tsx}

📄 CodeRabbit inference engine (.cursor/rules/ui-components.mdc)

Use import aliases from 'packages/web/jsconfig.json' instead of relative paths. Aliases include: '@/' (src/), '@components/' (src/components/), '@auth-ui/' (src/components/auth-ui/), '@checklist-ui/' (src/components/checklist-ui/), '@project-ui/' (src/components/project-ui/), '@routes/' (src/routes/), '@primitives/' (src/primitives/), '@api/' (src/api/), '@config/' (src/config/), and '@lib/' (src/lib/)

Files:

  • packages/web/src/components/checklist-ui/pdf/PdfToolbar.jsx
  • packages/web/src/components/profile-ui/LinkedAccountsSection.jsx
  • packages/web/src/components/billing/SubscriptionCard.jsx
  • packages/web/src/components/project-ui/overview-tab/OverviewTab.jsx
  • packages/web/src/components/checklist-ui/ChecklistsDashboard.jsx
  • packages/web/src/components/project-ui/add-studies/GoogleDriveSection.jsx
  • packages/web/src/components/project-ui/reconcile-tab/ReconcileStudyRow.jsx
  • packages/web/src/components/admin-ui/UserTable.jsx
  • packages/web/src/components/checklist-ui/ROBINSIChecklist/SignallingQuestion.jsx
  • packages/web/src/components/project-ui/AddStudiesForm.jsx
  • packages/web/src/components/auth-ui/StrengthIndicator.jsx
  • packages/web/src/components/ErrorBoundary.jsx
  • packages/web/src/components/project-ui/overview-tab/AddMemberModal.jsx
  • packages/web/src/components/project-ui/completed-tab/CompletedStudyRow.jsx
  • packages/web/src/components/billing/PricingTable.jsx
  • packages/web/src/components/checklist-ui/ROBINSIChecklist/SectionD.jsx
  • packages/web/src/components/project-ui/CreateProjectForm.jsx
  • packages/web/src/components/auth-ui/ResetPassword.jsx
  • packages/web/src/components/auth-ui/MagicLinkForm.jsx
  • packages/web/src/components/profile-ui/TwoFactorSetup.jsx
  • packages/web/src/components/checklist-ui/ROBINSIChecklist/SectionA.jsx
  • packages/web/src/components/profile-ui/SettingsPage.jsx
  • packages/web/src/components/admin-ui/StorageManagement.jsx
  • packages/web/src/components/auth-ui/RoleSelector.jsx
  • packages/web/src/components/checklist-ui/compare/ReconciliationWrapper.jsx
  • packages/web/src/components/Navbar.jsx
  • packages/web/src/components/project-ui/ChecklistRow.jsx
  • packages/web/src/components/project-ui/ProjectCard.jsx
  • packages/web/src/components/sidebar/LocalChecklistItem.jsx
  • packages/web/src/components/checklist-ui/ROBINSIChecklist/SectionC.jsx
  • packages/web/src/components/checklist-ui/ROBINSIChecklist/SectionB.jsx
  • packages/web/src/components/project-ui/ContactPrompt.jsx
  • packages/web/src/components/project-ui/add-studies/PdfUploadSection.jsx
  • packages/web/src/components/profile-ui/MergeAccountsDialog.jsx
  • packages/web/src/components/checklist-ui/pdf/PdfListItem.jsx
  • packages/web/src/components/project-ui/add-studies/DoiLookupSection.jsx
  • packages/web/src/components/checklist-ui/compare/Footer.jsx
  • packages/web/src/components/auth-ui/TwoFactorVerify.jsx
  • packages/web/src/components/checklist-ui/ROBINSIChecklist/PlanningSection.jsx
  • packages/web/src/components/profile-ui/ProfilePage.jsx
  • packages/web/src/components/auth-ui/CompleteProfile.jsx
  • packages/web/src/components/project-ui/todo-tab/TodoStudyRow.jsx
packages/{web,ui}/**/*.{jsx,tsx}

📄 CodeRabbit inference engine (.cursor/rules/ui-components.mdc)

Use Tailwind CSS classes for styling components

Files:

  • packages/web/src/components/checklist-ui/pdf/PdfToolbar.jsx
  • packages/web/src/components/profile-ui/LinkedAccountsSection.jsx
  • packages/web/src/components/billing/SubscriptionCard.jsx
  • packages/web/src/components/project-ui/overview-tab/OverviewTab.jsx
  • packages/web/src/components/checklist-ui/ChecklistsDashboard.jsx
  • packages/web/src/components/project-ui/add-studies/GoogleDriveSection.jsx
  • packages/web/src/components/project-ui/reconcile-tab/ReconcileStudyRow.jsx
  • packages/web/src/components/admin-ui/UserTable.jsx
  • packages/web/src/components/checklist-ui/ROBINSIChecklist/SignallingQuestion.jsx
  • packages/web/src/components/project-ui/AddStudiesForm.jsx
  • packages/web/src/components/auth-ui/StrengthIndicator.jsx
  • packages/web/src/components/ErrorBoundary.jsx
  • packages/web/src/components/project-ui/overview-tab/AddMemberModal.jsx
  • packages/web/src/components/project-ui/completed-tab/CompletedStudyRow.jsx
  • packages/web/src/components/billing/PricingTable.jsx
  • packages/web/src/components/checklist-ui/ROBINSIChecklist/SectionD.jsx
  • packages/web/src/components/project-ui/CreateProjectForm.jsx
  • packages/web/src/components/auth-ui/ResetPassword.jsx
  • packages/web/src/components/auth-ui/MagicLinkForm.jsx
  • packages/web/src/components/profile-ui/TwoFactorSetup.jsx
  • packages/web/src/components/checklist-ui/ROBINSIChecklist/SectionA.jsx
  • packages/web/src/components/profile-ui/SettingsPage.jsx
  • packages/web/src/components/admin-ui/StorageManagement.jsx
  • packages/web/src/components/auth-ui/RoleSelector.jsx
  • packages/web/src/components/checklist-ui/compare/ReconciliationWrapper.jsx
  • packages/web/src/components/Navbar.jsx
  • packages/web/src/components/project-ui/ChecklistRow.jsx
  • packages/web/src/components/project-ui/ProjectCard.jsx
  • packages/web/src/components/sidebar/LocalChecklistItem.jsx
  • packages/web/src/components/checklist-ui/ROBINSIChecklist/SectionC.jsx
  • packages/web/src/components/checklist-ui/ROBINSIChecklist/SectionB.jsx
  • packages/web/src/components/project-ui/ContactPrompt.jsx
  • packages/web/src/components/project-ui/add-studies/PdfUploadSection.jsx
  • packages/web/src/components/profile-ui/MergeAccountsDialog.jsx
  • packages/web/src/components/checklist-ui/pdf/PdfListItem.jsx
  • packages/web/src/components/project-ui/add-studies/DoiLookupSection.jsx
  • packages/web/src/components/checklist-ui/compare/Footer.jsx
  • packages/web/src/components/auth-ui/TwoFactorVerify.jsx
  • packages/web/src/components/checklist-ui/ROBINSIChecklist/PlanningSection.jsx
  • packages/web/src/components/profile-ui/ProfilePage.jsx
  • packages/web/src/components/auth-ui/CompleteProfile.jsx
  • packages/web/src/components/project-ui/todo-tab/TodoStudyRow.jsx
🧠 Learnings (5)
📚 Learning: 2025-12-24T17:23:17.309Z
Learnt from: CR
Repo: InfinityBowman/corates PR: 0
File: .cursor/rules/ui-components.mdc:0-0
Timestamp: 2025-12-24T17:23:17.309Z
Learning: Applies to packages/{web,ui}/**/*.{jsx,tsx} : Use Tailwind CSS classes for styling components

Applied to files:

  • packages/web/src/components/profile-ui/LinkedAccountsSection.jsx
  • packages/web/src/components/project-ui/overview-tab/OverviewTab.jsx
  • packages/web/src/components/admin-ui/UserTable.jsx
  • packages/web/src/components/auth-ui/StrengthIndicator.jsx
  • packages/web/src/components/project-ui/overview-tab/AddMemberModal.jsx
  • packages/web/src/components/checklist-ui/ROBINSIChecklist/SectionD.jsx
  • packages/web/src/components/project-ui/CreateProjectForm.jsx
  • packages/web/src/components/auth-ui/ResetPassword.jsx
  • packages/web/src/components/auth-ui/MagicLinkForm.jsx
  • packages/web/src/components/auth-ui/RoleSelector.jsx
  • packages/web/src/components/project-ui/ChecklistRow.jsx
  • packages/web/src/components/project-ui/ProjectCard.jsx
  • packages/web/src/components/profile-ui/MergeAccountsDialog.jsx
  • packages/web/src/components/checklist-ui/compare/Footer.jsx
  • packages/web/src/components/auth-ui/CompleteProfile.jsx
📚 Learning: 2025-12-24T17:22:48.927Z
Learnt from: CR
Repo: InfinityBowman/corates PR: 0
File: .cursor/rules/corates.mdc:0-0
Timestamp: 2025-12-24T17:22:48.927Z
Learning: Applies to packages/{web,landing}/src/**/*.{jsx,tsx} : Use Ark UI components from corates/ui package, not local component implementations

Applied to files:

  • packages/web/src/components/profile-ui/LinkedAccountsSection.jsx
  • packages/web/src/components/project-ui/CreateProjectForm.jsx
  • packages/web/src/components/auth-ui/MagicLinkForm.jsx
  • packages/web/src/components/project-ui/ProjectCard.jsx
  • packages/web/src/components/auth-ui/CompleteProfile.jsx
📚 Learning: 2025-12-19T14:49:49.730Z
Learnt from: CR
Repo: InfinityBowman/corates PR: 0
File: .github/copilot-instructions.md:0-0
Timestamp: 2025-12-19T14:49:49.730Z
Learning: Applies to packages/web/src/components/**/*.{js,jsx,ts,tsx} : Use responsive design principles for UI components

Applied to files:

  • packages/web/src/components/project-ui/overview-tab/OverviewTab.jsx
  • packages/web/src/components/checklist-ui/ROBINSIChecklist/SectionD.jsx
📚 Learning: 2025-12-24T17:23:10.082Z
Learnt from: CR
Repo: InfinityBowman/corates PR: 0
File: .cursor/rules/solidjs.mdc:0-0
Timestamp: 2025-12-24T17:23:10.082Z
Learning: Applies to {packages/web/**,packages/landing/**}/**/*.{jsx,tsx,js,ts} : Use `createSignal` from solid-js for managing simple reactive values. Prefer derived state with signals or memo over effects when possible.

Applied to files:

  • packages/web/src/components/checklist-ui/ROBINSIChecklist/SignallingQuestion.jsx
📚 Learning: 2025-12-24T17:22:56.372Z
Learnt from: CR
Repo: InfinityBowman/corates PR: 0
File: .cursor/rules/error-handling.mdc:0-0
Timestamp: 2025-12-24T17:22:56.372Z
Learning: Applies to packages/web/src/**/*.{js,ts,jsx,tsx} : Use `createFormErrorSignals` from `@/lib/form-errors.js` for form validation error handling with field-level and global error management

Applied to files:

  • packages/web/src/components/auth-ui/MagicLinkForm.jsx
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (1)
  • GitHub Check: Workers Builds: corates

@InfinityBowman InfinityBowman merged commit 9f8dad5 into main Dec 27, 2025
3 checks passed
@InfinityBowman InfinityBowman deleted the 172-proper-docs-site branch December 27, 2025 03:00
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.

Proper docs site

2 participants