diff --git a/projects/nshmp-apps/src/app/app.routes.ts b/projects/nshmp-apps/src/app/app.routes.ts
index 742855da68a5a42b408c46244913e51aa413dffd..5609f45a9e430c15cbbd0c3d7aab1fb006b18ac5 100644
--- a/projects/nshmp-apps/src/app/app.routes.ts
+++ b/projects/nshmp-apps/src/app/app.routes.ts
@@ -5,6 +5,7 @@ import {devRoutes} from './dev/dev.routes';
 import {errorRoutes} from './error-pages/error-pages.routes';
 import {gmmRoutes} from './gmm/gmm.routes';
 import {hazardRoutes} from './hazard/hazard.routes';
+// import {ncmRoutes} from './ncm/ncm.routes';
 import {sourceRoutes} from './source/source.routes';
 
 /**
@@ -17,6 +18,11 @@ const routes: Routes = [
       import('./dashboard/app.component').then(com => com.AppComponent),
     path: '',
   },
+  // NCM applications
+  // {
+  //   children: ncmRoutes(),
+  //   path: 'ncm',
+  // },
   // Design maps applications
   {
     children: designMapsRoutes(),
diff --git a/projects/nshmp-apps/src/app/ncm/geophysical-profiles/app.component.html b/projects/nshmp-apps/src/app/ncm/geophysical-profiles/app.component.html
new file mode 100644
index 0000000000000000000000000000000000000000..7b42a2066f03e462b5cd7988f2479fa9f14f278b
--- /dev/null
+++ b/projects/nshmp-apps/src/app/ncm/geophysical-profiles/app.component.html
@@ -0,0 +1,19 @@
+<nshmp-lib-ng-template [navigationList]="navigationList" [title]="title">
+  <nshmp-template-content-container>
+    <nshmp-template-control-panel>
+      <app-control-panel />
+    </nshmp-template-control-panel>
+
+    <nshmp-template-plot-content>
+      <app-content />
+    </nshmp-template-plot-content>
+
+    <nshmp-template-settings>
+      <app-plot-settings-panel />
+    </nshmp-template-settings>
+  </nshmp-template-content-container>
+
+  <nshmp-lib-ng-about-page>
+    <app-about />
+  </nshmp-lib-ng-about-page>
+</nshmp-lib-ng-template>
diff --git a/projects/nshmp-apps/src/app/ncm/geophysical-profiles/app.component.scss b/projects/nshmp-apps/src/app/ncm/geophysical-profiles/app.component.scss
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/projects/nshmp-apps/src/app/ncm/geophysical-profiles/app.component.spec.ts b/projects/nshmp-apps/src/app/ncm/geophysical-profiles/app.component.spec.ts
new file mode 100644
index 0000000000000000000000000000000000000000..977aba04e3b357d122075a024fc729310d67d245
--- /dev/null
+++ b/projects/nshmp-apps/src/app/ncm/geophysical-profiles/app.component.spec.ts
@@ -0,0 +1,25 @@
+import {provideHttpClient} from '@angular/common/http';
+import {ComponentFixture, TestBed} from '@angular/core/testing';
+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(), 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/ncm/geophysical-profiles/app.component.ts b/projects/nshmp-apps/src/app/ncm/geophysical-profiles/app.component.ts
new file mode 100644
index 0000000000000000000000000000000000000000..c84f4c286838f942acd0357706bc310763a833de
--- /dev/null
+++ b/projects/nshmp-apps/src/app/ncm/geophysical-profiles/app.component.ts
@@ -0,0 +1,42 @@
+import {Component} from '@angular/core';
+import {NshmpLibNgAboutPageComponent} from '@ghsc/nshmp-lib-ng/about';
+import {NshmpLibNgTemplateComponent} from '@ghsc/nshmp-lib-ng/nshmp';
+import {
+  NshmpTemplateContentContainerComponent,
+  NshmpTemplateControlPanelComponent,
+  NshmpTemplatePlotContentComponent,
+  NshmpTemplateSettingsComponent,
+} from '@ghsc/nshmp-template';
+import {apps} from 'projects/nshmp-apps/src/shared/utils/applications.utils';
+import {navigation} from 'projects/nshmp-apps/src/shared/utils/navigation.utils';
+
+import {AboutComponent} from './components/about/about.component';
+import {ContentComponent} from './components/content/content.component';
+import {ControlPanelComponent} from './components/control-panel/control-panel.component';
+import {PlotSettingsPanelComponent} from './components/plot-settings-panel/plot-settings-panel.component';
+
+@Component({
+  imports: [
+    NshmpLibNgTemplateComponent,
+    NshmpTemplateControlPanelComponent,
+    NshmpTemplateContentContainerComponent,
+    NshmpTemplatePlotContentComponent,
+    NshmpLibNgAboutPageComponent,
+    NshmpTemplateSettingsComponent,
+    ControlPanelComponent,
+    ContentComponent,
+    PlotSettingsPanelComponent,
+    AboutComponent,
+  ],
+  selector: 'app-app',
+  standalone: true,
+  styleUrl: './app.component.scss',
+  templateUrl: './app.component.html',
+})
+export class AppComponent {
+  /** Navigation list for menu */
+  navigationList = navigation();
+
+  /** Application title */
+  title = apps().ncm.geophysicalProfiles.display;
+}
diff --git a/projects/nshmp-apps/src/app/ncm/geophysical-profiles/components/about/about.component.html b/projects/nshmp-apps/src/app/ncm/geophysical-profiles/components/about/about.component.html
new file mode 100644
index 0000000000000000000000000000000000000000..6094aa9f50aa1d93f83f21960e62169fa49cb1d3
--- /dev/null
+++ b/projects/nshmp-apps/src/app/ncm/geophysical-profiles/components/about/about.component.html
@@ -0,0 +1 @@
+<p>about works!</p>
diff --git a/projects/nshmp-apps/src/app/ncm/geophysical-profiles/components/about/about.component.scss b/projects/nshmp-apps/src/app/ncm/geophysical-profiles/components/about/about.component.scss
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/projects/nshmp-apps/src/app/ncm/geophysical-profiles/components/about/about.component.spec.ts b/projects/nshmp-apps/src/app/ncm/geophysical-profiles/components/about/about.component.spec.ts
new file mode 100644
index 0000000000000000000000000000000000000000..bbad86590341eb82f2360796694dd8c002b0c4e3
--- /dev/null
+++ b/projects/nshmp-apps/src/app/ncm/geophysical-profiles/components/about/about.component.spec.ts
@@ -0,0 +1,22 @@
+import {ComponentFixture, TestBed} from '@angular/core/testing';
+
+import {AboutComponent} from './about.component';
+
+describe('AboutComponent', () => {
+  let component: AboutComponent;
+  let fixture: ComponentFixture<AboutComponent>;
+
+  beforeEach(async () => {
+    await TestBed.configureTestingModule({
+      imports: [AboutComponent],
+    }).compileComponents();
+
+    fixture = TestBed.createComponent(AboutComponent);
+    component = fixture.componentInstance;
+    fixture.detectChanges();
+  });
+
+  it('should create', () => {
+    expect(component).toBeTruthy();
+  });
+});
diff --git a/projects/nshmp-apps/src/app/ncm/geophysical-profiles/components/about/about.component.ts b/projects/nshmp-apps/src/app/ncm/geophysical-profiles/components/about/about.component.ts
new file mode 100644
index 0000000000000000000000000000000000000000..69afb87f8271ec60989a45af88e355b96854590f
--- /dev/null
+++ b/projects/nshmp-apps/src/app/ncm/geophysical-profiles/components/about/about.component.ts
@@ -0,0 +1,10 @@
+import {Component} from '@angular/core';
+
+@Component({
+  imports: [],
+  selector: 'app-about',
+  standalone: true,
+  styleUrl: './about.component.scss',
+  templateUrl: './about.component.html',
+})
+export class AboutComponent {}
diff --git a/projects/nshmp-apps/src/app/ncm/geophysical-profiles/components/content/content.component.html b/projects/nshmp-apps/src/app/ncm/geophysical-profiles/components/content/content.component.html
new file mode 100644
index 0000000000000000000000000000000000000000..a8ae2af7634806a9f930db749cc23fbba521d014
--- /dev/null
+++ b/projects/nshmp-apps/src/app/ncm/geophysical-profiles/components/content/content.component.html
@@ -0,0 +1 @@
+<p>content works!</p>
diff --git a/projects/nshmp-apps/src/app/ncm/geophysical-profiles/components/content/content.component.scss b/projects/nshmp-apps/src/app/ncm/geophysical-profiles/components/content/content.component.scss
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/projects/nshmp-apps/src/app/ncm/geophysical-profiles/components/content/content.component.spec.ts b/projects/nshmp-apps/src/app/ncm/geophysical-profiles/components/content/content.component.spec.ts
new file mode 100644
index 0000000000000000000000000000000000000000..a34d2735270edd3290241f2f464b887722bfe4bf
--- /dev/null
+++ b/projects/nshmp-apps/src/app/ncm/geophysical-profiles/components/content/content.component.spec.ts
@@ -0,0 +1,22 @@
+import {ComponentFixture, TestBed} from '@angular/core/testing';
+
+import {ContentComponent} from './content.component';
+
+describe('ContentComponent', () => {
+  let component: ContentComponent;
+  let fixture: ComponentFixture<ContentComponent>;
+
+  beforeEach(async () => {
+    await TestBed.configureTestingModule({
+      imports: [ContentComponent],
+    }).compileComponents();
+
+    fixture = TestBed.createComponent(ContentComponent);
+    component = fixture.componentInstance;
+    fixture.detectChanges();
+  });
+
+  it('should create', () => {
+    expect(component).toBeTruthy();
+  });
+});
diff --git a/projects/nshmp-apps/src/app/ncm/geophysical-profiles/components/content/content.component.ts b/projects/nshmp-apps/src/app/ncm/geophysical-profiles/components/content/content.component.ts
new file mode 100644
index 0000000000000000000000000000000000000000..fabcd4f7d4fa70bf35f9b4dcf74c093cfbea5931
--- /dev/null
+++ b/projects/nshmp-apps/src/app/ncm/geophysical-profiles/components/content/content.component.ts
@@ -0,0 +1,10 @@
+import {Component} from '@angular/core';
+
+@Component({
+  imports: [],
+  selector: 'app-content',
+  standalone: true,
+  styleUrl: './content.component.scss',
+  templateUrl: './content.component.html',
+})
+export class ContentComponent {}
diff --git a/projects/nshmp-apps/src/app/ncm/geophysical-profiles/components/control-panel/control-panel.component.html b/projects/nshmp-apps/src/app/ncm/geophysical-profiles/components/control-panel/control-panel.component.html
new file mode 100644
index 0000000000000000000000000000000000000000..8d8bc210c47b32f6f3464d082a843ef1ed379a08
--- /dev/null
+++ b/projects/nshmp-apps/src/app/ncm/geophysical-profiles/components/control-panel/control-panel.component.html
@@ -0,0 +1 @@
+<p>control-panel works!</p>
diff --git a/projects/nshmp-apps/src/app/ncm/geophysical-profiles/components/control-panel/control-panel.component.scss b/projects/nshmp-apps/src/app/ncm/geophysical-profiles/components/control-panel/control-panel.component.scss
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/projects/nshmp-apps/src/app/ncm/geophysical-profiles/components/control-panel/control-panel.component.spec.ts b/projects/nshmp-apps/src/app/ncm/geophysical-profiles/components/control-panel/control-panel.component.spec.ts
new file mode 100644
index 0000000000000000000000000000000000000000..091cbb8ecacb566ae46e32e2eedc27a86fc560b3
--- /dev/null
+++ b/projects/nshmp-apps/src/app/ncm/geophysical-profiles/components/control-panel/control-panel.component.spec.ts
@@ -0,0 +1,22 @@
+import {ComponentFixture, TestBed} from '@angular/core/testing';
+
+import {ControlPanelComponent} from './control-panel.component';
+
+describe('ControlPanelComponent', () => {
+  let component: ControlPanelComponent;
+  let fixture: ComponentFixture<ControlPanelComponent>;
+
+  beforeEach(async () => {
+    await TestBed.configureTestingModule({
+      imports: [ControlPanelComponent],
+    }).compileComponents();
+
+    fixture = TestBed.createComponent(ControlPanelComponent);
+    component = fixture.componentInstance;
+    fixture.detectChanges();
+  });
+
+  it('should create', () => {
+    expect(component).toBeTruthy();
+  });
+});
diff --git a/projects/nshmp-apps/src/app/ncm/geophysical-profiles/components/control-panel/control-panel.component.ts b/projects/nshmp-apps/src/app/ncm/geophysical-profiles/components/control-panel/control-panel.component.ts
new file mode 100644
index 0000000000000000000000000000000000000000..fe2e8a48cd32a2412f6beab939b8441fe6df57ee
--- /dev/null
+++ b/projects/nshmp-apps/src/app/ncm/geophysical-profiles/components/control-panel/control-panel.component.ts
@@ -0,0 +1,10 @@
+import {Component} from '@angular/core';
+
+@Component({
+  imports: [],
+  selector: 'app-control-panel',
+  standalone: true,
+  styleUrl: './control-panel.component.scss',
+  templateUrl: './control-panel.component.html',
+})
+export class ControlPanelComponent {}
diff --git a/projects/nshmp-apps/src/app/ncm/geophysical-profiles/components/plot-settings-panel/plot-settings-panel.component.html b/projects/nshmp-apps/src/app/ncm/geophysical-profiles/components/plot-settings-panel/plot-settings-panel.component.html
new file mode 100644
index 0000000000000000000000000000000000000000..8775ecff78297c48171ee6cb44059c5c35067bb9
--- /dev/null
+++ b/projects/nshmp-apps/src/app/ncm/geophysical-profiles/components/plot-settings-panel/plot-settings-panel.component.html
@@ -0,0 +1 @@
+<p>plot-settings-panel works!</p>
diff --git a/projects/nshmp-apps/src/app/ncm/geophysical-profiles/components/plot-settings-panel/plot-settings-panel.component.scss b/projects/nshmp-apps/src/app/ncm/geophysical-profiles/components/plot-settings-panel/plot-settings-panel.component.scss
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/projects/nshmp-apps/src/app/ncm/geophysical-profiles/components/plot-settings-panel/plot-settings-panel.component.spec.ts b/projects/nshmp-apps/src/app/ncm/geophysical-profiles/components/plot-settings-panel/plot-settings-panel.component.spec.ts
new file mode 100644
index 0000000000000000000000000000000000000000..f6ea06ea54f085f0c6effbd6acaab5dc9550fb95
--- /dev/null
+++ b/projects/nshmp-apps/src/app/ncm/geophysical-profiles/components/plot-settings-panel/plot-settings-panel.component.spec.ts
@@ -0,0 +1,22 @@
+import {ComponentFixture, TestBed} from '@angular/core/testing';
+
+import {PlotSettingsPanelComponent} from './plot-settings-panel.component';
+
+describe('PlotSettingsPanelComponent', () => {
+  let component: PlotSettingsPanelComponent;
+  let fixture: ComponentFixture<PlotSettingsPanelComponent>;
+
+  beforeEach(async () => {
+    await TestBed.configureTestingModule({
+      imports: [PlotSettingsPanelComponent],
+    }).compileComponents();
+
+    fixture = TestBed.createComponent(PlotSettingsPanelComponent);
+    component = fixture.componentInstance;
+    fixture.detectChanges();
+  });
+
+  it('should create', () => {
+    expect(component).toBeTruthy();
+  });
+});
diff --git a/projects/nshmp-apps/src/app/ncm/geophysical-profiles/components/plot-settings-panel/plot-settings-panel.component.ts b/projects/nshmp-apps/src/app/ncm/geophysical-profiles/components/plot-settings-panel/plot-settings-panel.component.ts
new file mode 100644
index 0000000000000000000000000000000000000000..5d03478a56393ad21293558d704065a72184c301
--- /dev/null
+++ b/projects/nshmp-apps/src/app/ncm/geophysical-profiles/components/plot-settings-panel/plot-settings-panel.component.ts
@@ -0,0 +1,10 @@
+import {Component} from '@angular/core';
+
+@Component({
+  imports: [],
+  selector: 'app-plot-settings-panel',
+  standalone: true,
+  styleUrl: './plot-settings-panel.component.scss',
+  templateUrl: './plot-settings-panel.component.html',
+})
+export class PlotSettingsPanelComponent {}
diff --git a/projects/nshmp-apps/src/app/ncm/ncm.routes.ts b/projects/nshmp-apps/src/app/ncm/ncm.routes.ts
new file mode 100644
index 0000000000000000000000000000000000000000..b339f3475347653801bcf163954e59191c7a6739
--- /dev/null
+++ b/projects/nshmp-apps/src/app/ncm/ncm.routes.ts
@@ -0,0 +1,18 @@
+import {Routes} from '@angular/router';
+
+const routes: Routes = [
+  {
+    loadComponent: () =>
+      import('./geophysical-profiles/app.component').then(
+        com => com.AppComponent
+      ),
+    path: 'geophysical-profiles',
+  },
+];
+
+/**
+ * Return NCM application routes.
+ */
+export function ncmRoutes(): Routes {
+  return routes;
+}
diff --git a/projects/nshmp-apps/src/shared/models/applications.model.ts b/projects/nshmp-apps/src/shared/models/applications.model.ts
index ed4e1d204cc96d717ed55970a7ab0d1824498617..7645c2953889de74e0ae97eaa1e9684ad420a8cb 100644
--- a/projects/nshmp-apps/src/shared/models/applications.model.ts
+++ b/projects/nshmp-apps/src/shared/models/applications.model.ts
@@ -12,6 +12,8 @@ export interface Applications {
   gmm: GmmApplications;
   /** Hazard applications */
   hazard: HazardApplications;
+  /** NCM applications */
+  ncm: NcmApplications;
   /** Service application */
   services: Navigation;
   /** Source applications */
@@ -31,6 +33,7 @@ export interface AwsApplications {
   /** Terminate hazard runs applications */
   terminateHazJobs: Navigation;
 }
+
 /**
  * Development applications navigation config.
  */
@@ -94,6 +97,14 @@ export interface HazardApplications {
   static: Navigation;
 }
 
+/**
+ * NCM applications.
+ */
+export interface NcmApplications {
+  /** Geophysical profiles application */
+  geophysicalProfiles: Navigation;
+}
+
 /**
  * Source applications
  */
diff --git a/projects/nshmp-apps/src/shared/utils/applications.utils.ts b/projects/nshmp-apps/src/shared/utils/applications.utils.ts
index d8a4f7388ad0f6123a5fd3e166f09fabd049c120..9bd9e93d27c1abe9fd1c0a888f134e95f8b8bcf5 100644
--- a/projects/nshmp-apps/src/shared/utils/applications.utils.ts
+++ b/projects/nshmp-apps/src/shared/utils/applications.utils.ts
@@ -46,6 +46,12 @@ export function apps(): Applications {
         routerLink: '/hazard/static',
       },
     },
+    ncm: {
+      geophysicalProfiles: {
+        display: 'NCM Geophysical Profiles',
+        routerLink: '/ncm/geophysical-profiles',
+      },
+    },
     services: {
       display: 'Services',
       routerLink: '/services',