diff --git a/apps/desktop/src/App.tsx b/apps/desktop/src/App.tsx
index 61f9e8c..4dea5d3 100644
--- a/apps/desktop/src/App.tsx
+++ b/apps/desktop/src/App.tsx
@@ -1,5 +1,5 @@
import { lazy, Suspense } from 'react';
-import { HashRouter, Navigate, Outlet, Route, Routes } from 'react-router-dom';
+import { HashRouter, Navigate, Outlet, Route, Routes, useParams } from 'react-router-dom';
import { AppShell } from './components/AppShell';
import { CrashToast } from './components/CrashToast';
@@ -60,6 +60,18 @@ function RouteBoundary({ scope }: { scope: string }) {
);
}
+// Forces a fresh `ConversationPage` instance per `:id` so React unmounts
+// the previous conversation entirely on switch. Without this, the same
+// component instance handles every conversation, which leaks state
+// between chats (messages, scroll position, composer drafts) for one
+// render frame and gives the "flicker" we're trying to remove.
+// `useConversationMessages` re-hydrates from `messageMemoryCache` on the
+// fresh mount so previously-visited chats still render instantly.
+function ConversationRoute() {
+ const { id } = useParams<{ id: string }>();
+ return ;
+}
+
export function App() {
return (
@@ -114,7 +126,7 @@ export function App() {
path=":id"
element={
-
+
}
/>