diff --git a/static/homepage-roadmap.js b/static/homepage-roadmap.js
index f88cd0f34c857065e279f16847bfed5f0ff3e6cc..8edb6a35846f4418ccaf1c2ce1d9aff90bcfb526 100644
--- a/static/homepage-roadmap.js
+++ b/static/homepage-roadmap.js
@@ -268,14 +268,15 @@
 //     canvas.style.backgroundColor="transparent";
 // }
 
+let branchesDrawn = [false, false, false, false];  // Track which branches have been drawn
+let branchPositions = [600, 1200, 1800, 2400];  // The vertical positions of each branch
+
 function verticalLine(x, y1, y2, ctx) {
-    // Directly draw the line from y1 to y2
     ctx.moveTo(x, y1);
     ctx.lineTo(x, y2);
 }
 
 function circularArc(x, y, ctx, typeID) {
-    // Draw circular arcs based on the typeID
     if (typeID == 1) {
         ctx.arc(x, y, 30, Math.PI, Math.PI/2, true);  // top-left curve
     }
@@ -291,18 +292,40 @@ function circularArc(x, y, ctx, typeID) {
 }
 
 function horizontalLine(x1, x2, y, ctx) {
-    // Directly draw the horizontal line from x1 to x2 at height y
     ctx.moveTo(x1, y);
     ctx.lineTo(x2, y);
 }
 
+function drawBranch(ctx, canvas_h, index) {
+    var centerX = ctx.canvas.width / 2;
+
+    // Draw branches based on the index (ensuring they remain independent)
+    if (index === 0) {
+        circularArc(centerX - 30, 600, ctx, 3);
+        horizontalLine(centerX - 30, centerX - 400, 630, ctx);
+    }
+    else if (index === 1) {
+        circularArc(centerX + 30, 1200, ctx, 1);
+        horizontalLine(centerX + 30, centerX + 400, 1230, ctx);
+    }
+    else if (index === 2) {
+        circularArc(centerX - 30, 1800, ctx, 3);
+        horizontalLine(centerX - 30, centerX - 400, 1830, ctx);
+    }
+    else if (index === 3) {
+        circularArc(centerX + 30, 2400, ctx, 1);
+        horizontalLine(centerX + 30, centerX + 400, 2430, ctx);
+    }
+
+    branchesDrawn[index] = true;
+}
+
 function draw() {
-    /** @type {HTMLCanvasElement} */
     let canvas = document.getElementById("roadmap");
     canvas.width = 1300;
     canvas.height = 3000;
 
-    if(!canvas.getContext) return;
+    if (!canvas.getContext) return;
     var ctx = canvas.getContext("2d");
     var gradient = ctx.createLinearGradient(0, 0, 0, 13370);
     gradient.addColorStop(0, "#185A4F");
@@ -323,26 +346,25 @@ function draw() {
     ctx.lineJoin = 'round';
     ctx.beginPath();
 
-    // Draw vertical line from the center of the canvas
-    var centerX = canvas.width / 2;  
+    var scrTop = document.documentElement.scrollTop;  // Get the scroll position
+    var canvas_h = ctx.canvas.height;
+
+    // Draw the main vertical line
+    var centerX = canvas.width / 2;
     verticalLine(centerX, 200, 3000, ctx);
 
-    // Draw branches
-    circularArc(centerX - 30, 600, ctx, 3);
-    horizontalLine(centerX - 30, centerX - 400, 630, ctx);
-    
-    circularArc(centerX + 30, 1200, ctx, 1);
-    horizontalLine(centerX + 30, centerX + 400, 1230, ctx);
-    
-    circularArc(centerX - 30, 1800, ctx, 3);
-    horizontalLine(centerX - 30, centerX - 400, 1830, ctx);
-    
-    circularArc(centerX + 30, 2400, ctx, 1);
-    horizontalLine(centerX + 30, centerX + 400, 2430, ctx);
-  
+    // Draw branches as the user scrolls down
+    branchPositions.forEach((pos, index) => {
+        if (scrTop > pos - window.innerHeight * 0.8 && !branchesDrawn[index]) {
+            drawBranch(ctx, canvas_h, index);
+        }
+    });
+
     ctx.stroke();
-    canvas.style.backgroundColor = "transparent";
 }
-draw();
+
+// Redraw on scroll event
 window.addEventListener('scroll', draw);
 
+// Initial draw
+draw();
\ No newline at end of file