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') || '';