diff --git a/src/components/GenerateCourse/AICourseRoadmapView.tsx b/src/components/GenerateCourse/AICourseRoadmapView.tsx
index b56080169..106a2b764 100644
--- a/src/components/GenerateCourse/AICourseRoadmapView.tsx
+++ b/src/components/GenerateCourse/AICourseRoadmapView.tsx
@@ -84,13 +84,13 @@ export function AICourseRoadmapView(props: AICourseRoadmapViewProps) {
       setIsGenerating(true);
       await readAIRoadmapStream(reader, {
         onStream: async (result) => {
-          const roadmap = generateAICourseRoadmapStructure(result);
+          const roadmap = generateAICourseRoadmapStructure(result, true);
           const { nodes, edges } = generateAIRoadmapFromText(roadmap);
           const svg = await renderFlowJSON({ nodes, edges });
           replaceChildren(containerEl.current!, svg);
         },
         onStreamEnd: async (result) => {
-          const roadmap = generateAICourseRoadmapStructure(result);
+          const roadmap = generateAICourseRoadmapStructure(result, true);
           const { nodes, edges } = generateAIRoadmapFromText(roadmap);
           const svg = await renderFlowJSON({ nodes, edges });
           replaceChildren(containerEl.current!, svg);
diff --git a/src/lib/ai.ts b/src/lib/ai.ts
index 454eabee5..9713fd162 100644
--- a/src/lib/ai.ts
+++ b/src/lib/ai.ts
@@ -238,7 +238,10 @@ export type Title = {
 
 export type ResultItem = Title | Topic | Label;
 
-export function generateAICourseRoadmapStructure(data: string): ResultItem[] {
+export function generateAICourseRoadmapStructure(
+  data: string,
+  isCourseRoadmap: boolean = false,
+): ResultItem[] {
   const lines = data.split('\n');
 
   const result: ResultItem[] = [];
@@ -274,9 +277,13 @@ export function generateAICourseRoadmapStructure(data: string): ResultItem[] {
     } else if (line.startsWith('-')) {
       if (currentTopic) {
         const label = line.replace('-', '').trim();
-        const currentTopicIndex = result.length - 1;
-        const subTopicIndex = currentTopic.children?.length || 0;
-        const id = `${currentTopicIndex}-${subTopicIndex}`;
+
+        let id = nanoid();
+        if (isCourseRoadmap) {
+          const currentTopicIndex = result.length - 1;
+          const subTopicIndex = currentTopic.children?.length || 0;
+          id = `${currentTopicIndex}-${subTopicIndex}`;
+        }
 
         currentTopic.children?.push({
           id,