Skip to content

Commit ade8661

Browse files
authored
Merge pull request #5879 from mozilla/mntor-4288
Bundle: Landing Page Pricing Grid (MNTOR-4288)
2 parents e0725f1 + 7f5959b commit ade8661

27 files changed

+1853
-69
lines changed

.env

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -122,26 +122,30 @@ E2E_TEST_PAYPAL_PASSWORD=
122122
# Link to start user on the subscription process. PREMIUM_ENABLED must be set to `true`.
123123
SUBSCRIPTION_BILLING_AMOUNT_YEARLY_US=13.37
124124
SUBSCRIPTION_BILLING_AMOUNT_MONTHLY_US=42.42
125+
SUBSCRIPTION_BILLING_AMOUNT_BUNDLE_INDIVIDUAL_MONTHLY_US=424
126+
SUBSCRIPTION_BILLING_AMOUNT_BUNDLE_MONTHLY_US=42
125127

126128
# SubPlat 2.0 URL, product and plan IDs, used for Plus subscriptions:
127129
FXA_SUBSCRIPTIONS_URL=https://accounts.stage.mozaws.net/subscriptions
128130
PREMIUM_PRODUCT_ID=prod_NErZh679W62lai
129131
PREMIUM_PLAN_ID_MONTHLY_US=price_1MUNq0Kb9q6OnNsL4BoJgepf
130132
PREMIUM_PLAN_ID_YEARLY_US=price_1NvqawKb9q6OnNsLRTnYrtrV
133+
PREMIUM_PLAN_ID_BUNDLE_US=price_bundle
131134

132135
# SubPlat 3.0 URL and offering ID, used for Plus subscriptions:
133136
SUBPLAT_SUBSCRIPTIONS_URL=https://payments-next.stage.fxa.nonprod.webservices.mozgcp.net
134137
SUBPLAT_MONITOR_OFFERING_ID=monitorplusstage
135138

139+
# Mozilla privacy product URLs
140+
FIREFOX_RELAY_LANDING_URL=https://monitor-stage.allizom.org
141+
MOZILLA_VPN_LANDING_URL=https://www-dev.allizom.org/products/vpn
142+
136143
# This date is used to direct users who signed up after data broker scanning
137144
# was released to the welcome flow. Users who had signed up before and thus
138145
# have seen data breach results before, will be able to see their known breaches
139146
# first:
140147
BROKER_SCAN_RELEASE_DATE=2024-02-06
141148

142-
FIREFOX_RELAY_LANDING_URL=https://monitor-stage.allizom.org
143-
MOZILLA_VPN_LANDING_URL=https://www-dev.allizom.org/products/vpn
144-
145149
MONTHLY_SUBSCRIBERS_QUOTA=
146150
MONTHLY_SCANS_QUOTA=
147151
STATS_TOKEN=

.env.local.example

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,8 @@ EMAIL_FROM="Mozilla Monitor Stage <[email protected]>"
5050
NEXT_PUBLIC_GA4_DEBUG_MODE=true
5151
SUBSCRIPTION_BILLING_AMOUNT_YEARLY_US=13.37
5252
SUBSCRIPTION_BILLING_AMOUNT_MONTHLY_US=42.42
53+
SUBSCRIPTION_BILLING_AMOUNT_BUNDLE_INDIVIDUAL_MONTHLY_US=424
54+
SUBSCRIPTION_BILLING_AMOUNT_BUNDLE_MONTHLY_US=42
5355

5456
# HIBP setup
5557
HIBP_KANON_API_ROOT=https://enterprise.stage-api.haveibeenpwned.com
@@ -63,6 +65,7 @@ FXA_SUBSCRIPTIONS_URL=https://accounts.stage.mozaws.net/subscriptions
6365
PREMIUM_PRODUCT_ID=prod_NErZh679W62lai
6466
PREMIUM_PLAN_ID_MONTHLY_US=price_1MUNq0Kb9q6OnNsL4BoJgepf
6567
PREMIUM_PLAN_ID_YEARLY_US=price_1NvqawKb9q6OnNsLRTnYrtrV
68+
PREMIUM_PLAN_ID_BUNDLE_US=price_bundle
6669

6770
# SubPlat 3.0 URL and offering ID, used for Plus subscriptions:
6871
SUBPLAT_SUBSCRIPTIONS_URL=https://payments-next.stage.fxa.nonprod.webservices.mozgcp.net
@@ -78,6 +81,10 @@ OAUTH_PROFILE_URI=https://profile.stage.mozaws.net/v1/profile
7881
OAUTH_TOKEN_URI=https://oauth.stage.mozaws.net/v1/token
7982
OAUTH_ACCOUNT_URI=https://oauth.stage.mozaws.net/v1
8083

84+
# Mozilla privacy product URLs
85+
FIREFOX_RELAY_LANDING_URL=https://monitor-stage.allizom.org
86+
MOZILLA_VPN_LANDING_URL=https://www-dev.allizom.org/products/vpn
87+
8188
# Which environment to run end-to-end tests against:
8289
E2E_TEST_ENV=local
8390
E2E_TEST_BASE_URL=http://localhost:6060
@@ -94,7 +101,3 @@ GCP_PUBSUB_PROJECT_ID=your-project-name
94101
GCP_PUBSUB_TOPIC_NAME=hibp-breaches
95102
GCP_PUBSUB_SUBSCRIPTION_NAME=hibp-cron
96103
PUBSUB_EMULATOR_HOST=localhost:8085
97-
98-
# Mozilla privacy product URLs
99-
FIREFOX_RELAY_LANDING_URL=https://monitor-stage.allizom.org
100-
MOZILLA_VPN_LANDING_URL=https://www-dev.allizom.org/products/vpn

.github/workflows/e2e_pr_full.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,7 @@ jobs:
8989
PREMIUM_PRODUCT_ID: ${{ secrets.STAGE_PREMIUM_PRODUCT_ID }}
9090
PREMIUM_PLAN_ID_MONTHLY_US: ${{ secrets.STAGE_PREMIUM_PLAN_ID_MONTHLY_US }}
9191
PREMIUM_PLAN_ID_YEARLY_US: ${{ secrets.STAGE_PREMIUM_PLAN_ID_YEARLY_US }}
92+
PREMIUM_PLAN_ID_BUNDLE_US: ${{ secrets.STAGE_PREMIUM_PLAN_ID_BUNDLE_US }}
9293
REDIS_URL: "redis://redis.mock"
9394
- uses: actions/upload-artifact@v4
9495
if: always()

locales-pending/bundle.ftl

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
-brand-vpn = VPN
66
-brand-relay-new = Relay
77
-brand-relay-premium = Relay Premium
8+
-product-name-privacy-products-bundle = Privacy Protection Plan
89
910
bundle-onboarding-title = You’re ready to <gradient>protect your privacy.</gradient>
1011
bundle-onboarding-subtitle = Go to each tool to get started.

locales-pending/landing-redesign-experiment.ftl

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,12 +53,73 @@ landing-redesign-info-block-cta-label = Get your free scan
5353

5454
landing-redesign-pricing-plans-section-title = Choose your level of protection
5555
landing-redesign-pricing-plans-section-description = Your privacy is our priority, so data breach monitoring is always free. For more robust protection, { -brand-monitor-plus } includes continuous automatic removal of your personal information.
56+
landing-redesign-pricing-plans-bundle-section-description = 30-day money-back guarantee (first-time customers only)
5657
landing-redesign-pricing-plans-cards-title = Pricing plans
5758
59+
landing-redesign-pricing-plans-card-cta-monthly-billing-label = Billed monthly
60+
# Variables:
61+
# $yearlyPrice (string) - annual plan’s price in total, including currency, e.g. "$13.37"
62+
landing-redesign-pricing-plans-card-cta-yearly-billing-label = { $yearlyPrice } billed yearly
63+
# There is not much room in the UI for this string:
64+
# Abbreviating “month” with “mo”.
65+
# Variables:
66+
# $monthlyPrice (string) - monthly plan’s price, including currency, e.g. "$13.37"
67+
landing-redesign-pricing-plans-card-cta-monthly = { $monthlyPrice }/mo
68+
landing-redesign-pricing-plans-card-cta-label = Get started
69+
70+
# Variables:
71+
# $discountPercentage is the percentage you can save subscribing to the bundle plan
72+
landing-redesign-pricing-plans-card-bundle-label = Best value, save { $discountPercentage }%
73+
landing-redesign-pricing-plans-card-bundle-title = { -product-name-privacy-products-bundle }
74+
landing-redesign-pricing-plans-card-bundle-subtitle = 3 privacy tools, 1 price
75+
landing-redesign-pricing-plans-bundle-item-mozilla-vpn-title = { -brand-mozilla-vpn }
76+
landing-redesign-pricing-plans-bundle-item-mozilla-vpn-description = Online activity protection
77+
landing-redesign-pricing-plans-bundle-item-monitor-plus-title = { -brand-monitor-plus }
78+
landing-redesign-pricing-plans-bundle-item-monitor-plus-description = Data broker protection
79+
landing-redesign-pricing-plans-bundle-item-relay-premium-title = { -brand-relay-premium }
80+
landing-redesign-pricing-plans-bundle-item-relay-premium-description = Unlimited email masks for spam protection
81+
5882
landing-redesign-pricing-plans-card-plus-label = Recommended
5983
landing-redesign-pricing-plans-card-plus-title = { -brand-monitor-plus }
6084
landing-redesign-pricing-plans-card-plus-subtitle = Automatic data removal requests
6185
landing-redesign-pricing-plans-card-plus-cta-label = Get { -brand-monitor-plus }
86+
landing-redesign-pricing-plans-card-plus-with-bundle-included-features-label = Everything in { -brand-monitor }
87+
88+
landing-redesign-pricing-plans-card-plus-with-bundle-subtitle = Automatic personal info removal
89+
landing-redesign-pricing-plans-card-plus-with-bundle-feature-item-alt-label = Includes
90+
# Variables:
91+
# $data_broker_sites_total_num is the total number of data broker sites available to scan. It will always be more than 1.
92+
landing-redesign-pricing-plans-card-plus-with-bundle-feature-item-one = {
93+
$data_broker_sites_total_num ->
94+
*[other] <b>Monthly scans</b> of { $data_broker_sites_total_num }+ data brokers that may be selling your personal info
95+
}
96+
landing-redesign-pricing-plans-card-plus-with-bundle-feature-item-two = <b>Automatic removal</b> of personal info from data broker sites
97+
landing-redesign-pricing-plans-card-plus-with-bundle-feature-item-three = Receive <b>data broker exposure alerts</b>
98+
# Variables:
99+
# $max_email_addresses is the max number of email addresses that can be monitored for breaches. It will always be more than 1.
100+
landing-redesign-pricing-plans-card-plus-with-bundle-feature-item-four = {
101+
$max_email_addresses ->
102+
*[other] Breach alert monitoring for <b>{ $max_email_addresses } email addresses</b>
103+
}
104+
105+
landing-redesign-pricing-plans-card-free-with-bundle-subtitle = Free data breach alerts
106+
# Variables:
107+
# $data_broker_sites_total_num is the total number of data broker sites available to scan. It will always be more than 1.
108+
landing-redesign-pricing-plans-card-free-with-bundle-feature-item-one = {
109+
$data_broker_sites_total_num ->
110+
*[other] <b>One-time scan</b> of { $data_broker_sites_total_num }+ data brokers that may be selling your personal info
111+
}
112+
landing-redesign-pricing-plans-card-free-with-bundle-feature-item-two = <b>Guided manual removal</b> of personal info from data broker sites
113+
landing-redesign-pricing-plans-card-free-with-bundle-feature-item-three = <b>Continuous monitoring</b> for data broker exposures and data breaches
114+
landing-redesign-pricing-plans-card-free-with-bundle-feature-item-four = Receive <b>data breach exposure alerts</b>
115+
# Variables:
116+
# $max_email_addresses is the max number of email addresses that can be monitored for breaches. It will always be more than 1.
117+
landing-redesign-pricing-plans-card-free-with-bundle-feature-item-five = {
118+
$max_email_addresses ->
119+
*[other] Breach alert monitoring for <b>{ $max_email_addresses } email addresses</b>
120+
}
121+
landing-redesign-pricing-plans-card-free-with-bundle-price-label = Free
122+
62123
# Variables:
63124
# $data_broker_sites_total_num is the total number of data broker sites available to scan. It will always be more than 1.
64125
landing-redesign-pricing-plans-card-plus-feature-item-one = {

src/app/(proper_react)/(redesign)/(authenticated)/user/(dashboard)/settings/panels/SettingsPanelEditInfo.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -104,7 +104,7 @@ function MonitoredEmail(props: {
104104
>
105105
{l10n.getString("settings-resend-email-verification-link")}
106106
{isVerificationEmailResent && (
107-
<CheckIcon alt="" width={14} height={14} />
107+
<CheckIcon alt="" width={24} height={24} />
108108
)}
109109
</Button>
110110
</div>

src/app/(proper_react)/(redesign)/(authenticated)/user/(dashboard)/settings/panels/SettingsPanelEditInfoRedesign.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,7 @@ function MonitoredEmail(props: {
9292
}}
9393
>
9494
{isVerificationEmailResent ? (
95-
<CheckIcon alt="" width={14} height={14} />
95+
<CheckIcon alt="" width={24} height={24} />
9696
) : (
9797
<LinkIcon alt="" />
9898
)}

src/app/(proper_react)/(redesign)/(public)/FreeScanCta.tsx

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,11 +16,17 @@ import { AccountsMetricsFlowContext } from "../../../../contextProviders/account
1616
import { getFreeScanSearchParams } from "../../../functions/universal/getFreeScanSearchParams";
1717
import { CONST_URL_MONITOR_LANDING_PAGE_ID } from "../../../../constants";
1818
import { useViewTelemetry } from "../../../hooks/useViewTelemetry";
19+
import {
20+
ButtonColorThemes,
21+
ButtonVariants,
22+
} from "../../../components/client/Button";
1923

2024
export const FreeScanCta = (
2125
props: Props & {
2226
experimentData: ExperimentData["Features"];
2327
showCtaOnly?: boolean;
28+
ctaButtonVariant?: ButtonVariants;
29+
ctaButtonTheme?: ButtonColorThemes;
2430
},
2531
) => {
2632
const l10n = useL10n();
@@ -63,7 +69,8 @@ export const FreeScanCta = (
6369
<div>
6470
<TelemetryButton
6571
buttonRef={refViewTelemetry as RefObject<HTMLButtonElement | null>}
66-
variant="primary"
72+
variant={props.ctaButtonVariant ?? "primary"}
73+
theme={props.ctaButtonTheme}
6774
event={{
6875
module: "ctaButton",
6976
name: "click",

src/app/(proper_react)/(redesign)/(public)/LandingViewRedesign/LandingViewRedesign.stories.tsx

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,3 +80,31 @@ export const LandingRedesignUsScanLimit: Story = {
8080
scanLimitReached: true,
8181
},
8282
};
83+
84+
export const LandingRedesignUsWithPrivacyProductBundle: Story = {
85+
name: "US visitors - With Privacy Product Bundle",
86+
args: {
87+
eligibleForPremium: true,
88+
countryCode: "us",
89+
scanLimitReached: false,
90+
enabledFeatureFlags: ["LandingPageRedesign", "PrivacyProductsBundle"],
91+
bundleProductUrl: {
92+
relay: process.env.FIREFOX_RELAY_LANDING_URL ?? "",
93+
vpn: process.env.MOZILLA_VPN_LANDING_URL ?? "",
94+
},
95+
},
96+
};
97+
98+
export const LandingRedesignUsScanLimitWithPrivacyProductBundle: Story = {
99+
name: "US visitors - Scan limit reached and with Privacy Product Bundle",
100+
args: {
101+
eligibleForPremium: true,
102+
countryCode: "us",
103+
scanLimitReached: true,
104+
enabledFeatureFlags: ["LandingPageRedesign", "PrivacyProductsBundle"],
105+
bundleProductUrl: {
106+
relay: process.env.FIREFOX_RELAY_LANDING_URL ?? "",
107+
vpn: process.env.MOZILLA_VPN_LANDING_URL ?? "",
108+
},
109+
},
110+
};

0 commit comments

Comments
 (0)