From a94479589ba7bb587c0295047e830dbfef7b65cc Mon Sep 17 00:00:00 2001
From: Brandon Clayton <bclayton@usgs.gov>
Date: Wed, 27 Nov 2024 15:41:59 -0700
Subject: [PATCH 1/4] add aws dashboard

---
 .../src/app/internal/aws/aws.routes.ts        |  5 ++
 .../aws/check-haz-jobs/app.component.ts       |  8 ++--
 .../check-haz-jobs/services/app.service.ts    |  4 +-
 .../internal/aws/dashboard/app.component.html | 21 +++++++++
 .../internal/aws/dashboard/app.component.scss |  0
 .../aws/dashboard/app.component.spec.ts       | 30 ++++++++++++
 .../internal/aws/dashboard/app.component.ts   | 47 +++++++++++++++++++
 .../aws/haz-job-history/app.component.ts      |  8 ++--
 .../haz-job-history/services/app.service.ts   |  4 +-
 .../aws/submit-haz-jobs/app.component.ts      |  8 ++--
 .../components/history/history.component.ts   |  4 +-
 .../job-submitted/job-submitted.component.ts  |  4 +-
 .../aws/terminate-haz-jobs/app.component.ts   |  8 ++--
 .../services/app.service.ts                   |  4 +-
 14 files changed, 129 insertions(+), 26 deletions(-)
 create mode 100644 projects/nshmp-apps/src/app/internal/aws/dashboard/app.component.html
 create mode 100644 projects/nshmp-apps/src/app/internal/aws/dashboard/app.component.scss
 create mode 100644 projects/nshmp-apps/src/app/internal/aws/dashboard/app.component.spec.ts
 create mode 100644 projects/nshmp-apps/src/app/internal/aws/dashboard/app.component.ts

diff --git a/projects/nshmp-apps/src/app/internal/aws/aws.routes.ts b/projects/nshmp-apps/src/app/internal/aws/aws.routes.ts
index 66c5a618c..966d2a81f 100644
--- a/projects/nshmp-apps/src/app/internal/aws/aws.routes.ts
+++ b/projects/nshmp-apps/src/app/internal/aws/aws.routes.ts
@@ -1,6 +1,11 @@
 import {Routes} from '@angular/router';
 
 const routes: Routes = [
+  {
+    loadComponent: () =>
+      import('./dashboard/app.component').then(com => com.AppComponent),
+    path: '',
+  },
   {
     loadComponent: () =>
       import('./check-haz-jobs/app.component').then(com => com.AppComponent),
diff --git a/projects/nshmp-apps/src/app/internal/aws/check-haz-jobs/app.component.ts b/projects/nshmp-apps/src/app/internal/aws/check-haz-jobs/app.component.ts
index 12aa73e9c..d6f700a2a 100644
--- a/projects/nshmp-apps/src/app/internal/aws/check-haz-jobs/app.component.ts
+++ b/projects/nshmp-apps/src/app/internal/aws/check-haz-jobs/app.component.ts
@@ -6,8 +6,8 @@ import {
   NshmpTemplateControlPanelComponent,
   NshmpTemplatePlotContentComponent,
 } from '@ghsc/nshmp-template';
-import {devApps} from 'projects/nshmp-apps/src/shared/utils/applications.utils';
-import {devNavigation} from 'projects/nshmp-apps/src/shared/utils/navigation.utils';
+import {internalApps} from 'projects/nshmp-apps/src/shared/utils/applications.utils';
+import {internalNavigation} from 'projects/nshmp-apps/src/shared/utils/navigation.utils';
 
 import {AboutComponent} from './components/about/about.component';
 import {ContentComponent} from './components/content/content.component';
@@ -40,9 +40,9 @@ import {AppService} from './services/app.service';
 })
 export class AppComponent implements OnInit {
   /** Navigation list for menu */
-  navigationList = devNavigation();
+  navigationList = internalNavigation();
   /** Application title */
-  title = devApps().aws.checkHazJobs.display;
+  title = internalApps().aws.checkHazJobs.display;
 
   constructor(private service: AppService) {}
 
diff --git a/projects/nshmp-apps/src/app/internal/aws/check-haz-jobs/services/app.service.ts b/projects/nshmp-apps/src/app/internal/aws/check-haz-jobs/services/app.service.ts
index 27a493a70..b7777715c 100644
--- a/projects/nshmp-apps/src/app/internal/aws/check-haz-jobs/services/app.service.ts
+++ b/projects/nshmp-apps/src/app/internal/aws/check-haz-jobs/services/app.service.ts
@@ -13,7 +13,7 @@ import {Response} from '@ghsc/nshmp-utils-ts/libs/nshmp-ws-utils';
 import {EC2} from 'aws-sdk';
 import {environment} from 'projects/nshmp-apps/src/environments/environment';
 import {AppServiceModel} from 'projects/nshmp-apps/src/shared/models/app-service.model';
-import {devApps} from 'projects/nshmp-apps/src/shared/utils/applications.utils';
+import {internalApps} from 'projects/nshmp-apps/src/shared/utils/applications.utils';
 import {catchError} from 'rxjs';
 
 import {ControlForm} from '../models/control-form.model';
@@ -242,7 +242,7 @@ export class AppService implements AppServiceModel<AppState, ControlForm> {
     };
 
     this.router
-      .navigate([devApps().aws.checkHazJobs.routerLink], {
+      .navigate([internalApps().aws.checkHazJobs.routerLink], {
         queryParams: {
           ...query,
         },
diff --git a/projects/nshmp-apps/src/app/internal/aws/dashboard/app.component.html b/projects/nshmp-apps/src/app/internal/aws/dashboard/app.component.html
new file mode 100644
index 000000000..d8f47ed31
--- /dev/null
+++ b/projects/nshmp-apps/src/app/internal/aws/dashboard/app.component.html
@@ -0,0 +1,21 @@
+<nshmp-lib-ng-template #template [navigationList]="navigationList" [title]="">
+  <!-- Dashboard -->
+  <nshmp-lib-ng-dashboard [sections]="sections">
+    <nshmp-lib-ng-dashboard-title>
+      USGS Internal
+      <br />
+      Earthquake Hazard Toolbox:
+      <br />
+      AWS Applications
+    </nshmp-lib-ng-dashboard-title>
+    <nshmp-lib-ng-dashboard-description />
+  </nshmp-lib-ng-dashboard>
+
+  <!-- About page -->
+  <nshmp-lib-ng-about-page>
+    <nshmp-lib-ng-about-content
+      [showSavingSettingPanel]="false"
+      [showUsingApplicationPanel]="false"
+    />
+  </nshmp-lib-ng-about-page>
+</nshmp-lib-ng-template>
diff --git a/projects/nshmp-apps/src/app/internal/aws/dashboard/app.component.scss b/projects/nshmp-apps/src/app/internal/aws/dashboard/app.component.scss
new file mode 100644
index 000000000..e69de29bb
diff --git a/projects/nshmp-apps/src/app/internal/aws/dashboard/app.component.spec.ts b/projects/nshmp-apps/src/app/internal/aws/dashboard/app.component.spec.ts
new file mode 100644
index 000000000..10ce8a002
--- /dev/null
+++ b/projects/nshmp-apps/src/app/internal/aws/dashboard/app.component.spec.ts
@@ -0,0 +1,30 @@
+import {provideHttpClient} from '@angular/common/http';
+import {ComponentFixture, TestBed} from '@angular/core/testing';
+import {provideNoopAnimations} from '@angular/platform-browser/animations';
+import {provideRouter} from '@angular/router';
+
+import {AppComponent} from './app.component';
+
+describe('AppComponent', () => {
+  let component: AppComponent;
+  let fixture: ComponentFixture<AppComponent>;
+
+  beforeEach(async () => {
+    await TestBed.configureTestingModule({
+      imports: [AppComponent],
+      providers: [
+        provideHttpClient(),
+        provideNoopAnimations(),
+        provideRouter([]),
+      ],
+    }).compileComponents();
+
+    fixture = TestBed.createComponent(AppComponent);
+    component = fixture.componentInstance;
+    fixture.detectChanges();
+  });
+
+  it('should create', () => {
+    expect(component).toBeTruthy();
+  });
+});
diff --git a/projects/nshmp-apps/src/app/internal/aws/dashboard/app.component.ts b/projects/nshmp-apps/src/app/internal/aws/dashboard/app.component.ts
new file mode 100644
index 000000000..f0f2cf4a2
--- /dev/null
+++ b/projects/nshmp-apps/src/app/internal/aws/dashboard/app.component.ts
@@ -0,0 +1,47 @@
+import {Component} from '@angular/core';
+import {
+  NshmpLibNgAboutContentComponent,
+  NshmpLibNgAboutPageComponent,
+} from '@ghsc/nshmp-lib-ng/about';
+import {
+  ApplicationSections,
+  NshmpLibNgDashboardComponent,
+  NshmpLibNgDashboardDescriptionComponent,
+  NshmpLibNgDashboardTitleComponent,
+  NshmpLibNgTemplateComponent,
+} from '@ghsc/nshmp-lib-ng/nshmp';
+import {
+  internalAwsApps,
+  internalNavigation,
+} from 'projects/nshmp-apps/src/shared/utils/navigation.utils';
+
+@Component({
+  imports: [
+    NshmpLibNgTemplateComponent,
+    NshmpLibNgAboutPageComponent,
+    NshmpLibNgDashboardComponent,
+    NshmpLibNgDashboardTitleComponent,
+    NshmpLibNgDashboardDescriptionComponent,
+    NshmpLibNgAboutContentComponent,
+  ],
+  selector: 'app-app',
+  standalone: true,
+  styleUrl: './app.component.scss',
+  templateUrl: './app.component.html',
+})
+export class AppComponent {
+  /** Navigation list for menu */
+  navigationList = internalNavigation();
+
+  sections: ApplicationSections[] = [
+    {
+      gridClass: 'grid-col-10',
+      sections: [
+        {
+          applications: internalAwsApps().map(navigation => ({navigation})),
+          gridClass: 'grid-col-12 tablet-lg:grid-col-8 grid-offset-1',
+        },
+      ],
+    },
+  ];
+}
diff --git a/projects/nshmp-apps/src/app/internal/aws/haz-job-history/app.component.ts b/projects/nshmp-apps/src/app/internal/aws/haz-job-history/app.component.ts
index d490449fd..ff4fecffe 100644
--- a/projects/nshmp-apps/src/app/internal/aws/haz-job-history/app.component.ts
+++ b/projects/nshmp-apps/src/app/internal/aws/haz-job-history/app.component.ts
@@ -6,8 +6,8 @@ import {
   NshmpTemplateControlPanelComponent,
   NshmpTemplatePlotContentComponent,
 } from '@ghsc/nshmp-template';
-import {devApps} from 'projects/nshmp-apps/src/shared/utils/applications.utils';
-import {devNavigation} from 'projects/nshmp-apps/src/shared/utils/navigation.utils';
+import {internalApps} from 'projects/nshmp-apps/src/shared/utils/applications.utils';
+import {internalNavigation} from 'projects/nshmp-apps/src/shared/utils/navigation.utils';
 
 import {AboutComponent} from './components/about/about.component';
 import {ContentComponent} from './components/content/content.component';
@@ -38,9 +38,9 @@ import {AppService} from './services/app.service';
 })
 export class AppComponent implements OnInit {
   /** Navigation list for menu */
-  navigationList = devNavigation();
+  navigationList = internalNavigation();
   /** Application title */
-  title = devApps().aws.hazJobHistory.display;
+  title = internalApps().aws.hazJobHistory.display;
 
   constructor(private service: AppService) {}
 
diff --git a/projects/nshmp-apps/src/app/internal/aws/haz-job-history/services/app.service.ts b/projects/nshmp-apps/src/app/internal/aws/haz-job-history/services/app.service.ts
index cff795551..797140795 100644
--- a/projects/nshmp-apps/src/app/internal/aws/haz-job-history/services/app.service.ts
+++ b/projects/nshmp-apps/src/app/internal/aws/haz-job-history/services/app.service.ts
@@ -6,7 +6,7 @@ import {NshmpService, nshmpUtils} from '@ghsc/nshmp-lib-ng/nshmp';
 import {DynamoDBItem} from '@ghsc/nshmp-utils-ts/libs/aws/run-nshmp-haz';
 import {environment} from 'projects/nshmp-apps/src/environments/environment';
 import {AppServiceModel} from 'projects/nshmp-apps/src/shared/models/app-service.model';
-import {devApps} from 'projects/nshmp-apps/src/shared/utils/applications.utils';
+import {internalApps} from 'projects/nshmp-apps/src/shared/utils/applications.utils';
 
 import {ControlForm} from '../models/control-form.model';
 import {AppState} from '../models/state.model';
@@ -170,7 +170,7 @@ export class AppService implements AppServiceModel<AppState, ControlForm> {
     };
 
     this.router
-      .navigate([devApps().aws.hazJobHistory.routerLink], {
+      .navigate([internalApps().aws.hazJobHistory.routerLink], {
         queryParams: {
           ...query,
         },
diff --git a/projects/nshmp-apps/src/app/internal/aws/submit-haz-jobs/app.component.ts b/projects/nshmp-apps/src/app/internal/aws/submit-haz-jobs/app.component.ts
index 4ec472351..d9967b88e 100644
--- a/projects/nshmp-apps/src/app/internal/aws/submit-haz-jobs/app.component.ts
+++ b/projects/nshmp-apps/src/app/internal/aws/submit-haz-jobs/app.component.ts
@@ -1,8 +1,8 @@
 import {Component, OnInit} from '@angular/core';
 import {NshmpLibNgAboutPageComponent} from '@ghsc/nshmp-lib-ng/about';
 import {NshmpLibNgTemplateComponent} from '@ghsc/nshmp-lib-ng/nshmp';
-import {devApps} from 'projects/nshmp-apps/src/shared/utils/applications.utils';
-import {devNavigation} from 'projects/nshmp-apps/src/shared/utils/navigation.utils';
+import {internalApps} from 'projects/nshmp-apps/src/shared/utils/applications.utils';
+import {internalNavigation} from 'projects/nshmp-apps/src/shared/utils/navigation.utils';
 
 import {AboutComponent} from './components/about/about.component';
 import {ContentComponent} from './components/content/content.component';
@@ -29,9 +29,9 @@ import {AppService} from './services/app.service';
 })
 export class AppComponent implements OnInit {
   /** Navigation list for menu */
-  navigationList = devNavigation();
+  navigationList = internalNavigation();
   /** Application title */
-  title = devApps().aws.submitHazJobs.display;
+  title = internalApps().aws.submitHazJobs.display;
 
   constructor(private service: AppService) {}
 
diff --git a/projects/nshmp-apps/src/app/internal/aws/submit-haz-jobs/components/history/history.component.ts b/projects/nshmp-apps/src/app/internal/aws/submit-haz-jobs/components/history/history.component.ts
index 2438bb00d..aba858c61 100644
--- a/projects/nshmp-apps/src/app/internal/aws/submit-haz-jobs/components/history/history.component.ts
+++ b/projects/nshmp-apps/src/app/internal/aws/submit-haz-jobs/components/history/history.component.ts
@@ -24,7 +24,7 @@ import {
   RunNshmpHazResponseData,
 } from '@ghsc/nshmp-utils-ts/libs/aws/run-nshmp-haz';
 import {Response} from '@ghsc/nshmp-utils-ts/libs/nshmp-ws-utils';
-import {devApps} from 'projects/nshmp-apps/src/shared/utils/applications.utils';
+import {internalApps} from 'projects/nshmp-apps/src/shared/utils/applications.utils';
 
 import {AppService} from '../../services/app.service';
 
@@ -53,7 +53,7 @@ import {AppService} from '../../services/app.service';
   templateUrl: './history.component.html',
 })
 export class HistoryComponent {
-  awsLinks = devApps().aws;
+  awsLinks = internalApps().aws;
 
   history = this.service.history;
 
diff --git a/projects/nshmp-apps/src/app/internal/aws/submit-haz-jobs/components/job-submitted/job-submitted.component.ts b/projects/nshmp-apps/src/app/internal/aws/submit-haz-jobs/components/job-submitted/job-submitted.component.ts
index c0989f62c..ddc0532a7 100644
--- a/projects/nshmp-apps/src/app/internal/aws/submit-haz-jobs/components/job-submitted/job-submitted.component.ts
+++ b/projects/nshmp-apps/src/app/internal/aws/submit-haz-jobs/components/job-submitted/job-submitted.component.ts
@@ -13,7 +13,7 @@ import {MatExpansionModule} from '@angular/material/expansion';
 import {Router} from '@angular/router';
 import {YamlPipe} from '@ghsc/nshmp-lib-ng/aws';
 import {RunNshmpHazResponseData} from '@ghsc/nshmp-utils-ts/libs/aws/run-nshmp-haz';
-import {devApps} from 'projects/nshmp-apps/src/shared/utils/applications.utils';
+import {internalApps} from 'projects/nshmp-apps/src/shared/utils/applications.utils';
 
 import {AppService} from '../../services/app.service';
 
@@ -52,7 +52,7 @@ export class JobSubmittedComponent {
       this.router.createUrlTree(
         [
           this.location.prepareExternalUrl(
-            devApps().aws.checkHazJobs.routerLink
+            internalApps().aws.checkHazJobs.routerLink
           ),
         ],
         {
diff --git a/projects/nshmp-apps/src/app/internal/aws/terminate-haz-jobs/app.component.ts b/projects/nshmp-apps/src/app/internal/aws/terminate-haz-jobs/app.component.ts
index a3180091c..5e3984aba 100644
--- a/projects/nshmp-apps/src/app/internal/aws/terminate-haz-jobs/app.component.ts
+++ b/projects/nshmp-apps/src/app/internal/aws/terminate-haz-jobs/app.component.ts
@@ -1,8 +1,8 @@
 import {Component, OnInit} from '@angular/core';
 import {NshmpLibNgAboutPageComponent} from '@ghsc/nshmp-lib-ng/about';
 import {NshmpLibNgTemplateComponent} from '@ghsc/nshmp-lib-ng/nshmp';
-import {devApps} from 'projects/nshmp-apps/src/shared/utils/applications.utils';
-import {devNavigation} from 'projects/nshmp-apps/src/shared/utils/navigation.utils';
+import {internalApps} from 'projects/nshmp-apps/src/shared/utils/applications.utils';
+import {internalNavigation} from 'projects/nshmp-apps/src/shared/utils/navigation.utils';
 
 import {AboutComponent} from './components/about/about.component';
 import {ContentComponent} from './components/content/content.component';
@@ -29,9 +29,9 @@ import {AppService} from './services/app.service';
 })
 export class AppComponent implements OnInit {
   /** Navigation list for menu */
-  navigationList = devNavigation();
+  navigationList = internalNavigation();
   /** Application title */
-  title = devApps().aws.terminateHazJobs.display;
+  title = internalApps().aws.terminateHazJobs.display;
 
   constructor(private service: AppService) {}
 
diff --git a/projects/nshmp-apps/src/app/internal/aws/terminate-haz-jobs/services/app.service.ts b/projects/nshmp-apps/src/app/internal/aws/terminate-haz-jobs/services/app.service.ts
index 0516aa9fb..8b5b4b56a 100644
--- a/projects/nshmp-apps/src/app/internal/aws/terminate-haz-jobs/services/app.service.ts
+++ b/projects/nshmp-apps/src/app/internal/aws/terminate-haz-jobs/services/app.service.ts
@@ -13,7 +13,7 @@ import {Response} from '@ghsc/nshmp-utils-ts/libs/nshmp-ws-utils';
 import {EC2} from 'aws-sdk';
 import {environment} from 'projects/nshmp-apps/src/environments/environment';
 import {AppServiceModel} from 'projects/nshmp-apps/src/shared/models/app-service.model';
-import {devApps} from 'projects/nshmp-apps/src/shared/utils/applications.utils';
+import {internalApps} from 'projects/nshmp-apps/src/shared/utils/applications.utils';
 
 import {AppState} from '../models/state.model';
 
@@ -155,7 +155,7 @@ export class AppService implements AppServiceModel<AppState, IdForm> {
     };
 
     this.router
-      .navigate([devApps().aws.terminateHazJobs.routerLink], {
+      .navigate([internalApps().aws.terminateHazJobs.routerLink], {
         queryParams: {
           ...query,
         },
-- 
GitLab


From af18c3c54e26fc124123d8aee839bc3602d3651d Mon Sep 17 00:00:00 2001
From: Brandon Clayton <bclayton@usgs.gov>
Date: Wed, 27 Nov 2024 15:42:27 -0700
Subject: [PATCH 2/4] add dashboard

---
 .../app/dev/gmm/dashboard/app.component.html  | 21 +++++++++
 .../app/dev/gmm/dashboard/app.component.scss  |  0
 .../dev/gmm/dashboard/app.component.spec.ts   | 30 ++++++++++++
 .../app/dev/gmm/dashboard/app.component.ts    | 47 +++++++++++++++++++
 .../nshmp-apps/src/app/dev/gmm/gmm.routes.ts  |  5 ++
 .../dev/hazard/dashboard/app.component.html   | 21 +++++++++
 .../dev/hazard/dashboard/app.component.scss   |  0
 .../hazard/dashboard/app.component.spec.ts    | 30 ++++++++++++
 .../app/dev/hazard/dashboard/app.component.ts | 47 +++++++++++++++++++
 .../src/app/dev/hazard/hazard.routes.ts       |  5 ++
 .../app/dev/math/dashboard/app.component.html | 21 +++++++++
 .../app/dev/math/dashboard/app.component.scss |  0
 .../dev/math/dashboard/app.component.spec.ts  | 30 ++++++++++++
 .../app/dev/math/dashboard/app.component.ts   | 47 +++++++++++++++++++
 .../math/exceedance-explorer/app.component.ts |  2 +-
 .../src/app/dev/math/math.routes.ts           |  5 ++
 16 files changed, 310 insertions(+), 1 deletion(-)
 create mode 100644 projects/nshmp-apps/src/app/dev/gmm/dashboard/app.component.html
 create mode 100644 projects/nshmp-apps/src/app/dev/gmm/dashboard/app.component.scss
 create mode 100644 projects/nshmp-apps/src/app/dev/gmm/dashboard/app.component.spec.ts
 create mode 100644 projects/nshmp-apps/src/app/dev/gmm/dashboard/app.component.ts
 create mode 100644 projects/nshmp-apps/src/app/dev/hazard/dashboard/app.component.html
 create mode 100644 projects/nshmp-apps/src/app/dev/hazard/dashboard/app.component.scss
 create mode 100644 projects/nshmp-apps/src/app/dev/hazard/dashboard/app.component.spec.ts
 create mode 100644 projects/nshmp-apps/src/app/dev/hazard/dashboard/app.component.ts
 create mode 100644 projects/nshmp-apps/src/app/dev/math/dashboard/app.component.html
 create mode 100644 projects/nshmp-apps/src/app/dev/math/dashboard/app.component.scss
 create mode 100644 projects/nshmp-apps/src/app/dev/math/dashboard/app.component.spec.ts
 create mode 100644 projects/nshmp-apps/src/app/dev/math/dashboard/app.component.ts

diff --git a/projects/nshmp-apps/src/app/dev/gmm/dashboard/app.component.html b/projects/nshmp-apps/src/app/dev/gmm/dashboard/app.component.html
new file mode 100644
index 000000000..389a2c0fd
--- /dev/null
+++ b/projects/nshmp-apps/src/app/dev/gmm/dashboard/app.component.html
@@ -0,0 +1,21 @@
+<nshmp-lib-ng-template #template [navigationList]="navigationList" [title]="">
+  <!-- Dashboard -->
+  <nshmp-lib-ng-dashboard [sections]="sections">
+    <nshmp-lib-ng-dashboard-title>
+      USGS Development
+      <br />
+      Earthquake Hazard Toolbox:
+      <br />
+      Ground Motion Model Applications
+    </nshmp-lib-ng-dashboard-title>
+    <nshmp-lib-ng-dashboard-description />
+  </nshmp-lib-ng-dashboard>
+
+  <!-- About page -->
+  <nshmp-lib-ng-about-page>
+    <nshmp-lib-ng-about-content
+      [showSavingSettingPanel]="false"
+      [showUsingApplicationPanel]="false"
+    />
+  </nshmp-lib-ng-about-page>
+</nshmp-lib-ng-template>
diff --git a/projects/nshmp-apps/src/app/dev/gmm/dashboard/app.component.scss b/projects/nshmp-apps/src/app/dev/gmm/dashboard/app.component.scss
new file mode 100644
index 000000000..e69de29bb
diff --git a/projects/nshmp-apps/src/app/dev/gmm/dashboard/app.component.spec.ts b/projects/nshmp-apps/src/app/dev/gmm/dashboard/app.component.spec.ts
new file mode 100644
index 000000000..10ce8a002
--- /dev/null
+++ b/projects/nshmp-apps/src/app/dev/gmm/dashboard/app.component.spec.ts
@@ -0,0 +1,30 @@
+import {provideHttpClient} from '@angular/common/http';
+import {ComponentFixture, TestBed} from '@angular/core/testing';
+import {provideNoopAnimations} from '@angular/platform-browser/animations';
+import {provideRouter} from '@angular/router';
+
+import {AppComponent} from './app.component';
+
+describe('AppComponent', () => {
+  let component: AppComponent;
+  let fixture: ComponentFixture<AppComponent>;
+
+  beforeEach(async () => {
+    await TestBed.configureTestingModule({
+      imports: [AppComponent],
+      providers: [
+        provideHttpClient(),
+        provideNoopAnimations(),
+        provideRouter([]),
+      ],
+    }).compileComponents();
+
+    fixture = TestBed.createComponent(AppComponent);
+    component = fixture.componentInstance;
+    fixture.detectChanges();
+  });
+
+  it('should create', () => {
+    expect(component).toBeTruthy();
+  });
+});
diff --git a/projects/nshmp-apps/src/app/dev/gmm/dashboard/app.component.ts b/projects/nshmp-apps/src/app/dev/gmm/dashboard/app.component.ts
new file mode 100644
index 000000000..f7275a6cd
--- /dev/null
+++ b/projects/nshmp-apps/src/app/dev/gmm/dashboard/app.component.ts
@@ -0,0 +1,47 @@
+import {Component} from '@angular/core';
+import {
+  NshmpLibNgAboutContentComponent,
+  NshmpLibNgAboutPageComponent,
+} from '@ghsc/nshmp-lib-ng/about';
+import {
+  ApplicationSections,
+  NshmpLibNgDashboardComponent,
+  NshmpLibNgDashboardDescriptionComponent,
+  NshmpLibNgDashboardTitleComponent,
+  NshmpLibNgTemplateComponent,
+} from '@ghsc/nshmp-lib-ng/nshmp';
+import {
+  devGmmApps,
+  devNavigation,
+} from 'projects/nshmp-apps/src/shared/utils/navigation.utils';
+
+@Component({
+  imports: [
+    NshmpLibNgTemplateComponent,
+    NshmpLibNgAboutPageComponent,
+    NshmpLibNgDashboardComponent,
+    NshmpLibNgDashboardTitleComponent,
+    NshmpLibNgDashboardDescriptionComponent,
+    NshmpLibNgAboutContentComponent,
+  ],
+  selector: 'app-app',
+  standalone: true,
+  styleUrl: './app.component.scss',
+  templateUrl: './app.component.html',
+})
+export class AppComponent {
+  /** Navigation list for menu */
+  navigationList = devNavigation();
+
+  sections: ApplicationSections[] = [
+    {
+      gridClass: 'grid-col-10',
+      sections: [
+        {
+          applications: devGmmApps().map(navigation => ({navigation})),
+          gridClass: 'grid-col-12 tablet-lg:grid-col-8 grid-offset-1',
+        },
+      ],
+    },
+  ];
+}
diff --git a/projects/nshmp-apps/src/app/dev/gmm/gmm.routes.ts b/projects/nshmp-apps/src/app/dev/gmm/gmm.routes.ts
index 2535e4b48..8cf6b0c4c 100644
--- a/projects/nshmp-apps/src/app/dev/gmm/gmm.routes.ts
+++ b/projects/nshmp-apps/src/app/dev/gmm/gmm.routes.ts
@@ -2,6 +2,11 @@ import {Routes} from '@angular/router';
 
 /** Routes for dev GMM applications */
 const routes: Routes = [
+  {
+    loadComponent: () =>
+      import('./dashboard/app.component').then(com => com.AppComponent),
+    path: '',
+  },
   {
     loadComponent: () =>
       import('./hanging-wall-effects/app.component').then(
diff --git a/projects/nshmp-apps/src/app/dev/hazard/dashboard/app.component.html b/projects/nshmp-apps/src/app/dev/hazard/dashboard/app.component.html
new file mode 100644
index 000000000..389d2a21b
--- /dev/null
+++ b/projects/nshmp-apps/src/app/dev/hazard/dashboard/app.component.html
@@ -0,0 +1,21 @@
+<nshmp-lib-ng-template #template [navigationList]="navigationList" [title]="">
+  <!-- Dashboard -->
+  <nshmp-lib-ng-dashboard [sections]="sections">
+    <nshmp-lib-ng-dashboard-title>
+      USGS Development
+      <br />
+      Earthquake Hazard Toolbox:
+      <br />
+      Hazard Applications
+    </nshmp-lib-ng-dashboard-title>
+    <nshmp-lib-ng-dashboard-description />
+  </nshmp-lib-ng-dashboard>
+
+  <!-- About page -->
+  <nshmp-lib-ng-about-page>
+    <nshmp-lib-ng-about-content
+      [showSavingSettingPanel]="false"
+      [showUsingApplicationPanel]="false"
+    />
+  </nshmp-lib-ng-about-page>
+</nshmp-lib-ng-template>
diff --git a/projects/nshmp-apps/src/app/dev/hazard/dashboard/app.component.scss b/projects/nshmp-apps/src/app/dev/hazard/dashboard/app.component.scss
new file mode 100644
index 000000000..e69de29bb
diff --git a/projects/nshmp-apps/src/app/dev/hazard/dashboard/app.component.spec.ts b/projects/nshmp-apps/src/app/dev/hazard/dashboard/app.component.spec.ts
new file mode 100644
index 000000000..10ce8a002
--- /dev/null
+++ b/projects/nshmp-apps/src/app/dev/hazard/dashboard/app.component.spec.ts
@@ -0,0 +1,30 @@
+import {provideHttpClient} from '@angular/common/http';
+import {ComponentFixture, TestBed} from '@angular/core/testing';
+import {provideNoopAnimations} from '@angular/platform-browser/animations';
+import {provideRouter} from '@angular/router';
+
+import {AppComponent} from './app.component';
+
+describe('AppComponent', () => {
+  let component: AppComponent;
+  let fixture: ComponentFixture<AppComponent>;
+
+  beforeEach(async () => {
+    await TestBed.configureTestingModule({
+      imports: [AppComponent],
+      providers: [
+        provideHttpClient(),
+        provideNoopAnimations(),
+        provideRouter([]),
+      ],
+    }).compileComponents();
+
+    fixture = TestBed.createComponent(AppComponent);
+    component = fixture.componentInstance;
+    fixture.detectChanges();
+  });
+
+  it('should create', () => {
+    expect(component).toBeTruthy();
+  });
+});
diff --git a/projects/nshmp-apps/src/app/dev/hazard/dashboard/app.component.ts b/projects/nshmp-apps/src/app/dev/hazard/dashboard/app.component.ts
new file mode 100644
index 000000000..6c827f6c1
--- /dev/null
+++ b/projects/nshmp-apps/src/app/dev/hazard/dashboard/app.component.ts
@@ -0,0 +1,47 @@
+import {Component} from '@angular/core';
+import {
+  NshmpLibNgAboutContentComponent,
+  NshmpLibNgAboutPageComponent,
+} from '@ghsc/nshmp-lib-ng/about';
+import {
+  ApplicationSections,
+  NshmpLibNgDashboardComponent,
+  NshmpLibNgDashboardDescriptionComponent,
+  NshmpLibNgDashboardTitleComponent,
+  NshmpLibNgTemplateComponent,
+} from '@ghsc/nshmp-lib-ng/nshmp';
+import {
+  devHazardApps,
+  devNavigation,
+} from 'projects/nshmp-apps/src/shared/utils/navigation.utils';
+
+@Component({
+  imports: [
+    NshmpLibNgTemplateComponent,
+    NshmpLibNgAboutPageComponent,
+    NshmpLibNgDashboardComponent,
+    NshmpLibNgDashboardTitleComponent,
+    NshmpLibNgDashboardDescriptionComponent,
+    NshmpLibNgAboutContentComponent,
+  ],
+  selector: 'app-app',
+  standalone: true,
+  styleUrl: './app.component.scss',
+  templateUrl: './app.component.html',
+})
+export class AppComponent {
+  /** Navigation list for menu */
+  navigationList = devNavigation();
+
+  sections: ApplicationSections[] = [
+    {
+      gridClass: 'grid-col-10',
+      sections: [
+        {
+          applications: devHazardApps().map(navigation => ({navigation})),
+          gridClass: 'grid-col-12 tablet-lg:grid-col-8 grid-offset-1',
+        },
+      ],
+    },
+  ];
+}
diff --git a/projects/nshmp-apps/src/app/dev/hazard/hazard.routes.ts b/projects/nshmp-apps/src/app/dev/hazard/hazard.routes.ts
index 5e7bea624..8b81c2fb1 100644
--- a/projects/nshmp-apps/src/app/dev/hazard/hazard.routes.ts
+++ b/projects/nshmp-apps/src/app/dev/hazard/hazard.routes.ts
@@ -5,6 +5,11 @@ import {DynamicHazardCompareGuard} from './dynamic-compare/guards/dynamic-hazard
 
 /** Routes for dev hazard applications */
 const routes: Routes = [
+  {
+    loadComponent: () =>
+      import('./dashboard/app.component').then(com => com.AppComponent),
+    path: '',
+  },
   {
     canActivate: [() => inject(DynamicHazardCompareGuard).canActivate()],
     loadComponent: () =>
diff --git a/projects/nshmp-apps/src/app/dev/math/dashboard/app.component.html b/projects/nshmp-apps/src/app/dev/math/dashboard/app.component.html
new file mode 100644
index 000000000..56569f555
--- /dev/null
+++ b/projects/nshmp-apps/src/app/dev/math/dashboard/app.component.html
@@ -0,0 +1,21 @@
+<nshmp-lib-ng-template #template [navigationList]="navigationList" [title]="">
+  <!-- Dashboard -->
+  <nshmp-lib-ng-dashboard [sections]="sections">
+    <nshmp-lib-ng-dashboard-title>
+      USGS Development
+      <br />
+      Earthquake Hazard Toolbox:
+      <br />
+      Math Applications
+    </nshmp-lib-ng-dashboard-title>
+    <nshmp-lib-ng-dashboard-description />
+  </nshmp-lib-ng-dashboard>
+
+  <!-- About page -->
+  <nshmp-lib-ng-about-page>
+    <nshmp-lib-ng-about-content
+      [showSavingSettingPanel]="false"
+      [showUsingApplicationPanel]="false"
+    />
+  </nshmp-lib-ng-about-page>
+</nshmp-lib-ng-template>
diff --git a/projects/nshmp-apps/src/app/dev/math/dashboard/app.component.scss b/projects/nshmp-apps/src/app/dev/math/dashboard/app.component.scss
new file mode 100644
index 000000000..e69de29bb
diff --git a/projects/nshmp-apps/src/app/dev/math/dashboard/app.component.spec.ts b/projects/nshmp-apps/src/app/dev/math/dashboard/app.component.spec.ts
new file mode 100644
index 000000000..10ce8a002
--- /dev/null
+++ b/projects/nshmp-apps/src/app/dev/math/dashboard/app.component.spec.ts
@@ -0,0 +1,30 @@
+import {provideHttpClient} from '@angular/common/http';
+import {ComponentFixture, TestBed} from '@angular/core/testing';
+import {provideNoopAnimations} from '@angular/platform-browser/animations';
+import {provideRouter} from '@angular/router';
+
+import {AppComponent} from './app.component';
+
+describe('AppComponent', () => {
+  let component: AppComponent;
+  let fixture: ComponentFixture<AppComponent>;
+
+  beforeEach(async () => {
+    await TestBed.configureTestingModule({
+      imports: [AppComponent],
+      providers: [
+        provideHttpClient(),
+        provideNoopAnimations(),
+        provideRouter([]),
+      ],
+    }).compileComponents();
+
+    fixture = TestBed.createComponent(AppComponent);
+    component = fixture.componentInstance;
+    fixture.detectChanges();
+  });
+
+  it('should create', () => {
+    expect(component).toBeTruthy();
+  });
+});
diff --git a/projects/nshmp-apps/src/app/dev/math/dashboard/app.component.ts b/projects/nshmp-apps/src/app/dev/math/dashboard/app.component.ts
new file mode 100644
index 000000000..9ecce1d8a
--- /dev/null
+++ b/projects/nshmp-apps/src/app/dev/math/dashboard/app.component.ts
@@ -0,0 +1,47 @@
+import {Component} from '@angular/core';
+import {
+  NshmpLibNgAboutContentComponent,
+  NshmpLibNgAboutPageComponent,
+} from '@ghsc/nshmp-lib-ng/about';
+import {
+  ApplicationSections,
+  NshmpLibNgDashboardComponent,
+  NshmpLibNgDashboardDescriptionComponent,
+  NshmpLibNgDashboardTitleComponent,
+  NshmpLibNgTemplateComponent,
+} from '@ghsc/nshmp-lib-ng/nshmp';
+import {
+  devMathApps,
+  devNavigation,
+} from 'projects/nshmp-apps/src/shared/utils/navigation.utils';
+
+@Component({
+  imports: [
+    NshmpLibNgTemplateComponent,
+    NshmpLibNgAboutPageComponent,
+    NshmpLibNgDashboardComponent,
+    NshmpLibNgDashboardTitleComponent,
+    NshmpLibNgDashboardDescriptionComponent,
+    NshmpLibNgAboutContentComponent,
+  ],
+  selector: 'app-app',
+  standalone: true,
+  styleUrl: './app.component.scss',
+  templateUrl: './app.component.html',
+})
+export class AppComponent {
+  /** Navigation list for menu */
+  navigationList = devNavigation();
+
+  sections: ApplicationSections[] = [
+    {
+      gridClass: 'grid-col-10',
+      sections: [
+        {
+          applications: devMathApps().map(navigation => ({navigation})),
+          gridClass: 'grid-col-12 tablet-lg:grid-col-8 grid-offset-1',
+        },
+      ],
+    },
+  ];
+}
diff --git a/projects/nshmp-apps/src/app/dev/math/exceedance-explorer/app.component.ts b/projects/nshmp-apps/src/app/dev/math/exceedance-explorer/app.component.ts
index 6fe0117fb..9040ede33 100644
--- a/projects/nshmp-apps/src/app/dev/math/exceedance-explorer/app.component.ts
+++ b/projects/nshmp-apps/src/app/dev/math/exceedance-explorer/app.component.ts
@@ -42,5 +42,5 @@ export class AppComponent {
   /** Navigation list for menu */
   navigationList = devNavigation();
   /** Application title */
-  title = devApps().exceedanceExplorer.display;
+  title = devApps().math.exceedanceExplorer.display;
 }
diff --git a/projects/nshmp-apps/src/app/dev/math/math.routes.ts b/projects/nshmp-apps/src/app/dev/math/math.routes.ts
index ce59f47f5..864c1b0af 100644
--- a/projects/nshmp-apps/src/app/dev/math/math.routes.ts
+++ b/projects/nshmp-apps/src/app/dev/math/math.routes.ts
@@ -2,6 +2,11 @@ import {Routes} from '@angular/router';
 
 /** Routes for math applications */
 const routes: Routes = [
+  {
+    loadComponent: () =>
+      import('./dashboard/app.component').then(com => com.AppComponent),
+    path: '',
+  },
   {
     loadComponent: () =>
       import('./exceedance-explorer/app.component').then(
-- 
GitLab


From 9623af8a9ebda1dd6e9aeeea384f0e8f3fa24c1f Mon Sep 17 00:00:00 2001
From: Brandon Clayton <bclayton@usgs.gov>
Date: Wed, 27 Nov 2024 15:43:15 -0700
Subject: [PATCH 3/4] change title

---
 .../src/app/dev/dashboard/app.component.html         |  4 ++--
 .../src/app/dev/dashboard/app.component.ts           | 12 ++----------
 .../src/app/internal/dashboard/app.component.html    |  2 +-
 .../src/app/internal/dashboard/app.component.ts      |  5 +++--
 4 files changed, 8 insertions(+), 15 deletions(-)

diff --git a/projects/nshmp-apps/src/app/dev/dashboard/app.component.html b/projects/nshmp-apps/src/app/dev/dashboard/app.component.html
index 6f4c9fe7c..19568f897 100644
--- a/projects/nshmp-apps/src/app/dev/dashboard/app.component.html
+++ b/projects/nshmp-apps/src/app/dev/dashboard/app.component.html
@@ -2,9 +2,9 @@
   <!-- Dashboard -->
   <nshmp-lib-ng-dashboard [sections]="sections">
     <nshmp-lib-ng-dashboard-title>
-      USGS Earthquake
+      USGS Development
       <br />
-      Development
+      Earthquake
       <br />
       Hazard Toolbox
     </nshmp-lib-ng-dashboard-title>
diff --git a/projects/nshmp-apps/src/app/dev/dashboard/app.component.ts b/projects/nshmp-apps/src/app/dev/dashboard/app.component.ts
index 28957cbc6..fc22fe0f0 100644
--- a/projects/nshmp-apps/src/app/dev/dashboard/app.component.ts
+++ b/projects/nshmp-apps/src/app/dev/dashboard/app.component.ts
@@ -34,24 +34,16 @@ export class AppComponent {
   /** Navigation list for menu */
   navigationList = nav.devNavigation();
 
-  /** AWS applications */
-  private awsApps = nav.devAwsApps();
   /** Main development applications */
   private mainApps = nav.devMainApps();
 
   sections: ApplicationSections[] = [
     {
+      gridClass: 'grid-col-10',
       sections: [
         {
           applications: this.mainApps.map(navigation => ({navigation})),
-        },
-      ],
-    },
-    {
-      sections: [
-        {
-          applications: this.awsApps.map(navigation => ({navigation})),
-          title: 'AWS',
+          gridClass: 'grid-col-12 tablet-lg:grid-col-8 grid-offset-1',
         },
       ],
     },
diff --git a/projects/nshmp-apps/src/app/internal/dashboard/app.component.html b/projects/nshmp-apps/src/app/internal/dashboard/app.component.html
index ba0728ed0..2384d26ae 100644
--- a/projects/nshmp-apps/src/app/internal/dashboard/app.component.html
+++ b/projects/nshmp-apps/src/app/internal/dashboard/app.component.html
@@ -2,7 +2,7 @@
   <!-- Dashboard -->
   <nshmp-lib-ng-dashboard [sections]="sections">
     <nshmp-lib-ng-dashboard-title>
-      USGS Earthquake
+      USGS Internal Earthquake
       <br />
       Hazard Toolbox:
       <br />
diff --git a/projects/nshmp-apps/src/app/internal/dashboard/app.component.ts b/projects/nshmp-apps/src/app/internal/dashboard/app.component.ts
index 51c680304..42fbf6918 100644
--- a/projects/nshmp-apps/src/app/internal/dashboard/app.component.ts
+++ b/projects/nshmp-apps/src/app/internal/dashboard/app.component.ts
@@ -34,16 +34,17 @@ import {AuthService} from '../shared/services/auth.service';
 })
 export class AppComponent implements OnInit, OnDestroy {
   /** Navigation list for menu */
-  navigationList = nav.devNavigation();
+  navigationList = nav.internalNavigation();
 
   /** AWS applications */
-  private awsApps = nav.devAwsApps();
+  private awsApps = nav.internalAwsApps();
 
   sections: ApplicationSections[] = [];
 
   private sub: Subscription;
 
   constructor(private authService: AuthService) {}
+
   ngOnInit(): void {
     this.sub = this.authService.isAuthorized().subscribe(() => {
       this.sections = [
-- 
GitLab


From 13683a66b23cd37c3669d6950326247762ce3570 Mon Sep 17 00:00:00 2001
From: Brandon Clayton <bclayton@usgs.gov>
Date: Wed, 27 Nov 2024 15:43:51 -0700
Subject: [PATCH 4/4] add dashboards

---
 .../src/shared/models/applications.model.ts   | 26 +++++-
 .../src/shared/utils/applications.utils.ts    | 85 ++++++++++++++-----
 .../src/shared/utils/navigation.utils.ts      | 61 +++++++++++--
 3 files changed, 136 insertions(+), 36 deletions(-)

diff --git a/projects/nshmp-apps/src/shared/models/applications.model.ts b/projects/nshmp-apps/src/shared/models/applications.model.ts
index e308e0bea..001335a71 100644
--- a/projects/nshmp-apps/src/shared/models/applications.model.ts
+++ b/projects/nshmp-apps/src/shared/models/applications.model.ts
@@ -26,6 +26,8 @@ export interface Applications {
 export interface AwsApplications {
   /** Check hazard jobs application */
   checkHazJobs: Navigation;
+  /** Dashboard */
+  dashboard: Navigation;
   /** Hazard run job history application */
   hazJobHistory: Navigation;
   /** Submit hazard run jobs application */
@@ -38,22 +40,36 @@ export interface AwsApplications {
  * Development applications navigation config.
  */
 export interface DevApplications {
-  /** AWS applications */
-  aws: AwsApplications;
   /** Dev dashboard */
   dashboard: Navigation;
-  /** Exceedance explorer applications */
-  exceedanceExplorer: Navigation;
   /** Dev GMM applications */
   gmm: DevGmmApplications;
   /** Dev hazard applications */
   hazard: DevHazardApplications;
+  /** Dev math applications */
+  math: DevMathApplications;
+}
+
+export interface DevMathApplications {
+  /** Math dashboard */
+  dashboard: Navigation;
+  /** Exceedance explorer applications */
+  exceedanceExplorer: Navigation;
+}
+
+export interface InternalApplications {
+  /** AWS applications */
+  aws: AwsApplications;
+  /** Internal dashboard */
+  dashboard: Navigation;
 }
 
 /**
  * Development GMM applications.
  */
 export interface DevGmmApplications {
+  /** Dev GMM dashboard */
+  dashboard: Navigation;
   /** Hanging wall effects application */
   hangingWallEffects: Navigation;
 }
@@ -62,6 +78,8 @@ export interface DevGmmApplications {
  * Development hazard applications.
  */
 export interface DevHazardApplications {
+  /** Dev harad dashboard */
+  dashboard: Navigation;
   /** Dynamic compare hazard applicaiton */
   dynamicCompare: Navigation;
 }
diff --git a/projects/nshmp-apps/src/shared/utils/applications.utils.ts b/projects/nshmp-apps/src/shared/utils/applications.utils.ts
index 64c22fdcd..1cbaa5e17 100644
--- a/projects/nshmp-apps/src/shared/utils/applications.utils.ts
+++ b/projects/nshmp-apps/src/shared/utils/applications.utils.ts
@@ -1,4 +1,8 @@
-import {Applications, DevApplications} from '../models/applications.model';
+import {
+  Applications,
+  DevApplications,
+  InternalApplications,
+} from '../models/applications.model';
 
 /** Main application name */
 export const TOOLBOX_NAME = 'USGS Earthquake Hazard Toolbox';
@@ -103,43 +107,78 @@ export function apps(): Applications {
  */
 export function devApps(): DevApplications {
   return {
-    aws: {
-      checkHazJobs: {
-        display: 'Check nshmp-haz Jobs',
-        routerLink: '/dev/aws/check-haz-jobs',
-      },
-      hazJobHistory: {
-        display: 'nshmp-haz Job History',
-        routerLink: '/dev/aws/haz-job-history',
-      },
-      submitHazJobs: {
-        display: 'Submit nshmp-haz Jobs',
-        routerLink: '/dev/aws/submit-haz-jobs',
-      },
-      terminateHazJobs: {
-        display: 'Terminate nshmp-haz Jobs',
-        routerLink: '/dev/aws/terminate-haz-jobs',
-      },
-    },
     dashboard: {
       display: 'Development Dashboard',
       routerLink: '/dev',
     },
-    exceedanceExplorer: {
-      display: 'Exceedance Explorer',
-      routerLink: '/dev/math/exceedance-explorer',
-    },
     gmm: {
+      dashboard: {
+        display: 'Development GMM Dashboard',
+        routerLink: '/dev/gmm',
+        showInDashboard: false,
+      },
       hangingWallEffects: {
         display: 'Hanging Wall Effects',
         routerLink: '/dev/gmm/hanging-wall-effects',
       },
     },
     hazard: {
+      dashboard: {
+        display: 'Development Hazard Dashboard',
+        routerLink: '/dev/hazard',
+        showInDashboard: false,
+      },
       dynamicCompare: {
         display: 'Dynamic Hazard Compare',
         routerLink: '/dev/hazard/dynamic-compare',
       },
     },
+    math: {
+      dashboard: {
+        display: 'Development Math Dashboard',
+        routerLink: '/dev/math',
+        showInDashboard: false,
+      },
+      exceedanceExplorer: {
+        display: 'Exceedance Explorer',
+        routerLink: '/dev/math/exceedance-explorer',
+      },
+    },
+  };
+}
+
+/**
+ * Returns all the dev application info.
+ */
+export function internalApps(): InternalApplications {
+  return {
+    aws: {
+      dashboard: {
+        display: 'Internal AWS Dashboard',
+        routerLink: '/internal/aws',
+        showInDashboard: false,
+      },
+      // eslint-disable-next-line sort-keys-fix/sort-keys-fix
+      checkHazJobs: {
+        display: 'Check nshmp-haz Jobs',
+        routerLink: '/internal/aws/check-haz-jobs',
+      },
+      hazJobHistory: {
+        display: 'nshmp-haz Job History',
+        routerLink: '/internal/aws/haz-job-history',
+      },
+      submitHazJobs: {
+        display: 'Submit nshmp-haz Jobs',
+        routerLink: '/internal/aws/submit-haz-jobs',
+      },
+      terminateHazJobs: {
+        display: 'Terminate nshmp-haz Jobs',
+        routerLink: '/internal/aws/terminate-haz-jobs',
+      },
+    },
+    dashboard: {
+      display: 'Internal Dashboard',
+      routerLink: '/internal',
+    },
   };
 }
diff --git a/projects/nshmp-apps/src/shared/utils/navigation.utils.ts b/projects/nshmp-apps/src/shared/utils/navigation.utils.ts
index d9a6082ad..9b66d1f3a 100644
--- a/projects/nshmp-apps/src/shared/utils/navigation.utils.ts
+++ b/projects/nshmp-apps/src/shared/utils/navigation.utils.ts
@@ -4,6 +4,7 @@ import * as ApplicationsUtils from './applications.utils';
 
 const APPS = ApplicationsUtils.apps();
 const DEV_APPS = ApplicationsUtils.devApps();
+const INTERNAL_APPS = ApplicationsUtils.internalApps();
 
 /**
  * Returns the list of design map application.
@@ -12,11 +13,12 @@ export function designMapApps(): Navigation[] {
   return Object.values(APPS.designMaps) as Navigation[];
 }
 
-/**
- * Returns the list of AWS applications.
- */
-export function devAwsApps(): Navigation[] {
-  return Object.values(DEV_APPS.aws) as Navigation[];
+export function devGmmApps(): Navigation[] {
+  return Object.values(DEV_APPS.gmm) as Navigation[];
+}
+
+export function devHazardApps(): Navigation[] {
+  return Object.values(DEV_APPS.hazard) as Navigation[];
 }
 
 /**
@@ -24,23 +26,35 @@ export function devAwsApps(): Navigation[] {
  */
 export function devMainApps(): Navigation[] {
   return [
-    DEV_APPS.exceedanceExplorer,
+    DEV_APPS.math.exceedanceExplorer,
     DEV_APPS.hazard.dynamicCompare,
     DEV_APPS.gmm.hangingWallEffects,
   ];
 }
 
+export function devMathApps(): Navigation[] {
+  return Object.values(DEV_APPS.math) as Navigation[];
+}
+
 /**
  * Returns the drop down navigation menu for development applications.
  */
 export function devNavigation(): NavigationList[] {
   const devNavigation: NavigationList[] = [
     {
-      navigation: [DEV_APPS.dashboard, ...devMainApps()],
+      navigation: [DEV_APPS.dashboard],
     },
     {
-      navigation: devAwsApps(),
-      subHeader: 'AWS',
+      navigation: devHazardApps(),
+      subHeader: 'Hazard',
+    },
+    {
+      navigation: devGmmApps(),
+      subHeader: 'Ground Motion Models',
+    },
+    {
+      navigation: devMathApps(),
+      subHeader: 'Math',
     },
   ];
 
@@ -61,6 +75,31 @@ export function hazardApps(): Navigation[] {
   return Object.values(APPS.hazard) as Navigation[];
 }
 
+/**
+ * Returns the list of AWS applications.
+ */
+export function internalAwsApps(): Navigation[] {
+  return Object.values(INTERNAL_APPS.aws) as Navigation[];
+}
+
+export function internalMainApps(): Navigation[] {
+  return internalAwsApps();
+}
+
+export function internalNavigation(): NavigationList[] {
+  const internalNavigation: NavigationList[] = [
+    {
+      navigation: [INTERNAL_APPS.dashboard],
+    },
+    {
+      navigation: internalAwsApps(),
+      subHeader: 'AWS',
+    },
+  ];
+
+  return [...internalNavigation];
+}
+
 /**
  * Returns the list of main applications.
  */
@@ -101,6 +140,10 @@ export function navigation(): NavigationList[] {
       navigation: ncmApps(),
       subHeader: 'National Crustal Model',
     },
+    {
+      navigation: [DEV_APPS.dashboard, ...devMainApps()],
+      subHeader: 'Development',
+    },
     {
       navigation: [APPS.services],
     },
-- 
GitLab