diff --git a/src/App.tsx b/src/App.tsx
index b2b4eab..70663d7 100644
--- a/src/App.tsx
+++ b/src/App.tsx
@@ -1,4 +1,4 @@
-import { BrowserRouter, Routes, Route, Navigate } from 'react-router-dom'
+import { BrowserRouter, Routes, Route, Navigate, useParams } from 'react-router-dom'
import { AuthGate } from './components/AuthGate'
import { Login } from './pages/Login'
import { Register } from './pages/Register'
@@ -9,6 +9,13 @@ import { AdminRoles } from './pages/AdminRoles'
import { AdminDepartments } from './pages/AdminDepartments'
import { AdminMonitor } from './pages/AdminMonitor'
import { AdminSettings } from './pages/AdminSettings'
+import type { User } from './types'
+
+// Force full remount of AppFrame when slug changes so initialSrc recomputes
+function AppFrameKeyed({ user }: { user: User }) {
+ const { slug } = useParams<{ slug: string }>()
+ return
+}
// The portal is only ever the top-level frame. If it finds itself loaded inside
// an iframe, it means an app's path fell back to the portal (that app isn't
@@ -46,7 +53,7 @@ export default function App() {
{user => (
} />
- } />
+ } />
: } />
: } />
: } />