172 proper docs site#173
Conversation
📝 WalkthroughWalkthroughMigrates docs from a custom HTML/Mermaid viewer to a VitePress site under Changes
Sequence Diagram(s)(omitted) Estimated code review effort🎯 3 (Moderate) | ⏱️ ~22 minutes Possibly related PRs
Poem
Pre-merge checks and finishing touches❌ Failed checks (1 warning)
✅ Passed checks (2 passed)
✨ Finishing touches
🧪 Generate unit tests (beta)
Comment |
Deploying with
|
| Status | Name | Latest Commit | Preview URL | Updated (UTC) |
|---|---|---|---|---|
| ✅ Deployment successful! View logs |
corates | 429b362 | Commit Preview URL | Dec 26 2025, 10:15 PM |
There was a problem hiding this comment.
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
⛔ Files ignored due to path filters (1)
pnpm-lock.yamlis excluded by!**/pnpm-lock.yaml
📒 Files selected for processing (21)
.github/Contributing.mddocs/architecture/diagrams.mddocs/architecture/index.htmlpackage.jsonpackages/docs/.gitignorepackages/docs/.vitepress/config.jspackages/docs/README.mdpackages/docs/architecture/diagrams/01-package-architecture.mdpackages/docs/architecture/diagrams/02-system-architecture.mdpackages/docs/architecture/diagrams/03-sync-flow.mdpackages/docs/architecture/diagrams/04-data-model.mdpackages/docs/architecture/diagrams/05-frontend-routes.mdpackages/docs/architecture/diagrams/06-api-routes.mdpackages/docs/architecture/diagrams/07-api-actions.mdpackages/docs/architecture/diagrams/08-yjs-sync.mdpackages/docs/architecture/index.mdpackages/docs/guides/error-handling.mdpackages/docs/guides/index.mdpackages/docs/guides/style-guide.mdpackages/docs/index.mdpackages/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.mdpackages/docs/guides/style-guide.mdpackages/docs/guides/index.mdpackage.jsonpackages/docs/index.mdpackages/docs/README.mdpackages/docs/package.jsonpackages/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.mdpackages/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.mdpackages/docs/index.mdpackages/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.mdpackages/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 atpackages/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.
| ### ✅ 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 |
There was a problem hiding this comment.
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.
| ### ✅ 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.
There was a problem hiding this comment.
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, sincecountsis a locally-defined plain object with known keys anditem.scoreis already validated (line 52), theinoperator 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
⛔ Files ignored due to path filters (1)
pnpm-lock.yamlis excluded by!**/pnpm-lock.yaml
📒 Files selected for processing (5)
eslint.config.jspackages/docs/.vitepress/config.jspackages/docs/package.jsonpackages/web/src/components/project-ui/overview-tab/AMSTAR2ResultsTable.jsxscripts/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.jspackages/web/src/components/project-ui/overview-tab/AMSTAR2ResultsTable.jsxscripts/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.jspackages/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 thesolid-iconslibrary 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
UsecreateMemofor derived values to ensure they update reactivelyUse 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 inpackages/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 usehandleFetchErrorfrom@/lib/error-utils.jsfor fetch calls in frontend code with options like{ showToast: true }for error handling
UsecreateFormErrorSignalsfrom@/lib/form-errors.jsfor 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 likeisErrorCodefrom@corates/sharedor@/lib/error-utils.jsto 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()).
UsecreateSignalfrom solid-js for managing simple reactive values. Prefer derived state with signals or memo over effects when possible.
UsecreateStorefrom solid-js/store for managing complex objects and arrays that require granular reactivity, enabling fine-grained updates where only affected parts re-render.
UsecreateMemofrom 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 theonCleanupfunction 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 theShowcomponent from solid-js for conditional rendering instead of JavaScript ternary operators or logical AND operators.
Use theForcomponent 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 thechildrenhelper 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.
There was a problem hiding this comment.
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.,
textormarkdown) would silence the markdown linter.Proposed fix
### Decision Tree -``` +```text Is this state shared across multiple components/features? ├─ YES → Use a storepackages/docs/guides/yjs-sync.md (2)
20-32: Consider adding language specifier for document structure.The document structure visualization is clear. Adding
textas 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
jsas 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
textas 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 guidelinespackages/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.,
textorbash) 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
📒 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.mdpackages/docs/.vitepress/config.jspackages/docs/guides/api-development.mdpackages/docs/guides/authentication.mdpackages/docs/guides/components.mdpackages/docs/guides/configuration.mdpackages/docs/guides/database.mdpackages/docs/guides/development-workflow.mdpackages/docs/guides/index.mdpackages/docs/guides/primitives.mdpackages/docs/guides/state-management.mdpackages/docs/guides/testing.mdpackages/docs/guides/yjs-sync.mdpackages/web/TESTING.mdpackages/workers/DRIZZLE_README.mdpackages/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.mdpackages/docs/guides/yjs-sync.mdpackages/docs/guides/development-workflow.mdpackages/docs/guides/components.mdpackages/docs/guides/configuration.mdpackages/docs/guides/authentication.mdpackages/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.mdcpackages/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.mdpackages/docs/guides/yjs-sync.md.cursor/rules/corates.mdc.cursor/rules/form-state.mdcpackages/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.mdcpackages/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.mdcpackages/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.mdcpackages/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.mdcpackages/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.mdcpackages/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.mdcpackages/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.mdcpackages/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.mdcpackages/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:
.claudercpackages/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
baseUrlorbaseconfiguration in VitePress- If the guide pages are explicitly included in the VitePress sidebar/navigation config
- Whether relative paths or absolute paths are expected from
.cursorfilesOnce 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/databaseand/guides/api-developmentexist inpackages/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/docspackage is clear.The addition of the
/docspackage 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 inpackages/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/testingis 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/uiand 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/uifor Ark UI components- Strict emoji prohibition with proper icon library usage
- Practical, working code examples throughout
- Appropriate best practices aligned with SolidJS reactivity model
There was a problem hiding this comment.
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.5should bespace-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-100addition 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-500instead offocus:ring-blue-500to 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-noneProposed 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
📒 Files selected for processing (46)
packages/web/src/components/ErrorBoundary.jsxpackages/web/src/components/Navbar.jsxpackages/web/src/components/admin-ui/StorageManagement.jsxpackages/web/src/components/admin-ui/UserTable.jsxpackages/web/src/components/auth-ui/CompleteProfile.jsxpackages/web/src/components/auth-ui/MagicLinkForm.jsxpackages/web/src/components/auth-ui/ResetPassword.jsxpackages/web/src/components/auth-ui/RoleSelector.jsxpackages/web/src/components/auth-ui/SignIn.jsxpackages/web/src/components/auth-ui/StrengthIndicator.jsxpackages/web/src/components/auth-ui/TwoFactorVerify.jsxpackages/web/src/components/billing/PricingTable.jsxpackages/web/src/components/billing/SubscriptionCard.jsxpackages/web/src/components/checklist-ui/ChecklistsDashboard.jsxpackages/web/src/components/checklist-ui/ROBINSIChecklist/PlanningSection.jsxpackages/web/src/components/checklist-ui/ROBINSIChecklist/SectionA.jsxpackages/web/src/components/checklist-ui/ROBINSIChecklist/SectionB.jsxpackages/web/src/components/checklist-ui/ROBINSIChecklist/SectionC.jsxpackages/web/src/components/checklist-ui/ROBINSIChecklist/SectionD.jsxpackages/web/src/components/checklist-ui/ROBINSIChecklist/SignallingQuestion.jsxpackages/web/src/components/checklist-ui/compare/Footer.jsxpackages/web/src/components/checklist-ui/compare/ReconciliationWrapper.jsxpackages/web/src/components/checklist-ui/pdf/PdfListItem.jsxpackages/web/src/components/checklist-ui/pdf/PdfToolbar.jsxpackages/web/src/components/profile-ui/LinkedAccountsSection.jsxpackages/web/src/components/profile-ui/MergeAccountsDialog.jsxpackages/web/src/components/profile-ui/ProfilePage.jsxpackages/web/src/components/profile-ui/SettingsPage.jsxpackages/web/src/components/profile-ui/TwoFactorSetup.jsxpackages/web/src/components/project-ui/AddStudiesForm.jsxpackages/web/src/components/project-ui/ChecklistForm.jsxpackages/web/src/components/project-ui/ChecklistRow.jsxpackages/web/src/components/project-ui/ContactPrompt.jsxpackages/web/src/components/project-ui/CreateProjectForm.jsxpackages/web/src/components/project-ui/ProjectCard.jsxpackages/web/src/components/project-ui/ProjectDashboard.jsxpackages/web/src/components/project-ui/add-studies/DoiLookupSection.jsxpackages/web/src/components/project-ui/add-studies/GoogleDriveSection.jsxpackages/web/src/components/project-ui/add-studies/PdfUploadSection.jsxpackages/web/src/components/project-ui/completed-tab/CompletedStudyRow.jsxpackages/web/src/components/project-ui/overview-tab/AddMemberModal.jsxpackages/web/src/components/project-ui/overview-tab/OverviewTab.jsxpackages/web/src/components/project-ui/overview-tab/ReviewerAssignment.jsxpackages/web/src/components/project-ui/reconcile-tab/ReconcileStudyRow.jsxpackages/web/src/components/project-ui/todo-tab/TodoStudyRow.jsxpackages/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.jsxpackages/web/src/components/profile-ui/LinkedAccountsSection.jsxpackages/web/src/components/billing/SubscriptionCard.jsxpackages/web/src/components/project-ui/overview-tab/OverviewTab.jsxpackages/web/src/components/checklist-ui/ChecklistsDashboard.jsxpackages/web/src/components/project-ui/add-studies/GoogleDriveSection.jsxpackages/web/src/components/project-ui/reconcile-tab/ReconcileStudyRow.jsxpackages/web/src/components/admin-ui/UserTable.jsxpackages/web/src/components/checklist-ui/ROBINSIChecklist/SignallingQuestion.jsxpackages/web/src/components/project-ui/AddStudiesForm.jsxpackages/web/src/components/auth-ui/StrengthIndicator.jsxpackages/web/src/components/ErrorBoundary.jsxpackages/web/src/components/project-ui/overview-tab/AddMemberModal.jsxpackages/web/src/components/project-ui/completed-tab/CompletedStudyRow.jsxpackages/web/src/components/billing/PricingTable.jsxpackages/web/src/components/checklist-ui/ROBINSIChecklist/SectionD.jsxpackages/web/src/components/project-ui/CreateProjectForm.jsxpackages/web/src/components/auth-ui/ResetPassword.jsxpackages/web/src/components/auth-ui/MagicLinkForm.jsxpackages/web/src/components/profile-ui/TwoFactorSetup.jsxpackages/web/src/components/checklist-ui/ROBINSIChecklist/SectionA.jsxpackages/web/src/components/profile-ui/SettingsPage.jsxpackages/web/src/components/admin-ui/StorageManagement.jsxpackages/web/src/components/auth-ui/RoleSelector.jsxpackages/web/src/components/checklist-ui/compare/ReconciliationWrapper.jsxpackages/web/src/components/Navbar.jsxpackages/web/src/components/project-ui/ChecklistRow.jsxpackages/web/src/components/project-ui/ProjectCard.jsxpackages/web/src/components/sidebar/LocalChecklistItem.jsxpackages/web/src/components/checklist-ui/ROBINSIChecklist/SectionC.jsxpackages/web/src/components/checklist-ui/ROBINSIChecklist/SectionB.jsxpackages/web/src/components/project-ui/ContactPrompt.jsxpackages/web/src/components/project-ui/add-studies/PdfUploadSection.jsxpackages/web/src/components/profile-ui/MergeAccountsDialog.jsxpackages/web/src/components/checklist-ui/pdf/PdfListItem.jsxpackages/web/src/components/project-ui/add-studies/DoiLookupSection.jsxpackages/web/src/components/checklist-ui/compare/Footer.jsxpackages/web/src/components/auth-ui/TwoFactorVerify.jsxpackages/web/src/components/checklist-ui/ROBINSIChecklist/PlanningSection.jsxpackages/web/src/components/profile-ui/ProfilePage.jsxpackages/web/src/components/auth-ui/CompleteProfile.jsxpackages/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 thesolid-iconslibrary 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
UsecreateMemofor derived values to ensure they update reactivelyUse import aliases from jsconfig.json instead of relative paths
Files:
packages/web/src/components/checklist-ui/pdf/PdfToolbar.jsxpackages/web/src/components/profile-ui/LinkedAccountsSection.jsxpackages/web/src/components/billing/SubscriptionCard.jsxpackages/web/src/components/project-ui/overview-tab/OverviewTab.jsxpackages/web/src/components/checklist-ui/ChecklistsDashboard.jsxpackages/web/src/components/project-ui/add-studies/GoogleDriveSection.jsxpackages/web/src/components/project-ui/reconcile-tab/ReconcileStudyRow.jsxpackages/web/src/components/admin-ui/UserTable.jsxpackages/web/src/components/checklist-ui/ROBINSIChecklist/SignallingQuestion.jsxpackages/web/src/components/project-ui/AddStudiesForm.jsxpackages/web/src/components/auth-ui/StrengthIndicator.jsxpackages/web/src/components/ErrorBoundary.jsxpackages/web/src/components/project-ui/overview-tab/AddMemberModal.jsxpackages/web/src/components/project-ui/completed-tab/CompletedStudyRow.jsxpackages/web/src/components/billing/PricingTable.jsxpackages/web/src/components/checklist-ui/ROBINSIChecklist/SectionD.jsxpackages/web/src/components/project-ui/CreateProjectForm.jsxpackages/web/src/components/auth-ui/ResetPassword.jsxpackages/web/src/components/auth-ui/MagicLinkForm.jsxpackages/web/src/components/profile-ui/TwoFactorSetup.jsxpackages/web/src/components/checklist-ui/ROBINSIChecklist/SectionA.jsxpackages/web/src/components/profile-ui/SettingsPage.jsxpackages/web/src/components/admin-ui/StorageManagement.jsxpackages/web/src/components/auth-ui/RoleSelector.jsxpackages/web/src/components/checklist-ui/compare/ReconciliationWrapper.jsxpackages/web/src/components/Navbar.jsxpackages/web/src/components/project-ui/ChecklistRow.jsxpackages/web/src/components/project-ui/ProjectCard.jsxpackages/web/src/components/sidebar/LocalChecklistItem.jsxpackages/web/src/components/checklist-ui/ROBINSIChecklist/SectionC.jsxpackages/web/src/components/checklist-ui/ROBINSIChecklist/SectionB.jsxpackages/web/src/components/project-ui/ContactPrompt.jsxpackages/web/src/components/project-ui/add-studies/PdfUploadSection.jsxpackages/web/src/components/profile-ui/MergeAccountsDialog.jsxpackages/web/src/components/checklist-ui/pdf/PdfListItem.jsxpackages/web/src/components/project-ui/add-studies/DoiLookupSection.jsxpackages/web/src/components/checklist-ui/compare/Footer.jsxpackages/web/src/components/auth-ui/TwoFactorVerify.jsxpackages/web/src/components/checklist-ui/ROBINSIChecklist/PlanningSection.jsxpackages/web/src/components/profile-ui/ProfilePage.jsxpackages/web/src/components/auth-ui/CompleteProfile.jsxpackages/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.jsxpackages/web/src/components/profile-ui/LinkedAccountsSection.jsxpackages/web/src/components/billing/SubscriptionCard.jsxpackages/web/src/components/project-ui/overview-tab/OverviewTab.jsxpackages/web/src/components/checklist-ui/ChecklistsDashboard.jsxpackages/web/src/components/project-ui/add-studies/GoogleDriveSection.jsxpackages/web/src/components/project-ui/reconcile-tab/ReconcileStudyRow.jsxpackages/web/src/components/admin-ui/UserTable.jsxpackages/web/src/components/checklist-ui/ROBINSIChecklist/SignallingQuestion.jsxpackages/web/src/components/project-ui/AddStudiesForm.jsxpackages/web/src/components/auth-ui/StrengthIndicator.jsxpackages/web/src/components/ErrorBoundary.jsxpackages/web/src/components/project-ui/overview-tab/AddMemberModal.jsxpackages/web/src/components/project-ui/completed-tab/CompletedStudyRow.jsxpackages/web/src/components/billing/PricingTable.jsxpackages/web/src/components/checklist-ui/ROBINSIChecklist/SectionD.jsxpackages/web/src/components/project-ui/CreateProjectForm.jsxpackages/web/src/components/auth-ui/ResetPassword.jsxpackages/web/src/components/auth-ui/MagicLinkForm.jsxpackages/web/src/components/profile-ui/TwoFactorSetup.jsxpackages/web/src/components/checklist-ui/ROBINSIChecklist/SectionA.jsxpackages/web/src/components/profile-ui/SettingsPage.jsxpackages/web/src/components/admin-ui/StorageManagement.jsxpackages/web/src/components/auth-ui/RoleSelector.jsxpackages/web/src/components/checklist-ui/compare/ReconciliationWrapper.jsxpackages/web/src/components/Navbar.jsxpackages/web/src/components/project-ui/ChecklistRow.jsxpackages/web/src/components/project-ui/ProjectCard.jsxpackages/web/src/components/sidebar/LocalChecklistItem.jsxpackages/web/src/components/checklist-ui/ROBINSIChecklist/SectionC.jsxpackages/web/src/components/checklist-ui/ROBINSIChecklist/SectionB.jsxpackages/web/src/components/project-ui/ContactPrompt.jsxpackages/web/src/components/project-ui/add-studies/PdfUploadSection.jsxpackages/web/src/components/profile-ui/MergeAccountsDialog.jsxpackages/web/src/components/checklist-ui/pdf/PdfListItem.jsxpackages/web/src/components/project-ui/add-studies/DoiLookupSection.jsxpackages/web/src/components/checklist-ui/compare/Footer.jsxpackages/web/src/components/auth-ui/TwoFactorVerify.jsxpackages/web/src/components/checklist-ui/ROBINSIChecklist/PlanningSection.jsxpackages/web/src/components/profile-ui/ProfilePage.jsxpackages/web/src/components/auth-ui/CompleteProfile.jsxpackages/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 inpackages/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.jsxpackages/web/src/components/profile-ui/LinkedAccountsSection.jsxpackages/web/src/components/billing/SubscriptionCard.jsxpackages/web/src/components/project-ui/overview-tab/OverviewTab.jsxpackages/web/src/components/checklist-ui/ChecklistsDashboard.jsxpackages/web/src/components/project-ui/add-studies/GoogleDriveSection.jsxpackages/web/src/components/project-ui/reconcile-tab/ReconcileStudyRow.jsxpackages/web/src/components/admin-ui/UserTable.jsxpackages/web/src/components/checklist-ui/ROBINSIChecklist/SignallingQuestion.jsxpackages/web/src/components/project-ui/AddStudiesForm.jsxpackages/web/src/components/auth-ui/StrengthIndicator.jsxpackages/web/src/components/ErrorBoundary.jsxpackages/web/src/components/project-ui/overview-tab/AddMemberModal.jsxpackages/web/src/components/project-ui/completed-tab/CompletedStudyRow.jsxpackages/web/src/components/billing/PricingTable.jsxpackages/web/src/components/checklist-ui/ROBINSIChecklist/SectionD.jsxpackages/web/src/components/project-ui/CreateProjectForm.jsxpackages/web/src/components/auth-ui/ResetPassword.jsxpackages/web/src/components/auth-ui/MagicLinkForm.jsxpackages/web/src/components/profile-ui/TwoFactorSetup.jsxpackages/web/src/components/checklist-ui/ROBINSIChecklist/SectionA.jsxpackages/web/src/components/profile-ui/SettingsPage.jsxpackages/web/src/components/admin-ui/StorageManagement.jsxpackages/web/src/components/auth-ui/RoleSelector.jsxpackages/web/src/components/checklist-ui/compare/ReconciliationWrapper.jsxpackages/web/src/components/Navbar.jsxpackages/web/src/components/project-ui/ChecklistRow.jsxpackages/web/src/components/project-ui/ProjectCard.jsxpackages/web/src/components/sidebar/LocalChecklistItem.jsxpackages/web/src/components/checklist-ui/ROBINSIChecklist/SectionC.jsxpackages/web/src/components/checklist-ui/ROBINSIChecklist/SectionB.jsxpackages/web/src/components/project-ui/ContactPrompt.jsxpackages/web/src/components/project-ui/add-studies/PdfUploadSection.jsxpackages/web/src/components/profile-ui/MergeAccountsDialog.jsxpackages/web/src/components/checklist-ui/pdf/PdfListItem.jsxpackages/web/src/components/project-ui/add-studies/DoiLookupSection.jsxpackages/web/src/components/checklist-ui/compare/Footer.jsxpackages/web/src/components/auth-ui/TwoFactorVerify.jsxpackages/web/src/components/checklist-ui/ROBINSIChecklist/PlanningSection.jsxpackages/web/src/components/profile-ui/ProfilePage.jsxpackages/web/src/components/auth-ui/CompleteProfile.jsxpackages/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.jsxpackages/web/src/components/profile-ui/LinkedAccountsSection.jsxpackages/web/src/components/billing/SubscriptionCard.jsxpackages/web/src/components/project-ui/overview-tab/OverviewTab.jsxpackages/web/src/components/checklist-ui/ChecklistsDashboard.jsxpackages/web/src/components/project-ui/add-studies/GoogleDriveSection.jsxpackages/web/src/components/project-ui/reconcile-tab/ReconcileStudyRow.jsxpackages/web/src/components/admin-ui/UserTable.jsxpackages/web/src/components/checklist-ui/ROBINSIChecklist/SignallingQuestion.jsxpackages/web/src/components/project-ui/AddStudiesForm.jsxpackages/web/src/components/auth-ui/StrengthIndicator.jsxpackages/web/src/components/ErrorBoundary.jsxpackages/web/src/components/project-ui/overview-tab/AddMemberModal.jsxpackages/web/src/components/project-ui/completed-tab/CompletedStudyRow.jsxpackages/web/src/components/billing/PricingTable.jsxpackages/web/src/components/checklist-ui/ROBINSIChecklist/SectionD.jsxpackages/web/src/components/project-ui/CreateProjectForm.jsxpackages/web/src/components/auth-ui/ResetPassword.jsxpackages/web/src/components/auth-ui/MagicLinkForm.jsxpackages/web/src/components/profile-ui/TwoFactorSetup.jsxpackages/web/src/components/checklist-ui/ROBINSIChecklist/SectionA.jsxpackages/web/src/components/profile-ui/SettingsPage.jsxpackages/web/src/components/admin-ui/StorageManagement.jsxpackages/web/src/components/auth-ui/RoleSelector.jsxpackages/web/src/components/checklist-ui/compare/ReconciliationWrapper.jsxpackages/web/src/components/Navbar.jsxpackages/web/src/components/project-ui/ChecklistRow.jsxpackages/web/src/components/project-ui/ProjectCard.jsxpackages/web/src/components/sidebar/LocalChecklistItem.jsxpackages/web/src/components/checklist-ui/ROBINSIChecklist/SectionC.jsxpackages/web/src/components/checklist-ui/ROBINSIChecklist/SectionB.jsxpackages/web/src/components/project-ui/ContactPrompt.jsxpackages/web/src/components/project-ui/add-studies/PdfUploadSection.jsxpackages/web/src/components/profile-ui/MergeAccountsDialog.jsxpackages/web/src/components/checklist-ui/pdf/PdfListItem.jsxpackages/web/src/components/project-ui/add-studies/DoiLookupSection.jsxpackages/web/src/components/checklist-ui/compare/Footer.jsxpackages/web/src/components/auth-ui/TwoFactorVerify.jsxpackages/web/src/components/checklist-ui/ROBINSIChecklist/PlanningSection.jsxpackages/web/src/components/profile-ui/ProfilePage.jsxpackages/web/src/components/auth-ui/CompleteProfile.jsxpackages/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.jsxpackages/web/src/components/profile-ui/LinkedAccountsSection.jsxpackages/web/src/components/billing/SubscriptionCard.jsxpackages/web/src/components/project-ui/overview-tab/OverviewTab.jsxpackages/web/src/components/checklist-ui/ChecklistsDashboard.jsxpackages/web/src/components/project-ui/add-studies/GoogleDriveSection.jsxpackages/web/src/components/project-ui/reconcile-tab/ReconcileStudyRow.jsxpackages/web/src/components/admin-ui/UserTable.jsxpackages/web/src/components/checklist-ui/ROBINSIChecklist/SignallingQuestion.jsxpackages/web/src/components/project-ui/AddStudiesForm.jsxpackages/web/src/components/auth-ui/StrengthIndicator.jsxpackages/web/src/components/ErrorBoundary.jsxpackages/web/src/components/project-ui/overview-tab/AddMemberModal.jsxpackages/web/src/components/project-ui/completed-tab/CompletedStudyRow.jsxpackages/web/src/components/billing/PricingTable.jsxpackages/web/src/components/checklist-ui/ROBINSIChecklist/SectionD.jsxpackages/web/src/components/project-ui/CreateProjectForm.jsxpackages/web/src/components/auth-ui/ResetPassword.jsxpackages/web/src/components/auth-ui/MagicLinkForm.jsxpackages/web/src/components/profile-ui/TwoFactorSetup.jsxpackages/web/src/components/checklist-ui/ROBINSIChecklist/SectionA.jsxpackages/web/src/components/profile-ui/SettingsPage.jsxpackages/web/src/components/admin-ui/StorageManagement.jsxpackages/web/src/components/auth-ui/RoleSelector.jsxpackages/web/src/components/checklist-ui/compare/ReconciliationWrapper.jsxpackages/web/src/components/Navbar.jsxpackages/web/src/components/project-ui/ChecklistRow.jsxpackages/web/src/components/project-ui/ProjectCard.jsxpackages/web/src/components/sidebar/LocalChecklistItem.jsxpackages/web/src/components/checklist-ui/ROBINSIChecklist/SectionC.jsxpackages/web/src/components/checklist-ui/ROBINSIChecklist/SectionB.jsxpackages/web/src/components/project-ui/ContactPrompt.jsxpackages/web/src/components/project-ui/add-studies/PdfUploadSection.jsxpackages/web/src/components/profile-ui/MergeAccountsDialog.jsxpackages/web/src/components/checklist-ui/pdf/PdfListItem.jsxpackages/web/src/components/project-ui/add-studies/DoiLookupSection.jsxpackages/web/src/components/checklist-ui/compare/Footer.jsxpackages/web/src/components/auth-ui/TwoFactorVerify.jsxpackages/web/src/components/checklist-ui/ROBINSIChecklist/PlanningSection.jsxpackages/web/src/components/profile-ui/ProfilePage.jsxpackages/web/src/components/auth-ui/CompleteProfile.jsxpackages/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.jsxpackages/web/src/components/profile-ui/LinkedAccountsSection.jsxpackages/web/src/components/billing/SubscriptionCard.jsxpackages/web/src/components/project-ui/overview-tab/OverviewTab.jsxpackages/web/src/components/checklist-ui/ChecklistsDashboard.jsxpackages/web/src/components/project-ui/add-studies/GoogleDriveSection.jsxpackages/web/src/components/project-ui/reconcile-tab/ReconcileStudyRow.jsxpackages/web/src/components/admin-ui/UserTable.jsxpackages/web/src/components/checklist-ui/ROBINSIChecklist/SignallingQuestion.jsxpackages/web/src/components/project-ui/AddStudiesForm.jsxpackages/web/src/components/auth-ui/StrengthIndicator.jsxpackages/web/src/components/ErrorBoundary.jsxpackages/web/src/components/project-ui/overview-tab/AddMemberModal.jsxpackages/web/src/components/project-ui/completed-tab/CompletedStudyRow.jsxpackages/web/src/components/billing/PricingTable.jsxpackages/web/src/components/checklist-ui/ROBINSIChecklist/SectionD.jsxpackages/web/src/components/project-ui/CreateProjectForm.jsxpackages/web/src/components/auth-ui/ResetPassword.jsxpackages/web/src/components/auth-ui/MagicLinkForm.jsxpackages/web/src/components/profile-ui/TwoFactorSetup.jsxpackages/web/src/components/checklist-ui/ROBINSIChecklist/SectionA.jsxpackages/web/src/components/profile-ui/SettingsPage.jsxpackages/web/src/components/admin-ui/StorageManagement.jsxpackages/web/src/components/auth-ui/RoleSelector.jsxpackages/web/src/components/checklist-ui/compare/ReconciliationWrapper.jsxpackages/web/src/components/Navbar.jsxpackages/web/src/components/project-ui/ChecklistRow.jsxpackages/web/src/components/project-ui/ProjectCard.jsxpackages/web/src/components/sidebar/LocalChecklistItem.jsxpackages/web/src/components/checklist-ui/ROBINSIChecklist/SectionC.jsxpackages/web/src/components/checklist-ui/ROBINSIChecklist/SectionB.jsxpackages/web/src/components/project-ui/ContactPrompt.jsxpackages/web/src/components/project-ui/add-studies/PdfUploadSection.jsxpackages/web/src/components/profile-ui/MergeAccountsDialog.jsxpackages/web/src/components/checklist-ui/pdf/PdfListItem.jsxpackages/web/src/components/project-ui/add-studies/DoiLookupSection.jsxpackages/web/src/components/checklist-ui/compare/Footer.jsxpackages/web/src/components/auth-ui/TwoFactorVerify.jsxpackages/web/src/components/checklist-ui/ROBINSIChecklist/PlanningSection.jsxpackages/web/src/components/profile-ui/ProfilePage.jsxpackages/web/src/components/auth-ui/CompleteProfile.jsxpackages/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.jsxpackages/web/src/components/profile-ui/LinkedAccountsSection.jsxpackages/web/src/components/billing/SubscriptionCard.jsxpackages/web/src/components/project-ui/overview-tab/OverviewTab.jsxpackages/web/src/components/checklist-ui/ChecklistsDashboard.jsxpackages/web/src/components/project-ui/add-studies/GoogleDriveSection.jsxpackages/web/src/components/project-ui/reconcile-tab/ReconcileStudyRow.jsxpackages/web/src/components/admin-ui/UserTable.jsxpackages/web/src/components/checklist-ui/ROBINSIChecklist/SignallingQuestion.jsxpackages/web/src/components/project-ui/AddStudiesForm.jsxpackages/web/src/components/auth-ui/StrengthIndicator.jsxpackages/web/src/components/ErrorBoundary.jsxpackages/web/src/components/project-ui/overview-tab/AddMemberModal.jsxpackages/web/src/components/project-ui/completed-tab/CompletedStudyRow.jsxpackages/web/src/components/billing/PricingTable.jsxpackages/web/src/components/checklist-ui/ROBINSIChecklist/SectionD.jsxpackages/web/src/components/project-ui/CreateProjectForm.jsxpackages/web/src/components/auth-ui/ResetPassword.jsxpackages/web/src/components/auth-ui/MagicLinkForm.jsxpackages/web/src/components/profile-ui/TwoFactorSetup.jsxpackages/web/src/components/checklist-ui/ROBINSIChecklist/SectionA.jsxpackages/web/src/components/profile-ui/SettingsPage.jsxpackages/web/src/components/admin-ui/StorageManagement.jsxpackages/web/src/components/auth-ui/RoleSelector.jsxpackages/web/src/components/checklist-ui/compare/ReconciliationWrapper.jsxpackages/web/src/components/Navbar.jsxpackages/web/src/components/project-ui/ChecklistRow.jsxpackages/web/src/components/project-ui/ProjectCard.jsxpackages/web/src/components/sidebar/LocalChecklistItem.jsxpackages/web/src/components/checklist-ui/ROBINSIChecklist/SectionC.jsxpackages/web/src/components/checklist-ui/ROBINSIChecklist/SectionB.jsxpackages/web/src/components/project-ui/ContactPrompt.jsxpackages/web/src/components/project-ui/add-studies/PdfUploadSection.jsxpackages/web/src/components/profile-ui/MergeAccountsDialog.jsxpackages/web/src/components/checklist-ui/pdf/PdfListItem.jsxpackages/web/src/components/project-ui/add-studies/DoiLookupSection.jsxpackages/web/src/components/checklist-ui/compare/Footer.jsxpackages/web/src/components/auth-ui/TwoFactorVerify.jsxpackages/web/src/components/checklist-ui/ROBINSIChecklist/PlanningSection.jsxpackages/web/src/components/profile-ui/ProfilePage.jsxpackages/web/src/components/auth-ui/CompleteProfile.jsxpackages/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 usehandleFetchErrorfrom@/lib/error-utils.jsfor fetch calls in frontend code with options like{ showToast: true }for error handling
UsecreateFormErrorSignalsfrom@/lib/form-errors.jsfor form validation error handling with field-level and global error management
Files:
packages/web/src/components/checklist-ui/pdf/PdfToolbar.jsxpackages/web/src/components/profile-ui/LinkedAccountsSection.jsxpackages/web/src/components/billing/SubscriptionCard.jsxpackages/web/src/components/project-ui/overview-tab/OverviewTab.jsxpackages/web/src/components/checklist-ui/ChecklistsDashboard.jsxpackages/web/src/components/project-ui/add-studies/GoogleDriveSection.jsxpackages/web/src/components/project-ui/reconcile-tab/ReconcileStudyRow.jsxpackages/web/src/components/admin-ui/UserTable.jsxpackages/web/src/components/checklist-ui/ROBINSIChecklist/SignallingQuestion.jsxpackages/web/src/components/project-ui/AddStudiesForm.jsxpackages/web/src/components/auth-ui/StrengthIndicator.jsxpackages/web/src/components/ErrorBoundary.jsxpackages/web/src/components/project-ui/overview-tab/AddMemberModal.jsxpackages/web/src/components/project-ui/completed-tab/CompletedStudyRow.jsxpackages/web/src/components/billing/PricingTable.jsxpackages/web/src/components/checklist-ui/ROBINSIChecklist/SectionD.jsxpackages/web/src/components/project-ui/CreateProjectForm.jsxpackages/web/src/components/auth-ui/ResetPassword.jsxpackages/web/src/components/auth-ui/MagicLinkForm.jsxpackages/web/src/components/profile-ui/TwoFactorSetup.jsxpackages/web/src/components/checklist-ui/ROBINSIChecklist/SectionA.jsxpackages/web/src/components/profile-ui/SettingsPage.jsxpackages/web/src/components/admin-ui/StorageManagement.jsxpackages/web/src/components/auth-ui/RoleSelector.jsxpackages/web/src/components/checklist-ui/compare/ReconciliationWrapper.jsxpackages/web/src/components/Navbar.jsxpackages/web/src/components/project-ui/ChecklistRow.jsxpackages/web/src/components/project-ui/ProjectCard.jsxpackages/web/src/components/sidebar/LocalChecklistItem.jsxpackages/web/src/components/checklist-ui/ROBINSIChecklist/SectionC.jsxpackages/web/src/components/checklist-ui/ROBINSIChecklist/SectionB.jsxpackages/web/src/components/project-ui/ContactPrompt.jsxpackages/web/src/components/project-ui/add-studies/PdfUploadSection.jsxpackages/web/src/components/profile-ui/MergeAccountsDialog.jsxpackages/web/src/components/checklist-ui/pdf/PdfListItem.jsxpackages/web/src/components/project-ui/add-studies/DoiLookupSection.jsxpackages/web/src/components/checklist-ui/compare/Footer.jsxpackages/web/src/components/auth-ui/TwoFactorVerify.jsxpackages/web/src/components/checklist-ui/ROBINSIChecklist/PlanningSection.jsxpackages/web/src/components/profile-ui/ProfilePage.jsxpackages/web/src/components/auth-ui/CompleteProfile.jsxpackages/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 likeisErrorCodefrom@corates/sharedor@/lib/error-utils.jsto check specific error types instead of manual string comparisons
Files:
packages/web/src/components/checklist-ui/pdf/PdfToolbar.jsxpackages/web/src/components/profile-ui/LinkedAccountsSection.jsxpackages/web/src/components/billing/SubscriptionCard.jsxpackages/web/src/components/project-ui/overview-tab/OverviewTab.jsxpackages/web/src/components/checklist-ui/ChecklistsDashboard.jsxpackages/web/src/components/project-ui/add-studies/GoogleDriveSection.jsxpackages/web/src/components/project-ui/reconcile-tab/ReconcileStudyRow.jsxpackages/web/src/components/admin-ui/UserTable.jsxpackages/web/src/components/checklist-ui/ROBINSIChecklist/SignallingQuestion.jsxpackages/web/src/components/project-ui/AddStudiesForm.jsxpackages/web/src/components/auth-ui/StrengthIndicator.jsxpackages/web/src/components/ErrorBoundary.jsxpackages/web/src/components/project-ui/overview-tab/AddMemberModal.jsxpackages/web/src/components/project-ui/completed-tab/CompletedStudyRow.jsxpackages/web/src/components/billing/PricingTable.jsxpackages/web/src/components/checklist-ui/ROBINSIChecklist/SectionD.jsxpackages/web/src/components/project-ui/CreateProjectForm.jsxpackages/web/src/components/auth-ui/ResetPassword.jsxpackages/web/src/components/auth-ui/MagicLinkForm.jsxpackages/web/src/components/profile-ui/TwoFactorSetup.jsxpackages/web/src/components/checklist-ui/ROBINSIChecklist/SectionA.jsxpackages/web/src/components/profile-ui/SettingsPage.jsxpackages/web/src/components/admin-ui/StorageManagement.jsxpackages/web/src/components/auth-ui/RoleSelector.jsxpackages/web/src/components/checklist-ui/compare/ReconciliationWrapper.jsxpackages/web/src/components/Navbar.jsxpackages/web/src/components/project-ui/ChecklistRow.jsxpackages/web/src/components/project-ui/ProjectCard.jsxpackages/web/src/components/sidebar/LocalChecklistItem.jsxpackages/web/src/components/checklist-ui/ROBINSIChecklist/SectionC.jsxpackages/web/src/components/checklist-ui/ROBINSIChecklist/SectionB.jsxpackages/web/src/components/project-ui/ContactPrompt.jsxpackages/web/src/components/project-ui/add-studies/PdfUploadSection.jsxpackages/web/src/components/profile-ui/MergeAccountsDialog.jsxpackages/web/src/components/checklist-ui/pdf/PdfListItem.jsxpackages/web/src/components/project-ui/add-studies/DoiLookupSection.jsxpackages/web/src/components/checklist-ui/compare/Footer.jsxpackages/web/src/components/auth-ui/TwoFactorVerify.jsxpackages/web/src/components/checklist-ui/ROBINSIChecklist/PlanningSection.jsxpackages/web/src/components/profile-ui/ProfilePage.jsxpackages/web/src/components/auth-ui/CompleteProfile.jsxpackages/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()).
UsecreateSignalfrom solid-js for managing simple reactive values. Prefer derived state with signals or memo over effects when possible.
UsecreateStorefrom solid-js/store for managing complex objects and arrays that require granular reactivity, enabling fine-grained updates where only affected parts re-render.
UsecreateMemofrom 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 theonCleanupfunction 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 theShowcomponent from solid-js for conditional rendering instead of JavaScript ternary operators or logical AND operators.
Use theForcomponent 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 thechildrenhelper from solid-js to ensure proper reactivity and handling of child elements.
Files:
packages/web/src/components/checklist-ui/pdf/PdfToolbar.jsxpackages/web/src/components/profile-ui/LinkedAccountsSection.jsxpackages/web/src/components/billing/SubscriptionCard.jsxpackages/web/src/components/project-ui/overview-tab/OverviewTab.jsxpackages/web/src/components/checklist-ui/ChecklistsDashboard.jsxpackages/web/src/components/project-ui/add-studies/GoogleDriveSection.jsxpackages/web/src/components/project-ui/reconcile-tab/ReconcileStudyRow.jsxpackages/web/src/components/admin-ui/UserTable.jsxpackages/web/src/components/checklist-ui/ROBINSIChecklist/SignallingQuestion.jsxpackages/web/src/components/project-ui/AddStudiesForm.jsxpackages/web/src/components/auth-ui/StrengthIndicator.jsxpackages/web/src/components/ErrorBoundary.jsxpackages/web/src/components/project-ui/overview-tab/AddMemberModal.jsxpackages/web/src/components/project-ui/completed-tab/CompletedStudyRow.jsxpackages/web/src/components/billing/PricingTable.jsxpackages/web/src/components/checklist-ui/ROBINSIChecklist/SectionD.jsxpackages/web/src/components/project-ui/CreateProjectForm.jsxpackages/web/src/components/auth-ui/ResetPassword.jsxpackages/web/src/components/auth-ui/MagicLinkForm.jsxpackages/web/src/components/profile-ui/TwoFactorSetup.jsxpackages/web/src/components/checklist-ui/ROBINSIChecklist/SectionA.jsxpackages/web/src/components/profile-ui/SettingsPage.jsxpackages/web/src/components/admin-ui/StorageManagement.jsxpackages/web/src/components/auth-ui/RoleSelector.jsxpackages/web/src/components/checklist-ui/compare/ReconciliationWrapper.jsxpackages/web/src/components/Navbar.jsxpackages/web/src/components/project-ui/ChecklistRow.jsxpackages/web/src/components/project-ui/ProjectCard.jsxpackages/web/src/components/sidebar/LocalChecklistItem.jsxpackages/web/src/components/checklist-ui/ROBINSIChecklist/SectionC.jsxpackages/web/src/components/checklist-ui/ROBINSIChecklist/SectionB.jsxpackages/web/src/components/project-ui/ContactPrompt.jsxpackages/web/src/components/project-ui/add-studies/PdfUploadSection.jsxpackages/web/src/components/profile-ui/MergeAccountsDialog.jsxpackages/web/src/components/checklist-ui/pdf/PdfListItem.jsxpackages/web/src/components/project-ui/add-studies/DoiLookupSection.jsxpackages/web/src/components/checklist-ui/compare/Footer.jsxpackages/web/src/components/auth-ui/TwoFactorVerify.jsxpackages/web/src/components/checklist-ui/ROBINSIChecklist/PlanningSection.jsxpackages/web/src/components/profile-ui/ProfilePage.jsxpackages/web/src/components/auth-ui/CompleteProfile.jsxpackages/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.jsxpackages/web/src/components/profile-ui/LinkedAccountsSection.jsxpackages/web/src/components/billing/SubscriptionCard.jsxpackages/web/src/components/project-ui/overview-tab/OverviewTab.jsxpackages/web/src/components/checklist-ui/ChecklistsDashboard.jsxpackages/web/src/components/project-ui/add-studies/GoogleDriveSection.jsxpackages/web/src/components/project-ui/reconcile-tab/ReconcileStudyRow.jsxpackages/web/src/components/admin-ui/UserTable.jsxpackages/web/src/components/checklist-ui/ROBINSIChecklist/SignallingQuestion.jsxpackages/web/src/components/project-ui/AddStudiesForm.jsxpackages/web/src/components/auth-ui/StrengthIndicator.jsxpackages/web/src/components/ErrorBoundary.jsxpackages/web/src/components/project-ui/overview-tab/AddMemberModal.jsxpackages/web/src/components/project-ui/completed-tab/CompletedStudyRow.jsxpackages/web/src/components/billing/PricingTable.jsxpackages/web/src/components/checklist-ui/ROBINSIChecklist/SectionD.jsxpackages/web/src/components/project-ui/CreateProjectForm.jsxpackages/web/src/components/auth-ui/ResetPassword.jsxpackages/web/src/components/auth-ui/MagicLinkForm.jsxpackages/web/src/components/profile-ui/TwoFactorSetup.jsxpackages/web/src/components/checklist-ui/ROBINSIChecklist/SectionA.jsxpackages/web/src/components/profile-ui/SettingsPage.jsxpackages/web/src/components/admin-ui/StorageManagement.jsxpackages/web/src/components/auth-ui/RoleSelector.jsxpackages/web/src/components/checklist-ui/compare/ReconciliationWrapper.jsxpackages/web/src/components/Navbar.jsxpackages/web/src/components/project-ui/ChecklistRow.jsxpackages/web/src/components/project-ui/ProjectCard.jsxpackages/web/src/components/sidebar/LocalChecklistItem.jsxpackages/web/src/components/checklist-ui/ROBINSIChecklist/SectionC.jsxpackages/web/src/components/checklist-ui/ROBINSIChecklist/SectionB.jsxpackages/web/src/components/project-ui/ContactPrompt.jsxpackages/web/src/components/project-ui/add-studies/PdfUploadSection.jsxpackages/web/src/components/profile-ui/MergeAccountsDialog.jsxpackages/web/src/components/checklist-ui/pdf/PdfListItem.jsxpackages/web/src/components/project-ui/add-studies/DoiLookupSection.jsxpackages/web/src/components/checklist-ui/compare/Footer.jsxpackages/web/src/components/auth-ui/TwoFactorVerify.jsxpackages/web/src/components/checklist-ui/ROBINSIChecklist/PlanningSection.jsxpackages/web/src/components/profile-ui/ProfilePage.jsxpackages/web/src/components/auth-ui/CompleteProfile.jsxpackages/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.jsxpackages/web/src/components/profile-ui/LinkedAccountsSection.jsxpackages/web/src/components/billing/SubscriptionCard.jsxpackages/web/src/components/project-ui/overview-tab/OverviewTab.jsxpackages/web/src/components/checklist-ui/ChecklistsDashboard.jsxpackages/web/src/components/project-ui/add-studies/GoogleDriveSection.jsxpackages/web/src/components/project-ui/reconcile-tab/ReconcileStudyRow.jsxpackages/web/src/components/admin-ui/UserTable.jsxpackages/web/src/components/checklist-ui/ROBINSIChecklist/SignallingQuestion.jsxpackages/web/src/components/project-ui/AddStudiesForm.jsxpackages/web/src/components/auth-ui/StrengthIndicator.jsxpackages/web/src/components/ErrorBoundary.jsxpackages/web/src/components/project-ui/overview-tab/AddMemberModal.jsxpackages/web/src/components/project-ui/completed-tab/CompletedStudyRow.jsxpackages/web/src/components/billing/PricingTable.jsxpackages/web/src/components/checklist-ui/ROBINSIChecklist/SectionD.jsxpackages/web/src/components/project-ui/CreateProjectForm.jsxpackages/web/src/components/auth-ui/ResetPassword.jsxpackages/web/src/components/auth-ui/MagicLinkForm.jsxpackages/web/src/components/profile-ui/TwoFactorSetup.jsxpackages/web/src/components/checklist-ui/ROBINSIChecklist/SectionA.jsxpackages/web/src/components/profile-ui/SettingsPage.jsxpackages/web/src/components/admin-ui/StorageManagement.jsxpackages/web/src/components/auth-ui/RoleSelector.jsxpackages/web/src/components/checklist-ui/compare/ReconciliationWrapper.jsxpackages/web/src/components/Navbar.jsxpackages/web/src/components/project-ui/ChecklistRow.jsxpackages/web/src/components/project-ui/ProjectCard.jsxpackages/web/src/components/sidebar/LocalChecklistItem.jsxpackages/web/src/components/checklist-ui/ROBINSIChecklist/SectionC.jsxpackages/web/src/components/checklist-ui/ROBINSIChecklist/SectionB.jsxpackages/web/src/components/project-ui/ContactPrompt.jsxpackages/web/src/components/project-ui/add-studies/PdfUploadSection.jsxpackages/web/src/components/profile-ui/MergeAccountsDialog.jsxpackages/web/src/components/checklist-ui/pdf/PdfListItem.jsxpackages/web/src/components/project-ui/add-studies/DoiLookupSection.jsxpackages/web/src/components/checklist-ui/compare/Footer.jsxpackages/web/src/components/auth-ui/TwoFactorVerify.jsxpackages/web/src/components/checklist-ui/ROBINSIChecklist/PlanningSection.jsxpackages/web/src/components/profile-ui/ProfilePage.jsxpackages/web/src/components/auth-ui/CompleteProfile.jsxpackages/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.jsxpackages/web/src/components/profile-ui/LinkedAccountsSection.jsxpackages/web/src/components/billing/SubscriptionCard.jsxpackages/web/src/components/project-ui/overview-tab/OverviewTab.jsxpackages/web/src/components/checklist-ui/ChecklistsDashboard.jsxpackages/web/src/components/project-ui/add-studies/GoogleDriveSection.jsxpackages/web/src/components/project-ui/reconcile-tab/ReconcileStudyRow.jsxpackages/web/src/components/admin-ui/UserTable.jsxpackages/web/src/components/checklist-ui/ROBINSIChecklist/SignallingQuestion.jsxpackages/web/src/components/project-ui/AddStudiesForm.jsxpackages/web/src/components/auth-ui/StrengthIndicator.jsxpackages/web/src/components/ErrorBoundary.jsxpackages/web/src/components/project-ui/overview-tab/AddMemberModal.jsxpackages/web/src/components/project-ui/completed-tab/CompletedStudyRow.jsxpackages/web/src/components/billing/PricingTable.jsxpackages/web/src/components/checklist-ui/ROBINSIChecklist/SectionD.jsxpackages/web/src/components/project-ui/CreateProjectForm.jsxpackages/web/src/components/auth-ui/ResetPassword.jsxpackages/web/src/components/auth-ui/MagicLinkForm.jsxpackages/web/src/components/profile-ui/TwoFactorSetup.jsxpackages/web/src/components/checklist-ui/ROBINSIChecklist/SectionA.jsxpackages/web/src/components/profile-ui/SettingsPage.jsxpackages/web/src/components/admin-ui/StorageManagement.jsxpackages/web/src/components/auth-ui/RoleSelector.jsxpackages/web/src/components/checklist-ui/compare/ReconciliationWrapper.jsxpackages/web/src/components/Navbar.jsxpackages/web/src/components/project-ui/ChecklistRow.jsxpackages/web/src/components/project-ui/ProjectCard.jsxpackages/web/src/components/sidebar/LocalChecklistItem.jsxpackages/web/src/components/checklist-ui/ROBINSIChecklist/SectionC.jsxpackages/web/src/components/checklist-ui/ROBINSIChecklist/SectionB.jsxpackages/web/src/components/project-ui/ContactPrompt.jsxpackages/web/src/components/project-ui/add-studies/PdfUploadSection.jsxpackages/web/src/components/profile-ui/MergeAccountsDialog.jsxpackages/web/src/components/checklist-ui/pdf/PdfListItem.jsxpackages/web/src/components/project-ui/add-studies/DoiLookupSection.jsxpackages/web/src/components/checklist-ui/compare/Footer.jsxpackages/web/src/components/auth-ui/TwoFactorVerify.jsxpackages/web/src/components/checklist-ui/ROBINSIChecklist/PlanningSection.jsxpackages/web/src/components/profile-ui/ProfilePage.jsxpackages/web/src/components/auth-ui/CompleteProfile.jsxpackages/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.jsxpackages/web/src/components/project-ui/overview-tab/OverviewTab.jsxpackages/web/src/components/admin-ui/UserTable.jsxpackages/web/src/components/auth-ui/StrengthIndicator.jsxpackages/web/src/components/project-ui/overview-tab/AddMemberModal.jsxpackages/web/src/components/checklist-ui/ROBINSIChecklist/SectionD.jsxpackages/web/src/components/project-ui/CreateProjectForm.jsxpackages/web/src/components/auth-ui/ResetPassword.jsxpackages/web/src/components/auth-ui/MagicLinkForm.jsxpackages/web/src/components/auth-ui/RoleSelector.jsxpackages/web/src/components/project-ui/ChecklistRow.jsxpackages/web/src/components/project-ui/ProjectCard.jsxpackages/web/src/components/profile-ui/MergeAccountsDialog.jsxpackages/web/src/components/checklist-ui/compare/Footer.jsxpackages/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.jsxpackages/web/src/components/project-ui/CreateProjectForm.jsxpackages/web/src/components/auth-ui/MagicLinkForm.jsxpackages/web/src/components/project-ui/ProjectCard.jsxpackages/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.jsxpackages/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
Summary by CodeRabbit
Documentation
Chores
Accessibility / Style
Misc
✏️ Tip: You can customize this high-level summary in your review settings.