diff --git a/myproject/template/helloworld.html b/myproject/template/helloworld.html
index f8f2715854aec4bf510a8d0e0e45deb8c009251a..78c027ebf714819a0f911595de8e734952400bbc 100644
--- a/myproject/template/helloworld.html
+++ b/myproject/template/helloworld.html
@@ -3,11 +3,14 @@
   <head>
     <meta charset="utf-8">
     <meta name="viewport" content="width=device-width, initial-scale=1">
-    <title>Bootstrap demo</title>
-	<!-- <link rel="image" href="image/python.png"> -->
-	<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-QWTKZyjpPEjISv5WaRU9OFeRpok6YctnYmDr5pNlyT2bRjXh0JMhjY6hW+ALEwIH" crossorigin="anonymous">
-	<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/viewerjs/1.11.7/viewer.css" integrity="sha512-9NawOLzuLE2GD22PJ6IPWXEjPalb/FpdH1qMpgXdaDM+0OfxEV75ZCle6KhZi0vM6ZWvMrNnIZv6YnsL+keVmA==" crossorigin="anonymous" referrerpolicy="no-referrer" />
-	<style>
+    <title>viewer JS Template </title>
+    <!-- <link rel="image" href="image/python.png"> -->
+    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-QWTKZyjpPEjISv5WaRU9OFeRpok6YctnYmDr5pNlyT2bRjXh0JMhjY6hW+ALEwIH" crossorigin="anonymous">
+    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/viewerjs/1.11.7/viewer.css" integrity="sha512-9NawOLzuLE2GD22PJ6IPWXEjPalb/FpdH1qMpgXdaDM+0OfxEV75ZCle6KhZi0vM6ZWvMrNnIZv6YnsL+keVmA==" crossorigin="anonymous" referrerpolicy="no-referrer" />
+    <link rel="icon" href="image/logo.png">
+	
+    <style>
+		
 		img {
 			width: 150px;
 			height: 150px;
@@ -16,32 +19,80 @@
   </head>
   <body>
 		<div class="container">
-			<!-- <div>
-				
-				{ % if data.username == "justinmass2001" % }
-			</div> -->
 
 			<div class="alert alert-success" role="alert">
 				Welcome {{ data.username }} , you are in {{ data.env }}
 			</div>
+			<!-- class called row and collum -->
+			<div class="container">
+				<div class="row">
+					<div class="col-auto">
+						<button class="btn btn-primary" style="margin-bottom: 20px;">Add Devices</button> 
+					</div>
+				</div>
+				<div class="row">
+				  <div class="col">
+					<!-- class for card-1 -->
+					<div class="card text-center">
+						<div class="card-header">
+								Raspberry Camera 2
+						</div>
+						<div class="card-body">
+								<h5 class="card-title">Special title treatment</h5>
+								<p class="card-text">With supporting text below as a natural lead-in to additional content.</p>
+								<button id="raspi-cam-1" class="btn btn-primary raspi-cm-viewer">View Captures</a>
+						</div>
+						<div class="card-footer text-muted">
+								2 days ago
+						</div>
+					</div>
+				</div>
+				<div class="col">
+					<!-- class for card-2 -->
+					<div class="card text-center">
+						<div class="card-header">
+								Selfmade Ninja Academy Lab
+						</div>
+						<div class="card-body">
+							<h5 class="card-title">Special title treatment</h5>
+							<p class="card-text">Click To the Open button to View live Site. Access detailed captures and ensure the.</p>
+							<button id="raspi-cam-2" class="btn btn-primary raspi-cm-viewer">Open</a>
+						</div>
+						<div class="card-footer text-muted">
+							2 days ago
+						</div>
+					</div>
+				</div>
+				<div class="col">
+					<!-- class for card-3 -->
+					<div class="card text-center">
+						<div class="card-header">
+						  	Raspberry Camera 3
+						</div>
+						<div class="card-body">
+							<h5 class="card-title">Special title treatment</h5>
+							<p class="card-text">This is a simple card with some text content. You can add more details here</p>
+							<a href="raspi-cam-3" class="btn btn-primary raspi-cam-viewer">View Captures</a>
+							</div>
+						<div class="card-footer text-muted">
+						  	2 days ago
+						</div>
+					  </div>
+				  </div>
+				</div>
+			  </div>
 			
-			<ul id="images">
+			      <ul id="images" style="display: none;">
 				
 				<li><img src="https://th.bing.com/th/id/OIP.d7XoYXNNdLcexb9E1xehCAHaEK?w=278&h=180&c=7&r=0&o=5&dpr=1.3&pid=1.7" alt="Picture 1"></li> <br>
-				<li><img src="https://th.bing.com/th/id/OIP.TldVfnF-trAnn4FNSJ42RAHaEK?w=324&h=182&c=7&r=0&o=5&dpr=1.3&pid=1.7" alt="Picture 1"></li> <br>
-				<li><img src="https://th.bing.com/th/id/OIP.ysjV0sgOseoA-KELS-qr_AHaEK?w=320&h=180&c=7&r=0&o=5&dpr=1.3&pid=1.7" alt="Picture 1"></li> <br>
+				<li><img src="https://th.bing.com/th/id/OIP.TldVfnF-trAnn4FNSJ42RAHaEK?w=324&h=182&c=7&r=0&o=5&dpr=1.3&pid=1.7" alt="Picture 2"></li> <br>
+				<li><img src="https://th.bing.com/th/id/OIP.ysjV0sgOseoA-KELS-qr_AHaEK?w=320&h=180&c=7&r=0&o=5&dpr=1.3&pid=1.7" alt="Picture 3"></li> <br>
 				
-				<li><img src="{{ data.avater }}" alt="Picture 1"></li>
+				<li><img src="{{ data.avater }}" alt="Picture 1"></li> <!-- my github profile picture. -->
 				
-			</ul>
-			<!-- { % elif data.username == "root" % } -->
-			<div class="alert alert-danger" role="alert">
-				You should not run as {{ data.username }} , you are in {{ data.env }}
-			</div>
-			<!-- { % endif % } -->
     
 	<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.7.1/jquery.min.js" integrity="sha512-v2CJ7UaYy4JwqLDIrZUI/4hqeoQieOmAZNXBeQyjo21dadnwR+8ZaIJVT8EE2iyI61OV8e6M8PP2/4hpQINQ/g==" crossorigin="anonymous" referrerpolicy="no-referrer"></script>
-    <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/js/bootstrap.bundle.min.js" integrity="sha384-YvpcrYf0tY3lHB60NNkmXc5s9fDVZLESaAA55NDzOxhy9GkcIdslK1eN7N6jIeHz" crossorigin="anonymous"></script>
+      <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/js/bootstrap.bundle.min.js" integrity="sha384-YvpcrYf0tY3lHB60NNkmXc5s9fDVZLESaAA55NDzOxhy9GkcIdslK1eN7N6jIeHz" crossorigin="anonymous"></script>
 	<script src="https://cdn.jsdelivr.net/npm/@popperjs/core@2.11.8/dist/umd/popper.min.js" integrity="sha384-I7E8VVD/ismYTF4hNIPjVp/Zjvgyol6VFvRkX/vR+Vc4jQkC+hVqc2pM8ODewa9r" crossorigin="anonymous"></script>
 	<script src="https://cdnjs.cloudflare.com/ajax/libs/viewerjs/1.11.7/viewer.min.js" integrity="sha512-lZD0JiwhtP4UkFD1mc96NiTZ14L7MjyX5Khk8PMxJszXMLvu7kjq1sp4bb0tcL6MY+/4sIuiUxubOqoueHrW4w==" crossorigin="anonymous" referrerpolicy="no-referrer"></script>
 	<script src="https://cdnjs.cloudflare.com/ajax/libs/viewerjs/1.11.7/viewer.common.js" integrity="sha512-LlQl0sFUcI1vIDM7mJLlc6a8ED/7OodBOExKGh93wuOhftpuR+LqrihUhDERtnX526QoQqqKWxg6BpMjEibyMw==" crossorigin="anonymous" referrerpolicy="no-referrer"></script>
@@ -60,15 +111,48 @@
 		// 		console.log("began to show");
 		// 	}
 		// });
+		function apiCall(){
+			// Do network calls and fetch more images.
+			return `
+				<li><img src="https://th.bing.com/th/id/OIP.d7XoYXNNdLcexb9E1xehCAHaEK?w=278&h=180&c=7&r=0&o=5&dpr=1.3&pid=1.7" alt="Picture 1" /></li> 
+				<li><img src="https://th.bing.com/th/id/OIP.TldVfnF-trAnn4FNSJ42RAHaEK?w=324&h=182&c=7&r=0&o=5&dpr=1.3&pid=1.7" alt="Picture 2" /></li> 
+				<li><img src="https://th.bing.com/th/id/OIP.ysjV0sgOseoA-KELS-qr_AHaEK?w=320&h=180&c=7&r=0&o=5&dpr=1.3&pid=1.7" alt="Picture 3" /></li> 
+				<li><img src="https://th.bing.com/th/id/OIP.d7XoYXNNdLcexb9E1xehCAHaEK?w=278&h=180&c=7&r=0&o=5&dpr=1.3&pid=1.7" alt="Picture 1" /></li> 
+				<li><img src="https://th.bing.com/th/id/OIP.TldVfnF-trAnn4FNSJ42RAHaEK?w=324&h=182&c=7&r=0&o=5&dpr=1.3&pid=1.7" alt="Picture 2" /></li> 
+				<li><img src="https://th.bing.com/th/id/OIP.ysjV0sgOseoA-KELS-qr_AHaEK?w=320&h=180&c=7&r=0&o=5&dpr=1.3&pid=1.7" alt="Picture 3" /></li> 
+			`
+		}
+
 		const images = document.getElementById('images');
 		const viewer = new Viewer(images, {
 			loop: true,
 			interval: 500,
 			view: function(event){
 				console.log((event.detail.index + 1 ) + " / " + viewer.length);
+				var cur_image = event.detail.index + 1;
+				var length = viewer.length;
+				var leftover = 1;
+                
+				if(length - cur_image <= leftover){
+                    console.log("now we can add more images");
+					$(images).append(apiCall());
+					viewer.update();
+
+				}
 			}
 		});
 
+		$('#raspi-cam-1').on('click', function(e){
+			viewer.show();
+		});
+
+        // click to go this website page.
+        function openSite(){
+            window.open('http://labs.selfmade.ninja', '_blank');
+        }
+
+        $('#raspi-cam-2').on('click', openSite);
+
 	</script>
   </body>
 </html>
\ No newline at end of file
diff --git a/myproject/template/image/logo.png b/myproject/template/image/logo.png
new file mode 100644
index 0000000000000000000000000000000000000000..0a435577aada4373aeccce804d555152893263c5
Binary files /dev/null and b/myproject/template/image/logo.png differ