diff --git a/src/components/ChatPanel.tsx b/src/components/ChatPanel.tsx
index c1ebbb1..3d2d35e 100644
--- a/src/components/ChatPanel.tsx
+++ b/src/components/ChatPanel.tsx
@@ -31,7 +31,11 @@ export default function ChatPanel({ chatId, fullscreen = false }: Props) {
useEffect(() => {
const unsub = wsClient.on("message.new", (data: any) => {
if (data.chat_id === chatId) {
- setMessages((prev) => [...prev, data as Message]);
+ setMessages((prev) => {
+ // Dedup by message id
+ if (prev.some((m) => m.id === data.id)) return prev;
+ return [...prev, data as Message];
+ });
}
});
return () => { unsub?.(); };
diff --git a/src/main.tsx b/src/main.tsx
index 3d4bdea..c1ba65c 100644
--- a/src/main.tsx
+++ b/src/main.tsx
@@ -1,10 +1,9 @@
-import { StrictMode } from 'react'
+// StrictMode removed — causes double WS subscriptions (double useEffect)
+// import { StrictMode } from 'react'
import { createRoot } from 'react-dom/client'
import './index.css'
import App from './App.tsx'
createRoot(document.getElementById('root')!).render(
-
-
- ,
+ ,
)
\ No newline at end of file