1) client/src/pages/business-development/AILogoCreator.tsx

Goal: on AI finish → create draft-<uuid>, stash svg, navigate to Composer.

--- a/client/src/pages/business-development/AILogoCreator.tsx
+++ b/client/src/pages/business-development/AILogoCreator.tsx
@@ -1,6 +1,8 @@
+import { useLocation } from "wouter";
 ...
 const AILogoCreator = () => {
+  const [, navigate] = useLocation();
   const handleAiLogoGenerated = (svg: string) => {
-    console.log("AI logo generated", svg);
+    const draftId = `draft-${crypto?.randomUUID?.() || Date.now()}`;
+    sessionStorage.setItem(`logoDraft:${draftId}`, JSON.stringify({ svg }));
+    navigate(`/brand-development/ai-logo-creator/${draftId}`);
   };
 ...


Notes:

Uses your existing handleAiLogoGenerated callback.

Stores only { svg } because your GenerateLogoResult is just { svg: string }.

2) client/src/pages/LogoCustomizerPage.tsx

Goal: before Firebase fetch, detect draft-*, build a minimal LogoComposer object, and hydrate UI.

--- a/client/src/pages/LogoCustomizerPage.tsx
+++ b/client/src/pages/LogoCustomizerPage.tsx
@@ -697,6 +697,16 @@ useEffect(() => {
   let id = composerId || "";
   id = id.replace(/^logo-composer-/, "").replace(/^logo-wordmark-/, "");
 
+  // Draft flow: load from sessionStorage and short-circuit
+  if (id.startsWith("draft-")) {
+    const raw = sessionStorage.getItem(`logoDraft:${id}`);
+    if (!raw) { setError(`Draft not found: ${id}`); return; }
+    const { svg } = JSON.parse(raw) as { svg: string };
+    setComposer({
+      id, name: "AI Draft", svg,
+      defaultFields: {}, defaultColors: { primary: "#231f20", secondary: "#6dc282", accent: "#00CB51" }
+    });
+    return;
+  }
   // existing Firebase/template loading continues below...
 }, [composerId]);


Notes:

Keeps your existing ID normalization (you already strip logo-composer- and logo-wordmark-).

Uses safe IBrandBiz palette accents for defaults; adjust if your component already applies its own defaults.

If a user refreshes a draft tab (session cleared), they’ll see a simple error via setError(...) — you already surface errors; if not, I can add a tiny toast later.

Why this fits your current setup

Routes: You already have /brand-development/ai-logo-creator/:composerId in App.tsx. No route changes needed.

Loader: All logic is inside LogoCustomizerPage.tsx (lines 697–774), so the draft branch plugs in cleanly ahead of your Firebase fetch.

No Firestore writes: Drafts work even without a generated_logos collection.

Back-compat: Template IDs still load exactly as before.

Quick QA (1 minute)

Generate a logo → confirm URL becomes
/brand-development/ai-logo-creator/draft-<uuid>.

Composer shows the generated SVG and lets you edit.

Refresh the page (optional) → if sessionStorage is cleared, you should see a clean error.

Open a known template link (logo-wordmark-...) → still works.