Skip to content

add resources pages for supported tools#301

Merged
InfinityBowman merged 1 commit into
mainfrom
264-robins-i-v2-resources-page
Jan 17, 2026
Merged

add resources pages for supported tools#301
InfinityBowman merged 1 commit into
mainfrom
264-robins-i-v2-resources-page

Conversation

@InfinityBowman
Copy link
Copy Markdown
Owner

@InfinityBowman InfinityBowman commented Jan 17, 2026

Summary by CodeRabbit

  • New Features

    • Added dedicated resource pages for AMSTAR 2, ROBINS-I, and RoB 2 with tool information, references, and scoring details.
    • Redesigned Resources page with dynamic tool listings and improved navigation.
    • Updated tool metadata links to point to specific resource pages.
  • Style

    • Adjusted vertical spacing on Contact, Privacy, Security, and Terms pages for improved layout consistency.

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

@InfinityBowman InfinityBowman linked an issue Jan 17, 2026 that may be closed by this pull request
@coderabbitai
Copy link
Copy Markdown

coderabbitai Bot commented Jan 17, 2026

📝 Walkthrough

Walkthrough

The PR introduces a dedicated resource pages system by replacing a static Resources route with dynamic tool-specific pages. It centralizes tool content in a new library, creates a reusable ToolResourcePage component, updates routing configuration and sitemap, and redirects checklist metadata URLs to the new resource pages.

Changes

Cohort / File(s) Summary
Config & Static Assets
packages/landing/app.config.js, packages/landing/public/sitemap.xml
Expanded prerender routes to include /pricing and /resources/{amstar2,robins-i,rob2}; updated sitemap entries with new resource URLs.
Tool Content Library
packages/landing/src/lib/tool-content.js
New module exporting TOOL_CONTENT, getToolBySlug(), and getAllTools() utilities to centralize tool metadata, descriptions, score levels, and references.
Resource Page Components
packages/landing/src/components/resources/ToolResourcePage.jsx
New component with subcomponents (ToolContent, ScoreLevelCard, NotFoundPage) for rendering individual tool resource pages with SEO, scoring visuals, and references.
Resource Routes
packages/landing/src/routes/resources.jsx (deleted)
packages/landing/src/routes/resources/index.jsx, packages/landing/src/routes/resources/{amstar2,robins-i,rob2}.jsx
Removed static Resources route; added dynamic resources listing page and three tool-specific routes using ToolResourcePage and tool data lookups.
Page Layout Adjustments
packages/landing/src/routes/{contact,privacy,security,terms}.jsx
Reduced vertical padding from py-16 to py-12 on main containers across four pages.
Component Updates
packages/landing/src/components/SupportedTools.jsx
Changed from hard-coded tool array to dynamic mapping via getAllTools(); updated anchor links to point to tool-specific resource pages.
Metadata Updates
packages/web/src/checklist-registry/types.js
Updated CHECKLIST_METADATA URLs: AMSTAR 2, ROBINS-I, and RoB 2 now point to respective /resources/{slug} pages instead of generic /resources.

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~25 minutes

Possibly related PRs

🚥 Pre-merge checks | ✅ 2 | ❌ 1
❌ Failed checks (1 warning)
Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 11.76% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (2 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title accurately describes the main change: adding dedicated resource pages for the supported tools (AMSTAR 2, ROBINS-I, and RoB 2).

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

✨ Finishing touches
  • 📝 Generate docstrings

🧹 Recent nitpick comments
packages/landing/src/components/SupportedTools.jsx (1)

49-53: Use <Show> instead of a ternary for conditional element rendering.
SolidJS guidelines prefer <Show> for conditional rendering. As per coding guidelines, consider refactoring the <a>/<div> switch.

♻️ Suggested refactor
-import { For } from 'solid-js';
+import { For, Show } from 'solid-js';
@@
-            return isAvailable ?
-                <a href={tool.href} rel='external' class={`${baseClasses} ${interactiveClasses}`}>
-                  {content}
-                </a>
-              : <div class={baseClasses}>{content}</div>;
+            return (
+              <Show
+                when={isAvailable}
+                fallback={<div class={baseClasses}>{content}</div>}
+              >
+                <a href={tool.href} rel='external' class={`${baseClasses} ${interactiveClasses}`}>
+                  {content}
+                </a>
+              </Show>
+            );
📜 Recent review details

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 88f0f18 and 9b2dada.

📒 Files selected for processing (15)
  • packages/landing/app.config.js
  • packages/landing/public/sitemap.xml
  • packages/landing/src/components/SupportedTools.jsx
  • packages/landing/src/components/resources/ToolResourcePage.jsx
  • packages/landing/src/lib/tool-content.js
  • packages/landing/src/routes/contact.jsx
  • packages/landing/src/routes/privacy.jsx
  • packages/landing/src/routes/resources.jsx
  • packages/landing/src/routes/resources/amstar2.jsx
  • packages/landing/src/routes/resources/index.jsx
  • packages/landing/src/routes/resources/rob2.jsx
  • packages/landing/src/routes/resources/robins-i.jsx
  • packages/landing/src/routes/security.jsx
  • packages/landing/src/routes/terms.jsx
  • packages/web/src/checklist-registry/types.js
💤 Files with no reviewable changes (1)
  • packages/landing/src/routes/resources.jsx
🧰 Additional context used
📓 Path-based instructions (11)
{packages/web/**,packages/landing/**}/**/*.{jsx,tsx}

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

{packages/web/**,packages/landing/**}/**/*.{jsx,tsx}: NEVER destructure props in SolidJS components - access props directly or wrap in functions to maintain reactivity
Use external stores in packages/web/src/stores/ for shared/cross-feature state instead of prop-drilling
Keep SolidJS components lean and focused on rendering - move business logic to stores, primitives, or utilities
Create reusable logic in primitives (hooks) in packages/web/src/primitives/ and import them into components
Use Solid's Show component for conditional rendering instead of ternary operators
Use Solid's For component for rendering lists instead of Array.map()
Use the children helper when manipulating props.children in SolidJS components

Use Show and For components for conditional and list rendering in SolidJS

Files:

  • packages/landing/src/routes/security.jsx
  • packages/landing/src/routes/privacy.jsx
  • packages/landing/src/routes/resources/robins-i.jsx
  • packages/landing/src/routes/resources/index.jsx
  • packages/landing/src/routes/resources/amstar2.jsx
  • packages/landing/src/components/SupportedTools.jsx
  • packages/landing/src/routes/resources/rob2.jsx
  • packages/landing/src/routes/terms.jsx
  • packages/landing/src/components/resources/ToolResourcePage.jsx
  • packages/landing/src/routes/contact.jsx
{packages/web/**,packages/landing/**}/**/*.{js,jsx,ts,tsx}

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

{packages/web/**,packages/landing/**}/**/*.{js,jsx,ts,tsx}: Use createSignal for simple reactive values in SolidJS components
Use createStore for complex objects and arrays that need granular reactivity in SolidJS
Use createMemo for computed/derived values that depend on reactive state in SolidJS
Always clean up SolidJS effects that create subscriptions or timers using onCleanup
Import stores directly in components and use store read/write action pattern - read from store, write via actions store
Prefer derived state with createMemo or signals over effects whenever possible
Use local createSignal or createStore for local component state; use external stores for shared/cross-feature state

{packages/web/**,packages/landing/**}/**/*.{js,jsx,ts,tsx}: NEVER destructure props in SolidJS components - it breaks reactivity. Access props directly (e.g., props.name) or wrap in a function (e.g., () => props.name)
Store imports should access store data directly from external stores (packages/web/src/stores/) rather than receiving store data via props
Use createSignal for simple, reactive values in SolidJS
Use createStore for complex objects and nested state in SolidJS, with nested updates using setState pattern (e.g., setState('items', items => [...items, newItem]))
Use createMemo for derived/computed values in SolidJS to maintain reactivity
Use local createSignal or createStore for local component state
Components should receive at most 1-5 props for local configuration only
Move business logic to stores, utilities, or SolidJS primitives rather than keeping it in component code

Files:

  • packages/landing/src/routes/security.jsx
  • packages/landing/app.config.js
  • packages/landing/src/routes/privacy.jsx
  • packages/landing/src/routes/resources/robins-i.jsx
  • packages/landing/src/routes/resources/index.jsx
  • packages/landing/src/routes/resources/amstar2.jsx
  • packages/landing/src/components/SupportedTools.jsx
  • packages/web/src/checklist-registry/types.js
  • packages/landing/src/routes/resources/rob2.jsx
  • packages/landing/src/routes/terms.jsx
  • packages/landing/src/components/resources/ToolResourcePage.jsx
  • packages/landing/src/lib/tool-content.js
  • packages/landing/src/routes/contact.jsx
**/*.{js,jsx,ts,tsx}

📄 CodeRabbit inference engine (.cursor/rules/yjs-sync.mdc)

**/*.{js,jsx,ts,tsx}: Use the useProject hook for managing Yjs connections with reference counting instead of creating Y.Doc instances directly
Never create Y.Doc instances directly; always use the connection registry managed by useProject
Access Y.Doc connection state via projectStore.getConnectionState(projectId) instead of checking connection state directly
Read Yjs-synced data from projectStore (using getStudies, getChecklist, etc.) rather than accessing Y.Doc maps/arrays directly
Use operation functions from useProject or projectActionsStore for writing data instead of directly modifying Y.Doc
Don't store Y.Doc references in component state; always retrieve the connection through useProject
Handle connection cleanup via onCleanup() in Solid.js components or equivalent cleanup patterns, calling disconnect() when the component unmounts

**/*.{js,jsx,ts,tsx}: For UI icons, use solid-icons library or SVGs only (never emojis)
Prefer modern ES6+ syntax and features
Use import aliases from jsconfig.json (see ui-components.mdc)
Use Zod for schema and input validation (backend)
Code comments should not repeat what the code is saying. Instead, reserve comments for explaining why something is being done or to provide context that is not obvious from the code itself
When leaving incomplete work or flagging something for future attention, use the pattern: // TODO(agent): Brief description of what needs to be done with relevant doc section reference if applicable

Files:

  • packages/landing/src/routes/security.jsx
  • packages/landing/app.config.js
  • packages/landing/src/routes/privacy.jsx
  • packages/landing/src/routes/resources/robins-i.jsx
  • packages/landing/src/routes/resources/index.jsx
  • packages/landing/src/routes/resources/amstar2.jsx
  • packages/landing/src/components/SupportedTools.jsx
  • packages/web/src/checklist-registry/types.js
  • packages/landing/src/routes/resources/rob2.jsx
  • packages/landing/src/routes/terms.jsx
  • packages/landing/src/components/resources/ToolResourcePage.jsx
  • packages/landing/src/lib/tool-content.js
  • packages/landing/src/routes/contact.jsx
**/*.{js,ts,jsx,tsx}

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

**/*.{js,ts,jsx,tsx}: Prefer modern ES6+ syntax and features
Comments should explain why something is being done, not what the code is doing
Reserve comments for explaining intent, context, workarounds, assumptions, edge cases, or limitations
Use TODO(agent): prefix for incomplete work or flagged items with brief description and relevant doc references

Files:

  • packages/landing/src/routes/security.jsx
  • packages/landing/app.config.js
  • packages/landing/src/routes/privacy.jsx
  • packages/landing/src/routes/resources/robins-i.jsx
  • packages/landing/src/routes/resources/index.jsx
  • packages/landing/src/routes/resources/amstar2.jsx
  • packages/landing/src/components/SupportedTools.jsx
  • packages/web/src/checklist-registry/types.js
  • packages/landing/src/routes/resources/rob2.jsx
  • packages/landing/src/routes/terms.jsx
  • packages/landing/src/components/resources/ToolResourcePage.jsx
  • packages/landing/src/lib/tool-content.js
  • packages/landing/src/routes/contact.jsx
packages/**/*.{ts,tsx,js,jsx}

📄 CodeRabbit inference engine (AGENTS.md)

Use TODO(agent) comments for incomplete work, referencing relevant documentation sections

Files:

  • packages/landing/src/routes/security.jsx
  • packages/landing/app.config.js
  • packages/landing/src/routes/privacy.jsx
  • packages/landing/src/routes/resources/robins-i.jsx
  • packages/landing/src/routes/resources/index.jsx
  • packages/landing/src/routes/resources/amstar2.jsx
  • packages/landing/src/components/SupportedTools.jsx
  • packages/web/src/checklist-registry/types.js
  • packages/landing/src/routes/resources/rob2.jsx
  • packages/landing/src/routes/terms.jsx
  • packages/landing/src/components/resources/ToolResourcePage.jsx
  • packages/landing/src/lib/tool-content.js
  • packages/landing/src/routes/contact.jsx
packages/web/src/**/*.{js,jsx}

📄 CodeRabbit inference engine (.cursor/rules/form-state.mdc)

packages/web/src/**/*.{js,jsx}: Save form state to IndexedDB before initiating OAuth redirects (Google Drive, ORCID) using saveFormState() with form type ('createProject' or 'addStudies') and serializable state only
Only save serializable data to IndexedDB—exclude File objects, ArrayBuffers, functions, and other non-serializable objects from form state persistence
Restore form state after OAuth redirects by checking URL restore params with getRestoreParamsFromUrl(), retrieving saved state with getFormState(), restoring to form, clearing saved state with clearFormState(), and clearing URL params with clearRestoreParamsFromUrl()
For temporary File object storage during OAuth flows (e.g., pending PDFs), use projectStore.setPendingProjectData() instead of IndexedDB, as File objects cannot be serialized
Add restore parameters to the URL after OAuth redirects in the format '?restore=&projectId=' to signal form state restoration on mount
Clear URL restore parameters after form state restoration by calling clearRestoreParamsFromUrl() to prevent stale restoration attempts on subsequent navigation
Form state persistence library functions (saveFormState, getFormState, clearFormState, getRestoreParamsFromUrl, clearRestoreParamsFromUrl) are implemented in packages/web/src/lib/formStatePersistence.js and should be imported from @/lib/formStatePersistence.js

Files:

  • packages/web/src/checklist-registry/types.js
packages/web/src/**/*.{js,jsx,ts,tsx}

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

packages/web/src/**/*.{js,jsx,ts,tsx}: Always use uploadPdf from @api/pdf-api.js for uploading PDF files. Pass object with projectId, studyId, tag ('primary' or 'supplementary'), and fileName
Validate PDF files on frontend by checking file.type includes 'pdf' and file.size is within MAX_PDF_SIZE limit (full validation is done on backend)
Use cachePdf and getCachedPdf from @primitives/pdfCache.js for caching PDF data in IndexedDB
Implement PDF caching strategy: check cache first, download from server if not cached, then cache the downloaded PDF
Store only PDF metadata in Yjs (id, name, size, tag, uploadedAt, uploadedBy), never store PDF binary data in Yjs as it is too large
Use importFromGoogleDrive from @api/google-drive.js for importing PDFs from Google Drive. Pass fileId, projectId, studyId, and tag
Save form state using saveFormState from @/lib/formStatePersistence.js before triggering OAuth redirects for Google Drive
Use addPdfToStudy operation from useProject hook to add PDFs to a study, passing id, name, size, tag, uploadedAt, and uploadedBy
Use removePdfFromStudy operation from useProject hook to remove PDFs from a study
Use pdfPreviewStore from @/stores/pdfPreviewStore.js for managing PDF preview state (openPreview, closePreview, getPreview methods)
Use downloadPdf from @api/pdf-api.js to download PDFs from server, then cache the result using cachePdf
Always cache PDFs after download and check cache before downloading to avoid redundant downloads
Use PDF operations from useProject hook instead of bypassing through direct API calls

Files:

  • packages/web/src/checklist-registry/types.js
packages/web/src/**

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

packages/web/src/**: Use human-readable slug in frontend URLs: /orgs/:orgSlug/...
Use orgId (UUID) for API calls, not orgSlug, when making fetch requests to backend endpoints

Files:

  • packages/web/src/checklist-registry/types.js
packages/web/**/*.{js,ts,jsx,tsx}

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

packages/web/**/*.{js,ts,jsx,tsx}: Use apiFetch for all frontend API calls instead of raw fetch to automatically handle JSON parsing, errors, and toast notifications
Use handleFetchError for wrapping legacy raw fetch calls in frontend code (legacy pattern, prefer apiFetch)
Use error utility functions like isErrorCode from error-utils to check specific error types instead of direct string comparisons

Files:

  • packages/web/src/checklist-registry/types.js
packages/{web,workers}/**/*.{js,ts,jsx,tsx}

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

Never throw string literals; always throw Error objects or return domain errors from API routes

Files:

  • packages/web/src/checklist-registry/types.js
{packages/web/src/stores/**/*.{js,jsx,ts,tsx},packages/web/src/**/*.{js,jsx,ts,tsx}}

📄 CodeRabbit inference engine (.github/instructions/solidjs.instructions.md)

Shared or cross-feature state should use external stores located in packages/web/src/stores/

Files:

  • packages/web/src/checklist-registry/types.js
🧠 Learnings (17)
📚 Learning: 2025-12-27T03:02:26.947Z
Learnt from: CR
Repo: InfinityBowman/corates PR: 0
File: .cursor/rules/solidjs.mdc:0-0
Timestamp: 2025-12-27T03:02:26.947Z
Learning: Applies to {packages/web/**,packages/landing/**}/**/*.{jsx,tsx} : Keep SolidJS components lean and focused on rendering - move business logic to stores, primitives, or utilities

Applied to files:

  • packages/landing/src/routes/security.jsx
  • packages/landing/src/routes/privacy.jsx
  • packages/landing/src/routes/contact.jsx
📚 Learning: 2025-12-27T03:02:26.947Z
Learnt from: CR
Repo: InfinityBowman/corates PR: 0
File: .cursor/rules/solidjs.mdc:0-0
Timestamp: 2025-12-27T03:02:26.947Z
Learning: Applies to {packages/web/**,packages/landing/**}/**/*.{jsx,tsx} : Create reusable logic in primitives (hooks) in packages/web/src/primitives/ and import them into components

Applied to files:

  • packages/landing/src/routes/resources/index.jsx
  • packages/landing/src/components/SupportedTools.jsx
📚 Learning: 2025-12-27T03:01:06.933Z
Learnt from: CR
Repo: InfinityBowman/corates PR: 0
File: .cursor/rules/checklist-operations.mdc:0-0
Timestamp: 2025-12-27T03:01:06.933Z
Learning: Applies to packages/web/src/components/checklist-ui/**,packages/web/src/AMSTAR2/** : Use scoreChecklist utility from `@/AMSTAR2/checklist.js` to determine quality assessment rating: 'High' | 'Moderate' | 'Low' | 'Critically Low'

Applied to files:

  • packages/landing/src/routes/resources/amstar2.jsx
  • packages/landing/src/components/SupportedTools.jsx
  • packages/web/src/checklist-registry/types.js
  • packages/landing/src/components/resources/ToolResourcePage.jsx
📚 Learning: 2025-12-27T03:02:14.854Z
Learnt from: CR
Repo: InfinityBowman/corates PR: 0
File: .cursor/rules/reconciliation.mdc:0-0
Timestamp: 2025-12-27T03:02:14.854Z
Learning: Applies to {packages/web/src/components/checklist-ui/compare/**,packages/web/src/AMSTAR2/checklist-compare.js} : Use compareChecklists utility from checklist-compare.js for comparing reviewer checklists

Applied to files:

  • packages/landing/src/routes/resources/amstar2.jsx
  • packages/landing/src/components/SupportedTools.jsx
  • packages/web/src/checklist-registry/types.js
📚 Learning: 2025-12-27T03:01:06.933Z
Learnt from: CR
Repo: InfinityBowman/corates PR: 0
File: .cursor/rules/checklist-operations.mdc:0-0
Timestamp: 2025-12-27T03:01:06.933Z
Learning: Applies to packages/web/src/components/checklist-ui/**,packages/web/src/AMSTAR2/**,packages/web/src/ROBINS-I/**,packages/web/src/lib/checklist-domain.js,packages/web/src/primitives/useProject/checklists.js : Use checklist operations from useProject hook (createChecklist, updateChecklistAnswer, getChecklistData) instead of manually updating checklist structure

Applied to files:

  • packages/landing/src/components/SupportedTools.jsx
  • packages/web/src/checklist-registry/types.js
📚 Learning: 2025-12-27T03:01:06.933Z
Learnt from: CR
Repo: InfinityBowman/corates PR: 0
File: .cursor/rules/checklist-operations.mdc:0-0
Timestamp: 2025-12-27T03:01:06.933Z
Learning: Applies to packages/web/src/components/checklist-ui/**,packages/web/src/AMSTAR2/**,packages/web/src/ROBINS-I/**,packages/web/src/lib/checklist-domain.js : Use getChecklistStatus utility from `@/lib/checklist-domain.js` to determine current checklist status before performing operations

Applied to files:

  • packages/landing/src/components/SupportedTools.jsx
  • packages/web/src/checklist-registry/types.js
📚 Learning: 2025-12-27T03:02:26.947Z
Learnt from: CR
Repo: InfinityBowman/corates PR: 0
File: .cursor/rules/solidjs.mdc:0-0
Timestamp: 2025-12-27T03:02:26.947Z
Learning: Applies to {packages/web/**,packages/landing/**}/**/*.{jsx,tsx} : Use external stores in packages/web/src/stores/ for shared/cross-feature state instead of prop-drilling

Applied to files:

  • packages/landing/src/components/SupportedTools.jsx
📚 Learning: 2025-12-27T03:02:26.947Z
Learnt from: CR
Repo: InfinityBowman/corates PR: 0
File: .cursor/rules/solidjs.mdc:0-0
Timestamp: 2025-12-27T03:02:26.947Z
Learning: Applies to {packages/web/**,packages/landing/**}/**/*.{jsx,tsx} : Use Solid's For component for rendering lists instead of Array.map()

Applied to files:

  • packages/landing/src/components/SupportedTools.jsx
📚 Learning: 2026-01-17T00:25:12.507Z
Learnt from: CR
Repo: InfinityBowman/corates PR: 0
File: .github/instructions/solidjs.instructions.md:0-0
Timestamp: 2026-01-17T00:25:12.507Z
Learning: Applies to {packages/web/**,packages/landing/**}/**/*.{jsx,tsx} : Use Show and For components for conditional and list rendering in SolidJS

Applied to files:

  • packages/landing/src/components/SupportedTools.jsx
  • packages/landing/src/components/resources/ToolResourcePage.jsx
📚 Learning: 2025-12-27T03:02:26.947Z
Learnt from: CR
Repo: InfinityBowman/corates PR: 0
File: .cursor/rules/solidjs.mdc:0-0
Timestamp: 2025-12-27T03:02:26.947Z
Learning: Applies to {packages/web/**,packages/landing/**}/**/*.{jsx,tsx} : Use Solid's Show component for conditional rendering instead of ternary operators

Applied to files:

  • packages/landing/src/components/SupportedTools.jsx
  • packages/landing/src/components/resources/ToolResourcePage.jsx
📚 Learning: 2025-12-27T03:01:06.933Z
Learnt from: CR
Repo: InfinityBowman/corates PR: 0
File: .cursor/rules/checklist-operations.mdc:0-0
Timestamp: 2025-12-27T03:01:06.933Z
Learning: Applies to packages/web/src/components/checklist-ui/**,packages/web/src/ROBINS-I/** : Use scoreChecklist utility from `@/ROBINS-I/checklist.js` to determine risk of bias rating: 'Low' | 'Moderate' | 'Serious' | 'Critical'

Applied to files:

  • packages/landing/src/components/SupportedTools.jsx
  • packages/web/src/checklist-registry/types.js
  • packages/landing/src/components/resources/ToolResourcePage.jsx
📚 Learning: 2025-12-27T03:01:06.933Z
Learnt from: CR
Repo: InfinityBowman/corates PR: 0
File: .cursor/rules/checklist-operations.mdc:0-0
Timestamp: 2025-12-27T03:01:06.933Z
Learning: Applies to packages/web/src/components/checklist-ui/**,packages/web/src/AMSTAR2/**,packages/web/src/ROBINS-I/**,packages/web/src/lib/checklist-domain.js : Maintain separate answer format implementations for each checklist type (AMSTAR2, ROBINS-I, Generic) to prevent data corruption

Applied to files:

  • packages/web/src/checklist-registry/types.js
📚 Learning: 2025-12-27T03:02:14.854Z
Learnt from: CR
Repo: InfinityBowman/corates PR: 0
File: .cursor/rules/reconciliation.mdc:0-0
Timestamp: 2025-12-27T03:02:14.854Z
Learning: Applies to {packages/web/src/lib/checklist-domain.js,packages/web/src/AMSTAR2/checklist-compare.js} : Reconciliation structure should contain checklist1Id, checklist2Id, and reconciledChecklistId

Applied to files:

  • packages/web/src/checklist-registry/types.js
📚 Learning: 2025-12-27T03:02:14.854Z
Learnt from: CR
Repo: InfinityBowman/corates PR: 0
File: .cursor/rules/reconciliation.mdc:0-0
Timestamp: 2025-12-27T03:02:14.854Z
Learning: Applies to {packages/web/src/components/checklist-ui/compare/**,packages/web/src/lib/checklist-domain.js,packages/web/src/AMSTAR2/checklist-compare.js} : Store final answers in the reconciled checklist itself, not in reconciliation progress metadata

Applied to files:

  • packages/web/src/checklist-registry/types.js
📚 Learning: 2025-12-27T03:01:06.933Z
Learnt from: CR
Repo: InfinityBowman/corates PR: 0
File: .cursor/rules/checklist-operations.mdc:0-0
Timestamp: 2025-12-27T03:01:06.933Z
Learning: Applies to packages/web/src/components/checklist-ui/**,packages/web/src/AMSTAR2/**,packages/web/src/ROBINS-I/**,packages/web/src/lib/checklist-domain.js : Checklist status transitions follow sequence: in_progress → completed (when all questions answered) → reconciled (after reconciliation complete)

Applied to files:

  • packages/web/src/checklist-registry/types.js
📚 Learning: 2025-12-27T03:01:06.933Z
Learnt from: CR
Repo: InfinityBowman/corates PR: 0
File: .cursor/rules/checklist-operations.mdc:0-0
Timestamp: 2025-12-27T03:01:06.933Z
Learning: Applies to packages/web/src/components/checklist-ui/**,packages/web/src/lib/checklist-domain.js : Register and retrieve checklists using checklist-registry: getChecklistType and getChecklistComponent functions

Applied to files:

  • packages/web/src/checklist-registry/types.js
📚 Learning: 2025-12-27T03:01:06.933Z
Learnt from: CR
Repo: InfinityBowman/corates PR: 0
File: .cursor/rules/checklist-operations.mdc:0-0
Timestamp: 2025-12-27T03:01:06.933Z
Learning: Applies to packages/web/src/components/checklist-ui/**,packages/web/src/ROBINS-I/** : Use shouldStopAssessment utility from `@/ROBINS-I/checklist.js` to check if Section B indicates critical risk of bias requiring assessment termination

Applied to files:

  • packages/web/src/checklist-registry/types.js
🧬 Code graph analysis (6)
packages/landing/src/routes/resources/robins-i.jsx (4)
packages/landing/src/routes/resources/amstar2.jsx (1)
  • tool (5-5)
packages/landing/src/routes/resources/rob2.jsx (1)
  • tool (5-5)
packages/landing/src/lib/tool-content.js (1)
  • getToolBySlug (163-165)
packages/landing/src/components/resources/ToolResourcePage.jsx (1)
  • ToolResourcePage (196-202)
packages/landing/src/routes/resources/index.jsx (5)
packages/landing/src/components/SupportedTools.jsx (1)
  • tools (5-10)
packages/landing/src/lib/tool-content.js (1)
  • getAllTools (171-173)
packages/landing/src/routes/resources/amstar2.jsx (1)
  • tool (5-5)
packages/landing/src/routes/resources/rob2.jsx (1)
  • tool (5-5)
packages/landing/src/routes/resources/robins-i.jsx (1)
  • tool (5-5)
packages/landing/src/routes/resources/amstar2.jsx (4)
packages/landing/src/routes/resources/rob2.jsx (1)
  • tool (5-5)
packages/landing/src/routes/resources/robins-i.jsx (1)
  • tool (5-5)
packages/landing/src/lib/tool-content.js (1)
  • getToolBySlug (163-165)
packages/landing/src/components/resources/ToolResourcePage.jsx (1)
  • ToolResourcePage (196-202)
packages/landing/src/components/SupportedTools.jsx (5)
packages/landing/src/routes/resources/index.jsx (1)
  • tools (36-36)
packages/landing/src/lib/tool-content.js (1)
  • getAllTools (171-173)
packages/landing/src/routes/resources/amstar2.jsx (1)
  • tool (5-5)
packages/landing/src/routes/resources/rob2.jsx (1)
  • tool (5-5)
packages/landing/src/routes/resources/robins-i.jsx (1)
  • tool (5-5)
packages/web/src/checklist-registry/types.js (1)
packages/web/src/config/api.js (2)
  • LANDING_URL (12-12)
  • LANDING_URL (12-12)
packages/landing/src/lib/tool-content.js (3)
packages/landing/src/routes/resources/amstar2.jsx (1)
  • tool (5-5)
packages/landing/src/routes/resources/rob2.jsx (1)
  • tool (5-5)
packages/landing/src/routes/resources/robins-i.jsx (1)
  • tool (5-5)
⏰ 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 (23)
packages/web/src/checklist-registry/types.js (1)

31-31: LGTM!

The URL updates correctly point to the new dedicated resource pages for each checklist type. The slug naming convention is consistent with the new routes (amstar2, robins-i, rob2).

Also applies to: 45-45, 60-60

packages/landing/src/routes/security.jsx (1)

27-27: LGTM!

The padding reduction from py-16 to py-12 aligns with the consistent UI spacing updates across other route pages (terms, privacy, contact) in this PR.

packages/landing/src/routes/terms.jsx (1)

26-26: LGTM!

Consistent padding adjustment matching the other route pages in this PR.

packages/landing/src/routes/privacy.jsx (1)

26-26: LGTM!

Consistent padding adjustment matching the other route pages in this PR.

packages/landing/src/routes/contact.jsx (1)

63-63: LGTM!

The padding adjustment from py-16 sm:py-24 to flex-1 py-12 aligns with the consistent UI spacing updates across other route pages in this PR.

packages/landing/public/sitemap.xml (1)

9-35: LGTM!

The sitemap correctly includes all new resource pages (/resources/amstar2, /resources/robins-i, /resources/rob2) along with /contact and /pricing. The entries are well-organized and use consistent URL formatting.

packages/landing/src/components/resources/ToolResourcePage.jsx (7)

1-9: LGTM!

Imports are well-organized, using solid-icons library as per guidelines, and properly importing SolidJS primitives (For, Show, createMemo).


10-41: LGTM!

COLOR_CONFIG is a clean, static configuration object that centralizes color theming for score level cards. Good separation of styling concerns.


43-58: LGTM!

The icon selection helper is straightforward. The switch statement handles all defined colors with a sensible default fallback.


60-85: LGTM!

ScoreLevelCard correctly maintains reactivity by wrapping props.level.color access in functions (colors()) and using createMemo for the icon. The use of Show for conditional note rendering follows guidelines. Props are accessed directly without destructuring.


87-103: LGTM!

NotFoundPage provides a clean fallback UI with proper navigation back to resources. Layout structure with Navbar and Footer is consistent.


105-194: LGTM!

ToolContent properly:

  • Uses reactive functions for derived values (pageUrl(), title(), description())
  • Accesses props directly without destructuring
  • Uses For component for list rendering (referenceLinks, scoreLevels)
  • Includes comprehensive SEO meta tags (OG, Twitter, canonical)
  • External links have proper rel="external noopener noreferrer" for security

196-202: LGTM!

The main export correctly uses Show for conditional rendering with the NotFoundPage fallback, and passes the tool prop through properly.

packages/landing/src/routes/resources/rob2.jsx (1)

1-7: LGTM!

Clean route component following the established pattern. Since getToolBySlug returns static content data, calling it at initialization is appropriate. The fallback for missing tools is handled by ToolResourcePage.

packages/landing/src/routes/resources/robins-i.jsx (1)

1-7: LGTM!

Consistent implementation following the same pattern as other resource routes.

packages/landing/src/routes/resources/amstar2.jsx (1)

1-7: LGTM!

Follows the established resource page pattern consistently with other tools.

packages/landing/app.config.js (1)

14-26: LGTM!

Prerender routes correctly include all new resource pages. The explicit listing ensures proper static generation for SEO, complemented by crawlLinks: true for any dynamically discovered routes.

packages/landing/src/components/SupportedTools.jsx (2)

2-10: Centralized tool mapping looks good.
Keeps the component aligned with shared tool content.


17-17: No comment.

packages/landing/src/routes/resources/index.jsx (2)

10-28: ToolCard component looks solid.
Clear, focused, and easy to reuse.


30-80: Resources page structure is clean and cohesive.
SEO metadata and layout are well organized.

packages/landing/src/lib/tool-content.js (2)

8-155: Centralized tool content is well-structured.
Readable and comprehensive for resource rendering.


163-172: Helper utilities are clear and minimal.
Straightforward lookup and listing helpers.

✏️ Tip: You can disable this entire section by setting review_details to false in your review settings.


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

❤️ Share

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

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

cloudflare-workers-and-pages Bot commented Jan 17, 2026

Deploying with  Cloudflare Workers  Cloudflare Workers

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

Status Name Latest Commit Preview URL Updated (UTC)
✅ Deployment successful!
View logs
corates 9b2dada Commit Preview URL Jan 17 2026, 03:09 AM

@InfinityBowman InfinityBowman merged commit 734382a into main Jan 17, 2026
3 checks passed
@InfinityBowman InfinityBowman deleted the 264-robins-i-v2-resources-page branch January 17, 2026 04:02
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Robins-i v2 resources page

1 participant