[UI] - Updates all Icons to Phosphor Icons#1066
Conversation
Older cmux preview screenshots (latest comment is below)Preview Screenshots⏳ Preview screenshots are being captured... Workspace and dev browser links will appear here once the preview environment is ready. Generated by cmux preview system |
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
|
Caution Review failedThe pull request is closed. Note Other AI code review bot(s) detectedCodeRabbit 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. WalkthroughMigrates the dashboard icon library: removes Changes
Estimated code review effort🎯 3 (Moderate) | ⏱️ ~25 minutes
Possibly related PRs
Suggested reviewers
Poem
Pre-merge checks and finishing touches❌ Failed checks (1 warning)
✅ Passed checks (2 passed)
📜 Recent review detailsConfiguration used: defaults Review profile: CHILL Plan: Pro 📒 Files selected for processing (1)
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. Comment |
Older cmux preview screenshots (latest comment is below)Preview Screenshots⏳ 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 OverviewGreptile SummaryThis PR migrates all icons from Lucide to Phosphor across 64 files in the dashboard application. The migration removes the Key Changes:
Issues Found:
Confidence Score: 3/5
Important Files ChangedFile Analysis
Sequence DiagramsequenceDiagram
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
|
There was a problem hiding this comment.
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/reactactually exportsCircleNotchIcon(many examples useCircleNotch). If the library only exportsCircleNotch, update both the import and JSX usage accordingly.- Optional: if the icon is purely decorative, consider adding
aria-hidden="true"to theCircleNotchIconto 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-/overviewapps/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
WarningCircleIconimport from@phosphor-icons/reactand its usages in bothAlertcomponents look good and keep the previous sizing semantics (h-4 w-4). If these icons are purely decorative (the text already conveys “Warning”), consider addingaria-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 dashboardFor 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-draftsThis should route to the
PageClientrendered 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 viewSince 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
BankIcondoesn't clearly convey "cancellation" to users—it suggests a financial institution rather than a termination action. Consider using a more intuitive icon likeXCircleIcon,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 tweakCommand 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
weightprop 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: PhosphorPlusIconimport & usage look good; consider marking icon decorative and verify installed versionImporting
PlusIconfrom@phosphor-icons/reactand using it in the “Create new project” button withclassName="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/reactversion in the dashboard app is the expected one (the repo metadata suggests2.1.10); if it differs, double‑check thatPlusIconis 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 pageFor manual testing of these icon changes in the dashboard, you can open a purchase URL such as
http://localhost:9101/purchase/<code>(assumingNEXT_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 consistentaria-hiddenusage 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 usearia-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: Addaria-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 usingrunAsynchronouslyWithAlertfor form submission
handleSubmituses a manualtry/catchwith local status/error state; behavior is fine but diverges from the repo pattern of wrapping async submissions inrunAsynchronouslyWithAlert. IfSmartFormallows, consider refactoringonSubmitto delegate the async call and alert handling to that helper for consistency with other forms.I can sketch an example integration with
runAsynchronouslyWithAlerthere 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 nitsEnvelope/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-colorstotransition-colors hover:transition-noneon 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 separatelyThe switch to
@phosphor-icons/reactwith*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 enablingoptimizePackageImports: ["@phosphor-icons/react"]innext.configor moving to the recommended/dist/...subpath imports in a follow-up perf pass.Please confirm that the chosen import pattern matches how
@phosphor-icons/reactis 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 hardeningUsing
MagnifyingGlassIconwith 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 appliesThe new
SparkleIconworks 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 UIThis
CmdKSearch/CmdKTriggerpair 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-/overviewand 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 readersThe
MagnifyingGlassIconworks 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 labelThe
PlusIconinside 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/productsapps/dashboard/src/components/logo-upload.tsx (1)
87-134: Dashboard deep link for manual verificationTo quickly verify the new Phosphor icons in context, you can open the page that uses
LogoUploadvia 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 changeSince 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 viaa.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 weightsThe switch to
@phosphor-icons/react(importingCheckIcon,DotsThreeVerticalIcon) matches the library’s API, and the new icons are wired with appropriateclassNameandweightusage, so behavior should remain the same visually and semantically.If you want perfect visual consistency, you could optionally give the
CheckIconin the list item actions (Line 256) aweight="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 forapps/dashboard/**/*(deep links) and*.tsx(icon usage only, no API changes).Also applies to: 133-133, 147-147, 256-256
168-173: Avoidvoiding theperformTogglepromise 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.
runAsynchronouslyWithAlertor 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
⛔ Files ignored due to path filters (1)
pnpm-lock.yamlis 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.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/(overview)/metrics-loading.tsxapps/dashboard/src/components/vibe-coding/draft-tool-components.tsxapps/dashboard/src/components/settings.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/data-vault/stores/page-client.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/email-templates/page-client.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/auth-methods/page-client.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/apps/page-client.tsxapps/dashboard/src/components/stack-companion.tsxapps/dashboard/src/components/copyable-text.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/webhooks/[endpointId]/page-client.tsxapps/dashboard/src/components/editable-input.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/auth-methods/providers.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/users/page-client.tsxapps/dashboard/src/components/logo-upload.tsxapps/dashboard/src/components/vibe-coding/theme-tool-components.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/payments/products/page-client-catalogs-view.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/payments/products/components.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/(overview)/setup-page.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/payments/products/page-client-list-view.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/emails/page-client.tsxapps/dashboard/src/components/cmdk-search.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/payments/products/page-client.tsxapps/dashboard/src/components/stack-companion/feature-request-board.tsxapps/dashboard/src/components/cmdk-commands.tsxapps/dashboard/src/components/app-warning-modal.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/email-themes/page-client.tsxapps/dashboard/src/components/search-bar.tsxapps/dashboard/src/components/vibe-coding/template-tool-components.tsxapps/dashboard/src/components/project-switcher.tsxapps/dashboard/src/components/assistant-ui/thread.tsxapps/dashboard/src/components/code-block.tsxapps/dashboard/src/components/stack-companion/changelog-widget.tsxapps/dashboard/src/components/form-fields/keyed-record-editor-field.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/payments/customers/page-client.tsxapps/dashboard/src/components/data-table/user-table.tsxapps/dashboard/src/components/data-table/transaction-table.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/payments/products/product-price-row.tsxapps/dashboard/src/app/(main)/purchase/[code]/page-client.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/users/[userId]/page-client.tsxapps/dashboard/src/components/app-square.tsxapps/dashboard/src/components/stack-companion/unified-docs-widget.tsxapps/dashboard/src/components/export-users-dialog.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/data-vault/stores/[storeId]/page-client.tsxapps/dashboard/src/components/theme-toggle.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/payments/products/layout.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/payments/products/list-section.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/payments/products/product-dialog.tsxapps/dashboard/src/components/data-table/common/pagination.tsxapps/dashboard/src/components/assistant-ui/thread-list.tsxapps/dashboard/src/components/app-store-entry.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/(overview)/metrics-page.tsxapps/dashboard/src/app/(main)/(protected)/projects/-selector-/[...path]/page-client.tsxapps/dashboard/src/components/commands/ask-ai.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/email-drafts/page-client.tsxapps/dashboard/src/components/feedback-form.tsxapps/dashboard/src/components/assistant-ui/markdown-text.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/sidebar-layout.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/launch-checklist/page-client.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/vercel/page-client.tsxapps/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.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/(overview)/metrics-loading.tsxapps/dashboard/src/components/vibe-coding/draft-tool-components.tsxapps/dashboard/src/components/settings.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/data-vault/stores/page-client.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/email-templates/page-client.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/auth-methods/page-client.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/apps/page-client.tsxapps/dashboard/src/components/stack-companion.tsxapps/dashboard/src/components/copyable-text.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/webhooks/[endpointId]/page-client.tsxapps/dashboard/src/components/editable-input.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/auth-methods/providers.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/users/page-client.tsxapps/dashboard/src/components/logo-upload.tsxapps/dashboard/src/components/vibe-coding/theme-tool-components.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/payments/products/page-client-catalogs-view.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/payments/products/components.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/(overview)/setup-page.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/payments/products/page-client-list-view.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/emails/page-client.tsxapps/dashboard/src/components/cmdk-search.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/payments/products/page-client.tsxapps/dashboard/src/components/stack-companion/feature-request-board.tsxapps/dashboard/src/components/cmdk-commands.tsxapps/dashboard/src/components/app-warning-modal.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/email-themes/page-client.tsxapps/dashboard/src/components/search-bar.tsxapps/dashboard/src/components/vibe-coding/template-tool-components.tsxapps/dashboard/src/components/project-switcher.tsxapps/dashboard/src/components/assistant-ui/thread.tsxapps/dashboard/src/components/code-block.tsxapps/dashboard/src/components/stack-companion/changelog-widget.tsxapps/dashboard/src/components/form-fields/keyed-record-editor-field.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/payments/customers/page-client.tsxapps/dashboard/src/components/data-table/user-table.tsxapps/dashboard/src/components/data-table/transaction-table.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/payments/products/product-price-row.tsxapps/dashboard/src/app/(main)/purchase/[code]/page-client.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/users/[userId]/page-client.tsxapps/dashboard/src/components/app-square.tsxapps/dashboard/src/components/stack-companion/unified-docs-widget.tsxapps/dashboard/src/components/export-users-dialog.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/data-vault/stores/[storeId]/page-client.tsxapps/dashboard/src/components/theme-toggle.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/payments/products/layout.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/payments/products/list-section.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/payments/products/product-dialog.tsxapps/dashboard/src/components/data-table/common/pagination.tsxapps/dashboard/src/components/assistant-ui/thread-list.tsxapps/dashboard/src/components/app-store-entry.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/(overview)/metrics-page.tsxapps/dashboard/src/app/(main)/(protected)/projects/-selector-/[...path]/page-client.tsxapps/dashboard/src/components/commands/ask-ai.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/email-drafts/page-client.tsxapps/dashboard/src/components/feedback-form.tsxapps/dashboard/src/components/assistant-ui/markdown-text.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/sidebar-layout.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/launch-checklist/page-client.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/vercel/page-client.tsxapps/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.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/(overview)/metrics-loading.tsxapps/dashboard/src/components/vibe-coding/draft-tool-components.tsxapps/dashboard/src/components/settings.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/data-vault/stores/page-client.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/email-templates/page-client.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/auth-methods/page-client.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/apps/page-client.tsxapps/dashboard/src/components/stack-companion.tsxapps/dashboard/src/components/copyable-text.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/webhooks/[endpointId]/page-client.tsxapps/dashboard/src/components/editable-input.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/auth-methods/providers.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/users/page-client.tsxapps/dashboard/src/components/logo-upload.tsxapps/dashboard/src/components/vibe-coding/theme-tool-components.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/payments/products/page-client-catalogs-view.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/payments/products/components.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/(overview)/setup-page.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/payments/products/page-client-list-view.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/emails/page-client.tsxapps/dashboard/src/components/cmdk-search.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/payments/products/page-client.tsxapps/dashboard/src/components/stack-companion/feature-request-board.tsxapps/dashboard/src/components/cmdk-commands.tsxapps/dashboard/src/components/app-warning-modal.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/email-themes/page-client.tsxapps/dashboard/src/components/search-bar.tsxapps/dashboard/src/components/vibe-coding/template-tool-components.tsxapps/dashboard/src/components/project-switcher.tsxapps/dashboard/src/components/assistant-ui/thread.tsxapps/dashboard/src/components/code-block.tsxapps/dashboard/src/components/stack-companion/changelog-widget.tsxapps/dashboard/src/components/form-fields/keyed-record-editor-field.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/payments/customers/page-client.tsxapps/dashboard/src/components/data-table/user-table.tsxapps/dashboard/src/components/data-table/transaction-table.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/payments/products/product-price-row.tsxapps/dashboard/src/app/(main)/purchase/[code]/page-client.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/users/[userId]/page-client.tsxapps/dashboard/src/components/app-square.tsxapps/dashboard/src/components/stack-companion/unified-docs-widget.tsxapps/dashboard/src/components/export-users-dialog.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/data-vault/stores/[storeId]/page-client.tsxapps/dashboard/src/components/theme-toggle.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/payments/products/layout.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/payments/products/list-section.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/payments/products/product-dialog.tsxapps/dashboard/src/components/data-table/common/pagination.tsxapps/dashboard/src/components/assistant-ui/thread-list.tsxapps/dashboard/src/components/app-store-entry.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/(overview)/metrics-page.tsxapps/dashboard/src/app/(main)/(protected)/projects/-selector-/[...path]/page-client.tsxapps/dashboard/src/components/commands/ask-ai.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/email-drafts/page-client.tsxapps/dashboard/src/components/feedback-form.tsxapps/dashboard/src/components/assistant-ui/markdown-text.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/sidebar-layout.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/launch-checklist/page-client.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/vercel/page-client.tsxapps/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.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/(overview)/metrics-loading.tsxapps/dashboard/src/components/vibe-coding/draft-tool-components.tsxapps/dashboard/src/components/settings.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/data-vault/stores/page-client.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/email-templates/page-client.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/auth-methods/page-client.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/apps/page-client.tsxapps/dashboard/src/components/stack-companion.tsxapps/dashboard/src/components/copyable-text.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/webhooks/[endpointId]/page-client.tsxapps/dashboard/src/components/editable-input.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/auth-methods/providers.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/users/page-client.tsxapps/dashboard/src/components/logo-upload.tsxapps/dashboard/src/components/vibe-coding/theme-tool-components.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/payments/products/page-client-catalogs-view.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/payments/products/components.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/(overview)/setup-page.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/payments/products/page-client-list-view.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/emails/page-client.tsxapps/dashboard/src/components/cmdk-search.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/payments/products/page-client.tsxapps/dashboard/src/components/stack-companion/feature-request-board.tsxapps/dashboard/src/components/cmdk-commands.tsxapps/dashboard/src/components/app-warning-modal.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/email-themes/page-client.tsxapps/dashboard/src/components/search-bar.tsxapps/dashboard/src/components/vibe-coding/template-tool-components.tsxapps/dashboard/src/components/project-switcher.tsxapps/dashboard/src/components/assistant-ui/thread.tsxapps/dashboard/src/components/code-block.tsxapps/dashboard/src/components/stack-companion/changelog-widget.tsxapps/dashboard/src/components/form-fields/keyed-record-editor-field.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/payments/customers/page-client.tsxapps/dashboard/src/components/data-table/user-table.tsxapps/dashboard/src/components/data-table/transaction-table.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/payments/products/product-price-row.tsxapps/dashboard/src/app/(main)/purchase/[code]/page-client.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/users/[userId]/page-client.tsxapps/dashboard/src/components/app-square.tsxapps/dashboard/src/components/stack-companion/unified-docs-widget.tsxapps/dashboard/src/components/export-users-dialog.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/data-vault/stores/[storeId]/page-client.tsxapps/dashboard/src/components/theme-toggle.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/payments/products/layout.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/payments/products/list-section.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/payments/products/product-dialog.tsxapps/dashboard/src/components/data-table/common/pagination.tsxapps/dashboard/src/components/assistant-ui/thread-list.tsxapps/dashboard/src/components/app-store-entry.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/(overview)/metrics-page.tsxapps/dashboard/src/app/(main)/(protected)/projects/-selector-/[...path]/page-client.tsxapps/dashboard/src/components/commands/ask-ai.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/email-drafts/page-client.tsxapps/dashboard/src/components/feedback-form.tsxapps/dashboard/src/components/assistant-ui/markdown-text.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/sidebar-layout.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/launch-checklist/page-client.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/vercel/page-client.tsxapps/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.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/(overview)/metrics-loading.tsxapps/dashboard/src/components/vibe-coding/draft-tool-components.tsxapps/dashboard/src/components/settings.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/data-vault/stores/page-client.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/email-templates/page-client.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/auth-methods/page-client.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/apps/page-client.tsxapps/dashboard/src/components/stack-companion.tsxapps/dashboard/src/components/copyable-text.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/webhooks/[endpointId]/page-client.tsxapps/dashboard/src/components/editable-input.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/auth-methods/providers.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/users/page-client.tsxapps/dashboard/src/components/logo-upload.tsxapps/dashboard/src/components/vibe-coding/theme-tool-components.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/payments/products/page-client-catalogs-view.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/payments/products/components.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/(overview)/setup-page.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/payments/products/page-client-list-view.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/emails/page-client.tsxapps/dashboard/src/components/cmdk-search.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/payments/products/page-client.tsxapps/dashboard/src/components/stack-companion/feature-request-board.tsxapps/dashboard/src/components/cmdk-commands.tsxapps/dashboard/src/components/app-warning-modal.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/email-themes/page-client.tsxapps/dashboard/src/components/search-bar.tsxapps/dashboard/src/components/vibe-coding/template-tool-components.tsxapps/dashboard/src/components/project-switcher.tsxapps/dashboard/src/components/assistant-ui/thread.tsxapps/dashboard/src/components/code-block.tsxapps/dashboard/src/components/stack-companion/changelog-widget.tsxapps/dashboard/src/components/form-fields/keyed-record-editor-field.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/payments/customers/page-client.tsxapps/dashboard/src/components/data-table/user-table.tsxapps/dashboard/src/components/data-table/transaction-table.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/payments/products/product-price-row.tsxapps/dashboard/src/app/(main)/purchase/[code]/page-client.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/users/[userId]/page-client.tsxapps/dashboard/src/components/app-square.tsxapps/dashboard/src/components/stack-companion/unified-docs-widget.tsxapps/dashboard/src/components/export-users-dialog.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/data-vault/stores/[storeId]/page-client.tsxapps/dashboard/src/components/theme-toggle.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/payments/products/layout.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/payments/products/list-section.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/payments/products/product-dialog.tsxapps/dashboard/src/components/data-table/common/pagination.tsxapps/dashboard/src/components/assistant-ui/thread-list.tsxapps/dashboard/src/components/app-store-entry.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/(overview)/metrics-page.tsxapps/dashboard/src/app/(main)/(protected)/projects/-selector-/[...path]/page-client.tsxapps/dashboard/src/components/commands/ask-ai.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/email-drafts/page-client.tsxapps/dashboard/src/components/feedback-form.tsxapps/dashboard/src/components/assistant-ui/markdown-text.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/sidebar-layout.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/launch-checklist/page-client.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/vercel/page-client.tsxapps/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.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/(overview)/metrics-loading.tsxapps/dashboard/src/components/vibe-coding/draft-tool-components.tsxapps/dashboard/src/components/settings.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/data-vault/stores/page-client.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/email-templates/page-client.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/auth-methods/page-client.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/apps/page-client.tsxapps/dashboard/src/components/stack-companion.tsxapps/dashboard/src/components/copyable-text.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/webhooks/[endpointId]/page-client.tsxapps/dashboard/src/components/editable-input.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/auth-methods/providers.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/users/page-client.tsxapps/dashboard/src/components/logo-upload.tsxapps/dashboard/src/components/vibe-coding/theme-tool-components.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/payments/products/page-client-catalogs-view.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/payments/products/components.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/(overview)/setup-page.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/payments/products/page-client-list-view.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/emails/page-client.tsxapps/dashboard/src/components/cmdk-search.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/payments/products/page-client.tsxapps/dashboard/src/components/stack-companion/feature-request-board.tsxapps/dashboard/src/components/cmdk-commands.tsxapps/dashboard/src/components/app-warning-modal.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/email-themes/page-client.tsxapps/dashboard/src/components/search-bar.tsxapps/dashboard/src/components/vibe-coding/template-tool-components.tsxapps/dashboard/src/components/project-switcher.tsxapps/dashboard/src/components/assistant-ui/thread.tsxapps/dashboard/src/components/code-block.tsxapps/dashboard/src/components/stack-companion/changelog-widget.tsxapps/dashboard/src/components/form-fields/keyed-record-editor-field.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/payments/customers/page-client.tsxapps/dashboard/src/components/data-table/user-table.tsxapps/dashboard/src/components/data-table/transaction-table.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/payments/products/product-price-row.tsxapps/dashboard/src/app/(main)/purchase/[code]/page-client.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/users/[userId]/page-client.tsxapps/dashboard/src/components/app-square.tsxapps/dashboard/src/components/stack-companion/unified-docs-widget.tsxapps/dashboard/src/components/export-users-dialog.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/data-vault/stores/[storeId]/page-client.tsxapps/dashboard/src/components/theme-toggle.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/payments/products/layout.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/payments/products/list-section.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/payments/products/product-dialog.tsxapps/dashboard/src/components/data-table/common/pagination.tsxapps/dashboard/src/components/assistant-ui/thread-list.tsxapps/dashboard/src/components/app-store-entry.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/(overview)/metrics-page.tsxapps/dashboard/src/app/(main)/(protected)/projects/-selector-/[...path]/page-client.tsxapps/dashboard/src/components/commands/ask-ai.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/email-drafts/page-client.tsxapps/dashboard/src/components/feedback-form.tsxapps/dashboard/src/components/assistant-ui/markdown-text.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/sidebar-layout.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/launch-checklist/page-client.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/vercel/page-client.tsxapps/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.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/email-templates/page-client.tsxapps/dashboard/src/components/editable-input.tsxapps/dashboard/src/components/logo-upload.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/emails/page-client.tsxapps/dashboard/src/components/stack-companion/changelog-widget.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/payments/customers/page-client.tsxapps/dashboard/src/components/data-table/user-table.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/users/[userId]/page-client.tsxapps/dashboard/src/components/export-users-dialog.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/email-drafts/page-client.tsxapps/dashboard/src/components/feedback-form.tsxapps/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.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/(overview)/setup-page.tsxapps/dashboard/src/components/cmdk-commands.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/email-themes/page-client.tsxapps/dashboard/src/components/data-table/user-table.tsxapps/dashboard/src/components/app-square.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/data-vault/stores/[storeId]/page-client.tsxapps/dashboard/src/components/app-store-entry.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/(overview)/metrics-page.tsxapps/dashboard/src/app/(main)/(protected)/projects/-selector-/[...path]/page-client.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/email-drafts/page-client.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/sidebar-layout.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/launch-checklist/page-client.tsxapps/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.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/users/[userId]/page-client.tsxapps/dashboard/src/app/(main)/(protected)/projects/-selector-/[...path]/page-client.tsxapps/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
apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/auth-methods/page-client.tsx
Show resolved
Hide resolved
Older cmux preview screenshots (latest comment is below)Preview Screenshots⏳ Preview screenshots are being captured... Workspace and dev browser links will appear here once the preview environment is ready. Generated by cmux preview system |
Older cmux preview screenshots (latest comment is below)Preview Screenshots⏳ Preview screenshots are being captured... Workspace and dev browser links will appear here once the preview environment is ready. Generated by cmux preview system |
Older cmux preview screenshots (latest comment is below)Preview Screenshots⏳ Preview screenshots are being captured... Workspace and dev browser links will appear here once the preview environment is ready. Generated by cmux preview system |
There was a problem hiding this comment.
Actionable comments posted: 1
♻️ Duplicate comments (1)
apps/dashboard/src/components/stack-companion.tsx (1)
47-47: UseQuestionIconinstead ofCircleNotchIconfor the Support sidebar item.As previously identified,
CircleNotchIconis a loading spinner icon and does not semantically represent help or support functionality. The Support item should useQuestionIcon, which displays a question mark icon matching the originalHelpCirclefrom 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 fromnext-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
HardDriveIcontypically 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,DatabaseIconis available in Phosphor Icons, though noServerIconexists 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
CaretDownIconusesweight="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.erroron line 27 violates the coding guidelines. As per the guidelines, you should userunAsynchronouslyWithAlertfor 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
runAsynchronouslyWithAlertfrom 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
⛔ Files ignored due to path filters (1)
pnpm-lock.yamlis excluded by!**/pnpm-lock.yaml
📒 Files selected for processing (75)
apps/dashboard/package.jsonapps/dashboard/src/app/(main)/(protected)/(outside-dashboard)/projects/page-client.tsxapps/dashboard/src/app/(main)/(protected)/projects/-selector-/[...path]/page-client.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/(overview)/metrics-loading.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/(overview)/metrics-page.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/(overview)/setup-page.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/apps/page-client.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/auth-methods/page-client.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/auth-methods/providers.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/data-vault/stores/[storeId]/page-client.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/data-vault/stores/page-client.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/email-drafts/page-client.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/email-templates/page-client.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/email-themes/page-client.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/emails/page-client.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/launch-checklist/page-client.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/payments/catalogs/layout.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/payments/catalogs/page-client.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/payments/customers/page-client.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/payments/products/[productId]/page-client.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/payments/products/components.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/payments/products/layout.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/payments/products/list-section.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/payments/products/new/page-client.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/payments/products/page-client-catalogs-view.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/payments/products/page-client-list-view.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/payments/products/page-client.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/payments/products/price-edit-dialog.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/payments/products/pricing-section.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/payments/products/product-card-preview.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/payments/products/product-dialog.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/payments/products/product-price-row.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/sidebar-layout.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/users/[userId]/page-client.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/users/page-client.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/vercel/page-client.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/webhooks/[endpointId]/page-client.tsxapps/dashboard/src/app/(main)/purchase/[code]/page-client.tsxapps/dashboard/src/components/app-square.tsxapps/dashboard/src/components/app-store-entry.tsxapps/dashboard/src/components/app-warning-modal.tsxapps/dashboard/src/components/assistant-ui/thread-list.tsxapps/dashboard/src/components/assistant-ui/thread.tsxapps/dashboard/src/components/cmdk-commands.tsxapps/dashboard/src/components/code-block.tsxapps/dashboard/src/components/commands/ask-ai.tsxapps/dashboard/src/components/copyable-text.tsxapps/dashboard/src/components/data-table/common/pagination.tsxapps/dashboard/src/components/data-table/transaction-table.tsxapps/dashboard/src/components/data-table/user-table.tsxapps/dashboard/src/components/editable-input.tsxapps/dashboard/src/components/export-users-dialog.tsxapps/dashboard/src/components/feedback-form.tsxapps/dashboard/src/components/form-fields.tsxapps/dashboard/src/components/form-fields/keyed-record-editor-field.tsxapps/dashboard/src/components/logo-upload.tsxapps/dashboard/src/components/payments/item-dialog.tsxapps/dashboard/src/components/project-switcher.tsxapps/dashboard/src/components/repeating-input.tsxapps/dashboard/src/components/search-bar.tsxapps/dashboard/src/components/settings.tsxapps/dashboard/src/components/stack-companion.tsxapps/dashboard/src/components/stack-companion/changelog-widget.tsxapps/dashboard/src/components/stack-companion/feature-request-board.tsxapps/dashboard/src/components/theme-toggle.tsxapps/dashboard/src/components/ui/action-dialog.tsxapps/dashboard/src/components/ui/copy-button.tsxapps/dashboard/src/components/ui/data-table/column-header.tsxapps/dashboard/src/components/ui/data-table/faceted-filter.tsxapps/dashboard/src/components/ui/data-table/toolbar.tsxapps/dashboard/src/components/ui/simple-tooltip.tsxapps/dashboard/src/components/vibe-coding/draft-tool-components.tsxapps/dashboard/src/components/vibe-coding/template-tool-components.tsxapps/dashboard/src/components/vibe-coding/theme-tool-components.tsxapps/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.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/payments/products/price-edit-dialog.tsxapps/dashboard/src/components/data-table/user-table.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/payments/customers/page-client.tsxapps/dashboard/src/components/payments/item-dialog.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/payments/catalogs/page-client.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/data-vault/stores/[storeId]/page-client.tsxapps/dashboard/src/components/repeating-input.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/email-drafts/page-client.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/launch-checklist/page-client.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/payments/catalogs/layout.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/payments/products/new/page-client.tsxapps/dashboard/src/components/logo-upload.tsxapps/dashboard/src/components/vibe-coding/theme-tool-components.tsxapps/dashboard/src/components/stack-companion.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/sidebar-layout.tsxapps/dashboard/src/components/ui/data-table/faceted-filter.tsxapps/dashboard/src/components/ui/data-table/column-header.tsxapps/dashboard/src/app/(main)/purchase/[code]/page-client.tsxapps/dashboard/src/components/vibe-coding/draft-tool-components.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/payments/products/product-card-preview.tsxapps/dashboard/src/components/ui/action-dialog.tsxapps/dashboard/src/components/ui/simple-tooltip.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/email-templates/page-client.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/payments/products/[productId]/page-client.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/(overview)/setup-page.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/payments/products/list-section.tsxapps/dashboard/src/app/(main)/(protected)/(outside-dashboard)/projects/page-client.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/payments/products/pricing-section.tsxapps/dashboard/src/components/copyable-text.tsxapps/dashboard/src/components/ui/copy-button.tsxapps/dashboard/src/components/form-fields/keyed-record-editor-field.tsxapps/dashboard/src/lib/apps-frontend.tsxapps/dashboard/src/app/(main)/(protected)/projects/-selector-/[...path]/page-client.tsxapps/dashboard/src/components/search-bar.tsxapps/dashboard/src/components/theme-toggle.tsxapps/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.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/payments/products/price-edit-dialog.tsxapps/dashboard/src/components/data-table/user-table.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/payments/customers/page-client.tsxapps/dashboard/src/components/payments/item-dialog.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/payments/catalogs/page-client.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/data-vault/stores/[storeId]/page-client.tsxapps/dashboard/src/components/repeating-input.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/email-drafts/page-client.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/launch-checklist/page-client.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/payments/catalogs/layout.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/payments/products/new/page-client.tsxapps/dashboard/src/components/logo-upload.tsxapps/dashboard/src/components/vibe-coding/theme-tool-components.tsxapps/dashboard/src/components/stack-companion.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/sidebar-layout.tsxapps/dashboard/src/components/ui/data-table/faceted-filter.tsxapps/dashboard/src/components/ui/data-table/column-header.tsxapps/dashboard/src/app/(main)/purchase/[code]/page-client.tsxapps/dashboard/src/components/vibe-coding/draft-tool-components.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/payments/products/product-card-preview.tsxapps/dashboard/src/components/ui/action-dialog.tsxapps/dashboard/src/components/ui/simple-tooltip.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/email-templates/page-client.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/payments/products/[productId]/page-client.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/(overview)/setup-page.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/payments/products/list-section.tsxapps/dashboard/src/app/(main)/(protected)/(outside-dashboard)/projects/page-client.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/payments/products/pricing-section.tsxapps/dashboard/src/components/copyable-text.tsxapps/dashboard/src/components/ui/copy-button.tsxapps/dashboard/src/components/form-fields/keyed-record-editor-field.tsxapps/dashboard/src/lib/apps-frontend.tsxapps/dashboard/src/app/(main)/(protected)/projects/-selector-/[...path]/page-client.tsxapps/dashboard/src/components/search-bar.tsxapps/dashboard/src/components/theme-toggle.tsxapps/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.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/payments/products/price-edit-dialog.tsxapps/dashboard/src/components/data-table/user-table.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/payments/customers/page-client.tsxapps/dashboard/src/components/payments/item-dialog.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/payments/catalogs/page-client.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/data-vault/stores/[storeId]/page-client.tsxapps/dashboard/src/components/repeating-input.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/email-drafts/page-client.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/launch-checklist/page-client.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/payments/catalogs/layout.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/payments/products/new/page-client.tsxapps/dashboard/src/components/logo-upload.tsxapps/dashboard/src/components/vibe-coding/theme-tool-components.tsxapps/dashboard/src/components/stack-companion.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/sidebar-layout.tsxapps/dashboard/src/components/ui/data-table/faceted-filter.tsxapps/dashboard/src/components/ui/data-table/column-header.tsxapps/dashboard/src/app/(main)/purchase/[code]/page-client.tsxapps/dashboard/src/components/vibe-coding/draft-tool-components.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/payments/products/product-card-preview.tsxapps/dashboard/src/components/ui/action-dialog.tsxapps/dashboard/src/components/ui/simple-tooltip.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/email-templates/page-client.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/payments/products/[productId]/page-client.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/(overview)/setup-page.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/payments/products/list-section.tsxapps/dashboard/src/app/(main)/(protected)/(outside-dashboard)/projects/page-client.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/payments/products/pricing-section.tsxapps/dashboard/src/components/copyable-text.tsxapps/dashboard/src/components/ui/copy-button.tsxapps/dashboard/src/components/form-fields/keyed-record-editor-field.tsxapps/dashboard/src/lib/apps-frontend.tsxapps/dashboard/src/app/(main)/(protected)/projects/-selector-/[...path]/page-client.tsxapps/dashboard/src/components/search-bar.tsxapps/dashboard/src/components/theme-toggle.tsxapps/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.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/payments/products/price-edit-dialog.tsxapps/dashboard/src/components/data-table/user-table.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/payments/customers/page-client.tsxapps/dashboard/src/components/payments/item-dialog.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/payments/catalogs/page-client.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/data-vault/stores/[storeId]/page-client.tsxapps/dashboard/src/components/repeating-input.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/email-drafts/page-client.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/launch-checklist/page-client.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/payments/catalogs/layout.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/payments/products/new/page-client.tsxapps/dashboard/src/components/logo-upload.tsxapps/dashboard/src/components/vibe-coding/theme-tool-components.tsxapps/dashboard/src/components/stack-companion.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/sidebar-layout.tsxapps/dashboard/src/components/ui/data-table/faceted-filter.tsxapps/dashboard/src/components/ui/data-table/column-header.tsxapps/dashboard/src/app/(main)/purchase/[code]/page-client.tsxapps/dashboard/src/components/vibe-coding/draft-tool-components.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/payments/products/product-card-preview.tsxapps/dashboard/src/components/ui/action-dialog.tsxapps/dashboard/src/components/ui/simple-tooltip.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/email-templates/page-client.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/payments/products/[productId]/page-client.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/(overview)/setup-page.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/payments/products/list-section.tsxapps/dashboard/src/app/(main)/(protected)/(outside-dashboard)/projects/page-client.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/payments/products/pricing-section.tsxapps/dashboard/src/components/copyable-text.tsxapps/dashboard/src/components/ui/copy-button.tsxapps/dashboard/src/components/form-fields/keyed-record-editor-field.tsxapps/dashboard/src/lib/apps-frontend.tsxapps/dashboard/src/app/(main)/(protected)/projects/-selector-/[...path]/page-client.tsxapps/dashboard/src/components/search-bar.tsxapps/dashboard/src/components/theme-toggle.tsxapps/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.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/payments/products/price-edit-dialog.tsxapps/dashboard/src/components/data-table/user-table.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/payments/customers/page-client.tsxapps/dashboard/src/components/payments/item-dialog.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/payments/catalogs/page-client.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/data-vault/stores/[storeId]/page-client.tsxapps/dashboard/src/components/repeating-input.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/email-drafts/page-client.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/launch-checklist/page-client.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/payments/catalogs/layout.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/payments/products/new/page-client.tsxapps/dashboard/src/components/logo-upload.tsxapps/dashboard/src/components/vibe-coding/theme-tool-components.tsxapps/dashboard/src/components/stack-companion.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/sidebar-layout.tsxapps/dashboard/src/components/ui/data-table/faceted-filter.tsxapps/dashboard/src/components/ui/data-table/column-header.tsxapps/dashboard/src/app/(main)/purchase/[code]/page-client.tsxapps/dashboard/src/components/vibe-coding/draft-tool-components.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/payments/products/product-card-preview.tsxapps/dashboard/src/components/ui/action-dialog.tsxapps/dashboard/src/components/ui/simple-tooltip.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/email-templates/page-client.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/payments/products/[productId]/page-client.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/(overview)/setup-page.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/payments/products/list-section.tsxapps/dashboard/src/app/(main)/(protected)/(outside-dashboard)/projects/page-client.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/payments/products/pricing-section.tsxapps/dashboard/src/components/copyable-text.tsxapps/dashboard/src/components/ui/copy-button.tsxapps/dashboard/src/components/form-fields/keyed-record-editor-field.tsxapps/dashboard/src/lib/apps-frontend.tsxapps/dashboard/src/app/(main)/(protected)/projects/-selector-/[...path]/page-client.tsxapps/dashboard/src/components/search-bar.tsxapps/dashboard/src/components/theme-toggle.tsxapps/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.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/payments/products/price-edit-dialog.tsxapps/dashboard/src/components/data-table/user-table.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/payments/customers/page-client.tsxapps/dashboard/src/components/payments/item-dialog.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/payments/catalogs/page-client.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/data-vault/stores/[storeId]/page-client.tsxapps/dashboard/src/components/repeating-input.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/email-drafts/page-client.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/launch-checklist/page-client.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/payments/catalogs/layout.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/payments/products/new/page-client.tsxapps/dashboard/src/components/logo-upload.tsxapps/dashboard/src/components/vibe-coding/theme-tool-components.tsxapps/dashboard/src/components/stack-companion.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/sidebar-layout.tsxapps/dashboard/src/components/ui/data-table/faceted-filter.tsxapps/dashboard/src/components/ui/data-table/column-header.tsxapps/dashboard/src/app/(main)/purchase/[code]/page-client.tsxapps/dashboard/src/components/vibe-coding/draft-tool-components.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/payments/products/product-card-preview.tsxapps/dashboard/src/components/ui/action-dialog.tsxapps/dashboard/src/components/ui/simple-tooltip.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/email-templates/page-client.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/payments/products/[productId]/page-client.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/(overview)/setup-page.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/payments/products/list-section.tsxapps/dashboard/src/app/(main)/(protected)/(outside-dashboard)/projects/page-client.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/payments/products/pricing-section.tsxapps/dashboard/src/components/copyable-text.tsxapps/dashboard/src/components/ui/copy-button.tsxapps/dashboard/src/components/form-fields/keyed-record-editor-field.tsxapps/dashboard/src/lib/apps-frontend.tsxapps/dashboard/src/app/(main)/(protected)/projects/-selector-/[...path]/page-client.tsxapps/dashboard/src/components/search-bar.tsxapps/dashboard/src/components/theme-toggle.tsxapps/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.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/payments/customers/page-client.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/payments/products/new/page-client.tsxapps/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.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/payments/catalogs/page-client.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/data-vault/stores/[storeId]/page-client.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/email-drafts/page-client.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/launch-checklist/page-client.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/payments/products/new/page-client.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/sidebar-layout.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/payments/products/[productId]/page-client.tsxapps/dashboard/src/app/(main)/(protected)/projects/[projectId]/(overview)/setup-page.tsxapps/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.tsxapps/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)
Older cmux preview screenshots (latest comment is below)Preview Screenshots⏳ Preview screenshots are being captured... Workspace and dev browser links will appear here once the preview environment is ready. Generated by cmux preview system |
Preview Screenshots⏳ Preview screenshots are being captured... Workspace and dev browser links will appear here once the preview environment is ready. Generated by cmux preview system |
Updates all icons to Phosphor and removes lucide as dependency.
Summary by CodeRabbit
Style
Chores
✏️ Tip: You can customize this high-level summary in your review settings.