diff --git a/web/src/app/app/automations/[id]/page.tsx b/web/src/app/app/automations/[id]/page.tsx
index f70a607a..07b96dfd 100644
--- a/web/src/app/app/automations/[id]/page.tsx
+++ b/web/src/app/app/automations/[id]/page.tsx
@@ -36,7 +36,12 @@ export default function AutomationBuilderPage() {
}
return (
+ // Keyed by id: a param-only navigation (e.g. jump-to-teammate from one
+ // automation to another) must remount the builder, not hand a seeded
+ // canvas a different automation — Save would write the old graph into
+ // the new record.
;
+ // Keyed by campaign: a param-only navigation (e.g. jump-to-teammate from
+ // one campaign's steps to another's) must remount the canvas, never reuse
+ // one seeded from the previous campaign.
+ return ;
}
function StepsSkeleton() {
diff --git a/web/src/components/app/presence/PresenceAvatars.tsx b/web/src/components/app/presence/PresenceAvatars.tsx
index a47083a0..bd91eb6e 100644
--- a/web/src/components/app/presence/PresenceAvatars.tsx
+++ b/web/src/components/app/presence/PresenceAvatars.tsx
@@ -1,5 +1,5 @@
import { useRef, useState } from "react";
-import { useNavigate } from "react-router-dom";
+import { useLocation, useNavigate } from "react-router-dom";
import { AnimatePresence, motion } from "framer-motion";
import { ArrowRightIcon, EyeIcon, PencilIcon, ReplyIcon } from "lucide-react";
import { Avatar, AvatarFallback, AvatarImage } from "@/components/ui/avatar";
@@ -75,6 +75,7 @@ export default function PresenceAvatars() {
const [open, setOpen] = useState(false);
const ref = useRef(null);
const navigate = useNavigate();
+ const { pathname } = useLocation();
useClickOutside(ref, () => setOpen(false));
if (members.length === 0) return null;
@@ -147,7 +148,9 @@ export default function PresenceAvatars() {
{members.map((m) => {
const act = activityOf(m);
// Click a teammate to jump to the page they are on.
- const jumpable = !!m.page;
+ // Presence pages are teammate-supplied strings, so
+ // only in-app paths are navigable.
+ const jumpable = !!m.page && m.page.startsWith("/app");
return (