From a264ffdeff2825efb34a6e0b977be0c45ae0df48 Mon Sep 17 00:00:00 2001 From: christiankrag Date: Mon, 15 Dec 2025 07:44:37 +0100 Subject: [PATCH] Fix Supabase real-time subscription for chat messages MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Make Supabase browser client a singleton to maintain WebSocket connection - Fix useEffect dependency array to prevent subscription re-creation - Add subscription status logging for debugging 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 --- src/components/chat/project-chat.tsx | 7 +++++-- src/lib/supabase/client.ts | 10 +++++++++- 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/src/components/chat/project-chat.tsx b/src/components/chat/project-chat.tsx index 84ddbed..74d64b8 100644 --- a/src/components/chat/project-chat.tsx +++ b/src/components/chat/project-chat.tsx @@ -43,12 +43,15 @@ export function ProjectChat({ projectId, initialMessages }: ProjectChatProps) { }) } ) - .subscribe() + .subscribe((status) => { + console.log('Realtime subscription status:', status) + }) return () => { supabase.removeChannel(channel) } - }, [projectId, supabase]) + // eslint-disable-next-line react-hooks/exhaustive-deps + }, [projectId]) // Scroll to bottom when messages change useEffect(() => { diff --git a/src/lib/supabase/client.ts b/src/lib/supabase/client.ts index 5ed7897..9165e07 100644 --- a/src/lib/supabase/client.ts +++ b/src/lib/supabase/client.ts @@ -1,9 +1,17 @@ import { createBrowserClient } from '@supabase/ssr' import type { Database } from '@/types/database' +let browserClient: ReturnType> | null = null + export function createClient() { - return createBrowserClient( + if (browserClient) { + return browserClient + } + + browserClient = createBrowserClient( process.env.NEXT_PUBLIC_SUPABASE_URL!, process.env.NEXT_PUBLIC_SUPABASE_ANON_KEY! ) + + return browserClient }