+ {{ 'maintenance.title' | translate }}
+ {{ 'maintenance.message' | translate }}
+
+}
diff --git a/src/app/app.component.scss b/src/app/app.component.scss
index e69de29bb..62deb123b 100644
--- a/src/app/app.component.scss
+++ b/src/app/app.component.scss
@@ -0,0 +1,6 @@
+.maintenance-overlay {
+ position: fixed;
+ inset: 0;
+ z-index: 2000;
+ background: var(--white);
+}
diff --git a/src/app/app.component.spec.ts b/src/app/app.component.spec.ts
index cd2f088b2..cc1f1679b 100644
--- a/src/app/app.component.spec.ts
+++ b/src/app/app.component.spec.ts
@@ -9,6 +9,7 @@ import { ComponentFixture, TestBed } from '@angular/core/testing';
import { NavigationEnd, ResolveStart, Router } from '@angular/router';
import { ENVIRONMENT } from '@core/provider/environment.provider';
+import { MaintenanceModeService } from '@core/services/maintenance-mode.service';
import { GetCurrentUser } from '@core/store/user';
import { GetEmails, UserEmailsSelectors } from '@core/store/user-emails';
import { AccountEmailModel } from '@osf/shared/models/emails/account-email.model';
@@ -17,6 +18,10 @@ import { CustomDialogService } from '@osf/shared/services/custom-dialog.service'
import { provideOSFCore } from '@testing/osf.testing.provider';
import { CustomDialogServiceMockBuilder } from '@testing/providers/custom-dialog-provider.mock';
import { LoaderServiceMock, provideLoaderServiceMock } from '@testing/providers/loader-service.mock';
+import {
+ MaintenanceModeServiceMock,
+ MaintenanceModeServiceMockType,
+} from '@testing/providers/maintenance-mode.service.mock';
import { RouterMockBuilder, RouterMockType } from '@testing/providers/router-provider.mock';
import { BaseSetupOverrides, mergeSignalOverrides, provideMockStore } from '@testing/providers/store-provider.mock';
@@ -36,6 +41,7 @@ describe('AppComponent', () => {
let loaderServiceMock: LoaderServiceMock;
let customDialogServiceMock: ReturnType