Skip to content

[UI] - Updates all Icons to Phosphor Icons#1066

Merged
madster456 merged 11 commits intodevfrom
ui/icons
Dec 22, 2025
Merged

[UI] - Updates all Icons to Phosphor Icons#1066
madster456 merged 11 commits intodevfrom
ui/icons

Conversation

@madster456
Copy link
Collaborator

@madster456 madster456 commented Dec 15, 2025

Updates all icons to Phosphor and removes lucide as dependency.

Summary by CodeRabbit

  • Style

    • Unified and refreshed iconography across the dashboard (pages, widgets, controls, dialogs, navigation, lists) for a more consistent, modern visual experience — purely visual, no behavioral changes.
  • Chores

    • Consolidated to a single icon set across the project and removed the previous icon library; documentation package updated to include the new icon dependency.

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

@cmux-agent
Copy link

cmux-agent bot commented Dec 15, 2025

Older cmux preview screenshots (latest comment is below)

Preview Screenshots

Open Diff Heatmap

Preview screenshots are being captured...

Workspace and dev browser links will appear here once the preview environment is ready.


Generated by cmux preview system

@vercel
Copy link

vercel bot commented Dec 15, 2025

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

Project Deployment Review Updated (UTC)
stack-backend Ready Ready Preview, Comment Dec 22, 2025 4:49pm
stack-dashboard Ready Ready Preview, Comment Dec 22, 2025 4:49pm
stack-demo Ready Ready Preview, Comment Dec 22, 2025 4:49pm
stack-docs Ready Ready Preview, Comment Dec 22, 2025 4:49pm

@coderabbitai
Copy link
Contributor

coderabbitai bot commented Dec 15, 2025

Caution

Review failed

The pull request is closed.

Note

Other AI code review bot(s) detected

CodeRabbit has detected other AI code review bot(s) in this pull request and will avoid duplicating their findings in the review comments. This may lead to a less comprehensive review.

Walkthrough

Migrates the dashboard icon library: removes lucide-react from apps/dashboard/package.json, adds @phosphor-icons/react to docs/package.json, replaces Lucide icon imports/usages with Phosphor icons across many dashboard files, and updates a few icon-related TypeScript prop/type declarations. No control-flow changes.

Changes

Cohort / File(s) Summary
Dependencies
apps/dashboard/package.json, docs/package.json
Removed lucide-react from apps/dashboard/package.json; added @phosphor-icons/react (^2.1.10) to docs/package.json.
Sidebar / Navigation
apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/sidebar-layout.tsx
Replaced Lucide icons with Phosphor icons and changed Item.icon / BottomItem.icon types from LucideIconPhosphorIcon.
Top-level Project pages
apps/dashboard/src/app/(main)/(protected)/(outside-dashboard)/projects/page-client.tsx, apps/dashboard/src/app/(main)/(protected)/projects/-selector-/[...path]/page-client.tsx, apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/(overview)/*
Swapped Lucide → Phosphor icon imports/usages (presentational-only).
Auth / Email / Templates
apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/auth-methods/*, apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/email-*/**/*.tsx
Replaced Lucide icons with Phosphor equivalents for menus, providers, alerts, dialogs and templates; no logic changes.
Payments & Products
apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/payments/**
Large icon migration across payments/product pages, dialogs, layouts and components (chevrons, carets, credit card, package, gift, trash, etc.) — imports and JSX updated.
Data Vault / Stores
apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/data-vault/**
Replaced icons (copy, edit, trash, check, X, arrows) with Phosphor icons across store pages; presentational-only.
Users / Webhooks / Transactions
apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/users/**, apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/webhooks/[endpointId]/page-client.tsx, apps/dashboard/src/components/data-table/transaction-table.tsx
Icon swaps (mail, at, hash, pagination chevrons, actions). Updated TransactionTypeDisplay.Icon type from LucideIconPhosphorIcon.
Misc pages (purchase, vercel, checklist)
apps/dashboard/src/app/(main)/purchase/[code]/page-client.tsx, `apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/(vercel
launch-checklist)/*.tsx`
Shared UI components
apps/dashboard/src/components/* (e.g., app-square.tsx, app-store-entry.tsx, app-warning-modal.tsx, logo-upload.tsx, search-bar.tsx, project-switcher.tsx, settings.tsx, theme-toggle.tsx)
Broad migration of Lucide → Phosphor icons across shared components (menus, badges, modals, upload, search, settings, theme toggle).
Data tables & Forms
apps/dashboard/src/components/data-table/*, apps/dashboard/src/components/form-fields*.tsx, apps/dashboard/src/components/editable-input.tsx, apps/dashboard/src/components/copyable-text.tsx
Replaced chevrons, search, copy, check, edit, trash, calendar, sort indicators with Phosphor icons; updated imports and some prop typings (see column-header).
UI primitives / dialogs / tooltips
apps/dashboard/src/components/ui/* (e.g., action-dialog.tsx, column-header.tsx, simple-tooltip.tsx, copy-button.tsx)
Migrated icons and adjusted prop/type shapes: ActionDialogProps.titleIcon changed from LucideIconPhosphorIcon; DataTableColumnHeaderProps and Item.icon typing updated to generic component types.
Assistant / CmdK / Code / Vibe
`apps/dashboard/src/components/(assistant-ui
cmdk-*

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~25 minutes

  • Areas needing extra attention:
    • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/sidebar-layout.tsx — icon type changes and downstream consumers.
    • apps/dashboard/src/components/data-table/transaction-table.tsx — updated TransactionTypeDisplay.Icon type and icon mappings.
    • apps/dashboard/src/components/ui/action-dialog.tsx and apps/dashboard/src/components/ui/data-table/column-header.tsx — prop/type signature changes.

Possibly related PRs

Suggested reviewers

  • N2D4
  • TheUntraceable

Poem

🐇 I nibbled imports, hopping light and quick,
Lucide tucked away, Phosphor picked up the stick.
Glyphs hopped line-by-line across the view,
Tiny paws, tidy swaps — a fresh icon stew.
Hooray for small hops and a cleaner hue.

Pre-merge checks and finishing touches

❌ Failed checks (1 warning)
Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 8.14% which is insufficient. The required threshold is 80.00%. You can run @coderabbitai generate docstrings to improve docstring coverage.
✅ Passed checks (2 passed)
Check name Status Explanation
Title check ✅ Passed The title clearly summarizes the main change—migrating all icons from Lucide to Phosphor—which is the primary focus of the extensive changeset across multiple files.
Description check ✅ Passed The description is minimal but directly addresses the core objective. It states the main change (updating icons to Phosphor and removing Lucide), though it lacks detail about scope, testing, or breaking changes.

📜 Recent review details

Configuration used: defaults

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 065ccd4 and 3abdb4f.

📒 Files selected for processing (1)
  • apps/dashboard/src/components/ui/data-table/column-header.tsx

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.

@cmux-agent
Copy link

cmux-agent bot commented Dec 15, 2025

Older cmux preview screenshots (latest comment is below)

Preview Screenshots

Open Diff Heatmap

Preview screenshots are being captured...

Workspace and dev browser links will appear here once the preview environment is ready.


Generated by cmux preview system

@greptile-apps
Copy link
Contributor

greptile-apps bot commented Dec 15, 2025

Greptile Overview

Greptile Summary

This PR migrates all icons from Lucide to Phosphor across 64 files in the dashboard application. The migration removes the lucide-react dependency and adds @phosphor-icons/react as its replacement.

Key Changes:

  • Removed lucide-react from apps/dashboard/package.json and added @phosphor-icons/react to both dashboard and docs packages
  • Updated icon imports across all components with proper naming conventions (e.g., CheckCheckIcon, ChevronDownCaretDownIcon)
  • Properly converted Lucide's strokeWidth prop to Phosphor's weight prop (e.g., strokeWidth={2}weight="bold")
  • Updated TypeScript type definitions from LucideIcon to PhosphorIcon in sidebar-layout.tsx
  • Maintained consistent icon sizing with className and size props

Issues Found:

  • Two files (theme-toggle.tsx and settings.tsx) incorrectly import from @phosphor-icons/react/dist/ssr despite being client components (they use React hooks like useTheme() and useForm()). The /dist/ssr imports should only be used in server components.

Confidence Score: 3/5

  • This PR requires fixes before merging due to incorrect SSR imports in client components
  • The icon migration is largely well-executed with proper naming conventions and prop conversions, but two files use incorrect /dist/ssr imports in client components which will cause runtime errors in Next.js
  • apps/dashboard/src/components/theme-toggle.tsx and apps/dashboard/src/components/settings.tsx must be fixed before merging

Important Files Changed

File Analysis

Filename Score Overview
apps/dashboard/src/components/theme-toggle.tsx 3/5 migrated MoonIcon and SunIcon from Lucide to Phosphor, but incorrectly uses /dist/ssr import in client component
apps/dashboard/src/components/settings.tsx 3/5 migrated GearIcon from Lucide to Phosphor, but incorrectly uses /dist/ssr import in client component
apps/dashboard/src/lib/apps-frontend.tsx 5/5 correctly migrated multiple icons to Phosphor with proper SSR imports for server-only module
apps/dashboard/package.json 5/5 removed lucide-react dependency and added @phosphor-icons/react as replacement
apps/dashboard/src/components/data-table/user-table.tsx 5/5 successfully migrated 10+ icons from Lucide to Phosphor with proper naming conventions
apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/sidebar-layout.tsx 5/5 migrated navigation icons and updated icon type from LucideIcon to PhosphorIcon, properly converted strokeWidth to weight

Sequence Diagram

sequenceDiagram
    participant Dev as Developer
    participant PM as Package Manager
    participant App as Dashboard App
    participant Lucide as lucide-react
    participant Phosphor as @phosphor-icons/react
    
    Dev->>PM: Remove lucide-react dependency
    Dev->>PM: Add @phosphor-icons/react dependency
    PM->>App: Update dependencies
    
    Note over Dev,App: Icon Migration Process
    
    Dev->>App: Update imports (Lucide → Phosphor)
    Note right of Dev: e.g., Check → CheckIcon<br/>ChevronDown → CaretDownIcon
    
    Dev->>App: Convert prop syntax
    Note right of Dev: strokeWidth={2} → weight="bold"
    
    Dev->>App: Update TypeScript types
    Note right of Dev: LucideIcon → PhosphorIcon
    
    alt Server Component
        App->>Phosphor: Import from /dist/ssr
        Phosphor-->>App: Server-optimized icons
    else Client Component
        App->>Phosphor: Import from root
        Phosphor-->>App: Client-side icons
    end
    
    Note over App,Phosphor: ⚠️ Issue: 2 files use /dist/ssr<br/>in client components
Loading

Copy link
Contributor

@greptile-apps greptile-apps bot left a comment

Choose a reason for hiding this comment

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

63 files reviewed, 2 comments

Edit Code Review Agent Settings | Greptile

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 2

Caution

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

⚠️ Outside diff range comments (1)
apps/dashboard/src/components/assistant-ui/markdown-text.tsx (1)

54-63: Use proper error handling per coding guidelines.

The clipboard operation catches errors but doesn't notify the user. Per coding guidelines: "NEVER try-catch-all... use runAsynchronously/runAsynchronouslyWithAlert for error handling."

As per coding guidelines, clipboard failures should alert the user rather than fail silently.

Consider using the repository's error handling utility:

  const copyToClipboard = (value: string) => {
    if (!value) return;

-   navigator.clipboard.writeText(value).then(() => {
-     setIsCopied(true);
-     setTimeout(() => setIsCopied(false), copiedDuration);
-   }).catch(() => {
-     setIsCopied(false);
-   });
+   runAsynchronouslyWithAlert(async () => {
+     await navigator.clipboard.writeText(value);
+     setIsCopied(true);
+     setTimeout(() => setIsCopied(false), copiedDuration);
+   });
  };

This ensures users are notified if the copy operation fails (e.g., due to permission issues).

🧹 Nitpick comments (22)
apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/(overview)/metrics-loading.tsx (1)

3-10: Verify Phosphor export name and consider minor a11y tweak + QA link

  • Please double‑check that @phosphor-icons/react actually exports CircleNotchIcon (many examples use CircleNotch). If the library only exports CircleNotch, update both the import and JSX usage accordingly.
  • Optional: if the icon is purely decorative, consider adding aria-hidden="true" to the CircleNotchIcon to keep screen readers focused on the status text.

Deep link for manual QA of this change (project overview metrics loading state):
http://localhost:${NEXT_PUBLIC_STACK_PORT_PREFIX}01/projects/-selector-/overview

apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/email-drafts/page-client.tsx (2)

6-6: Phosphor warning icon import & usage look correct (optional a11y nit)

The WarningCircleIcon import from @phosphor-icons/react and its usages in both Alert components look good and keep the previous sizing semantics (h-4 w-4). If these icons are purely decorative (the text already conveys “Warning”), consider adding aria-hidden="true" to avoid redundant announcements for screen readers:

-          <WarningCircleIcon className="h-4 w-4" />
+          <WarningCircleIcon className="h-4 w-4" aria-hidden="true" />-            <WarningCircleIcon className="h-4 w-4" />
+            <WarningCircleIcon className="h-4 w-4" aria-hidden="true" />

Also applies to: 30-35, 72-78


14-28: Deep link for exercising this page in the dashboard

For manual verification of the updated icons and alert copy on this screen, you can load the page at:

http://localhost:<NEXT_PUBLIC_STACK_PORT_PREFIX>01/projects/-selector-/email-drafts

This should route to the PageClient rendered here for a selected project.

apps/dashboard/src/components/assistant-ui/thread.tsx (1)

17-46: Add a dashboard deep link for QA of this assistant thread view

Since this is a dashboard assistant thread component, consider adding to the PR description a deep link to the page where this thread renders (for example, following the pattern http://localhost:<NEXT_PUBLIC_STACK_PORT_PREFIX>01/projects/-selector-/...) so reviewers can quickly verify the new icons in context.

apps/dashboard/src/components/data-table/transaction-table.tsx (1)

85-86: Consider a more semantically appropriate icon for subscription cancellation.

The BankIcon doesn't clearly convey "cancellation" to users—it suggests a financial institution rather than a termination action. Consider using a more intuitive icon like XCircleIcon, StopCircleIcon, ProhibitIcon, or similar cancellation-themed icon from Phosphor.

Example:

+import { ..., XCircleIcon } from '@phosphor-icons/react';

    case 'subscription-cancellation': {
-      return { label: 'Subscription Cancellation', Icon: BankIcon };
+      return { label: 'Subscription Cancellation', Icon: XCircleIcon };
    }
apps/dashboard/src/components/cmdk-commands.tsx (1)

358-358: Command palette icons updated consistently; optional design tweak

Command entries now uniformly use Phosphor icons with the same 3.5×3.5 sizing and muted/brand color classes, so behavior is unchanged and the migration looks consistent. If design review surfaces any weight/contrast mismatch between app-specific icons and these Phosphor icons, you could optionally standardize via the icon weight prop or minor size adjustments, but it’s not required from a code perspective.

Please have design/UX quickly scan the command palette (overview, app store entries, settings, and AI commands) to confirm the new icon set matches the dashboard’s visual language.

Also applies to: 407-407, 426-426, 436-436, 446-446, 458-458, 470-470, 482-482

apps/dashboard/src/app/(main)/(protected)/projects/-selector-/[...path]/page-client.tsx (1)

5-18: Phosphor PlusIcon import & usage look good; consider marking icon decorative and verify installed version

Importing PlusIcon from @phosphor-icons/react and using it in the “Create new project” button with className="h-4 w-4" is consistent with the current Phosphor API (Icon-suffixed exports) and keeps the JSX clear. Since the button already has a text label, you can optionally mark the icon as decorative to keep screen readers focused on the label:

<PlusIcon className="h-4 w-4" aria-hidden="true" />

Because this relies on the updated Phosphor exports, please confirm that your installed @phosphor-icons/react version in the dashboard app is the expected one (the repo metadata suggests 2.1.10); if it differs, double‑check that PlusIcon is actually exported there.

For manual QA, this change affects the project selector page at a URL like:

http://localhost:<NEXT_PUBLIC_STACK_PORT_PREFIX>01/projects/-selector-/

Based on learnings, this deep link helps exercise the updated icon in its real dashboard context.

Also applies to: 87-94

apps/dashboard/src/app/(main)/purchase/[code]/page-client.tsx (1)

184-401: Deep link for manual QA of this purchase page

For manual testing of these icon changes in the dashboard, you can open a purchase URL such as http://localhost:9101/purchase/<code> (assuming NEXT_PUBLIC_STACK_PORT_PREFIX=91) to verify the quantity controls render with the new icons.

As per coding guidelines, this provides a direct dashboard deep link for the modified page.

apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/auth-methods/page-client.tsx (2)

224-268: Consider consistent aria-hidden usage for decorative icons.

Only the AsteriskIcon (line 224) includes aria-hidden="true", while LinkIcon (line 240) and KeyIcon (line 256) do not. Since all three are decorative icons with adjacent text labels, they should consistently use aria-hidden="true" to avoid redundant screen reader announcements.

           <div className="flex items-center gap-2">
-            <LinkIcon size={20} />
+            <LinkIcon size={20} aria-hidden="true" />
             <span>Magic link (Email OTP)</span>
           </div>
           <div className="flex items-center gap-2">
-            <KeyIcon size={20} />
+            <KeyIcon size={20} aria-hidden="true" />
             <span>Passkey</span>
           </div>

295-295: Add aria-hidden="true" to decorative icon.

The PlusCircleIcon is decorative—the button text "Add SSO providers" fully describes the action. Add aria-hidden="true" to prevent redundant screen reader announcements.

-            <PlusCircleIcon size={16}/>
+            <PlusCircleIcon size={16} aria-hidden="true" />
apps/dashboard/src/components/feedback-form.tsx (2)

34-68: Consider using runAsynchronouslyWithAlert for form submission

handleSubmit uses a manual try/catch with local status/error state; behavior is fine but diverges from the repo pattern of wrapping async submissions in runAsynchronouslyWithAlert. If SmartForm allows, consider refactoring onSubmit to delegate the async call and alert handling to that helper for consistency with other forms.

I can sketch an example integration with runAsynchronouslyWithAlert here if you’d like. Based on learnings, this keeps async error handling uniform across the app.


142-173: Support link icon updates look good; a couple of optional nits

Envelope/GitHub icons now match the rest of the iconography and keep the existing hover styling; this looks consistent. Two optional tweaks:

  • If you want all footer icons from the same set, you could eventually swap the Discord icon as well for visual consistency.
  • To better match the hover guidelines, consider changing transition-colors to transition-colors hover:transition-none on these links so the color change is instant on hover and only fades on exit.

Deep link for QA of this section: http://localhost:<NEXT_PUBLIC_STACK_PORT_PREFIX>01/projects/-selector-/feedback.

apps/dashboard/src/components/cmdk-search.tsx (4)

5-11: Phosphor icon imports look correct; consider Next/Phosphor import optimization separately

The switch to @phosphor-icons/react with *Icon-suffixed components matches the current library API and aligns with the rest of the PR; usage below is consistent and type-safe. One thing to keep in mind (for the broader migration, not necessarily this file alone) is Phosphor’s note that importing from the package root can cause bundlers like Next.js to eagerly process many modules; if you see slow dev builds, it may be worth either enabling optimizePackageImports: ["@phosphor-icons/react"] in next.config or moving to the recommended /dist/... subpath imports in a follow-up perf pass.

Please confirm that the chosen import pattern matches how @phosphor-icons/react is configured in this repo (root vs. optimized imports) and adjust globally if needed based on Phosphor’s latest recommendations.


745-747: Search input icon swap is safe; optional a11y hardening

Using MagnifyingGlassIcon with Tailwind sizing/color is a drop-in visual replacement and doesn’t affect input behavior or keyboard handling.

If you want to be a bit stricter on accessibility (since the icon is purely decorative and the input already has a textual placeholder), you could explicitly hide it from screen readers:

-              <MagnifyingGlassIcon className="mr-4 h-5 w-5 shrink-0 text-muted-foreground/70" />
+              <MagnifyingGlassIcon
+                aria-hidden="true"
+                className="mr-4 h-5 w-5 shrink-0 text-muted-foreground/70"
+              />

1007-1007: Trigger button icon migration is consistent; same optional a11y tweak applies

The new SparkleIcon works fine here and respects the existing hover/transition pattern. As with the search icon, this glyph is presentational only, so you can optionally mark it as hidden from assistive tech:

-        <SparkleIcon className="h-3.5 w-3.5 text-blue-400/40 group-hover:text-blue-400/70 transition-colors duration-300 group-hover:transition-none" />
+        <SparkleIcon
+          aria-hidden="true"
+          className="h-3.5 w-3.5 text-blue-400/40 group-hover:text-blue-400/70 transition-colors duration-300 group-hover:transition-none"
+        />

This keeps spoken output focused on the “Control Center” label and shortcut hints.


380-404: QA hint / deep link for testing the updated Cmd+K UI

This CmdKSearch / CmdKTrigger pair is wired to the global “Control Center” (⌘/Ctrl+K) experience in the dashboard. To visually verify the new Phosphor icons end-to-end, you can open any project-level dashboard page, for example:

http://localhost:9101/projects/-selector-/overview

and press ⌘+K (or Ctrl+K on Windows) to bring up this overlay.

apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/payments/products/list-section.tsx (2)

53-56: Search icon usage is fine; optionally mark it decorative for screen readers

The MagnifyingGlassIcon works as a visual affordance for the search field. To avoid an extra, non-essential graphic being announced by screen readers, you could mark it as decorative:

-                <MagnifyingGlassIcon className={cn(
-                "absolute left-2.5 text-muted-foreground transition-all duration-200",
-                isSearchFocused ? "top-[6px] h-4 w-4" : "top-[6px] h-3 w-3.5"
-              )} />
+                <MagnifyingGlassIcon
+                  aria-hidden="true"
+                  focusable="false"
+                  className={cn(
+                    "absolute left-2.5 text-muted-foreground transition-all duration-200",
+                    isSearchFocused ? "top-[6px] h-4 w-4" : "top-[6px] h-3 w-3.5"
+                  )}
+                />

79-79: Icon-only “add” button would benefit from an accessible label

The PlusIcon inside the ghost button is visually clear, but screen readers may only announce this as a generic icon/button. Since you’re already touching this code, it’s a good moment to add an accessible name and hide the icon from AT:

-            <Button
-              variant="ghost"
-              size="sm"
-              className="h-8 w-8 p-0"
-              onClick={onAddClick}
-            >
-              <PlusIcon className="h-4 w-4" />
+            <Button
+              aria-label="Add"
+              variant="ghost"
+              size="sm"
+              className="h-8 w-8 p-0"
+              onClick={onAddClick}
+            >
+              <PlusIcon className="h-4 w-4" aria-hidden="true" focusable="false" />
             </Button>

(If this component is reused for different “add” actions, you could later consider a prop for the accessible label.)

For manual QA, this section should be reachable via a URL like:
http://localhost:<NEXT_PUBLIC_STACK_PORT_PREFIX>01/projects/-selector-/[projectId]/payments/products

apps/dashboard/src/components/logo-upload.tsx (1)

87-134: Dashboard deep link for manual verification

To quickly verify the new Phosphor icons in context, you can open the page that uses LogoUpload via a deep link such as:

http://localhost:<NEXT_PUBLIC_STACK_PORT_PREFIX>01/projects/-selector-/settings/branding

(or the specific settings page where this component is rendered in your dashboard).

This makes it easy to visually compare the old vs. new icons during review.

apps/dashboard/src/components/commands/ask-ai.tsx (1)

321-546: Remember dashboard deep-link guideline for this UI change

Since this lives under apps/dashboard, the coding guidelines ask for a deep link to the affected dashboard view in the PR description (e.g. http://localhost:<NEXT_PUBLIC_STACK_PORT_PREFIX>01/projects/-selector-/... or via a.localhost/b.localhost/c.localhost). Please add a link to whichever page exposes this Ask AI command so reviewers can quickly exercise the new Phosphor icons in context.

apps/dashboard/src/components/app-square.tsx (2)

3-3: Phosphor icon migration looks good; consider normalizing checkmark weights

The switch to @phosphor-icons/react (importing CheckIcon, DotsThreeVerticalIcon) matches the library’s API, and the new icons are wired with appropriate className and weight usage, so behavior should remain the same visually and semantically.

If you want perfect visual consistency, you could optionally give the CheckIcon in the list item actions (Line 256) a weight="bold" as well, to match the enabled status badge checkmark (Line 147), but this is purely aesthetic.

For manual QA, you can spot‑check these icon changes on the dashboard apps listing, e.g. at:
http://localhost:<NEXT_PUBLIC_STACK_PORT_PREFIX>01/projects/-selector-/apps
in the App grid and the compact list view. As per coding guidelines for apps/dashboard/**/* (deep links) and *.tsx (icon usage only, no API changes).

Also applies to: 133-133, 147-147, 256-256


168-173: Avoid voiding the performToggle promise on modal confirm

onConfirm={() => void performToggle()} discards the returned promise and any rejection, which conflicts with the “NEVER void a promise” guideline and can hide config update failures.

Consider routing this through your standard async helper (e.g. runAsynchronouslyWithAlert or equivalent) or otherwise handling the promise so errors are surfaced to the user instead of being silently ignored.

📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 5e20e0f and 0711392.

⛔ Files ignored due to path filters (1)
  • pnpm-lock.yaml is excluded by !**/pnpm-lock.yaml
📒 Files selected for processing (63)
  • apps/dashboard/package.json (0 hunks)
  • apps/dashboard/src/app/(main)/(protected)/(outside-dashboard)/projects/page-client.tsx (2 hunks)
  • apps/dashboard/src/app/(main)/(protected)/projects/-selector-/[...path]/page-client.tsx (1 hunks)
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/(overview)/metrics-loading.tsx (1 hunks)
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/(overview)/metrics-page.tsx (8 hunks)
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/(overview)/setup-page.tsx (3 hunks)
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/apps/page-client.tsx (5 hunks)
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/auth-methods/page-client.tsx (6 hunks)
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/auth-methods/providers.tsx (2 hunks)
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/data-vault/stores/[storeId]/page-client.tsx (6 hunks)
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/data-vault/stores/page-client.tsx (4 hunks)
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/email-drafts/page-client.tsx (3 hunks)
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/email-templates/page-client.tsx (3 hunks)
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/email-themes/page-client.tsx (3 hunks)
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/emails/page-client.tsx (3 hunks)
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/launch-checklist/page-client.tsx (8 hunks)
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/payments/customers/page-client.tsx (2 hunks)
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/payments/products/components.tsx (2 hunks)
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/payments/products/layout.tsx (8 hunks)
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/payments/products/list-section.tsx (3 hunks)
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/payments/products/page-client-catalogs-view.tsx (18 hunks)
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/payments/products/page-client-list-view.tsx (3 hunks)
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/payments/products/page-client.tsx (2 hunks)
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/payments/products/product-dialog.tsx (9 hunks)
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/payments/products/product-price-row.tsx (3 hunks)
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/sidebar-layout.tsx (9 hunks)
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/users/[userId]/page-client.tsx (6 hunks)
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/users/page-client.tsx (2 hunks)
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/vercel/page-client.tsx (5 hunks)
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/webhooks/[endpointId]/page-client.tsx (2 hunks)
  • apps/dashboard/src/app/(main)/purchase/[code]/page-client.tsx (3 hunks)
  • apps/dashboard/src/components/app-square.tsx (4 hunks)
  • apps/dashboard/src/components/app-store-entry.tsx (8 hunks)
  • apps/dashboard/src/components/app-warning-modal.tsx (3 hunks)
  • apps/dashboard/src/components/assistant-ui/markdown-text.tsx (1 hunks)
  • apps/dashboard/src/components/assistant-ui/thread-list.tsx (1 hunks)
  • apps/dashboard/src/components/assistant-ui/thread.tsx (6 hunks)
  • apps/dashboard/src/components/cmdk-commands.tsx (13 hunks)
  • apps/dashboard/src/components/cmdk-search.tsx (6 hunks)
  • apps/dashboard/src/components/code-block.tsx (2 hunks)
  • apps/dashboard/src/components/commands/ask-ai.tsx (7 hunks)
  • apps/dashboard/src/components/copyable-text.tsx (2 hunks)
  • apps/dashboard/src/components/data-table/common/pagination.tsx (2 hunks)
  • apps/dashboard/src/components/data-table/transaction-table.tsx (2 hunks)
  • apps/dashboard/src/components/data-table/user-table.tsx (8 hunks)
  • apps/dashboard/src/components/editable-input.tsx (2 hunks)
  • apps/dashboard/src/components/export-users-dialog.tsx (2 hunks)
  • apps/dashboard/src/components/feedback-form.tsx (5 hunks)
  • apps/dashboard/src/components/form-fields.tsx (1 hunks)
  • apps/dashboard/src/components/form-fields/keyed-record-editor-field.tsx (3 hunks)
  • apps/dashboard/src/components/logo-upload.tsx (2 hunks)
  • apps/dashboard/src/components/project-switcher.tsx (1 hunks)
  • apps/dashboard/src/components/search-bar.tsx (1 hunks)
  • apps/dashboard/src/components/settings.tsx (2 hunks)
  • apps/dashboard/src/components/stack-companion.tsx (3 hunks)
  • apps/dashboard/src/components/stack-companion/changelog-widget.tsx (6 hunks)
  • apps/dashboard/src/components/stack-companion/feature-request-board.tsx (9 hunks)
  • apps/dashboard/src/components/stack-companion/unified-docs-widget.tsx (4 hunks)
  • apps/dashboard/src/components/theme-toggle.tsx (1 hunks)
  • apps/dashboard/src/components/vibe-coding/draft-tool-components.tsx (2 hunks)
  • apps/dashboard/src/components/vibe-coding/template-tool-components.tsx (2 hunks)
  • apps/dashboard/src/components/vibe-coding/theme-tool-components.tsx (2 hunks)
  • docs/package.json (1 hunks)
💤 Files with no reviewable changes (1)
  • apps/dashboard/package.json
🧰 Additional context used
📓 Path-based instructions (6)
**/*.{ts,tsx}

📄 CodeRabbit inference engine (AGENTS.md)

**/*.{ts,tsx}: Always add new E2E tests when changing the API or SDK interface
For blocking alerts and errors, never use toast; use alerts instead as they are less easily missed by the user
NEVER try-catch-all, NEVER void a promise, and NEVER .catch(console.error); use loading indicators and async callbacks instead, or use runAsynchronously/runAsynchronouslyWithAlert for error handling
Use ES6 maps instead of records wherever you can

Files:

  • apps/dashboard/src/app/(main)/(protected)/(outside-dashboard)/projects/page-client.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/(overview)/metrics-loading.tsx
  • apps/dashboard/src/components/vibe-coding/draft-tool-components.tsx
  • apps/dashboard/src/components/settings.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/data-vault/stores/page-client.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/email-templates/page-client.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/auth-methods/page-client.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/apps/page-client.tsx
  • apps/dashboard/src/components/stack-companion.tsx
  • apps/dashboard/src/components/copyable-text.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/webhooks/[endpointId]/page-client.tsx
  • apps/dashboard/src/components/editable-input.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/auth-methods/providers.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/users/page-client.tsx
  • apps/dashboard/src/components/logo-upload.tsx
  • apps/dashboard/src/components/vibe-coding/theme-tool-components.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/payments/products/page-client-catalogs-view.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/payments/products/components.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/(overview)/setup-page.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/payments/products/page-client-list-view.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/emails/page-client.tsx
  • apps/dashboard/src/components/cmdk-search.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/payments/products/page-client.tsx
  • apps/dashboard/src/components/stack-companion/feature-request-board.tsx
  • apps/dashboard/src/components/cmdk-commands.tsx
  • apps/dashboard/src/components/app-warning-modal.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/email-themes/page-client.tsx
  • apps/dashboard/src/components/search-bar.tsx
  • apps/dashboard/src/components/vibe-coding/template-tool-components.tsx
  • apps/dashboard/src/components/project-switcher.tsx
  • apps/dashboard/src/components/assistant-ui/thread.tsx
  • apps/dashboard/src/components/code-block.tsx
  • apps/dashboard/src/components/stack-companion/changelog-widget.tsx
  • apps/dashboard/src/components/form-fields/keyed-record-editor-field.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/payments/customers/page-client.tsx
  • apps/dashboard/src/components/data-table/user-table.tsx
  • apps/dashboard/src/components/data-table/transaction-table.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/payments/products/product-price-row.tsx
  • apps/dashboard/src/app/(main)/purchase/[code]/page-client.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/users/[userId]/page-client.tsx
  • apps/dashboard/src/components/app-square.tsx
  • apps/dashboard/src/components/stack-companion/unified-docs-widget.tsx
  • apps/dashboard/src/components/export-users-dialog.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/data-vault/stores/[storeId]/page-client.tsx
  • apps/dashboard/src/components/theme-toggle.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/payments/products/layout.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/payments/products/list-section.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/payments/products/product-dialog.tsx
  • apps/dashboard/src/components/data-table/common/pagination.tsx
  • apps/dashboard/src/components/assistant-ui/thread-list.tsx
  • apps/dashboard/src/components/app-store-entry.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/(overview)/metrics-page.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/-selector-/[...path]/page-client.tsx
  • apps/dashboard/src/components/commands/ask-ai.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/email-drafts/page-client.tsx
  • apps/dashboard/src/components/feedback-form.tsx
  • apps/dashboard/src/components/assistant-ui/markdown-text.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/sidebar-layout.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/launch-checklist/page-client.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/vercel/page-client.tsx
  • apps/dashboard/src/components/form-fields.tsx
**/*.{ts,tsx,css}

📄 CodeRabbit inference engine (AGENTS.md)

**/*.{ts,tsx,css}: Keep hover/click transitions snappy and fast; avoid fade-in delays on hover. Apply transitions after action completion instead, like smooth fade-out when hover ends
Use hover-exit transitions instead of hover-enter transitions; for example, use 'transition-colors hover:transition-none' instead of fade-in on hover

Files:

  • apps/dashboard/src/app/(main)/(protected)/(outside-dashboard)/projects/page-client.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/(overview)/metrics-loading.tsx
  • apps/dashboard/src/components/vibe-coding/draft-tool-components.tsx
  • apps/dashboard/src/components/settings.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/data-vault/stores/page-client.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/email-templates/page-client.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/auth-methods/page-client.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/apps/page-client.tsx
  • apps/dashboard/src/components/stack-companion.tsx
  • apps/dashboard/src/components/copyable-text.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/webhooks/[endpointId]/page-client.tsx
  • apps/dashboard/src/components/editable-input.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/auth-methods/providers.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/users/page-client.tsx
  • apps/dashboard/src/components/logo-upload.tsx
  • apps/dashboard/src/components/vibe-coding/theme-tool-components.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/payments/products/page-client-catalogs-view.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/payments/products/components.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/(overview)/setup-page.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/payments/products/page-client-list-view.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/emails/page-client.tsx
  • apps/dashboard/src/components/cmdk-search.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/payments/products/page-client.tsx
  • apps/dashboard/src/components/stack-companion/feature-request-board.tsx
  • apps/dashboard/src/components/cmdk-commands.tsx
  • apps/dashboard/src/components/app-warning-modal.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/email-themes/page-client.tsx
  • apps/dashboard/src/components/search-bar.tsx
  • apps/dashboard/src/components/vibe-coding/template-tool-components.tsx
  • apps/dashboard/src/components/project-switcher.tsx
  • apps/dashboard/src/components/assistant-ui/thread.tsx
  • apps/dashboard/src/components/code-block.tsx
  • apps/dashboard/src/components/stack-companion/changelog-widget.tsx
  • apps/dashboard/src/components/form-fields/keyed-record-editor-field.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/payments/customers/page-client.tsx
  • apps/dashboard/src/components/data-table/user-table.tsx
  • apps/dashboard/src/components/data-table/transaction-table.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/payments/products/product-price-row.tsx
  • apps/dashboard/src/app/(main)/purchase/[code]/page-client.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/users/[userId]/page-client.tsx
  • apps/dashboard/src/components/app-square.tsx
  • apps/dashboard/src/components/stack-companion/unified-docs-widget.tsx
  • apps/dashboard/src/components/export-users-dialog.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/data-vault/stores/[storeId]/page-client.tsx
  • apps/dashboard/src/components/theme-toggle.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/payments/products/layout.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/payments/products/list-section.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/payments/products/product-dialog.tsx
  • apps/dashboard/src/components/data-table/common/pagination.tsx
  • apps/dashboard/src/components/assistant-ui/thread-list.tsx
  • apps/dashboard/src/components/app-store-entry.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/(overview)/metrics-page.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/-selector-/[...path]/page-client.tsx
  • apps/dashboard/src/components/commands/ask-ai.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/email-drafts/page-client.tsx
  • apps/dashboard/src/components/feedback-form.tsx
  • apps/dashboard/src/components/assistant-ui/markdown-text.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/sidebar-layout.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/launch-checklist/page-client.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/vercel/page-client.tsx
  • apps/dashboard/src/components/form-fields.tsx
apps/**/*.{ts,tsx}

📄 CodeRabbit inference engine (AGENTS.md)

NEVER use Next.js dynamic functions if you can avoid them; prefer using client components and hooks like usePathname instead of await params to keep pages static

Files:

  • apps/dashboard/src/app/(main)/(protected)/(outside-dashboard)/projects/page-client.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/(overview)/metrics-loading.tsx
  • apps/dashboard/src/components/vibe-coding/draft-tool-components.tsx
  • apps/dashboard/src/components/settings.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/data-vault/stores/page-client.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/email-templates/page-client.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/auth-methods/page-client.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/apps/page-client.tsx
  • apps/dashboard/src/components/stack-companion.tsx
  • apps/dashboard/src/components/copyable-text.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/webhooks/[endpointId]/page-client.tsx
  • apps/dashboard/src/components/editable-input.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/auth-methods/providers.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/users/page-client.tsx
  • apps/dashboard/src/components/logo-upload.tsx
  • apps/dashboard/src/components/vibe-coding/theme-tool-components.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/payments/products/page-client-catalogs-view.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/payments/products/components.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/(overview)/setup-page.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/payments/products/page-client-list-view.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/emails/page-client.tsx
  • apps/dashboard/src/components/cmdk-search.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/payments/products/page-client.tsx
  • apps/dashboard/src/components/stack-companion/feature-request-board.tsx
  • apps/dashboard/src/components/cmdk-commands.tsx
  • apps/dashboard/src/components/app-warning-modal.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/email-themes/page-client.tsx
  • apps/dashboard/src/components/search-bar.tsx
  • apps/dashboard/src/components/vibe-coding/template-tool-components.tsx
  • apps/dashboard/src/components/project-switcher.tsx
  • apps/dashboard/src/components/assistant-ui/thread.tsx
  • apps/dashboard/src/components/code-block.tsx
  • apps/dashboard/src/components/stack-companion/changelog-widget.tsx
  • apps/dashboard/src/components/form-fields/keyed-record-editor-field.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/payments/customers/page-client.tsx
  • apps/dashboard/src/components/data-table/user-table.tsx
  • apps/dashboard/src/components/data-table/transaction-table.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/payments/products/product-price-row.tsx
  • apps/dashboard/src/app/(main)/purchase/[code]/page-client.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/users/[userId]/page-client.tsx
  • apps/dashboard/src/components/app-square.tsx
  • apps/dashboard/src/components/stack-companion/unified-docs-widget.tsx
  • apps/dashboard/src/components/export-users-dialog.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/data-vault/stores/[storeId]/page-client.tsx
  • apps/dashboard/src/components/theme-toggle.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/payments/products/layout.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/payments/products/list-section.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/payments/products/product-dialog.tsx
  • apps/dashboard/src/components/data-table/common/pagination.tsx
  • apps/dashboard/src/components/assistant-ui/thread-list.tsx
  • apps/dashboard/src/components/app-store-entry.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/(overview)/metrics-page.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/-selector-/[...path]/page-client.tsx
  • apps/dashboard/src/components/commands/ask-ai.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/email-drafts/page-client.tsx
  • apps/dashboard/src/components/feedback-form.tsx
  • apps/dashboard/src/components/assistant-ui/markdown-text.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/sidebar-layout.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/launch-checklist/page-client.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/vercel/page-client.tsx
  • apps/dashboard/src/components/form-fields.tsx
{.env*,**/*.{ts,tsx,js}}

📄 CodeRabbit inference engine (AGENTS.md)

Prefix environment variables with STACK_ (or NEXT_PUBLIC_STACK_ if public) so changes are picked up by Turborepo and improves readability

Files:

  • apps/dashboard/src/app/(main)/(protected)/(outside-dashboard)/projects/page-client.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/(overview)/metrics-loading.tsx
  • apps/dashboard/src/components/vibe-coding/draft-tool-components.tsx
  • apps/dashboard/src/components/settings.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/data-vault/stores/page-client.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/email-templates/page-client.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/auth-methods/page-client.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/apps/page-client.tsx
  • apps/dashboard/src/components/stack-companion.tsx
  • apps/dashboard/src/components/copyable-text.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/webhooks/[endpointId]/page-client.tsx
  • apps/dashboard/src/components/editable-input.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/auth-methods/providers.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/users/page-client.tsx
  • apps/dashboard/src/components/logo-upload.tsx
  • apps/dashboard/src/components/vibe-coding/theme-tool-components.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/payments/products/page-client-catalogs-view.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/payments/products/components.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/(overview)/setup-page.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/payments/products/page-client-list-view.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/emails/page-client.tsx
  • apps/dashboard/src/components/cmdk-search.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/payments/products/page-client.tsx
  • apps/dashboard/src/components/stack-companion/feature-request-board.tsx
  • apps/dashboard/src/components/cmdk-commands.tsx
  • apps/dashboard/src/components/app-warning-modal.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/email-themes/page-client.tsx
  • apps/dashboard/src/components/search-bar.tsx
  • apps/dashboard/src/components/vibe-coding/template-tool-components.tsx
  • apps/dashboard/src/components/project-switcher.tsx
  • apps/dashboard/src/components/assistant-ui/thread.tsx
  • apps/dashboard/src/components/code-block.tsx
  • apps/dashboard/src/components/stack-companion/changelog-widget.tsx
  • apps/dashboard/src/components/form-fields/keyed-record-editor-field.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/payments/customers/page-client.tsx
  • apps/dashboard/src/components/data-table/user-table.tsx
  • apps/dashboard/src/components/data-table/transaction-table.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/payments/products/product-price-row.tsx
  • apps/dashboard/src/app/(main)/purchase/[code]/page-client.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/users/[userId]/page-client.tsx
  • apps/dashboard/src/components/app-square.tsx
  • apps/dashboard/src/components/stack-companion/unified-docs-widget.tsx
  • apps/dashboard/src/components/export-users-dialog.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/data-vault/stores/[storeId]/page-client.tsx
  • apps/dashboard/src/components/theme-toggle.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/payments/products/layout.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/payments/products/list-section.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/payments/products/product-dialog.tsx
  • apps/dashboard/src/components/data-table/common/pagination.tsx
  • apps/dashboard/src/components/assistant-ui/thread-list.tsx
  • apps/dashboard/src/components/app-store-entry.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/(overview)/metrics-page.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/-selector-/[...path]/page-client.tsx
  • apps/dashboard/src/components/commands/ask-ai.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/email-drafts/page-client.tsx
  • apps/dashboard/src/components/feedback-form.tsx
  • apps/dashboard/src/components/assistant-ui/markdown-text.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/sidebar-layout.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/launch-checklist/page-client.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/vercel/page-client.tsx
  • apps/dashboard/src/components/form-fields.tsx
apps/dashboard/**/*

📄 CodeRabbit inference engine (AGENTS.md)

When making changes in the dashboard, provide the user with a deep link to the dashboard page changed, usually in the form of http://localhost:<NEXT_PUBLIC_STACK_PORT_PREFIX>01/projects/-selector-/... or using a.localhost, b.localhost, c.localhost for port prefixes 91, 92, 93

Files:

  • apps/dashboard/src/app/(main)/(protected)/(outside-dashboard)/projects/page-client.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/(overview)/metrics-loading.tsx
  • apps/dashboard/src/components/vibe-coding/draft-tool-components.tsx
  • apps/dashboard/src/components/settings.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/data-vault/stores/page-client.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/email-templates/page-client.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/auth-methods/page-client.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/apps/page-client.tsx
  • apps/dashboard/src/components/stack-companion.tsx
  • apps/dashboard/src/components/copyable-text.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/webhooks/[endpointId]/page-client.tsx
  • apps/dashboard/src/components/editable-input.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/auth-methods/providers.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/users/page-client.tsx
  • apps/dashboard/src/components/logo-upload.tsx
  • apps/dashboard/src/components/vibe-coding/theme-tool-components.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/payments/products/page-client-catalogs-view.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/payments/products/components.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/(overview)/setup-page.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/payments/products/page-client-list-view.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/emails/page-client.tsx
  • apps/dashboard/src/components/cmdk-search.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/payments/products/page-client.tsx
  • apps/dashboard/src/components/stack-companion/feature-request-board.tsx
  • apps/dashboard/src/components/cmdk-commands.tsx
  • apps/dashboard/src/components/app-warning-modal.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/email-themes/page-client.tsx
  • apps/dashboard/src/components/search-bar.tsx
  • apps/dashboard/src/components/vibe-coding/template-tool-components.tsx
  • apps/dashboard/src/components/project-switcher.tsx
  • apps/dashboard/src/components/assistant-ui/thread.tsx
  • apps/dashboard/src/components/code-block.tsx
  • apps/dashboard/src/components/stack-companion/changelog-widget.tsx
  • apps/dashboard/src/components/form-fields/keyed-record-editor-field.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/payments/customers/page-client.tsx
  • apps/dashboard/src/components/data-table/user-table.tsx
  • apps/dashboard/src/components/data-table/transaction-table.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/payments/products/product-price-row.tsx
  • apps/dashboard/src/app/(main)/purchase/[code]/page-client.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/users/[userId]/page-client.tsx
  • apps/dashboard/src/components/app-square.tsx
  • apps/dashboard/src/components/stack-companion/unified-docs-widget.tsx
  • apps/dashboard/src/components/export-users-dialog.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/data-vault/stores/[storeId]/page-client.tsx
  • apps/dashboard/src/components/theme-toggle.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/payments/products/layout.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/payments/products/list-section.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/payments/products/product-dialog.tsx
  • apps/dashboard/src/components/data-table/common/pagination.tsx
  • apps/dashboard/src/components/assistant-ui/thread-list.tsx
  • apps/dashboard/src/components/app-store-entry.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/(overview)/metrics-page.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/-selector-/[...path]/page-client.tsx
  • apps/dashboard/src/components/commands/ask-ai.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/email-drafts/page-client.tsx
  • apps/dashboard/src/components/feedback-form.tsx
  • apps/dashboard/src/components/assistant-ui/markdown-text.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/sidebar-layout.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/launch-checklist/page-client.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/vercel/page-client.tsx
  • apps/dashboard/src/components/form-fields.tsx
apps/**/*.tsx

📄 CodeRabbit inference engine (AGENTS.md)

Check existing apps for inspiration when implementing new apps or pages; update apps-frontend.tsx and apps-config.ts to add new apps

Files:

  • apps/dashboard/src/app/(main)/(protected)/(outside-dashboard)/projects/page-client.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/(overview)/metrics-loading.tsx
  • apps/dashboard/src/components/vibe-coding/draft-tool-components.tsx
  • apps/dashboard/src/components/settings.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/data-vault/stores/page-client.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/email-templates/page-client.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/auth-methods/page-client.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/apps/page-client.tsx
  • apps/dashboard/src/components/stack-companion.tsx
  • apps/dashboard/src/components/copyable-text.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/webhooks/[endpointId]/page-client.tsx
  • apps/dashboard/src/components/editable-input.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/auth-methods/providers.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/users/page-client.tsx
  • apps/dashboard/src/components/logo-upload.tsx
  • apps/dashboard/src/components/vibe-coding/theme-tool-components.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/payments/products/page-client-catalogs-view.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/payments/products/components.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/(overview)/setup-page.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/payments/products/page-client-list-view.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/emails/page-client.tsx
  • apps/dashboard/src/components/cmdk-search.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/payments/products/page-client.tsx
  • apps/dashboard/src/components/stack-companion/feature-request-board.tsx
  • apps/dashboard/src/components/cmdk-commands.tsx
  • apps/dashboard/src/components/app-warning-modal.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/email-themes/page-client.tsx
  • apps/dashboard/src/components/search-bar.tsx
  • apps/dashboard/src/components/vibe-coding/template-tool-components.tsx
  • apps/dashboard/src/components/project-switcher.tsx
  • apps/dashboard/src/components/assistant-ui/thread.tsx
  • apps/dashboard/src/components/code-block.tsx
  • apps/dashboard/src/components/stack-companion/changelog-widget.tsx
  • apps/dashboard/src/components/form-fields/keyed-record-editor-field.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/payments/customers/page-client.tsx
  • apps/dashboard/src/components/data-table/user-table.tsx
  • apps/dashboard/src/components/data-table/transaction-table.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/payments/products/product-price-row.tsx
  • apps/dashboard/src/app/(main)/purchase/[code]/page-client.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/users/[userId]/page-client.tsx
  • apps/dashboard/src/components/app-square.tsx
  • apps/dashboard/src/components/stack-companion/unified-docs-widget.tsx
  • apps/dashboard/src/components/export-users-dialog.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/data-vault/stores/[storeId]/page-client.tsx
  • apps/dashboard/src/components/theme-toggle.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/payments/products/layout.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/payments/products/list-section.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/payments/products/product-dialog.tsx
  • apps/dashboard/src/components/data-table/common/pagination.tsx
  • apps/dashboard/src/components/assistant-ui/thread-list.tsx
  • apps/dashboard/src/components/app-store-entry.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/(overview)/metrics-page.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/-selector-/[...path]/page-client.tsx
  • apps/dashboard/src/components/commands/ask-ai.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/email-drafts/page-client.tsx
  • apps/dashboard/src/components/feedback-form.tsx
  • apps/dashboard/src/components/assistant-ui/markdown-text.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/sidebar-layout.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/launch-checklist/page-client.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/vercel/page-client.tsx
  • apps/dashboard/src/components/form-fields.tsx
🧠 Learnings (5)
📚 Learning: 2025-10-11T04:13:19.308Z
Learnt from: N2D4
Repo: stack-auth/stack-auth PR: 943
File: examples/convex/app/action/page.tsx:23-28
Timestamp: 2025-10-11T04:13:19.308Z
Learning: In the stack-auth codebase, use `runAsynchronouslyWithAlert` from `stackframe/stack-shared/dist/utils/promises` for async button click handlers and form submissions instead of manual try/catch blocks. This utility automatically handles errors and shows alerts to users.

Applied to files:

  • apps/dashboard/src/components/settings.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/email-templates/page-client.tsx
  • apps/dashboard/src/components/editable-input.tsx
  • apps/dashboard/src/components/logo-upload.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/emails/page-client.tsx
  • apps/dashboard/src/components/stack-companion/changelog-widget.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/payments/customers/page-client.tsx
  • apps/dashboard/src/components/data-table/user-table.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/users/[userId]/page-client.tsx
  • apps/dashboard/src/components/export-users-dialog.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/email-drafts/page-client.tsx
  • apps/dashboard/src/components/feedback-form.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/vercel/page-client.tsx
📚 Learning: 2025-12-04T18:03:49.984Z
Learnt from: CR
Repo: stack-auth/stack-auth PR: 0
File: AGENTS.md:0-0
Timestamp: 2025-12-04T18:03:49.984Z
Learning: Applies to apps/**/*.tsx : Check existing apps for inspiration when implementing new apps or pages; update apps-frontend.tsx and apps-config.ts to add new apps

Applied to files:

  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/apps/page-client.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/(overview)/setup-page.tsx
  • apps/dashboard/src/components/cmdk-commands.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/email-themes/page-client.tsx
  • apps/dashboard/src/components/data-table/user-table.tsx
  • apps/dashboard/src/components/app-square.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/data-vault/stores/[storeId]/page-client.tsx
  • apps/dashboard/src/components/app-store-entry.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/(overview)/metrics-page.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/-selector-/[...path]/page-client.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/email-drafts/page-client.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/sidebar-layout.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/launch-checklist/page-client.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/vercel/page-client.tsx
📚 Learning: 2025-12-04T18:03:49.984Z
Learnt from: CR
Repo: stack-auth/stack-auth PR: 0
File: AGENTS.md:0-0
Timestamp: 2025-12-04T18:03:49.984Z
Learning: Applies to apps/dashboard/**/* : When making changes in the dashboard, provide the user with a deep link to the dashboard page changed, usually in the form of http://localhost:<NEXT_PUBLIC_STACK_PORT_PREFIX>01/projects/-selector-/... or using a.localhost, b.localhost, c.localhost for port prefixes 91, 92, 93

Applied to files:

  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/apps/page-client.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/users/[userId]/page-client.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/-selector-/[...path]/page-client.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/sidebar-layout.tsx
📚 Learning: 2025-12-04T18:03:49.984Z
Learnt from: CR
Repo: stack-auth/stack-auth PR: 0
File: AGENTS.md:0-0
Timestamp: 2025-12-04T18:03:49.984Z
Learning: Applies to **/*.{ts,tsx} : NEVER try-catch-all, NEVER void a promise, and NEVER .catch(console.error); use loading indicators and async callbacks instead, or use runAsynchronously/runAsynchronouslyWithAlert for error handling

Applied to files:

  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/emails/page-client.tsx
📚 Learning: 2025-12-04T18:03:49.984Z
Learnt from: CR
Repo: stack-auth/stack-auth PR: 0
File: AGENTS.md:0-0
Timestamp: 2025-12-04T18:03:49.984Z
Learning: Applies to apps/**/*.{ts,tsx} : NEVER use Next.js dynamic functions if you can avoid them; prefer using client components and hooks like usePathname instead of await params to keep pages static

Applied to files:

  • apps/dashboard/src/components/stack-companion/unified-docs-widget.tsx
🧬 Code graph analysis (6)
apps/dashboard/src/components/search-bar.tsx (2)
packages/stack-shared/src/utils/react.tsx (1)
  • forwardRefIfNeeded (47-57)
packages/stack-ui/src/components/ui/input.tsx (1)
  • Input (10-41)
apps/dashboard/src/components/assistant-ui/thread.tsx (1)
apps/dashboard/src/components/assistant-ui/tooltip-icon-button.tsx (1)
  • TooltipIconButton (19-42)
apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/users/[userId]/page-client.tsx (1)
apps/dashboard/src/components/editable-input.tsx (1)
  • EditableInput (20-145)
apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/sidebar-layout.tsx (1)
apps/dashboard/src/lib/utils.tsx (1)
  • cn (7-9)
apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/launch-checklist/page-client.tsx (1)
docs/src/components/mdx/sdk-components.tsx (1)
  • Icon (323-326)
apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/vercel/page-client.tsx (1)
docs/src/components/mdx/sdk-components.tsx (1)
  • Icon (323-326)
⏰ 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). (13)
  • GitHub Check: Vercel Agent Review
  • GitHub Check: docker
  • GitHub Check: restart-dev-and-test
  • GitHub Check: E2E Tests (Node 22.x, Freestyle prod)
  • GitHub Check: E2E Tests (Node 22.x, Freestyle mock)
  • GitHub Check: lint_and_build (latest)
  • GitHub Check: restart-dev-and-test-with-custom-base-port
  • GitHub Check: check_prisma_migrations (22.x)
  • GitHub Check: build (22.x)
  • GitHub Check: setup-tests-with-custom-base-port
  • GitHub Check: setup-tests
  • GitHub Check: build (22.x)
  • GitHub Check: all-good

@cmux-agent
Copy link

cmux-agent bot commented Dec 15, 2025

Older cmux preview screenshots (latest comment is below)

Preview Screenshots

Open Diff Heatmap

Preview screenshots are being captured...

Workspace and dev browser links will appear here once the preview environment is ready.


Generated by cmux preview system

@cmux-agent
Copy link

cmux-agent bot commented Dec 16, 2025

Older cmux preview screenshots (latest comment is below)

Preview Screenshots

Open Diff Heatmap

Preview screenshots are being captured...

Workspace and dev browser links will appear here once the preview environment is ready.


Generated by cmux preview system

@N2D4 N2D4 changed the title [UI] - Updates all Icons to Phosor Icons [UI] - Updates all Icons to Phosphor Icons Dec 17, 2025
@cmux-agent
Copy link

cmux-agent bot commented Dec 22, 2025

Older cmux preview screenshots (latest comment is below)

Preview Screenshots

Open Diff Heatmap

Preview screenshots are being captured...

Workspace and dev browser links will appear here once the preview environment is ready.


Generated by cmux preview system

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 1

♻️ Duplicate comments (1)
apps/dashboard/src/components/stack-companion.tsx (1)

47-47: Use QuestionIcon instead of CircleNotchIcon for the Support sidebar item.

As previously identified, CircleNotchIcon is a loading spinner icon and does not semantically represent help or support functionality. The Support item should use QuestionIcon, which displays a question mark icon matching the original HelpCircle from Lucide.

🔎 Fix to use the correct icon

Update the import on line 6:

-import { BookOpenIcon, CircleNotchIcon, ClockClockwiseIcon, LightbulbIcon, XIcon } from '@phosphor-icons/react';
+import { BookOpenIcon, ClockClockwiseIcon, LightbulbIcon, QuestionIcon, XIcon } from '@phosphor-icons/react';

And update the icon mapping on line 47:

   {
     id: 'support',
     label: "Support",
-    icon: CircleNotchIcon,
+    icon: QuestionIcon,
     color: 'text-orange-600 dark:text-orange-400',
     hoverBg: 'hover:bg-orange-500/10',
   }
🧹 Nitpick comments (5)
apps/dashboard/src/components/theme-toggle.tsx (1)

1-18: Consider adding "use client" directive.

This component uses the useTheme() hook from next-themes, which requires a client-side context. While it may work if only imported by other client components, it's best practice to explicitly add "use client" at the top of the file for clarity and to prevent potential issues.

🔎 Suggested addition
+"use client";
+
 import { Button } from "@/components/ui";
 import { MoonIcon, SunIcon } from "@phosphor-icons/react";
 import { useTheme } from "next-themes";
apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/payments/products/price-edit-dialog.tsx (1)

221-221: HardDriveIcon usage for "Server Only" is consistent across the product payments section.

While HardDriveIcon typically represents storage hardware rather than server-side functionality, it's intentionally and consistently used for the "Server Only" concept throughout the payments/products area (price-edit-dialog, product-card-preview, page-client-catalogs-view, etc.). If you prefer stronger semantic alignment, DatabaseIcon is available in Phosphor Icons, though no ServerIcon exists in the library. However, changing this would require updates across multiple related files in the payments product area.

apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/sidebar-layout.tsx (1)

244-244: Consider documenting the intentional weight variation.

The CaretDownIcon uses weight="bold" while other Phosphor icons in this file use the default weight. This is likely intentional for visual emphasis, but consider adding a comment if this is a deliberate design choice.

apps/dashboard/src/components/copyable-text.tsx (1)

22-29: Refactor error handling to align with coding guidelines.

The console.error on line 27 violates the coding guidelines. As per the guidelines, you should use runAsynchronouslyWithAlert for error handling or provide user feedback instead of logging to console.

Based on coding guidelines, console.error should be replaced with proper error handling that informs the user when clipboard copy fails.

🔎 Recommended approach

Consider using runAsynchronouslyWithAlert from the Stack utilities, or show a user-facing error message when the clipboard operation fails. This ensures users are aware of the failure rather than silently logging it.

apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/payments/products/new/page-client.tsx (1)

28-28: Consider multi-line formatting for icon imports.

The icon import line is quite long (14 imports). For better readability and maintainability, consider formatting it across multiple lines.

🔎 Suggested formatting
-import { ArrowLeftIcon, BuildingOfficeIcon, CaretDownIcon, ChatIcon, ClockIcon, CodeIcon, CopyIcon, GearIcon, HardDriveIcon, LightningIcon, PlusIcon, PuzzlePieceIcon, StackIcon, TrashIcon, UserIcon } from "@phosphor-icons/react";
+import {
+  ArrowLeftIcon,
+  BuildingOfficeIcon,
+  CaretDownIcon,
+  ChatIcon,
+  ClockIcon,
+  CodeIcon,
+  CopyIcon,
+  GearIcon,
+  HardDriveIcon,
+  LightningIcon,
+  PlusIcon,
+  PuzzlePieceIcon,
+  StackIcon,
+  TrashIcon,
+  UserIcon,
+} from "@phosphor-icons/react";
📜 Review details

Configuration used: defaults

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between f809452 and 0aea497.

⛔ Files ignored due to path filters (1)
  • pnpm-lock.yaml is excluded by !**/pnpm-lock.yaml
📒 Files selected for processing (75)
  • apps/dashboard/package.json
  • apps/dashboard/src/app/(main)/(protected)/(outside-dashboard)/projects/page-client.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/-selector-/[...path]/page-client.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/(overview)/metrics-loading.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/(overview)/metrics-page.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/(overview)/setup-page.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/apps/page-client.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/auth-methods/page-client.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/auth-methods/providers.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/data-vault/stores/[storeId]/page-client.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/data-vault/stores/page-client.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/email-drafts/page-client.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/email-templates/page-client.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/email-themes/page-client.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/emails/page-client.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/launch-checklist/page-client.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/payments/catalogs/layout.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/payments/catalogs/page-client.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/payments/customers/page-client.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/payments/products/[productId]/page-client.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/payments/products/components.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/payments/products/layout.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/payments/products/list-section.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/payments/products/new/page-client.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/payments/products/page-client-catalogs-view.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/payments/products/page-client-list-view.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/payments/products/page-client.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/payments/products/price-edit-dialog.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/payments/products/pricing-section.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/payments/products/product-card-preview.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/payments/products/product-dialog.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/payments/products/product-price-row.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/sidebar-layout.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/users/[userId]/page-client.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/users/page-client.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/vercel/page-client.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/webhooks/[endpointId]/page-client.tsx
  • apps/dashboard/src/app/(main)/purchase/[code]/page-client.tsx
  • apps/dashboard/src/components/app-square.tsx
  • apps/dashboard/src/components/app-store-entry.tsx
  • apps/dashboard/src/components/app-warning-modal.tsx
  • apps/dashboard/src/components/assistant-ui/thread-list.tsx
  • apps/dashboard/src/components/assistant-ui/thread.tsx
  • apps/dashboard/src/components/cmdk-commands.tsx
  • apps/dashboard/src/components/code-block.tsx
  • apps/dashboard/src/components/commands/ask-ai.tsx
  • apps/dashboard/src/components/copyable-text.tsx
  • apps/dashboard/src/components/data-table/common/pagination.tsx
  • apps/dashboard/src/components/data-table/transaction-table.tsx
  • apps/dashboard/src/components/data-table/user-table.tsx
  • apps/dashboard/src/components/editable-input.tsx
  • apps/dashboard/src/components/export-users-dialog.tsx
  • apps/dashboard/src/components/feedback-form.tsx
  • apps/dashboard/src/components/form-fields.tsx
  • apps/dashboard/src/components/form-fields/keyed-record-editor-field.tsx
  • apps/dashboard/src/components/logo-upload.tsx
  • apps/dashboard/src/components/payments/item-dialog.tsx
  • apps/dashboard/src/components/project-switcher.tsx
  • apps/dashboard/src/components/repeating-input.tsx
  • apps/dashboard/src/components/search-bar.tsx
  • apps/dashboard/src/components/settings.tsx
  • apps/dashboard/src/components/stack-companion.tsx
  • apps/dashboard/src/components/stack-companion/changelog-widget.tsx
  • apps/dashboard/src/components/stack-companion/feature-request-board.tsx
  • apps/dashboard/src/components/theme-toggle.tsx
  • apps/dashboard/src/components/ui/action-dialog.tsx
  • apps/dashboard/src/components/ui/copy-button.tsx
  • apps/dashboard/src/components/ui/data-table/column-header.tsx
  • apps/dashboard/src/components/ui/data-table/faceted-filter.tsx
  • apps/dashboard/src/components/ui/data-table/toolbar.tsx
  • apps/dashboard/src/components/ui/simple-tooltip.tsx
  • apps/dashboard/src/components/vibe-coding/draft-tool-components.tsx
  • apps/dashboard/src/components/vibe-coding/template-tool-components.tsx
  • apps/dashboard/src/components/vibe-coding/theme-tool-components.tsx
  • apps/dashboard/src/lib/apps-frontend.tsx
💤 Files with no reviewable changes (1)
  • apps/dashboard/package.json
🚧 Files skipped from review as they are similar to previous changes (37)
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/auth-methods/providers.tsx
  • apps/dashboard/src/components/app-square.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/emails/page-client.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/payments/products/page-client.tsx
  • apps/dashboard/src/components/editable-input.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/data-vault/stores/page-client.tsx
  • apps/dashboard/src/components/form-fields.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/(overview)/metrics-loading.tsx
  • apps/dashboard/src/components/assistant-ui/thread-list.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/(overview)/metrics-page.tsx
  • apps/dashboard/src/components/stack-companion/changelog-widget.tsx
  • apps/dashboard/src/components/export-users-dialog.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/auth-methods/page-client.tsx
  • apps/dashboard/src/components/data-table/transaction-table.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/payments/products/layout.tsx
  • apps/dashboard/src/components/assistant-ui/thread.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/webhooks/[endpointId]/page-client.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/payments/products/components.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/vercel/page-client.tsx
  • apps/dashboard/src/components/commands/ask-ai.tsx
  • apps/dashboard/src/components/stack-companion/feature-request-board.tsx
  • apps/dashboard/src/components/project-switcher.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/email-themes/page-client.tsx
  • apps/dashboard/src/components/vibe-coding/template-tool-components.tsx
  • apps/dashboard/src/components/data-table/common/pagination.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/users/[userId]/page-client.tsx
  • apps/dashboard/src/components/app-store-entry.tsx
  • apps/dashboard/src/components/app-warning-modal.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/payments/products/page-client-list-view.tsx
  • apps/dashboard/src/components/cmdk-commands.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/payments/products/page-client-catalogs-view.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/payments/products/product-price-row.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/apps/page-client.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/payments/products/product-dialog.tsx
  • apps/dashboard/src/components/feedback-form.tsx
  • apps/dashboard/src/components/settings.tsx
  • apps/dashboard/src/components/code-block.tsx
🧰 Additional context used
📓 Path-based instructions (6)
**/*.{ts,tsx}

📄 CodeRabbit inference engine (AGENTS.md)

**/*.{ts,tsx}: Always add new E2E tests when changing the API or SDK interface
For blocking alerts and errors, never use toast; use alerts instead as they are less easily missed by the user
NEVER try-catch-all, NEVER void a promise, and NEVER .catch(console.error); use loading indicators and async callbacks instead, or use runAsynchronously/runAsynchronouslyWithAlert for error handling
Use ES6 maps instead of records wherever you can

Files:

  • apps/dashboard/src/components/ui/data-table/toolbar.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/payments/products/price-edit-dialog.tsx
  • apps/dashboard/src/components/data-table/user-table.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/payments/customers/page-client.tsx
  • apps/dashboard/src/components/payments/item-dialog.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/payments/catalogs/page-client.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/data-vault/stores/[storeId]/page-client.tsx
  • apps/dashboard/src/components/repeating-input.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/email-drafts/page-client.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/launch-checklist/page-client.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/payments/catalogs/layout.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/payments/products/new/page-client.tsx
  • apps/dashboard/src/components/logo-upload.tsx
  • apps/dashboard/src/components/vibe-coding/theme-tool-components.tsx
  • apps/dashboard/src/components/stack-companion.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/sidebar-layout.tsx
  • apps/dashboard/src/components/ui/data-table/faceted-filter.tsx
  • apps/dashboard/src/components/ui/data-table/column-header.tsx
  • apps/dashboard/src/app/(main)/purchase/[code]/page-client.tsx
  • apps/dashboard/src/components/vibe-coding/draft-tool-components.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/payments/products/product-card-preview.tsx
  • apps/dashboard/src/components/ui/action-dialog.tsx
  • apps/dashboard/src/components/ui/simple-tooltip.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/email-templates/page-client.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/payments/products/[productId]/page-client.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/(overview)/setup-page.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/payments/products/list-section.tsx
  • apps/dashboard/src/app/(main)/(protected)/(outside-dashboard)/projects/page-client.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/payments/products/pricing-section.tsx
  • apps/dashboard/src/components/copyable-text.tsx
  • apps/dashboard/src/components/ui/copy-button.tsx
  • apps/dashboard/src/components/form-fields/keyed-record-editor-field.tsx
  • apps/dashboard/src/lib/apps-frontend.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/-selector-/[...path]/page-client.tsx
  • apps/dashboard/src/components/search-bar.tsx
  • apps/dashboard/src/components/theme-toggle.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/users/page-client.tsx
**/*.{ts,tsx,css}

📄 CodeRabbit inference engine (AGENTS.md)

**/*.{ts,tsx,css}: Keep hover/click transitions snappy and fast; avoid fade-in delays on hover. Apply transitions after action completion instead, like smooth fade-out when hover ends
Use hover-exit transitions instead of hover-enter transitions; for example, use 'transition-colors hover:transition-none' instead of fade-in on hover

Files:

  • apps/dashboard/src/components/ui/data-table/toolbar.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/payments/products/price-edit-dialog.tsx
  • apps/dashboard/src/components/data-table/user-table.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/payments/customers/page-client.tsx
  • apps/dashboard/src/components/payments/item-dialog.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/payments/catalogs/page-client.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/data-vault/stores/[storeId]/page-client.tsx
  • apps/dashboard/src/components/repeating-input.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/email-drafts/page-client.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/launch-checklist/page-client.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/payments/catalogs/layout.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/payments/products/new/page-client.tsx
  • apps/dashboard/src/components/logo-upload.tsx
  • apps/dashboard/src/components/vibe-coding/theme-tool-components.tsx
  • apps/dashboard/src/components/stack-companion.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/sidebar-layout.tsx
  • apps/dashboard/src/components/ui/data-table/faceted-filter.tsx
  • apps/dashboard/src/components/ui/data-table/column-header.tsx
  • apps/dashboard/src/app/(main)/purchase/[code]/page-client.tsx
  • apps/dashboard/src/components/vibe-coding/draft-tool-components.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/payments/products/product-card-preview.tsx
  • apps/dashboard/src/components/ui/action-dialog.tsx
  • apps/dashboard/src/components/ui/simple-tooltip.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/email-templates/page-client.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/payments/products/[productId]/page-client.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/(overview)/setup-page.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/payments/products/list-section.tsx
  • apps/dashboard/src/app/(main)/(protected)/(outside-dashboard)/projects/page-client.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/payments/products/pricing-section.tsx
  • apps/dashboard/src/components/copyable-text.tsx
  • apps/dashboard/src/components/ui/copy-button.tsx
  • apps/dashboard/src/components/form-fields/keyed-record-editor-field.tsx
  • apps/dashboard/src/lib/apps-frontend.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/-selector-/[...path]/page-client.tsx
  • apps/dashboard/src/components/search-bar.tsx
  • apps/dashboard/src/components/theme-toggle.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/users/page-client.tsx
apps/**/*.{ts,tsx}

📄 CodeRabbit inference engine (AGENTS.md)

NEVER use Next.js dynamic functions if you can avoid them; prefer using client components and hooks like usePathname instead of await params to keep pages static

Files:

  • apps/dashboard/src/components/ui/data-table/toolbar.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/payments/products/price-edit-dialog.tsx
  • apps/dashboard/src/components/data-table/user-table.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/payments/customers/page-client.tsx
  • apps/dashboard/src/components/payments/item-dialog.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/payments/catalogs/page-client.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/data-vault/stores/[storeId]/page-client.tsx
  • apps/dashboard/src/components/repeating-input.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/email-drafts/page-client.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/launch-checklist/page-client.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/payments/catalogs/layout.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/payments/products/new/page-client.tsx
  • apps/dashboard/src/components/logo-upload.tsx
  • apps/dashboard/src/components/vibe-coding/theme-tool-components.tsx
  • apps/dashboard/src/components/stack-companion.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/sidebar-layout.tsx
  • apps/dashboard/src/components/ui/data-table/faceted-filter.tsx
  • apps/dashboard/src/components/ui/data-table/column-header.tsx
  • apps/dashboard/src/app/(main)/purchase/[code]/page-client.tsx
  • apps/dashboard/src/components/vibe-coding/draft-tool-components.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/payments/products/product-card-preview.tsx
  • apps/dashboard/src/components/ui/action-dialog.tsx
  • apps/dashboard/src/components/ui/simple-tooltip.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/email-templates/page-client.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/payments/products/[productId]/page-client.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/(overview)/setup-page.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/payments/products/list-section.tsx
  • apps/dashboard/src/app/(main)/(protected)/(outside-dashboard)/projects/page-client.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/payments/products/pricing-section.tsx
  • apps/dashboard/src/components/copyable-text.tsx
  • apps/dashboard/src/components/ui/copy-button.tsx
  • apps/dashboard/src/components/form-fields/keyed-record-editor-field.tsx
  • apps/dashboard/src/lib/apps-frontend.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/-selector-/[...path]/page-client.tsx
  • apps/dashboard/src/components/search-bar.tsx
  • apps/dashboard/src/components/theme-toggle.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/users/page-client.tsx
{.env*,**/*.{ts,tsx,js}}

📄 CodeRabbit inference engine (AGENTS.md)

Prefix environment variables with STACK_ (or NEXT_PUBLIC_STACK_ if public) so changes are picked up by Turborepo and improves readability

Files:

  • apps/dashboard/src/components/ui/data-table/toolbar.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/payments/products/price-edit-dialog.tsx
  • apps/dashboard/src/components/data-table/user-table.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/payments/customers/page-client.tsx
  • apps/dashboard/src/components/payments/item-dialog.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/payments/catalogs/page-client.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/data-vault/stores/[storeId]/page-client.tsx
  • apps/dashboard/src/components/repeating-input.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/email-drafts/page-client.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/launch-checklist/page-client.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/payments/catalogs/layout.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/payments/products/new/page-client.tsx
  • apps/dashboard/src/components/logo-upload.tsx
  • apps/dashboard/src/components/vibe-coding/theme-tool-components.tsx
  • apps/dashboard/src/components/stack-companion.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/sidebar-layout.tsx
  • apps/dashboard/src/components/ui/data-table/faceted-filter.tsx
  • apps/dashboard/src/components/ui/data-table/column-header.tsx
  • apps/dashboard/src/app/(main)/purchase/[code]/page-client.tsx
  • apps/dashboard/src/components/vibe-coding/draft-tool-components.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/payments/products/product-card-preview.tsx
  • apps/dashboard/src/components/ui/action-dialog.tsx
  • apps/dashboard/src/components/ui/simple-tooltip.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/email-templates/page-client.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/payments/products/[productId]/page-client.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/(overview)/setup-page.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/payments/products/list-section.tsx
  • apps/dashboard/src/app/(main)/(protected)/(outside-dashboard)/projects/page-client.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/payments/products/pricing-section.tsx
  • apps/dashboard/src/components/copyable-text.tsx
  • apps/dashboard/src/components/ui/copy-button.tsx
  • apps/dashboard/src/components/form-fields/keyed-record-editor-field.tsx
  • apps/dashboard/src/lib/apps-frontend.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/-selector-/[...path]/page-client.tsx
  • apps/dashboard/src/components/search-bar.tsx
  • apps/dashboard/src/components/theme-toggle.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/users/page-client.tsx
apps/dashboard/**/*

📄 CodeRabbit inference engine (AGENTS.md)

When making changes in the dashboard, provide the user with a deep link to the dashboard page changed, usually in the form of http://localhost:<NEXT_PUBLIC_STACK_PORT_PREFIX>01/projects/-selector-/... or using a.localhost, b.localhost, c.localhost for port prefixes 91, 92, 93

Files:

  • apps/dashboard/src/components/ui/data-table/toolbar.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/payments/products/price-edit-dialog.tsx
  • apps/dashboard/src/components/data-table/user-table.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/payments/customers/page-client.tsx
  • apps/dashboard/src/components/payments/item-dialog.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/payments/catalogs/page-client.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/data-vault/stores/[storeId]/page-client.tsx
  • apps/dashboard/src/components/repeating-input.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/email-drafts/page-client.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/launch-checklist/page-client.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/payments/catalogs/layout.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/payments/products/new/page-client.tsx
  • apps/dashboard/src/components/logo-upload.tsx
  • apps/dashboard/src/components/vibe-coding/theme-tool-components.tsx
  • apps/dashboard/src/components/stack-companion.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/sidebar-layout.tsx
  • apps/dashboard/src/components/ui/data-table/faceted-filter.tsx
  • apps/dashboard/src/components/ui/data-table/column-header.tsx
  • apps/dashboard/src/app/(main)/purchase/[code]/page-client.tsx
  • apps/dashboard/src/components/vibe-coding/draft-tool-components.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/payments/products/product-card-preview.tsx
  • apps/dashboard/src/components/ui/action-dialog.tsx
  • apps/dashboard/src/components/ui/simple-tooltip.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/email-templates/page-client.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/payments/products/[productId]/page-client.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/(overview)/setup-page.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/payments/products/list-section.tsx
  • apps/dashboard/src/app/(main)/(protected)/(outside-dashboard)/projects/page-client.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/payments/products/pricing-section.tsx
  • apps/dashboard/src/components/copyable-text.tsx
  • apps/dashboard/src/components/ui/copy-button.tsx
  • apps/dashboard/src/components/form-fields/keyed-record-editor-field.tsx
  • apps/dashboard/src/lib/apps-frontend.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/-selector-/[...path]/page-client.tsx
  • apps/dashboard/src/components/search-bar.tsx
  • apps/dashboard/src/components/theme-toggle.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/users/page-client.tsx
apps/**/*.tsx

📄 CodeRabbit inference engine (AGENTS.md)

Check existing apps for inspiration when implementing new apps or pages; update apps-frontend.tsx and apps-config.ts to add new apps

Files:

  • apps/dashboard/src/components/ui/data-table/toolbar.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/payments/products/price-edit-dialog.tsx
  • apps/dashboard/src/components/data-table/user-table.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/payments/customers/page-client.tsx
  • apps/dashboard/src/components/payments/item-dialog.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/payments/catalogs/page-client.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/data-vault/stores/[storeId]/page-client.tsx
  • apps/dashboard/src/components/repeating-input.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/email-drafts/page-client.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/launch-checklist/page-client.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/payments/catalogs/layout.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/payments/products/new/page-client.tsx
  • apps/dashboard/src/components/logo-upload.tsx
  • apps/dashboard/src/components/vibe-coding/theme-tool-components.tsx
  • apps/dashboard/src/components/stack-companion.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/sidebar-layout.tsx
  • apps/dashboard/src/components/ui/data-table/faceted-filter.tsx
  • apps/dashboard/src/components/ui/data-table/column-header.tsx
  • apps/dashboard/src/app/(main)/purchase/[code]/page-client.tsx
  • apps/dashboard/src/components/vibe-coding/draft-tool-components.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/payments/products/product-card-preview.tsx
  • apps/dashboard/src/components/ui/action-dialog.tsx
  • apps/dashboard/src/components/ui/simple-tooltip.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/email-templates/page-client.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/payments/products/[productId]/page-client.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/(overview)/setup-page.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/payments/products/list-section.tsx
  • apps/dashboard/src/app/(main)/(protected)/(outside-dashboard)/projects/page-client.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/payments/products/pricing-section.tsx
  • apps/dashboard/src/components/copyable-text.tsx
  • apps/dashboard/src/components/ui/copy-button.tsx
  • apps/dashboard/src/components/form-fields/keyed-record-editor-field.tsx
  • apps/dashboard/src/lib/apps-frontend.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/-selector-/[...path]/page-client.tsx
  • apps/dashboard/src/components/search-bar.tsx
  • apps/dashboard/src/components/theme-toggle.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/users/page-client.tsx
🧠 Learnings (5)
📚 Learning: 2025-10-11T04:13:19.308Z
Learnt from: N2D4
Repo: stack-auth/stack-auth PR: 943
File: examples/convex/app/action/page.tsx:23-28
Timestamp: 2025-10-11T04:13:19.308Z
Learning: In the stack-auth codebase, use `runAsynchronouslyWithAlert` from `stackframe/stack-shared/dist/utils/promises` for async button click handlers and form submissions instead of manual try/catch blocks. This utility automatically handles errors and shows alerts to users.

Applied to files:

  • apps/dashboard/src/components/data-table/user-table.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/payments/customers/page-client.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/payments/products/new/page-client.tsx
  • apps/dashboard/src/app/(main)/(protected)/(outside-dashboard)/projects/page-client.tsx
📚 Learning: 2025-12-04T18:03:49.984Z
Learnt from: CR
Repo: stack-auth/stack-auth PR: 0
File: AGENTS.md:0-0
Timestamp: 2025-12-04T18:03:49.984Z
Learning: Applies to apps/**/*.tsx : Check existing apps for inspiration when implementing new apps or pages; update apps-frontend.tsx and apps-config.ts to add new apps

Applied to files:

  • apps/dashboard/src/components/data-table/user-table.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/payments/catalogs/page-client.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/data-vault/stores/[storeId]/page-client.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/email-drafts/page-client.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/launch-checklist/page-client.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/payments/products/new/page-client.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/sidebar-layout.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/payments/products/[productId]/page-client.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/(overview)/setup-page.tsx
  • apps/dashboard/src/lib/apps-frontend.tsx
📚 Learning: 2025-12-04T18:03:49.984Z
Learnt from: CR
Repo: stack-auth/stack-auth PR: 0
File: AGENTS.md:0-0
Timestamp: 2025-12-04T18:03:49.984Z
Learning: Applies to apps/dashboard/**/* : When making changes in the dashboard, provide the user with a deep link to the dashboard page changed, usually in the form of http://localhost:<NEXT_PUBLIC_STACK_PORT_PREFIX>01/projects/-selector-/... or using a.localhost, b.localhost, c.localhost for port prefixes 91, 92, 93

Applied to files:

  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/sidebar-layout.tsx
  • apps/dashboard/src/app/(main)/(protected)/projects/-selector-/[...path]/page-client.tsx
📚 Learning: 2025-12-04T18:03:49.984Z
Learnt from: CR
Repo: stack-auth/stack-auth PR: 0
File: AGENTS.md:0-0
Timestamp: 2025-12-04T18:03:49.984Z
Learning: Applies to **/*.{ts,tsx} : For blocking alerts and errors, never use toast; use alerts instead as they are less easily missed by the user

Applied to files:

  • apps/dashboard/src/components/ui/simple-tooltip.tsx
📚 Learning: 2025-12-04T18:03:49.984Z
Learnt from: CR
Repo: stack-auth/stack-auth PR: 0
File: AGENTS.md:0-0
Timestamp: 2025-12-04T18:03:49.984Z
Learning: Applies to apps/**/*.{ts,tsx} : NEVER use Next.js dynamic functions if you can avoid them; prefer using client components and hooks like usePathname instead of await params to keep pages static

Applied to files:

  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/(overview)/setup-page.tsx
🧬 Code graph analysis (3)
apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/launch-checklist/page-client.tsx (1)
docs/src/components/mdx/sdk-components.tsx (1)
  • Icon (323-326)
apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/sidebar-layout.tsx (1)
apps/dashboard/src/lib/utils.tsx (1)
  • cn (7-9)
apps/dashboard/src/components/search-bar.tsx (2)
packages/stack-shared/src/utils/react.tsx (1)
  • forwardRefIfNeeded (47-57)
apps/dashboard/src/components/ui/input.tsx (1)
  • Input (10-41)
⏰ 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). (13)
  • GitHub Check: Vercel Agent Review
  • GitHub Check: all-good
  • GitHub Check: setup-tests-with-custom-base-port
  • GitHub Check: docker
  • GitHub Check: restart-dev-and-test-with-custom-base-port
  • GitHub Check: build (22.x)
  • GitHub Check: build (22.x)
  • GitHub Check: check_prisma_migrations (22.x)
  • GitHub Check: setup-tests
  • GitHub Check: E2E Tests (Node 22.x, Freestyle mock)
  • GitHub Check: restart-dev-and-test
  • GitHub Check: E2E Tests (Node 22.x, Freestyle prod)
  • GitHub Check: lint_and_build (latest)

@cmux-agent
Copy link

cmux-agent bot commented Dec 22, 2025

Older cmux preview screenshots (latest comment is below)

Preview Screenshots

Open Diff Heatmap

Preview screenshots are being captured...

Workspace and dev browser links will appear here once the preview environment is ready.


Generated by cmux preview system

@cmux-agent
Copy link

cmux-agent bot commented Dec 22, 2025

Preview Screenshots

Open Diff Heatmap

Preview screenshots are being captured...

Workspace and dev browser links will appear here once the preview environment is ready.


Generated by cmux preview system

@madster456 madster456 merged commit 3ef9cb3 into dev Dec 22, 2025
16 of 20 checks passed
@madster456 madster456 deleted the ui/icons branch December 22, 2025 16:43
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.

2 participants