Index: /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/components/common/latest-tasks/latest-tasks.html
===================================================================
--- /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/components/common/latest-tasks/latest-tasks.html	(nonexistent)
+++ /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/components/common/latest-tasks/latest-tasks.html	(working copy)
@@ -0,0 +1,51 @@
+<h4 mat-dialog-title>Tasks</h4>
+<mat-dialog-content>
+  <div class="table-container">
+    <div class="mat-elevation-z0">
+      <table mat-table [dataSource]="tasksDataSource">
+        <ng-container matColumnDef="serial">
+          <th mat-header-cell *matHeaderCellDef>SNo.</th>
+          <td mat-cell *matCellDef="let element; let i = index;">{{ i | globalSerial }}</td>
+        </ng-container>
+        <ng-container matColumnDef="name">
+          <th mat-header-cell *matHeaderCellDef>Name</th>
+          <td mat-cell *matCellDef="let element">{{ element?.device_list }}</td>
+        </ng-container>
+        <ng-container matColumnDef="type">
+          <th mat-header-cell *matHeaderCellDef>Type</th>
+          <td mat-cell *matCellDef="let element">{{ element?.type }}</td>
+        </ng-container>
+        <ng-container matColumnDef="status">
+          <th mat-header-cell *matHeaderCellDef>Status</th>
+          <td mat-cell *matCellDef="let element">
+            <div class="row-action a-link">
+              @if (element?.state === 'done') {
+                <fa-icon [icon]="['far', 'check-circle']" class="success-icon"></fa-icon> Done
+              } @else {
+                <fa-icon [icon]="['fas', 'spinner']" class="warning-icon"></fa-icon> {{element?.state}}
+              }
+            </div>
+          </td>
+        </ng-container>
+        <tr mat-header-row *matHeaderRowDef="tasksColumns"></tr>
+        <tr mat-row *matRowDef="let row; columns: tasksColumns;"></tr>
+        <tr class="mat-row table-no-data" *matNoDataRow>
+          <td class="mat-cell" colspan="4">No results found.</td>
+        </tr>
+      </table>
+    </div>
+    <div class="align-center">
+      <a href="/system/tasks">Show all Tasks</a>
+    </div>
+  </div>
+</mat-dialog-content>
+<mat-dialog-actions>
+  <div class="align-center">
+    <button
+      mat-button
+      color="basic"
+      (click)="onCancel()">
+      close
+    </button>
+  </div>
+</mat-dialog-actions>
Index: /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/components/common/latest-tasks/latest-tasks.scss	(added)
===================================================================
--- /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/components/common/latest-tasks/latest-tasks.scss	(revision 0)
+++ /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/components/common/latest-tasks/latest-tasks.scss	(revision 0)
Index: /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/components/common/latest-tasks/latest-tasks.spec.ts
===================================================================
--- /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/components/common/latest-tasks/latest-tasks.spec.ts	(nonexistent)
+++ /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/components/common/latest-tasks/latest-tasks.spec.ts	(working copy)
@@ -0,0 +1,23 @@
+import { ComponentFixture, TestBed } from '@angular/core/testing';
+
+import { LatestTasks } from './latest-tasks';
+
+describe('LatestTasks', () => {
+  let component: LatestTasks;
+  let fixture: ComponentFixture<LatestTasks>;
+
+  beforeEach(async () => {
+    await TestBed.configureTestingModule({
+      imports: [LatestTasks]
+    })
+    .compileComponents();
+
+    fixture = TestBed.createComponent(LatestTasks);
+    component = fixture.componentInstance;
+    fixture.detectChanges();
+  });
+
+  it('should create', () => {
+    expect(component).toBeTruthy();
+  });
+});
Index: /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/components/common/latest-tasks/latest-tasks.ts
===================================================================
--- /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/components/common/latest-tasks/latest-tasks.ts	(nonexistent)
+++ /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/components/common/latest-tasks/latest-tasks.ts	(working copy)
@@ -0,0 +1,51 @@
+import {Component, inject, OnInit} from '@angular/core';
+import {SharedModule} from '../../../shared/shared-module';
+import {MatDialogRef} from '@angular/material/dialog';
+import {MatTableDataSource} from '@angular/material/table';
+import {GlobalSerialPipe} from '../../../pipes/global-serial-pipe';
+import {SystemService} from '../../../services/system-service';
+import {take} from 'rxjs/operators';
+
+@Component({
+  selector: 'app-latest-tasks',
+  imports: [SharedModule, GlobalSerialPipe],
+  templateUrl: './latest-tasks.html',
+  styleUrl: './latest-tasks.scss'
+})
+export class LatestTasks implements OnInit {
+
+  readonly dialogRef = inject(MatDialogRef<LatestTasks>);
+  tasksColumns: Array<string> = ['serial', 'name', 'type', 'status'];
+  tasksDataSource: MatTableDataSource<any> = new MatTableDataSource()
+
+  constructor(
+    private _system: SystemService,
+  ) {
+  }
+
+  ngOnInit() {
+    setTimeout(() => {
+      this.getTasks();
+    })
+  }
+
+  getTasks() {
+    this._system.getTasks({"start": 0, "number": 10})
+      .pipe(take(1)).subscribe({
+      next: (result: any) => {
+        if (result && result?.task && result?.task?.data) {
+          if (result?.task?.data.length > 0) {
+            this.tasksDataSource.data = result?.task?.data;
+          }
+        }
+      },
+      error: error => {
+        console.log(error?.message || 'Failed to get tasks');
+      }
+    })
+  }
+
+  onCancel() {
+    this.dialogRef.close();
+  }
+}
Index: /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/components/navigation/navigation.html
===================================================================
--- /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/components/navigation/navigation.html	(revision 2709)
+++ /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/components/navigation/navigation.html	(working copy)
@@ -7,7 +7,7 @@
       <span class="app-branding">Array </span><span class="app-platform">Management Platform</span>
     </div>
     <div class="top-right">
-      <fa-icon [icon]="['far', 'rectangle-list']" size="2x"></fa-icon>
+      <fa-icon [icon]="['far', 'rectangle-list']" size="2x" class="a-link" (click)="showLatestTasks()" matTooltip="Show Latest Tasks"></fa-icon>
              
       <fa-icon [icon]="['far', 'bell']" size="2x"></fa-icon>
            
@@ -58,11 +58,11 @@
             @if (!item.children) {
               <li>
                 <a [routerLink]="item.routerLink" routerLinkActive="active"
-                   (click)="isSidebarCollapsed && toggleSidebar()">
+                   (click)="isSidebarCollapsed && toggleSidebar()" class="a-link">
                   @if (item.icon != '') {
-                    <fa-icon [icon]="['fas', item.icon]"></fa-icon>
+                    <fa-icon [icon]="['fas', item.icon]" [matTooltip]="item?.label" class="left-nav-icon-size"></fa-icon>
                   }
-                  <span>{{ item?.label }}</span>
+                  <span> &nbsp;{{ item?.label }}</span>
                 </a>
               </li>
             } @else {
@@ -71,12 +71,13 @@
                   (click)="toggleSubMenu(item)"
                   [class.active]="isParentActive(item)"
                   [class.expanded]="item.expanded"
+                  class="a-link"
                 >
                   @if (item.icon != '') {
-                    <fa-icon [icon]="['fas', item.icon]"></fa-icon>
+                    <fa-icon [icon]="['fas', item.icon]" [matTooltip]="item?.label" class="left-nav-icon-size"></fa-icon>
                   }
-                  <span>{{ item?.label }}</span>
-                  <fa-icon [icon]="['fas', 'chevron-right']"></fa-icon>
+                  <span>&nbsp;{{ item?.label }}</span>
+<!--                  <fa-icon [icon]="['fas', 'chevron-right']"></fa-icon>-->
                 </a>
                 @if (item.expanded) {
                   <ul>
Index: /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/components/navigation/navigation.scss
===================================================================
--- /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/components/navigation/navigation.scss	(revision 2709)
+++ /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/components/navigation/navigation.scss	(working copy)
@@ -1,3 +1,15 @@
+$nav-bg: #F0F3F7;
+$primary-blue: #1170CF;
+$primary-blue-light: #6B8BFF;
+$dark-text: #343A40;
+$medium-text: #6C757D;
+$white: #FFFFFF;
+$active-bg: #E8F0FE;
+$hover-bg: #EAECEF;
+$border-color: #DBDFE4;
+$shadow-light: 0 2px 5px rgba(0, 0, 0, 0.03);
+$shadow-medium: 0 4px 12px rgba(0, 0, 0, 0.1);
+
 .navigation-container {
   display: flex;
   flex-direction: column;
@@ -6,22 +18,23 @@
   left: 0;
   top: 0;
   z-index: 50;
-  overflow: hidden; /* Prevent container overflow */
+  overflow: hidden;
 }
 
 .top-navbar {
-  background-color: #222f31;
-  color: #fff;
+  background-color: $nav-bg;
+  color: $dark-text;
   height: 45px;
   display: flex;
   justify-content: space-between;
   align-items: center;
   padding: 0 20px;
-  box-shadow: 0 2px 5px rgba(0, 0, 0, 0.1);
+  box-shadow: $shadow-light;
   width: 100vw;
   z-index: 51;
-  box-sizing: border-box; /* Ensure padding doesn't cause overflow */
+  box-sizing: border-box;
   position: fixed;
+  border-bottom: 1px solid $border-color;
 }
 
 .top-left {
@@ -35,17 +48,17 @@
   font-size: 1.2em;
   cursor: pointer;
   margin-right: 15px;
-  color: #555;
+  color: $medium-text;
   transition: color 0.2s ease;
 }
 
 .top-left .menu-toggle:hover {
-  color: #007bff;
+  color: $primary-blue;
 }
 
 .top-left .app-branding {
   line-height: 45px;
-  color: #1170cf;
+  color: $primary-blue;
   margin-left: 15px;
   letter-spacing: 1px;
   font-weight: 500;
@@ -53,7 +66,7 @@
 
 .top-left .app-platform {
   line-height: 45px;
-  color: #fff;
+  color: $dark-text;
   margin-left: 15px;
   letter-spacing: 1px;
 }
@@ -65,7 +78,7 @@
 
 .top-right .search-bar {
   padding: 8px 12px;
-  border: 1px solid #ccc;
+  border: 1px solid $border-color;
   border-radius: 20px;
   margin-right: 20px;
   width: 200px;
@@ -74,25 +87,26 @@
 }
 
 .top-right .search-bar:focus {
-  border-color: #007bff;
+  border-color: $primary-blue;
 }
 
 .top-right .icon {
   font-size: 1em;
   margin-left: 20px;
   cursor: pointer;
-  color: #555;
+  color: $medium-text;
   transition: color 0.2s ease;
 }
 
 .top-right .icon:hover {
-  color: #007bff;
+  color: $primary-blue;
 }
 
+
 .top-right .logout-button {
   background: none;
-  border: 1px solid #007bff;
-  color: #007bff;
+  border: 1px solid $primary-blue;
+  color: $primary-blue;
   padding: 8px 15px;
   border-radius: 20px;
   font-size: 0.9em;
@@ -102,8 +116,8 @@
 }
 
 .top-right .logout-button:hover {
-  background-color: #007bff;
-  color: white;
+  background-color: $primary-blue;
+  color: $white;
 }
 
 .top-right .logout-button i {
@@ -112,19 +126,20 @@
 
 .sidebar {
   width: 250px;
-  background-color: #2c3e50;
-  color: #ecf0f1;
+  background-color: $nav-bg;
+  color: $dark-text;
   height: calc(100vh - 45px);
   position: fixed;
   top: 45px;
   left: 0;
   display: flex;
   flex-direction: column;
-  box-shadow: 2px 0 5px rgba(0, 0, 0, 0.2);
+  box-shadow: 2px 0 5px rgba(0, 0, 0, 0.03);
   transition: width 0.3s ease, transform 0.3s ease;
-  overflow-y: auto; /* Allow scroll only if needed */
-  box-sizing: border-box; /* Include padding in height/width */
-  max-height: calc(100vh - 45px); /* Cap height to viewport minus top bar */
+  overflow-y: auto;
+  box-sizing: border-box;
+  max-height: calc(100vh - 45px);
+  border-right: 1px solid $border-color;
 }
 
 .sidebar.collapsed {
@@ -135,8 +150,9 @@
   padding: 12px;
   display: flex;
   align-items: center;
-  border-bottom: 1px solid rgba(255, 255, 255, 0.1);
-  flex-shrink: 0; /* Prevent header from shrinking */
+  border-bottom: 1px solid $border-color;
+  flex-shrink: 0;
+  color: $dark-text;
 }
 
 .sidebar-header .logo {
@@ -150,6 +166,7 @@
   white-space: nowrap;
   overflow: hidden;
   text-overflow: ellipsis;
+  color: $primary-blue;
 }
 
 .sidebar.collapsed .sidebar-header .app-title {
@@ -159,7 +176,7 @@
 .sidebar-nav {
   flex-grow: 1;
   padding: 10px 0;
-  overflow-y: auto; /* Scroll only nav if needed */
+  overflow-y: auto;
 }
 
 .sidebar-nav ul {
@@ -175,28 +192,36 @@
 .sidebar-nav a {
   display: flex;
   align-items: center;
-  padding: 5px 8px;
-  color: #ecf0f1;
+  padding: 8px 12px;
+  color: $dark-text;
   text-decoration: none;
-  transition: background-color 0.2s ease;
+  transition: background-color 0.2s ease, color 0.2s ease;
   position: relative;
+  border-radius: 4px;
+  margin: 0 10px;
 }
 
 .sidebar-nav a:hover {
-  background-color: #34495e;
+  background-color: $hover-bg;
+  color: $primary-blue;
 }
 
 .sidebar-nav a.active {
-  background-color: #007bff;
-  color: white;
+  background-color: $active-bg;
+  color: $primary-blue;
+  font-weight: 600;
 }
 
 .sidebar-nav a .icon {
   margin-right: 15px;
-  //font-size: 1.2em;
   min-width: 20px;
+  color: $medium-text;
 }
 
+.sidebar-nav a.active .icon {
+  color: $primary-blue;
+}
+
 .sidebar-nav a span {
   white-space: nowrap;
   overflow: hidden;
@@ -209,24 +234,36 @@
 
 .sidebar-footer {
   padding: 8px;
-  border-top: 1px solid rgba(255, 255, 255, 0.1);
+  border-top: 1px solid $border-color;
   display: flex;
   justify-content: space-between;
   align-items: center;
-  flex-shrink: 0; /* Prevent footer from shrinking */
+  flex-shrink: 0;
 }
 
 .sidebar-footer a {
-  color: #ecf0f1;
+  color: $dark-text;
   text-decoration: none;
   display: flex;
   align-items: center;
+  padding: 5px 8px;
+  border-radius: 4px;
 }
 
+.sidebar-footer a:hover {
+  background-color: $hover-bg;
+  color: $primary-blue;
+}
+
 .sidebar-footer a .icon {
   margin-right: 10px;
+  color: $medium-text;
 }
 
+.sidebar-footer a:hover .icon {
+  color: $primary-blue;
+}
+
 .sidebar-footer a span {
   white-space: nowrap;
   overflow: hidden;
@@ -240,7 +277,7 @@
 .sidebar-footer .toggle-button {
   background: none;
   border: none;
-  color: #ecf0f1;
+  color: $medium-text;
   cursor: pointer;
   font-size: 1.2em;
   padding: 5px;
@@ -248,67 +285,62 @@
   align-items: center;
 }
 
+.sidebar-footer .toggle-button:hover {
+  color: $primary-blue;
+}
+
 .sidebar-footer .toggle-button .fas.fa-angle-double-left.rotated {
   transform: rotate(180deg);
 }
 
 .sidebar-nav ul ul {
-  /* Initial state: Hidden and collapsed */
-  list-style: none; /* Remove bullet points for nested lists */
+  list-style: none;
   padding: 0;
   margin: 0;
-  background-color: #2c3e50; /* Match parent background or slightly different */
-  max-height: 0; /* Starts collapsed */
-  overflow: hidden; /* Hides content that exceeds max-height */
-  transition: max-height 0.3s ease-in-out; /* Smooth animation for expansion/collapse */
+  background-color: $white;
+  max-height: 0;
+  overflow: hidden;
+  transition: max-height 0.3s ease-in-out;
 }
 
-/* Indent child items for visual hierarchy */
 .sidebar-nav ul ul li a {
-  padding-left: 35px; /* Adjust as needed for desired indentation */
-  background-color: #34495e; /* Slightly darker for nested items or use parent color */
+  padding-left: 45px;
+  color: $medium-text;
+  background-color: transparent;
+  margin: 0;
 }
 
-/* Hover state for child items */
 .sidebar-nav ul ul li a:hover {
-  background-color: #3f556d; /* Darker hover for child items */
+  background-color: $hover-bg;
+  color: $primary-blue;
 }
 
-/* Active state for child items (if applicable) */
 .sidebar-nav ul ul li a.active {
-  background-color: #007bff; /* Keep active color consistent */
-  color: white;
+  background-color: $active-bg;
+  color: $primary-blue;
+  font-weight: 600;
 }
 
-/* --- Styles for Chevron Icon Rotation --- */
-
 .sidebar-nav a .fa-chevron-right {
-  /* Positioning and default state for the chevron icon */
-  margin-left: auto; /* Pushes the icon to the right */
+  margin-left: auto;
   font-size: 0.8em;
   opacity: 0.7;
-  transition: transform 0.3s ease; /* Smooth rotation transition */
+  transition: transform 0.3s ease;
+  color: $medium-text;
 }
 
-/* Rotate the chevron icon when the parent menu item is expanded */
 .sidebar-nav a.expanded .fa-chevron-right {
-  transform: rotate(90deg); /* Rotates the icon to point down */
-  opacity: 1; /* Make it fully visible when expanded */
+  transform: rotate(90deg);
+  opacity: 1;
+  color: $primary-blue;
 }
 
-/* Hide the chevron icon when the sidebar itself is collapsed */
 .sidebar.collapsed .sidebar-nav a .fa-chevron-right {
   display: none;
 }
 
-/* --- Ensuring the Submenu Expands Correctly --- */
-/*
-  This rule applies max-height to the <ul> child when its preceding <a>
-  sibling has the 'expanded' class, triggering the transition.
-*/
 .sidebar-nav li a.expanded + ul {
-  max-height: 500px; /* Adjust this value if your submenus are taller.
-                        It needs to be large enough to contain all child items. */
+  max-height: 500px;
 }
 
 .user-dropdown-container {
@@ -317,48 +349,45 @@
   height: 100%;
   display: flex;
   align-items: center;
-  padding: 0 5px;
+  padding: 0 10px;
   border-radius: 4px;
   transition: background-color 0.2s ease;
+  color: $dark-text;
 }
 
 .user-dropdown-container:hover {
-  background-color: #34495e;
+  background-color: $hover-bg;
 }
 
 .user-dropdown-menu {
   position: absolute;
   top: calc(100% + 10px);
   right: 0;
-  background-color: #34495e;
-  border: 1px solid rgba(255, 255, 255, 0.1);
-  border-radius: 5px;
-  box-shadow: 0 4px 12px rgba(0, 0, 0, 0.3);
+  background-color: $white;
+  border: 1px solid $border-color;
+  border-radius: 6px;
+  box-shadow: $shadow-medium;
   min-width: 200px;
   z-index: 102;
   padding: 5px 0;
-
-  /* Initial state for transition: hidden */
   opacity: 0;
-  transform: translateY(-10px) scale(0.95); /* Add scale for a slight zoom effect */
+  transform: translateY(-10px) scale(0.98);
   transition: opacity 0.2s ease-out, transform 0.2s ease-out;
-  pointer-events: none; /* Prevent interactions when hidden */
+  pointer-events: none;
 }
 
-/* State when the dropdown is open (when the 'open' class is applied) */
 .user-dropdown-menu.open {
   opacity: 1;
   transform: translateY(0) scale(1);
-  pointer-events: auto; /* Allow interactions when visible */
+  pointer-events: auto;
 }
 
-/* Styling for individual links within the dropdown */
 .user-dropdown-menu a,
 .user-dropdown-menu .logout-button-dropdown {
   display: flex;
   align-items: center;
   padding: 10px 15px;
-  color: #ecf0f1;
+  color: $dark-text;
   text-decoration: none;
   font-size: 0.8em;
   white-space: nowrap;
@@ -373,8 +402,8 @@
 
 .user-dropdown-menu a:hover,
 .user-dropdown-menu .logout-button-dropdown:hover {
-  background-color: #3f556d;
-  color: #007bff;
+  background-color: $hover-bg;
+  color: $primary-blue;
 }
 
 .user-dropdown-menu a fa-icon,
@@ -386,15 +415,19 @@
 
 .dropdown-divider {
   height: 1px;
-  background-color: rgba(255, 255, 255, 0.1);
+  background-color: $border-color;
   margin: 5px 0;
 }
 
 .user-dropdown-menu .logout-button-dropdown {
-  color: #e74c3c;
+  color: #DC3545;
 }
 
 .user-dropdown-menu .logout-button-dropdown:hover {
-  background-color: #c0392b;
-  color: white;
+  background-color: #C0392B;
+  color: $white;
 }
+
+.left-nav-icon-size {
+  font-size: 1.25em;
+}
Index: /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/components/navigation/navigation.ts
===================================================================
--- /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/components/navigation/navigation.ts	(revision 2709)
+++ /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/components/navigation/navigation.ts	(working copy)
@@ -1,72 +1,93 @@
-import {Component, HostListener, OnInit} from '@angular/core';
+import {Component, HostListener, OnInit, OnDestroy, inject} from '@angular/core';
 import {Auth} from '../../services/auth';
 import {SharedModule} from '../../shared/shared-module';
 import {MenuItem} from '../../models/menu-item';
-import {Observable} from 'rxjs';
+import {Observable, Subject, combineLatest} from 'rxjs';
 import {MENU_ITEMS} from '../../constants/menu';
-import {filter, map, take} from 'rxjs/operators';
+import {filter, map, takeUntil, startWith} from 'rxjs/operators';
 import {NavigationEnd, Router} from '@angular/router';
 import {Layout} from '../../services/layout';
+import {AsyncPipe} from '@angular/common';
+import {MatDialog, MatDialogConfig} from '@angular/material/dialog';
+import {LatestTasks} from '../common/latest-tasks/latest-tasks';
 
 @Component({
   selector: 'app-navigation',
-  imports: [SharedModule],
+  standalone: true,
+  imports: [SharedModule, AsyncPipe],
   templateUrl: './navigation.html',
   styleUrl: './navigation.scss'
 })
-export class Navigation implements OnInit {
+export class Navigation implements OnInit, OnDestroy {
   isSidebarCollapsed: boolean = false;
   isUserDropdownOpen: boolean = false;
+  menuItems: MenuItem[] = [];
   filteredMenu$: Observable<MenuItem[]> | undefined;
-  private menuItems: MenuItem[] = [];
 
-  constructor(private authService: Auth, private router: Router, private layoutService: Layout) {
+  private destroy$ = new Subject<void>();
+
+  constructor(
+    private authService: Auth,
+    private router: Router,
+    private layoutService: Layout
+  ) {
   }
 
   ngOnInit() {
     this.isSidebarCollapsed = localStorage.getItem('sidebarCollapsed') === 'true';
-    this.filteredMenu$ = this.authService.currentUser.pipe(
-      map(user => this.filteredMenuItems(MENU_ITEMS, user))
+    this.layoutService.setSidebarCollapsed(this.isSidebarCollapsed);
+
+    const menuItems$ = this.authService.currentUser.pipe(
+      map(user => this.filteredMenuItems(MENU_ITEMS, user)),
+      startWith([])
     );
 
-    this.filteredMenu$.subscribe(items => {
-      const savedState = JSON.parse(localStorage.getItem('menuState') || '{}');
-      this.menuItems = items.map(item => ({
-        ...item,
-        expanded: savedState[item.label] ?? item.expanded ?? false,
-        children: item.children
-          ? item.children.map(child => ({...child, expanded: child.expanded ?? false}))
-          : undefined
-      }));
-      this.updateMenuState();
-    });
-
-    this.router.events
-      .pipe(filter(event => event instanceof NavigationEnd))
-      .subscribe(() => {
-        this.updateMenuState();
-      });
-
-    this.router.events
-      .pipe(
+    this.filteredMenu$ = combineLatest([
+      menuItems$,
+      this.router.events.pipe(
         filter(event => event instanceof NavigationEnd),
-        take(1)
+        startWith(null)
       )
-      .subscribe(() => {
+    ]).pipe(
+      map(([items]) => {
+        this.menuItems = this.initializeMenuState(items);
         this.updateMenuState();
-      });
+        return this.menuItems;
+      }),
+      takeUntil(this.destroy$)
+    );
+
+    this.filteredMenu$.subscribe();
   }
 
+  ngOnDestroy(): void {
+    this.destroy$.next();
+    this.destroy$.complete();
+  }
+
   toggleSidebar(): void {
     this.isSidebarCollapsed = !this.isSidebarCollapsed;
     this.layoutService.setSidebarCollapsed(this.isSidebarCollapsed);
+    localStorage.setItem('sidebarCollapsed', this.isSidebarCollapsed.toString());
   }
 
   toggleSubMenu(item: MenuItem): void {
-    item.expanded = !item.expanded;
+    const shouldExpand = !item.expanded;
+    if (shouldExpand) {
+      this.collapseAllSubMenus(item);
+    }
+    item.expanded = shouldExpand;
     this.saveMenuState();
   }
 
+  private collapseAllSubMenus(currentItem: MenuItem): void {
+    this.menuItems.forEach(menuItem => {
+      if (menuItem !== currentItem && menuItem.children) {
+        menuItem.expanded = false;
+      }
+    });
+  }
+
   toggleUserDropdown(event: Event): void {
     event.stopPropagation();
     this.isUserDropdownOpen = !this.isUserDropdownOpen;
@@ -89,15 +110,30 @@
   isParentActive(item: MenuItem): boolean {
     if (!item.children) return false;
     const currentUrl = this.router.url;
-    return item.children.some(child => child.routerLink && currentUrl.includes(child.routerLink));
+    return item.children.some(child => child.routerLink && currentUrl.startsWith(child.routerLink));
   }
 
+  private initializeMenuState(items: MenuItem[]): MenuItem[] {
+    const savedState = JSON.parse(localStorage.getItem('menuState') || '{}');
+    return items.map(item => ({
+      ...item,
+      expanded: savedState[item.label] ?? item.expanded ?? false,
+      children: item.children
+        ? item.children.map(child => ({...child, expanded: child.expanded ?? false}))
+        : undefined
+    }));
+  }
+
   private updateMenuState(): void {
     const currentUrl = this.router.url;
     this.menuItems.forEach(item => {
       if (item.children) {
-        const isActive = item.children.some(child => child.routerLink && currentUrl.includes(child.routerLink));
-        item.expanded = isActive || item.expanded;
+        const isActive = item.children.some(child => child.routerLink && currentUrl.startsWith(child.routerLink));
+        if (isActive) {
+          this.collapseAllSubMenus(item);
+          item.expanded = true;
+        } else {
+        }
       }
     });
     this.saveMenuState();
@@ -117,22 +153,35 @@
     if (!user) return [];
 
     return menuItems.filter(item => {
-      if (item.roles && item.roles.length > 0) {
-        const hasRole = item.roles.some(role => this.authService.hasRole(role));
-        if (!hasRole) return false;
+      if (item.roles?.length) {
+        if (!item.roles.some(role => this.authService.hasRole(role))) return false;
       }
 
-      if (item.permissions && item.permissions.length > 0) {
-        const hasPermission = item.permissions.some(permission => this.authService.hasPermission(permission));
-        if (!hasPermission) return false;
+      if (item.permissions?.length) {
+        if (!item.permissions.some(permission => this.authService.hasPermission(permission))) return false;
       }
 
       if (item.children) {
         item.children = this.filteredMenuItems(item.children, user);
-        return item.children.length > 0 || (!item.children && (item.roles || item.permissions));
+        return item.children.length > 0 || item.roles?.length || item.permissions?.length;
       }
 
       return true;
     });
   }
+
+  dialog = inject(MatDialog);
+  dialogConfig = new MatDialogConfig();
+
+  showLatestTasks(): void {
+    this.dialogConfig.minWidth = 450;
+    this.dialogConfig.minHeight = 450;
+    this.dialogConfig.position = {
+      right: 'right',
+      bottom: 'bottom',
+    };
+    this.dialogConfig.disableClose = true;
+    const dialogRef = this.dialog.open(LatestTasks, this.dialogConfig);
+    dialogRef.afterClosed().subscribe(task => {})
+  }
 }
Index: /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/components/storage/storage.html
===================================================================
--- /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/components/storage/storage.html	(revision 2709)
+++ /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/components/storage/storage.html	(working copy)
@@ -1 +1 @@
-<p>storage works!</p>
+<app-tab-container [tabDefinitions]="tabDefinitions" paramKey="tab"/>
Index: /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/components/storage/storage.ts
===================================================================
--- /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/components/storage/storage.ts	(revision 2709)
+++ /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/components/storage/storage.ts	(working copy)
@@ -1,11 +1,21 @@
-import { Component } from '@angular/core';
+import {Component} from '@angular/core';
+import {TabContainer, TabDefinition} from "../tab-container/tab-container";
+import {StoragePrimary} from '../sub-components/storage-primary/storage-primary';
+import {StorageSecondary} from '../sub-components/storage-secondary/storage-secondary';
+import {StorageLogLocation} from '../sub-components/storage-log-location/storage-log-location';
 
 @Component({
   selector: 'app-storage',
-  imports: [],
+  imports: [
+    TabContainer
+  ],
   templateUrl: './storage.html',
   styleUrl: './storage.scss'
 })
-export class Storage {
-
+export class StorageComponent {
+  tabDefinitions: TabDefinition[] = [
+    {label: 'Log Location', component: StorageLogLocation, paramName: 'log-location'},
+    {label: 'Primary Storage', component: StoragePrimary, paramName: 'primary'},
+    // {label: 'Secondary Storage', component: StorageSecondary, paramName: 'secondary'},
+  ]
 }
Index: /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/components/sub-components/storage-log-location/create-log-archive.html
===================================================================
--- /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/components/sub-components/storage-log-location/create-log-archive.html	(nonexistent)
+++ /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/components/sub-components/storage-log-location/create-log-archive.html	(working copy)
@@ -0,0 +1,33 @@
+<h2 mat-dialog-title>Create Archive</h2>
+
+<mat-dialog-content>
+  <form
+    (ngSubmit)="onSubmit()"
+    [formGroup]="configForm"
+  >
+    <div class="form-field-wrapper">
+      <label for="storage" class="form-label">Choose Storage</label>
+      <mat-form-field appearance="outline" subscriptSizing="dynamic">
+        <mat-select formControlName="storage">
+          @for (_store of storageLocations; track _store) {
+            <mat-option [value]="_store.value">{{ _store.label }}</mat-option>
+          }
+        </mat-select>
+      </mat-form-field>
+    </div>
+  </form>
+</mat-dialog-content>
+<mat-dialog-actions>
+  <button
+    mat-button
+    color="basic"
+    (click)="onCancel()">
+    Cancel
+  </button>
+  <button
+    mat-raised-button
+    color="primary"
+    (click)="onSubmit()">
+    Submit
+  </button>
+</mat-dialog-actions>
Index: /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/components/sub-components/storage-log-location/storage-log-location.html
===================================================================
--- /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/components/sub-components/storage-log-location/storage-log-location.html	(nonexistent)
+++ /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/components/sub-components/storage-log-location/storage-log-location.html	(working copy)
@@ -0,0 +1,118 @@
+<mat-grid-list cols="2" rowHeight="100px">
+  <mat-grid-tile colspan="1" rowspan="2">
+    <mat-card class="storage-card" appearance="outlined">
+      <mat-card-content class="card-content-wrapper">
+        <div class="card-header-row">
+          <mat-card-title class="card-title">
+            <span class="card-title-text">Log Location Configuration</span>
+            <div class="row-action a-link">
+              <fa-icon [icon]="['fas', 'circle-info']" matTooltip="In addition, AMP supports secondary storage for long-term log retention by mounting an external secondary
+                  storage device on the AMP. On successful mounting, users can avail this option by selecting 'Secondary' in
+                  the 'Choose Storage for Logs' menu below." class="fa-1x blue-icon"></fa-icon>
+            </div>
+          </mat-card-title>
+        </div>
+        <div class="chart-flex-container">
+          <form
+            (ngSubmit)="updateLogsStorage()"
+            [formGroup]="configForm"
+          >
+            <div class="form-field-wrapper">
+              <label for="storage" class="form-label">Choose Storage for Logs</label>
+              <mat-form-field appearance="outline" subscriptSizing="dynamic">
+                <mat-select formControlName="storage">
+                  @for (_store of storageLocations; track _store) {
+                    <mat-option [value]="_store.value">{{ _store.label }}</mat-option>
+                  }
+                </mat-select>
+              </mat-form-field>
+            </div>
+          </form>
+          <div class="align-center">
+            <button
+              mat-raised-button
+              color="primary"
+              (click)="updateLogsStorage()">
+              Update Storage
+            </button>
+          </div>
+        </div>
+      </mat-card-content>
+    </mat-card>
+  </mat-grid-tile>
+  <mat-grid-tile colspan="1" rowspan="2">
+    <mat-card class="storage-card" appearance="outlined">
+      <mat-card-content class="card-content-wrapper">
+        <div class="card-header-row">
+          <mat-card-title class="card-title">
+            <span class="card-title-text">Storage Management</span>
+          </mat-card-title>
+        </div>
+        <div class="table-container">
+          <div class="mat-elevation-z0">
+            <table mat-table [dataSource]="storageDataSource">
+              <ng-container matColumnDef="storage">
+                <th mat-header-cell *matHeaderCellDef>Storage</th>
+                <td mat-cell *matCellDef="let element">{{ element?.name }}</td>
+              </ng-container>
+              <ng-container matColumnDef="total">
+                <th mat-header-cell *matHeaderCellDef>Total</th>
+                <td mat-cell *matCellDef="let element">{{ element?.model }}</td>
+              </ng-container>
+              <ng-container matColumnDef="used">
+                <th mat-header-cell *matHeaderCellDef>Used</th>
+                <td mat-cell *matCellDef="let element">{{ element?.ip }}</td>
+              </ng-container>
+              <ng-container matColumnDef="free">
+                <th mat-header-cell *matHeaderCellDef>Free</th>
+                <td mat-cell *matCellDef="let element">{{ element?.ip }}</td>
+              </ng-container>
+              <tr mat-header-row *matHeaderRowDef="storageColumns"></tr>
+              <tr mat-row *matRowDef="let row; columns: storageColumns;"></tr>
+              <tr class="mat-row table-no-data" *matNoDataRow>
+                <td class="mat-cell" colspan="4">No results found.</td>
+              </tr>
+            </table>
+          </div>
+        </div>
+      </mat-card-content>
+    </mat-card>
+  </mat-grid-tile>
+  <mat-grid-tile colspan="2" rowspan="4">
+    <mat-card class="storage-card" appearance="outlined">
+      <mat-card-content class="card-content-wrapper">
+        <div class="card-header-row">
+          <mat-card-title class="card-title">
+            <span class="card-title-text">Archived Logs</span>
+          </mat-card-title>
+        </div>
+        <div class="table-container">
+          <div class="button-container">
+            <button mat-raised-button (click)="createArchive()">Add</button> &nbsp;&nbsp;
+          </div>
+          <div class="mat-elevation-z0">
+            <table mat-table [dataSource]="archivedLogsDataSource">
+              <ng-container matColumnDef="serial">
+                <th mat-header-cell *matHeaderCellDef>SNo.</th>
+                <td mat-cell *matCellDef="let element">{{ element?.name }}</td>
+              </ng-container>
+              <ng-container matColumnDef="filename">
+                <th mat-header-cell *matHeaderCellDef>Filename</th>
+                <td mat-cell *matCellDef="let element">{{ element?.model }}</td>
+              </ng-container>
+              <ng-container matColumnDef="action">
+                <th mat-header-cell *matHeaderCellDef>Action</th>
+                <td mat-cell *matCellDef="let element">{{ element?.ip }}</td>
+              </ng-container>
+              <tr mat-header-row *matHeaderRowDef="archivedLogsColumns"></tr>
+              <tr mat-row *matRowDef="let row; columns: archivedLogsColumns;"></tr>
+              <tr class="mat-row table-no-data" *matNoDataRow>
+                <td class="mat-cell" colspan="3">No results found.</td>
+              </tr>
+            </table>
+          </div>
+        </div>
+      </mat-card-content>
+    </mat-card>
+  </mat-grid-tile>
+</mat-grid-list>
Index: /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/components/sub-components/storage-log-location/storage-log-location.scss
===================================================================
--- /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/components/sub-components/storage-log-location/storage-log-location.scss	(nonexistent)
+++ /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/components/sub-components/storage-log-location/storage-log-location.scss	(working copy)
@@ -0,0 +1,63 @@
+.storage-card {
+  width: 100%;
+  height: 100%;
+  border-radius: 8px;
+  background-color: inherit;
+}
+
+.card-content-wrapper {
+  margin-top: 2px;
+  padding: 0 !important;
+  display: flex;
+  flex-direction: column;
+  height: 100%;
+  width: 100%;
+}
+
+.card-header-row {
+  display: flex;
+  align-items: center;
+  gap: 6px;
+  margin-bottom: 8px;
+  padding: 0 8px;
+}
+
+.card-title {
+  font-size: 18px;
+  font-weight: 500;
+  color: #555;
+  margin: 0;
+  display: flex;
+  justify-content: space-between;
+  align-items: center;
+  width: 100%;
+}
+
+.help-block {
+  padding-left: 8px;
+  padding-right: 8px;
+  font-size: 12px;
+  font-weight: normal;
+}
+
+.storage-card {
+  width: 100%;
+  border-radius: 0;
+  background-color: inherit;
+  font-size: 14px !important;
+
+  mat-card-header {
+    color: #1170cf;
+  }
+}
+
+mat-card-header {
+  display: flex;
+  justify-content: space-between;
+  align-items: center;
+  padding: 4px 10px;
+}
+
+mat-card-title {
+  font-size: medium;
+}
Index: /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/components/sub-components/storage-log-location/storage-log-location.spec.ts
===================================================================
--- /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/components/sub-components/storage-log-location/storage-log-location.spec.ts	(nonexistent)
+++ /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/components/sub-components/storage-log-location/storage-log-location.spec.ts	(working copy)
@@ -0,0 +1,23 @@
+import { ComponentFixture, TestBed } from '@angular/core/testing';
+
+import { StorageLogLocation } from './storage-log-location';
+
+describe('StorageLogLocation', () => {
+  let component: StorageLogLocation;
+  let fixture: ComponentFixture<StorageLogLocation>;
+
+  beforeEach(async () => {
+    await TestBed.configureTestingModule({
+      imports: [StorageLogLocation]
+    })
+    .compileComponents();
+
+    fixture = TestBed.createComponent(StorageLogLocation);
+    component = fixture.componentInstance;
+    fixture.detectChanges();
+  });
+
+  it('should create', () => {
+    expect(component).toBeTruthy();
+  });
+});
Index: /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/components/sub-components/storage-log-location/storage-log-location.ts
===================================================================
--- /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/components/sub-components/storage-log-location/storage-log-location.ts	(nonexistent)
+++ /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/components/sub-components/storage-log-location/storage-log-location.ts	(working copy)
@@ -0,0 +1,145 @@
+import {Component, inject, OnInit} from '@angular/core';
+import {SystemService} from '../../../services/system-service';
+import {SharedModule} from '../../../shared/shared-module';
+import {BytesPipe} from '../../../pipes/bytes-pipe';
+import {take} from 'rxjs/operators';
+import {NotificationService} from '../../../services/notification';
+import {FormBuilder, FormGroup} from '@angular/forms';
+import {MatTableDataSource} from '@angular/material/table';
+import {GlobalSerialPipe} from '../../../pipes/global-serial-pipe';
+import {MAT_DIALOG_DATA, MatDialog, MatDialogConfig, MatDialogRef} from '@angular/material/dialog';
+
+
+@Component({
+  selector: 'app-storage-log-location',
+  imports: [SharedModule, BytesPipe, GlobalSerialPipe],
+  templateUrl: './storage-log-location.html',
+  styleUrl: './storage-log-location.scss'
+})
+export class StorageLogLocation implements OnInit {
+
+  configForm: FormGroup;
+
+  storageLocations: any = [
+    {label: 'Primary', value: 'primary'},
+  ];
+  isSecondaryDiskAvailable: boolean = false;
+
+  storageColumns: Array<string> = ['storage', 'total', 'used', 'free'];
+  storageDataSource: MatTableDataSource<any> = new MatTableDataSource()
+  archives: Array<any> = [];
+  archivedLogsColumns: Array<string> = ['serial', 'filename', 'action'];
+  archivedLogsDataSource: MatTableDataSource<any> = new MatTableDataSource();
+
+
+  constructor(
+    private _system: SystemService,
+    private _notification: NotificationService,
+    private _fB: FormBuilder,
+  ) {
+    this.configForm = this._fB.group({
+      storage: ['primary']
+    })
+  }
+
+  ngOnInit() {
+    setTimeout(() => {
+      this.getSecondaryStorage();
+      this.getStorageArchives('primary');
+    })
+  }
+
+  getSecondaryStorage() {
+    this.storageLocations = [{label: 'Primary', value: 'primary'}]
+    this._system.getSecondaryStorage()
+      .pipe(take(1)).subscribe({
+      next: (result: any) => {
+        if (result?.is_disk_available) {
+          console.log(result);
+          this.storageLocations.push({label: 'Secondary', value: 'secondary'});
+          this.getStorageArchives('secondary');
+        }
+      },
+      error: error => {
+        this._notification.showError(`Error: ${error?.message || 'Failed to fetch secondary storage.'}`);
+      }
+    })
+  }
+
+  getStorageArchives(location: string) {
+    this._system.getStorageArchives(location)
+      .pipe(take(1)).subscribe({
+      next: (result: any) => {
+        if (result && result?.file_list) {
+          this.archives.push(...result?.file_list);
+        }
+        this.archivedLogsDataSource.data.push(...this.archives);
+      },
+      error: error => {
+        this._notification.showError(`Error: ${error?.message || 'Failed to fetch secondary storage.'}`);
+      }
+    })
+  }
+
+  dialog = inject(MatDialog);
+  dialogConfig = new MatDialogConfig();
+
+  createArchive() {
+    this.dialogConfig.data = {
+      isSecondaryDiskAvailable: this.isSecondaryDiskAvailable
+    }
+    const dialogRef = this.dialog.open(CreateLogArchiveDialog, this.dialogConfig);
+    dialogRef.afterClosed().subscribe((isAdded: boolean) => {
+      if (isAdded) {
+        this.getStorageArchives('primary');
+      }
+    })
+  }
+
+  updateLogsStorage() {
+  }
+}
+
+@Component({
+  selector: 'app-create-log-archive',
+  templateUrl: './create-log-archive.html',
+  imports: [SharedModule]
+})
+export class CreateLogArchiveDialog {
+  readonly data = inject(MAT_DIALOG_DATA);
+  readonly dialogRef = inject(MatDialogRef<CreateLogArchiveDialog>);
+  configForm: FormGroup;
+
+  storageLocations: any = [
+    {label: 'Primary', value: 'primary'},
+  ]
+
+  constructor(
+    private _fB: FormBuilder,
+    private _system: SystemService,
+    private _notification: NotificationService,
+  ) {
+    this.configForm = this._fB.group({
+      storage: ['primary'],
+    });
+    if (this.data?.isSecondaryDiskAvailable) {
+      this.storageLocations.push({label: 'Secondary', value: 'secondary'});
+    }
+  }
+
+  onSubmit() {
+    this._system.createLogsArchive({location: this.configForm?.value?.storage})
+      .pipe(take(1)).subscribe({
+      next: (result: any) => {
+        console.log(result);
+      },
+      error: error => {
+        this._notification.showError(`Error: ${error?.message || 'Failed to create the logs archive.'}`);
+      }
+    })
+  }
+
+  onCancel() {
+    this.dialogRef.close();
+  }
+}
Index: /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/components/sub-components/storage-primary/storage-primary.html
===================================================================
--- /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/components/sub-components/storage-primary/storage-primary.html	(revision 2714)
+++ /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/components/sub-components/storage-primary/storage-primary.html	(working copy)
@@ -46,7 +46,7 @@
                     }
                   </mat-error>
                 }
-                <mat-hint>Data exceeding the set period will be deleted.</mat-hint>
+                <mat-hint>Historical data is deleted when the disk limit is exceeded.</mat-hint>
               </mat-form-field>
             </div>
           </form>
@@ -58,9 +58,10 @@
               Save Changes
             </button> &nbsp;
             <button
+              type="button"
               mat-raised-button
               color="accent"
-              (click)="updateStorageCleanupConfig()">
+              (click)="initiateStorageCleanup()">
               Cleanup Immediately
             </button>
           </div>
@@ -113,5 +114,4 @@
       </mat-card-content>
     </mat-card>
   </mat-grid-tile>
-
 </mat-grid-list>
Index: /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/components/sub-components/storage-primary/storage-primary.ts
===================================================================
--- /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/components/sub-components/storage-primary/storage-primary.ts	(revision 2714)
+++ /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/components/sub-components/storage-primary/storage-primary.ts	(working copy)
@@ -80,7 +80,6 @@
           size: result?.paths[0]?.size || 0,
           path: result?.paths[0]?.path || 'N/A',
         });
-        console.log(this.storageMetrics);
         this.sManagementDataSource.data = this.storageMetrics;
       },
       error: error => {
@@ -90,6 +89,29 @@
   }
 
   updateStorageCleanupConfig() {
-    console.log(this.configForm.value);
+    this._system.updateStorageCleanupConfig(this.configForm.value)
+      .pipe(take(1)).subscribe({
+      next: (result: any) => {
+        this._notification.showSuccess(`Successfully updated storage cleanup config.`);
+      },
+      error: error => {
+        this._notification.showError(`Error: ${error?.message || 'Failed to update storage cleanup config.'}`);
+      }
+    })
   }
+
+  initiateStorageCleanup() {
+    this._system.initiateStorageCleanup({
+      duration: this.configForm.value?.duration,
+      percent: this.configForm.value?.percent,
+    })
+      .pipe(take(1)).subscribe({
+      next: (result: any) => {
+        this._notification.showSuccess(`Successfully initialized storage cleanup activity.`);
+      },
+      error: error => {
+        this._notification.showError(`Error: ${error?.message || 'Failed to initialize storage cleanup activity.'}`);
+      }
+    })
+  }
 }
Index: /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/constants/api_urls.ts
===================================================================
--- /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/constants/api_urls.ts	(revision 2714)
+++ /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/constants/api_urls.ts	(working copy)
@@ -170,8 +170,12 @@
   GET_SSL_VPN_MONITORING_METRICS_URL: `${PREFIX}/ssl_vpn_stats`,
   GET_SECONDARY_STORAGE_URL: `${PREFIX}/log/storage?type=secondary`,
   GET_STORAGE_CLEANUP_CONFIG_URL: `${PREFIX}/storage/crontab`,
+  UPDATE_STORAGE_CLEANUP_CONFIG_URL: `${PREFIX}/storage/crontab`,
   GET_STORAGE_ALLOCATION_URL: `${PREFIX}/storage/allocation`,
   GET_STORAGE_QUERY_URL: `${PREFIX}/storage/query`,
+  GET_LOGS_ARCHIVES_URL: `${PREFIX}/log/archives`,
+  CREATE_LOGS_ARCHIVE_URL: `${PREFIX}/log/archive`,
+  PERFORM_STORAGE_CLEANUP_URL: `${PREFIX}/storage/clean`,
   // AVX
   GET_AVX_DEVICES_URL: `${PREFIX}/api/cm/virtualization/Host/_get_list_data`,
   ADD_AVX_DEVICE_URL: `${PREFIX}/api/cm/virtualization/Host/_add`,
Index: /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/constants/menu.ts
===================================================================
--- /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/constants/menu.ts	(revision 2709)
+++ /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/constants/menu.ts	(working copy)
@@ -3,14 +3,14 @@
 export const MENU_ITEMS: MenuItem[] = [
   {
     label: 'Dashboard',
-    icon: '',
+    icon: 'house-signal',
     routerLink: '/dashboard',
     roles: ['super_admin', 'device_admin', 'common_admin'],
     permissions: ['Dashboard'],
   },
   {
     label: 'Inventory',
-    icon: '',
+    icon: 'network-wired',
     expanded: false,
     children: [
       {
@@ -31,7 +31,7 @@
   },
   {
     label: 'System',
-    icon: '',
+    icon: 'gear',
     expanded: false,
     children: [
       {
@@ -80,7 +80,7 @@
   },
   {
     label: 'Device Services',
-    icon: '',
+    icon: 'laptop-code',
     expanded: false,
     children: [
       {
@@ -116,7 +116,7 @@
   },
   {
     label: 'APV Volume License',
-    icon: '',
+    icon: 'people-line',
     expanded: false,
     children: [
       {
@@ -137,21 +137,21 @@
   },
   {
     label: 'Upgrade Centre',
-    icon: '',
+    icon: 'cloud-arrow-up',
     routerLink: '/upgrade-centre',
     roles: ['super_admin'],
     permissions: ['UpgradeCentre']
   },
   {
     label: 'Configuration Hub',
-    icon: '',
+    icon: 'microchip',
     routerLink: '/configuration-hub',
     roles: ['super_admin', 'device_admin'],
     permissions: ['ConfigurationHub']
   },
   {
     label: 'AVX Management',
-    icon: '',
+    icon: 'hard-drive',
     expanded: false,
     children: [
       {
@@ -172,7 +172,7 @@
   },
   {
     label: 'Monitoring',
-    icon: '',
+    icon: 'eye',
     expanded: false,
     children: [
       {
@@ -193,7 +193,7 @@
   },
   {
     label: 'Alerting',
-    icon: '',
+    icon: 'bell',
     expanded: false,
     children: [
       {
@@ -221,14 +221,14 @@
   },
   {
     label: 'Reports',
-    icon: '',
+    icon: 'file-lines',
     routerLink: '/reports',
     roles: ['super_admin', 'device_admin', 'common_admin'],
     permissions: ['Reports']
   },
   {
     label: 'Log Analysis',
-    icon: '',
+    icon: 'magnifying-glass-chart',
     routerLink: '/log-analysis',
     expanded: false,
     roles: ['super_admin', 'device_admin', 'common_admin'],
@@ -236,7 +236,7 @@
   },
   {
     label: 'Observability',
-    icon: '',
+    icon: 'signal',
     routerLink: '/observability',
     roles: ['super_admin', 'device_admin', 'common_admin'],
     permissions: ['Observability']
Index: /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/services/system-service.ts
===================================================================
--- /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/services/system-service.ts	(revision 2714)
+++ /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/services/system-service.ts	(working copy)
@@ -513,9 +513,37 @@
 
   getStorageQuery(payload: any) {
     return this.http.post(URLS.GET_STORAGE_QUERY_URL, payload, {
+      csrf: true,
+      isFormData: false,
+      csrfInFormData: true
+    });
+  }
+
+  getStorageArchives(storage: string = 'primary') {
+    return this.http.get(`${URLS.GET_LOGS_ARCHIVES_URL}?location=${storage}`);
+  }
+
+  createLogsArchive(payload: any) {
+    return this.http.post(URLS.CREATE_LOGS_ARCHIVE_URL, payload, {
+      csrf: true,
+      isFormData: false,
+      csrfInFormData: true
+    });
+  }
+
+  updateStorageCleanupConfig(payload: any) {
+    return this.http.post(URLS.UPDATE_STORAGE_CLEANUP_CONFIG_URL, payload, {
       csrf: true,
       isFormData: false,
       csrfInFormData: true
     });
   }
+
+  initiateStorageCleanup(payload: any) {
+    return this.http.post(URLS.PERFORM_STORAGE_CLEANUP_URL, payload, {
+      csrf: true,
+      isFormData: false,
+      csrfInFormData: true
+    });
+  }
 }
Index: /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/shared/shared-module.ts
===================================================================
--- /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/shared/shared-module.ts	(revision 2709)
+++ /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/shared/shared-module.ts	(working copy)
@@ -2,68 +2,13 @@
 import {CommonModule} from '@angular/common';
 import {FormsModule, ReactiveFormsModule} from '@angular/forms';
 import {RouterModule} from '@angular/router';
+
+// FontAwesome Imports
 import {FaIconLibrary, FontAwesomeModule} from '@fortawesome/angular-fontawesome';
-import {
-  faBars,
-  faQuestionCircle,
-  faCog,
-  faUserCircle,
-  faSignOutAlt,
-  faPencilRuler,
-  faFileAlt,
-  faCogs,
-  faShieldAlt,
-  faSitemap,
-  faTools,
-  faCubes,
-  faClipboardList,
-  faCompass,
-  faChevronRight,
-  faAngleDoubleLeft,
-  faAngleDoubleRight,
-  faTv,
-  faTerminal,
-  faIdBadge,
-  faServer,
-  faTimeline,
-  faCodeCompare,
-  faListCheck,
-  faGears,
-  faEthernet,
-  faEye,
-  faUpRightAndDownLeftFromCenter,
-  faExpand,
-  faFileExport,
-  faClockRotateLeft,
-  faRepeat,
-  faCircleInfo,
-  faArrowUpLong,
-  faArrowDownLong,
-} from '@fortawesome/free-solid-svg-icons';
-import {
-  faBell,
-  faRectangleList,
-  faFloppyDisk,
-  faCircleDown,
-  faWindowMaximize,
-  faChartBar,
-  faCircleXmark,
-  faTrashCan,
-  faCheckCircle,
-  faCircleLeft,
-  faSave,
-  faCalendar,
-  faEdit,
-  faXmarkCircle,
-  faBuilding,
-  faPlayCircle,
-  faCircleStop,
-  faCopy,
-  faClone,
-  faClock,
-  faWindowRestore,
-  faCircleUp,
-} from '@fortawesome/free-regular-svg-icons';
+import * as solidIcons from '@fortawesome/free-solid-svg-icons';
+import * as regularIcons from '@fortawesome/free-regular-svg-icons';
+
+// Angular Material Imports
 import {MatGridListModule} from '@angular/material/grid-list';
 import {MatFormFieldModule} from '@angular/material/form-field';
 import {MatCardModule} from '@angular/material/card';
@@ -81,10 +26,14 @@
 import {MatSlideToggleModule} from '@angular/material/slide-toggle';
 import {MatTabsModule} from '@angular/material/tabs';
 import {MatDatepickerModule} from '@angular/material/datepicker';
-import {MatTimepickerModule} from '@angular/material/timepicker';
 import {MatPaginatorModule} from '@angular/material/paginator';
-import {NgxEchartsModule} from 'ngx-echarts';
 import {MatProgressBarModule} from '@angular/material/progress-bar';
+import {MatTimepickerModule} from '@angular/material/timepicker';
+
+
+// Third-Party Modules
+import {NgxEchartsModule} from 'ngx-echarts';
+
 import {
   NgxMatDatepickerActions,
   NgxMatDatepickerApply,
@@ -94,143 +43,95 @@
   NgxMatDatetimepicker,
 } from '@ngxmc/datetime-picker';
 
+const allSolidIcons = Object.values(solidIcons).filter((icon: any) => icon.iconName);
+const allRegularIcons = Object.values(regularIcons).filter((icon: any) => icon.iconName);
+
+const customSolidIcons = [
+  solidIcons.faBars, solidIcons.faQuestionCircle, solidIcons.faCog, solidIcons.faUserCircle,
+  solidIcons.faSignOutAlt, solidIcons.faPencilRuler, solidIcons.faFileAlt, solidIcons.faCogs,
+  solidIcons.faShieldAlt, solidIcons.faSitemap, solidIcons.faTools, solidIcons.faCubes,
+  solidIcons.faClipboardList, solidIcons.faCompass, solidIcons.faChevronRight,
+  solidIcons.faAngleDoubleLeft, solidIcons.faAngleDoubleRight, solidIcons.faTv,
+  solidIcons.faTerminal, solidIcons.faIdBadge, solidIcons.faServer, solidIcons.faTimeline,
+  solidIcons.faCodeCompare, solidIcons.faListCheck, solidIcons.faGears, solidIcons.faEthernet,
+  solidIcons.faEye, solidIcons.faUpRightAndDownLeftFromCenter, solidIcons.faExpand,
+  solidIcons.faFileExport, solidIcons.faClockRotateLeft, solidIcons.faRepeat,
+  solidIcons.faCircleInfo, solidIcons.faArrowUpLong, solidIcons.faArrowDownLong,
+  solidIcons.faHouseSignal, solidIcons.faMagnifyingGlassChart, solidIcons.faFileLines,
+  solidIcons.faDesktop, solidIcons.faNetworkWired, solidIcons.faCloudArrowUp,
+  solidIcons.faPeopleLine, solidIcons.faMicrochip, solidIcons.faSignal, solidIcons.faBell,
+  solidIcons.faLaptopCode, solidIcons.faHardDrive, solidIcons.faSpinner
+];
+
+const customRegularIcons = [
+  regularIcons.faBell, regularIcons.faRectangleList, regularIcons.faFloppyDisk,
+  regularIcons.faCircleDown, regularIcons.faWindowMaximize, regularIcons.faChartBar,
+  regularIcons.faCircleXmark, regularIcons.faTrashCan, regularIcons.faCheckCircle,
+  regularIcons.faCircleLeft, regularIcons.faSave, regularIcons.faCalendar, regularIcons.faEdit,
+  regularIcons.faXmarkCircle, regularIcons.faBuilding, regularIcons.faPlayCircle,
+  regularIcons.faCircleStop, regularIcons.faCopy, regularIcons.faClone, regularIcons.faClock,
+  regularIcons.faWindowRestore, regularIcons.faCircleUp,
+];
+
+const allCustomIcons = [...customSolidIcons, ...customRegularIcons];
+
+const angularModules = [
+  CommonModule,
+  FormsModule,
+  ReactiveFormsModule,
+  RouterModule,
+];
+
+const materialModules = [
+  MatGridListModule,
+  MatFormFieldModule,
+  MatCardModule,
+  MatButtonModule,
+  MatInputModule,
+  MatNavList,
+  MatListModule,
+  MatExpansionModule,
+  MatIconModule,
+  MatSnackBarModule,
+  MatTableModule,
+  MatTooltipModule,
+  MatDialogModule,
+  MatSelectModule,
+  MatRadioModule,
+  MatSlideToggleModule,
+  MatTabsModule,
+  MatDatepickerModule,
+  MatTimepickerModule,
+  MatPaginatorModule,
+  MatProgressBarModule,
+];
+
+const thirdPartyModules = [
+  FontAwesomeModule,
+  NgxEchartsModule,
+  NgxMatDatepickerActions,
+  NgxMatDatepickerApply,
+  NgxMatDatepickerCancel,
+  NgxMatDatepickerClear,
+  NgxMatDatepickerInput,
+  NgxMatDatetimepicker,
+];
+
 @NgModule({
   declarations: [],
   imports: [
-    CommonModule,
-    FormsModule,
-    ReactiveFormsModule,
-    RouterModule,
-    FontAwesomeModule,
-    MatGridListModule,
-    MatFormFieldModule,
-    MatCardModule,
-    MatButtonModule,
-    MatInputModule,
-    MatNavList,
-    MatIconModule,
-    MatExpansionModule,
-    MatListModule,
-    MatSnackBarModule,
-    MatTableModule,
-    MatTooltipModule,
-    MatDialogModule,
-    MatSelectModule,
-    MatRadioModule,
-    MatSlideToggleModule,
-    MatTabsModule,
-    MatDatepickerModule,
-    MatTimepickerModule,
-    MatPaginatorModule,
-    NgxEchartsModule,
-    MatExpansionModule,
-    MatProgressBarModule,
-    NgxMatDatepickerActions,
-    NgxMatDatepickerActions,
-    NgxMatDatepickerApply,
-    NgxMatDatepickerCancel,
-    NgxMatDatepickerClear,
-    NgxMatDatepickerInput,
-    NgxMatDatetimepicker,
+    ...angularModules,
+    ...materialModules,
+    ...thirdPartyModules,
   ],
   exports: [
-    CommonModule,
-    FormsModule,
-    ReactiveFormsModule,
-    RouterModule,
-    FontAwesomeModule,
-    MatGridListModule,
-    MatFormFieldModule,
-    MatCardModule,
-    MatButtonModule,
-    MatInputModule,
-    MatNavList,
-    MatIconModule,
-    MatExpansionModule,
-    MatListModule,
-    MatTableModule,
-    MatTooltipModule,
-    MatDialogModule,
-    MatSelectModule,
-    MatRadioModule,
-    MatSlideToggleModule,
-    MatTabsModule,
-    MatDatepickerModule,
-    MatTimepickerModule,
-    MatPaginatorModule,
-    NgxEchartsModule,
-    MatExpansionModule,
-    MatProgressBarModule,
-    NgxMatDatepickerActions,
-    NgxMatDatepickerActions,
-    NgxMatDatepickerApply,
-    NgxMatDatepickerCancel,
-    NgxMatDatepickerClear,
-    NgxMatDatepickerInput,
-    NgxMatDatetimepicker,
+    ...angularModules,
+    ...materialModules,
+    ...thirdPartyModules,
   ]
 })
 export class SharedModule {
   constructor(library: FaIconLibrary) {
-    library.addIcons(
-      faBars,
-      faQuestionCircle,
-      faBell,
-      faCog,
-      faUserCircle,
-      faSignOutAlt,
-      faPencilRuler,
-      faFileAlt,
-      faCogs,
-      faShieldAlt,
-      faSitemap,
-      faTools,
-      faCubes,
-      faClipboardList,
-      faChartBar,
-      faCompass,
-      faChevronRight,
-      faAngleDoubleLeft,
-      faAngleDoubleRight,
-      faRectangleList,
-      faFloppyDisk,
-      faCircleDown,
-      faWindowMaximize,
-      faChartBar,
-      faCircleXmark,
-      faTrashCan,
-      faCheckCircle,
-      faCircleLeft,
-      faSave,
-      faTv,
-      faTerminal,
-      faIdBadge,
-      faCalendar,
-      faEdit,
-      faXmarkCircle,
-      faServer,
-      faBuilding,
-      faPlayCircle,
-      faCircleStop,
-      faCopy,
-      faTimeline,
-      faCodeCompare,
-      faClone,
-      faListCheck,
-      faClock,
-      faWindowRestore,
-      faGears,
-      faCircleUp,
-      faEthernet,
-      faEye,
-      faUpRightAndDownLeftFromCenter,
-      faExpand,
-      faFileExport,
-      faClockRotateLeft,
-      faRepeat,
-      faCircleInfo,
-      faArrowUpLong,
-      faArrowDownLong,
-    );
+    library.addIcons(...allCustomIcons);
   }
 }
