diff --git a/apps/web/src/app/secrets-manager/secrets-manager-landing/sm-landing.component.ts b/apps/web/src/app/secrets-manager/secrets-manager-landing/sm-landing.component.ts
new file mode 100644
index 0000000000..392f8403bd
--- /dev/null
+++ b/apps/web/src/app/secrets-manager/secrets-manager-landing/sm-landing.component.ts
@@ -0,0 +1,76 @@
+import { Component } from "@angular/core";
+
+import { OrganizationService } from "@bitwarden/common/admin-console/abstractions/organization/organization.service.abstraction";
+import { Organization } from "@bitwarden/common/admin-console/models/domain/organization";
+import { NoItemsModule, SearchModule } from "@bitwarden/components";
+
+import { HeaderModule } from "../../layouts/header/header.module";
+import { SharedModule } from "../../shared/shared.module";
+
+@Component({
+ selector: "app-sm-landing",
+ standalone: true,
+ imports: [SharedModule, SearchModule, NoItemsModule, HeaderModule],
+ templateUrl: "sm-landing.component.html",
+})
+export class SMLandingComponent {
+ tryItNowUrl: string;
+ learnMoreUrl: string = "https://bitwarden.com/help/secrets-manager-overview/";
+ imageSrc: string = "../images/sm.webp";
+ showSecretsManagerInformation: boolean = true;
+ showGiveMembersAccessInstructions: boolean = false;
+
+ constructor(private organizationService: OrganizationService) {}
+
+ async ngOnInit() {
+ const enabledOrganizations = (await this.organizationService.getAll()).filter((e) => e.enabled);
+
+ if (enabledOrganizations.length > 0) {
+ this.handleEnabledOrganizations(enabledOrganizations);
+ } else {
+ // Person is not part of any orgs they need to be in an organization in order to use SM
+ this.tryItNowUrl = "/create-organization";
+ }
+ }
+
+ private handleEnabledOrganizations(enabledOrganizations: Organization[]) {
+ // People get to this page because SM (Secrets Manager) isn't enabled for them (or the Organization they are a part of)
+ // 1 - SM is enabled for the Organization but not that user
+ //1a - person is Admin+ (Admin or higher) and just needs instructions on how to enable it for themselves
+ //1b - person is beneath admin status and needs to request SM access from Administrators/Owners
+ // 2 - SM is not enabled for the organization yet
+ //2a - person is Owner/Provider - Direct them to the subscription/billing page
+ //2b - person is Admin - Direct them to request access page where an email is sent to owner/admins
+ //2c - person is user - Direct them to request access page where an email is sent to owner/admins
+
+ // We use useSecretsManager because we want to get the first org the person is a part of where SM is enabled but they don't have access enabled yet
+ const adminPlusNeedsInstructionsToEnableSM = enabledOrganizations.find(
+ (o) => o.isAdmin && o.useSecretsManager,
+ );
+ const ownerNeedsToEnableSM = enabledOrganizations.find(
+ (o) => o.isOwner && !o.useSecretsManager,
+ );
+
+ // 1a If Organization has SM Enabled, but this logged in person does not have it enabled, but they are admin+ then give them instructions to enable.
+ if (adminPlusNeedsInstructionsToEnableSM != undefined) {
+ this.showHowToEnableSMForMembers(adminPlusNeedsInstructionsToEnableSM.id);
+ }
+ // 2a Owners can enable SM in the subscription area of Admin Console.
+ else if (ownerNeedsToEnableSM != undefined) {
+ this.tryItNowUrl = `/organizations/${ownerNeedsToEnableSM.id}/billing/subscription`;
+ }
+ // 1b and 2b 2c, they must be lower than an Owner, and they need access, or want their org to have access to SM.
+ else {
+ this.tryItNowUrl = "/request-sm-access";
+ }
+ }
+
+ private showHowToEnableSMForMembers(orgId: string) {
+ this.showGiveMembersAccessInstructions = true;
+ this.showSecretsManagerInformation = false;
+ this.learnMoreUrl =
+ "https://bitwarden.com/help/secrets-manager-quick-start/#give-members-access";
+ this.imageSrc = "../images/sm-give-access.png";
+ this.tryItNowUrl = `/organizations/${orgId}/members`;
+ }
+}
diff --git a/apps/web/src/images/sm-give-access.png b/apps/web/src/images/sm-give-access.png
new file mode 100644
index 0000000000..0bd8a33d10
Binary files /dev/null and b/apps/web/src/images/sm-give-access.png differ
diff --git a/apps/web/src/images/sm.webp b/apps/web/src/images/sm.webp
new file mode 100644
index 0000000000..c7fb0ebe3f
Binary files /dev/null and b/apps/web/src/images/sm.webp differ
diff --git a/apps/web/src/locales/en/messages.json b/apps/web/src/locales/en/messages.json
index 04121c7894..5fd5065b5b 100644
--- a/apps/web/src/locales/en/messages.json
+++ b/apps/web/src/locales/en/messages.json
@@ -4813,6 +4813,75 @@
"message": "or",
"description": "This will be used as part of a larger sentence, broken up to include links. The full sentence will read 'Learn more, see how it works, **or** try it now.'"
},
+ "developmentDevOpsAndITTeamsChooseBWSecret": {
+ "message": "Development, DevOps, and IT teams choose Bitwarden Secrets Manager to securely manage and deploy their infrastructure and machine secrets."
+ },
+ "centralizeSecretsManagement": {
+ "message": "Centralize secrets management."
+ },
+ "centralizeSecretsManagementDescription": {
+ "message": "Securely store and manage secrets in one location to prevent secret sprawl across your organization."
+ },
+ "preventSecretLeaks": {
+ "message": "Prevent secret leaks."
+ },
+ "preventSecretLeaksDescription": {
+ "message": "Protect secrets with end-to-end encryption. No more hard coding secrets or sharing through .env files."
+ },
+ "enhanceDeveloperProductivity": {
+ "message": "Enhance developer productivity."
+ },
+ "enhanceDeveloperProductivityDescription": {
+ "message": "Programmatically retrieve and deploy secrets at runtime so developers can focus on what matters most, like improving code quality."
+ },
+ "strengthenBusinessSecurity": {
+ "message": "Strengthen business security."
+ },
+ "strengthenBusinessSecurityDescription": {
+ "message": "Maintain tight control over machine and human access to secrets with SSO integrations, event logs, and access rotation."
+ },
+ "tryItNow": {
+ "message": "Try it now"
+ },
+ "sendRequest": {
+ "message": "Send request"
+ },
+ "addANote": {
+ "message": "Add a note"
+ },
+ "bitwardenSecretsManager": {
+ "message": "Bitwarden Secrets Manager"
+ },
+ "moreProductsFromBitwarden": {
+ "message": "More products from Bitwarden"
+ },
+ "requestAccessToSecretsManager": {
+ "message": "Request access to Secrets Manager"
+ },
+ "youNeedApprovalFromYourAdminToTrySecretsManager": {
+ "message": "You need approval from your administrator to try Secrets Manager."
+ },
+ "smAccessRequestEmailSent" : {
+ "message": "Access request for secrets manager email sent to admins."
+ },
+ "requestAccessSMDefaultEmailContent": {
+ "message": "Hi,\n\nI am requesting a subscription to Bitwarden Secrets Manager for our team. Your support would mean a great deal!\n\nBitwarden Secrets Manager is an end-to-end encrypted secrets management solution for securely storing, sharing, and deploying machine credentials like API keys, database passwords, and authentication certificates.\n\nSecrets Manager will help us to:\n\n- Improve security\n- Streamline operations\n- Prevent costly secret leaks\n\nTo request a free trial for our team, please reach out to Bitwarden.\n\nThank you for your help!"
+ },
+ "giveMembersAccess": {
+ "message": "Give members access:"
+ },
+ "viewAndSelectTheMembers" : {
+ "message" :"view and select the members you want to give access to Secrets Manager."
+ },
+ "openYourOrganizations": {
+ "message": "Open your organization's"
+ },
+ "usingTheMenuSelect": {
+ "message": "Using the menu, select"
+ },
+ "toGrantAccessToSelectedMembers": {
+ "message": "to grant access to selected members."
+ },
"sendVaultCardTryItNow": {
"message": "try it now",
"description": "This will be used as part of a larger sentence, broken up to include links. The full sentence will read 'Learn more, see how it works, or **try it now**.'"