From 011852661ab52f8f9487bc858941f44799a4bbd3 Mon Sep 17 00:00:00 2001 From: "kiloconnect[bot]" <240665456+kiloconnect[bot]@users.noreply.github.com> Date: Mon, 13 Jul 2026 20:06:36 +0000 Subject: [PATCH] chat: move Pylon support widget from KiloClaw to Code Reviewer pages Removes the Pylon chat widget/support button from the personal and org KiloClaw layouts and adds the same integration to the personal and org Code Reviewer layouts, mirroring the existing usage pattern. --- apps/web/src/app/(app)/claw/layout.tsx | 5 ----- apps/web/src/app/(app)/code-reviews/layout.tsx | 13 +++++++++++++ .../app/(app)/organizations/[id]/claw/layout.tsx | 5 ----- .../organizations/[id]/code-reviews/layout.tsx | 13 +++++++++++++ apps/web/src/lib/config.server.ts | 2 +- 5 files changed, 27 insertions(+), 11 deletions(-) create mode 100644 apps/web/src/app/(app)/code-reviews/layout.tsx create mode 100644 apps/web/src/app/(app)/organizations/[id]/code-reviews/layout.tsx diff --git a/apps/web/src/app/(app)/claw/layout.tsx b/apps/web/src/app/(app)/claw/layout.tsx index 7df9c888a2..b8d817e271 100644 --- a/apps/web/src/app/(app)/claw/layout.tsx +++ b/apps/web/src/app/(app)/claw/layout.tsx @@ -1,6 +1,4 @@ import { getUserFromAuthOrRedirect } from '@/lib/user/server'; -import { PylonWidget } from '@/components/pylon-widget'; -import { PylonSupportButton } from '@/components/pylon-support-button'; import { PersonalInstancePresenceMount } from './components/PersonalInstancePresenceMount'; export default async function ClawLayout({ children }: { children: React.ReactNode }) { @@ -9,9 +7,6 @@ export default async function ClawLayout({ children }: { children: React.ReactNo <> {children} - - - ); } diff --git a/apps/web/src/app/(app)/code-reviews/layout.tsx b/apps/web/src/app/(app)/code-reviews/layout.tsx new file mode 100644 index 0000000000..e713264715 --- /dev/null +++ b/apps/web/src/app/(app)/code-reviews/layout.tsx @@ -0,0 +1,13 @@ +import { PylonWidget } from '@/components/pylon-widget'; +import { PylonSupportButton } from '@/components/pylon-support-button'; + +export default function CodeReviewsLayout({ children }: { children: React.ReactNode }) { + return ( + <> + {children} + + + + + ); +} diff --git a/apps/web/src/app/(app)/organizations/[id]/claw/layout.tsx b/apps/web/src/app/(app)/organizations/[id]/claw/layout.tsx index 81e90f5079..b1fe4087ae 100644 --- a/apps/web/src/app/(app)/organizations/[id]/claw/layout.tsx +++ b/apps/web/src/app/(app)/organizations/[id]/claw/layout.tsx @@ -1,5 +1,3 @@ -import { PylonSupportButton } from '@/components/pylon-support-button'; -import { PylonWidget } from '@/components/pylon-widget'; import { OrgInstancePresenceMount } from './components/OrgInstancePresenceMount'; export default function OrgClawLayout({ children }: { children: React.ReactNode }) { @@ -7,9 +5,6 @@ export default function OrgClawLayout({ children }: { children: React.ReactNode <> {children} - - - ); } diff --git a/apps/web/src/app/(app)/organizations/[id]/code-reviews/layout.tsx b/apps/web/src/app/(app)/organizations/[id]/code-reviews/layout.tsx new file mode 100644 index 0000000000..ba2cef9a14 --- /dev/null +++ b/apps/web/src/app/(app)/organizations/[id]/code-reviews/layout.tsx @@ -0,0 +1,13 @@ +import { PylonWidget } from '@/components/pylon-widget'; +import { PylonSupportButton } from '@/components/pylon-support-button'; + +export default function OrgCodeReviewsLayout({ children }: { children: React.ReactNode }) { + return ( + <> + {children} + + + + + ); +} diff --git a/apps/web/src/lib/config.server.ts b/apps/web/src/lib/config.server.ts index 276f2bb425..98557d6e25 100644 --- a/apps/web/src/lib/config.server.ts +++ b/apps/web/src/lib/config.server.ts @@ -418,7 +418,7 @@ export const SECURITY_CLEANUP_BETTERSTACK_HEARTBEAT_URL = getEnvVariable( 'SECURITY_CLEANUP_BETTERSTACK_HEARTBEAT_URL' ); -// Pylon chat widget (support chat on KiloClaw pages). +// Pylon chat widget (support chat on Code Reviewer pages). // PYLON_IDENTITY_SECRET is the shared secret from the Pylon dashboard used to HMAC-sign // the user's email so the widget can verify the end user's identity. export const PYLON_IDENTITY_SECRET = getEnvVariable('PYLON_IDENTITY_SECRET') || '';