/ docs / install

Install the widget.

Add CRRT to any React app and start collecting visual feedback in about two minutes.

1. Add the package

CRRT ships as @thedesignproject/crrt on npm. Pick your package manager — they all work.

bash
# pick your package manager
pnpm add @thedesignproject/crrt
npm install @thedesignproject/crrt
bun add @thedesignproject/crrt
yarn add @thedesignproject/crrt

2. Drop it in your app root

Mount the widget once, alongside your app tree. Reviewers can press C on any page to drop a CRRT on any element.

tsx
import { FeedbackWidget } from '@thedesignproject/crrt'

export default function App() {
  return (
    <>
      <YourApp />
      <FeedbackWidget
        projectId="proj_your_app_name"
        apiBase="https://crrt.ai/api"
      />
    </>
  )
}
projectId scopes feedback to a specific app — get yours from the dashboard after creating a project. apiBase defaults to https://crrt.ai/api, so you can omit it unless you're self-hosting.

Props

PropTypeRequiredDescription
projectIdstringrequiredThe project public key, e.g. proj_acme_marketing. Generated by the dashboard.
apiBasestringoptionalBackend URL. Defaults to https://crrt.ai/api. Override when self-hosting.
theme'light' | 'dark' | 'system'optionalWidget appearance. Defaults to dark; system follows the browser preference.

Match your app theme

Pass your app's current theme directly, or use system to follow prefers-color-scheme. Theme changes apply immediately without remounting the widget.

tsx
// Follow theme state owned by your app
<FeedbackWidget projectId="proj_your_app_name" theme={appTheme} />

// Or follow the browser's preferred color scheme
<FeedbackWidget projectId="proj_your_app_name" theme="system" />

Framework notes

Next.js (App Router)

The widget renders client-side. Mount it inside a 'use client' providers component so the rest of your tree can stay server-rendered.

tsx
// app/providers.tsx
'use client'

import { FeedbackWidget } from '@thedesignproject/crrt'

export function Providers({ children }: { children: React.ReactNode }) {
  return (
    <>
      {children}
      <FeedbackWidget projectId="proj_your_app_name" />
    </>
  )
}

Next.js (Pages Router)

Mount inside pages/_app.tsx alongside the page render. No extra configuration needed.

Vite, CRA, Remix, anything else

Mount once in your root component. The widget is SSR-safe: it no-ops during server render and activates on hydration.

Requirements

  • React 18 or 19 on the consuming app.
  • A modern browser with structuredClone and the Clipboard API (Chrome 76+, Safari 14+, Firefox 94+).
  • An apiBase that responds to the public endpoints — covered automatically if you use crrt.ai.

Verify the install

  1. Open your app in a browser tab.
  2. Press C — a crosshair should activate.
  3. Click any element. A pin drops, a popover opens, write a note.
  4. Sign into crrt.ai/dashboard and confirm the comment lands on your project.
Nothing happens when you press C? Check that the widget actually mounted (it returns null during SSR), and that projectId matches a project you've created in the dashboard.
next: hand off feedback to your AI agent