This commit is contained in:
dev.daminik00 2025-10-18 23:07:31 +02:00
parent 0700e77a02
commit b7bd5ba61d
31 changed files with 268 additions and 62 deletions

View File

@ -248,7 +248,6 @@
"payment_error": "Something went wrong. Please try again later.",
"select_product_error": "Please select a product",
"skip_offer": "Skip offer",
"products": {
"main_ultra_pack": {
"title": "ULTRA PACK",
@ -396,6 +395,7 @@
"reserved-for": "Reserved for {time}"
}
}
}
},
"Soulmate": {}
}
}
}

View File

@ -255,7 +255,6 @@
"payment_error": "Something went wrong. Please try again later.",
"select_product_error": "Please select a product",
"skip_offer": "Skip offer",
"products": {
"main_ultra_pack": {
"title": "ULTRA PACK",
@ -607,6 +606,212 @@
"cost-for-one-day": "Your cost for one day after the trial is {cost}"
}
}
},
"Soulmate": {
"v1": {
"Landing": {
"header-timer": {
"title": "Reserved for {time}"
},
"header": {
"title": "Special Offer!",
"description": "Everything is free, trial period included!"
},
"hi-block": {
"title": "Hello, Sunshine 👋",
"description": "Your well-being and happiness are our top priority!",
"card": {
"title": "That's why we've decided to give you a personalised plan and access to a trial version of our app for FREE!",
"image-description": "soulmate portraits delivered today",
"count": "900+"
}
},
"what-get": {
"title": "What you will receive:",
"detailed-portrait": {
"header": {
"title": "A detailed portrait of your other half is ready"
}
},
"guide": {
"header": {
"title": "Guide “Finding the One”"
},
"list": {
"1": "Why love doesn't come - and how to open the way to it",
"2": "7 signs that you have met your soulmate",
"3": "The main secret of couples who stay together",
"4": "Mistakes that destroy even the strongest feelings",
"5": "5 habits that make relationships happy"
}
},
"individual-advice": {
"header": {
"title": "Personalized advice from a personal relationship psychologist"
},
"messages": {
"me": {
"text": "Why do I still doubt whether he loves me?",
"time": "16:38 AM"
},
"advisor": {
"text": "Because you feel that the connection is special. Fate was right—you are reflections of each other.",
"time": "16:39 AM"
}
},
"typing": "typing "
},
"search-compatible-partner": {
"header": {
"title": "Search for the most compatible partner"
},
"content": {
"partner-name": "Your significant other",
"percent": "97%",
"compatibility": "Compatibility",
"bars": {
"1": {
"percent": "92",
"text": "Love",
"colors": {
"path": "#FD4B4B",
"trail": "#FCE7F3"
}
},
"2": {
"percent": "88",
"text": "Sex",
"colors": {
"path": "#8B5CF6",
"trail": "#EDE9FE"
}
},
"3": {
"percent": "79",
"text": "Family",
"colors": {
"path": "#4F46E5",
"trail": "##EEF2FF"
}
}
}
}
}
},
"special-offer": {
"title": "Special price",
"prices": {
"old-price": {
"description": "Regular price"
},
"new-price": {
"description": "Today"
}
},
"trial-offer": {
"title": "DOUBLED!",
"description": "Full access to all materials"
}
},
"plan-also-includes": {
"title": "Your plan also includes:",
"list": {
"items": {
"1": {
"title": "Чат с экспертом",
"text": "Задай свой вопрос и получи первый совет уже сегодня."
},
"2": {
"title": "Анализ совместимости",
"text": "Пойми, почему вы притягиваетесь друг к другу - и какие различия могут мешать гармонии."
},
"3": {
"title": "Как говорить о чувствах и быть понятым",
"text": "Пошаговый гайд, который поможет восстановить близость и искреннее общение."
},
"4": {
"title": "Медитации и аффирмации для сердца",
"text": "Практики, которые открывают внутреннюю уверенность и притягивают любовь."
}
}
}
},
"reviews": {
"title": "What our users say:",
"items": {
"1": {
"username": "@anna.smith28",
"flag": "🇺🇸",
"text": "The drawing was made before we met, and it matched down to the smallest detail: the same gaze, the same mole. We simply couldn't believe it! Now the portrait hangs in our home as a sign of destiny.",
"answer": {
"title": "Response from the support team",
"text": "Anna, it's just the magic of fate! We are very happy that your portrait has become part of your love story. May it remind you how important it is to believe in the signs of the universe 🌹"
}
},
"2": {
"username": "@mike.andrews_89",
"flag": "🇺🇸",
"text": "I decided to check whether my wife was truly my other half. The portrait matched her down to the last detail—the same gaze, the same energy. We both felt as if fate had just confirmed our union.",
"answer": {
"title": "Response from the support team",
"text": "That's amazing! Stories like this prove that true love really does have an impact on an energetic level. May your portrait preserve the warmth of your connection for many years to come!"
}
},
"3": {
"username": "@emily.harris_ang...",
"flag": "🇬🇧",
"text": "The “Finding the One” guide changed my life! The portrait was 100% accurate, and I met my love in a museum, just as predicted! ✨",
"answer": {
"title": "Response from the support team",
"text": "Elena, your story inspires us! Thank you for sharing your success. May your love be strong and long-lasting!"
}
}
}
},
"statistics": {
"title": "899,247",
"description": "People have already found love",
"more-avatars": "+2K",
"period-statistics": {
"month": {
"title": "54K",
"text": "Per month"
},
"today": {
"title": "2K",
"text": "Today"
}
}
},
"real-time-activity": {
"title": "Real-time activity",
"text": "<bold>@elena_art</bold> received a portrait",
"time": "2 мин назад"
},
"money-back-guarantee": {
"title": "100% Money Back Guarantee",
"term": "30 DAYS",
"description": "We are confident that we can help you gain a deeper understanding of your partner and show you what they are really like. After receiving excellent customer reviews, <bold>we are ready to give you a 100% refund</bold> if this report and portrait are not useful to you.",
"footer": "Без вопросов. Без риска."
},
"guaranteed-security-payments": "Guaranteed security payments",
"button-continue": "CONTINUE"
},
"SpecialOffer": {
"title": "Special Offer!",
"start-trial": "Start your {days}-day trial",
"cancel-anytime": "No pressure. Cancel anytime",
"policy": "By continuing you agree that if you don't cancel prior to the end of the {days}-days trial, you will automatically be charged {price} every {billingPeriod} until you cancel in settings. Learn more about cancellation and <refundLink>Refund policy</refundLink> in <subscriptionLink>Subscription terms</subscriptionLink>",
"button-continue": "CONTINUE",
"pricing-summary-total-today": "Total today:",
"pricing-summary-code-applied": "Code applied!",
"pricing-summary-cost-after-trial": "Your cost per 2 weeks after trial",
"pricing-summary-trial-description": "You will be charged only {trialPrice} for your {trialPeriod} trial. Your plan will then cost {price} per {billingPeriod}. Subscription renews automatically until cancelled. You can cancel at any time before the end of the trial.",
"reserved-for": "Reserved for {time}",
"save-every-period": "Save {price} every period",
"cost-for-one-day": "Your cost for one day after the trial is {cost}"
}
}
}
},
"SaveOff": {
@ -640,4 +845,4 @@
"month": "{count, plural, zero {#-months} one {#-month} two {#-months} few {#-months} many {#-months} other {#-months}}",
"year": "{count, plural, zero {#-years} one {#-year} two {#-years} few {#-years} many {#-years} other {#-years}}"
}
}
}

View File

@ -248,7 +248,6 @@
"payment_error": "Something went wrong. Please try again later.",
"select_product_error": "Please select a product",
"skip_offer": "Skip offer",
"products": {
"main_ultra_pack": {
"title": "ULTRA PACK",
@ -396,6 +395,7 @@
"reserved-for": "Reserved for {time}"
}
}
}
},
"Soulmate": {}
}
}
}

View File

@ -23,10 +23,10 @@ import { Currency, ELocalesPlacement } from "@/types";
import styles from "./page.module.scss";
const payload = {
funnel: ELocalesPlacement.EmailMarketingCompatibilityV2,
funnel: ELocalesPlacement.EmailMarketingSoulmateV1,
};
export default async function EmailMarketingCompatibilityV1Landing() {
export default async function EmailMarketingSoulmateV1Landing() {
const payment = (await loadFunnelPaymentById(
payload,
"main"

View File

@ -9,7 +9,7 @@ import {
import { Typography } from "@/components/ui";
import { loadFunnelPaymentById } from "@/entities/session/funnel/loaders";
import { IFunnelPaymentPlacement } from "@/entities/session/funnel/types";
import { translatePathEmailMarketingCompatibilityV2 } from "@/shared/constants/translate";
import { translatePathEmailMarketingSoulmateV1 } from "@/shared/constants/translate";
import { getPeriodTextServer } from "@/shared/utils/period-server";
import { getFormattedPrice } from "@/shared/utils/price";
import { Currency, ELocalesPlacement } from "@/types";
@ -19,12 +19,12 @@ import GuaranteeIcon from "./guarantee.svg";
import styles from "./page.module.scss";
const payload = {
funnel: ELocalesPlacement.EmailMarketingCompatibilityV2,
funnel: ELocalesPlacement.EmailMarketingSoulmateV1,
};
export default async function SpecialOfferPage() {
const t = await getTranslations(
translatePathEmailMarketingCompatibilityV2("SpecialOffer")
translatePathEmailMarketingSoulmateV1("SpecialOffer")
);
const payment = (await loadFunnelPaymentById(

View File

@ -6,13 +6,13 @@ import { useTranslations } from "next-intl";
import { Typography } from "@/components/ui";
import { useUser } from "@/providers/user-provider";
import { emailMarketingCompV2Images } from "@/shared/constants/images";
import { translatePathEmailMarketingCompatibilityV2 } from "@/shared/constants/translate";
import { translatePathEmailMarketingSoulmateV1 } from "@/shared/constants/translate";
import styles from "./DetailedPortraitCard.module.scss";
export default function DetailedPortraitCard() {
const t = useTranslations(
translatePathEmailMarketingCompatibilityV2(
translatePathEmailMarketingSoulmateV1(
"Landing.what-get.detailed-portrait"
)
);

View File

@ -3,13 +3,13 @@ import { useTranslations } from "next-intl";
import { Typography } from "@/components/ui";
import { emailMarketingCompV2Images } from "@/shared/constants/images";
import { translatePathEmailMarketingCompatibilityV2 } from "@/shared/constants/translate";
import { translatePathEmailMarketingSoulmateV1 } from "@/shared/constants/translate";
import styles from "./GuaranteedSecurityPayments.module.scss";
export default function GuaranteedSecurityPayments() {
const t = useTranslations(
translatePathEmailMarketingCompatibilityV2("Landing")
translatePathEmailMarketingSoulmateV1("Landing")
);
return (
<div className={styles.container}>

View File

@ -2,13 +2,13 @@ import { getTranslations } from "next-intl/server";
import { Typography } from "@/components/ui";
import { BlurComponent } from "@/components/widgets";
import { translatePathEmailMarketingCompatibilityV2 } from "@/shared/constants/translate";
import { translatePathEmailMarketingSoulmateV1 } from "@/shared/constants/translate";
import styles from "./GuideCard.module.scss";
export default async function GuideCard() {
const t = await getTranslations(
translatePathEmailMarketingCompatibilityV2("Landing.what-get.guide")
translatePathEmailMarketingSoulmateV1("Landing.what-get.guide")
);
const list = t.raw("list") as Record<string, string>;

View File

@ -1,13 +1,13 @@
import { getTranslations } from "next-intl/server";
import { Typography } from "@/components/ui";
import { translatePathEmailMarketingCompatibilityV2 } from "@/shared/constants/translate";
import { translatePathEmailMarketingSoulmateV1 } from "@/shared/constants/translate";
import styles from "./Header.module.scss";
export default async function Header() {
const t = await getTranslations(
translatePathEmailMarketingCompatibilityV2("Landing.header")
translatePathEmailMarketingSoulmateV1("Landing.header")
);
return (

View File

@ -5,7 +5,7 @@ import clsx from "clsx";
import { Typography } from "@/components/ui";
import { useTimer } from "@/hooks/timer/useTimer";
import { translatePathEmailMarketingCompatibilityV2 } from "@/shared/constants/translate";
import { translatePathEmailMarketingSoulmateV1 } from "@/shared/constants/translate";
import styles from "./HeaderTimer.module.scss";
@ -13,7 +13,7 @@ type IHeaderTimerProps = React.ComponentProps<"div">;
export default function HeaderTimer({ className }: IHeaderTimerProps) {
const t = useTranslations(
translatePathEmailMarketingCompatibilityV2("Landing.header-timer")
translatePathEmailMarketingSoulmateV1("Landing.header-timer")
);
const { time } = useTimer({
initialSeconds: 600,

View File

@ -2,13 +2,13 @@ import { getTranslations } from "next-intl/server";
import { Typography, UserAvatar } from "@/components/ui";
import { emailMarketingCompV2Images } from "@/shared/constants/images";
import { translatePathEmailMarketingCompatibilityV2 } from "@/shared/constants/translate";
import { translatePathEmailMarketingSoulmateV1 } from "@/shared/constants/translate";
import styles from "./HiBlock.module.scss";
export default async function HiBlock() {
const t = await getTranslations(
translatePathEmailMarketingCompatibilityV2("Landing.hi-block")
translatePathEmailMarketingSoulmateV1("Landing.hi-block")
);
return (

View File

@ -9,7 +9,7 @@ import {
} from "@/components/domains/chat";
import { Typography, UserAvatar } from "@/components/ui";
import { emailMarketingCompV2Images } from "@/shared/constants/images";
import { translatePathEmailMarketingCompatibilityV2 } from "@/shared/constants/translate";
import { translatePathEmailMarketingSoulmateV1 } from "@/shared/constants/translate";
import styles from "./IndividualAdviceCard.module.scss";
@ -22,7 +22,7 @@ type TMessagesKey = "me" | "advisor";
export default async function IndividualAdviceCard() {
const t = await getTranslations(
translatePathEmailMarketingCompatibilityV2(
translatePathEmailMarketingSoulmateV1(
"Landing.what-get.individual-advice"
)
);

View File

@ -6,18 +6,18 @@ import { useTranslations } from "next-intl";
import { Button, Typography } from "@/components/ui";
import { BlurComponent } from "@/components/widgets";
import { ROUTES } from "@/shared/constants/client-routes";
import { translatePathEmailMarketingCompatibilityV2 } from "@/shared/constants/translate";
import { translatePathEmailMarketingSoulmateV1 } from "@/shared/constants/translate";
import styles from "./LandingButtonWrapper.module.scss";
export default function LandingButtonWrapper() {
const router = useRouter();
const t = useTranslations(
translatePathEmailMarketingCompatibilityV2("Landing")
translatePathEmailMarketingSoulmateV1("Landing")
);
const handleContinue = () => {
router.push(ROUTES.emailMarketingCompatibilityV2SpecialOffer());
router.push(ROUTES.emailMarketingSoulmateV1SpecialOffer());
};
return (

View File

@ -1,7 +1,7 @@
import { getTranslations } from "next-intl/server";
import { Typography } from "@/components/ui";
import { translatePathEmailMarketingCompatibilityV2 } from "@/shared/constants/translate";
import { translatePathEmailMarketingSoulmateV1 } from "@/shared/constants/translate";
import GuaranteeIcon from "./guarantee.svg";
@ -9,7 +9,7 @@ import styles from "./MoneyBackGuarantee.module.scss";
export default async function MoneyBackGuarantee() {
const t = await getTranslations(
translatePathEmailMarketingCompatibilityV2("Landing.money-back-guarantee")
translatePathEmailMarketingSoulmateV1("Landing.money-back-guarantee")
);
return (
<div className={styles.container}>

View File

@ -1,7 +1,7 @@
import { getTranslations } from "next-intl/server";
import { Typography } from "@/components/ui";
import { translatePathEmailMarketingCompatibilityV2 } from "@/shared/constants/translate";
import { translatePathEmailMarketingSoulmateV1 } from "@/shared/constants/translate";
import styles from "./PlanAlsoIncludes.module.scss";
@ -12,7 +12,7 @@ interface IListItem {
export default async function PlanAlsoIncludes() {
const t = await getTranslations(
translatePathEmailMarketingCompatibilityV2("Landing.plan-also-includes")
translatePathEmailMarketingSoulmateV1("Landing.plan-also-includes")
);
const listItems = Object.values(

View File

@ -1,7 +1,7 @@
import { getTranslations } from "next-intl/server";
import { Typography } from "@/components/ui";
import { translatePathEmailMarketingCompatibilityV2 } from "@/shared/constants/translate";
import { translatePathEmailMarketingSoulmateV1 } from "@/shared/constants/translate";
import { getFormattedPrice } from "@/shared/utils/price";
import { Currency } from "@/types";
@ -23,7 +23,7 @@ export default async function Prices({
currency,
}: IPricesProps) {
const t = await getTranslations(
translatePathEmailMarketingCompatibilityV2("Landing.special-offer.prices")
translatePathEmailMarketingSoulmateV1("Landing.special-offer.prices")
);
return (

View File

@ -2,7 +2,7 @@ import { getTranslations } from "next-intl/server";
import clsx from "clsx";
import { Typography } from "@/components/ui";
import { translatePathEmailMarketingCompatibilityV2 } from "@/shared/constants/translate";
import { translatePathEmailMarketingSoulmateV1 } from "@/shared/constants/translate";
import { getPeriodTextServer } from "@/shared/utils/period-server";
import { getFormattedPrice } from "@/shared/utils/price";
import { Currency } from "@/types";
@ -30,7 +30,7 @@ export default async function PricingSummary({
currency,
}: PricingSummaryProps) {
const t = await getTranslations(
translatePathEmailMarketingCompatibilityV2("SpecialOffer")
translatePathEmailMarketingSoulmateV1("SpecialOffer")
);
return (

View File

@ -2,13 +2,13 @@ import { getTranslations } from "next-intl/server";
import { Typography, UserAvatar } from "@/components/ui";
import { emailMarketingCompV2Images } from "@/shared/constants/images";
import { translatePathEmailMarketingCompatibilityV2 } from "@/shared/constants/translate";
import { translatePathEmailMarketingSoulmateV1 } from "@/shared/constants/translate";
import styles from "./RealTimeActivity.module.scss";
export default async function RealTimeActivity() {
const t = await getTranslations(
translatePathEmailMarketingCompatibilityV2("Landing.real-time-activity")
translatePathEmailMarketingSoulmateV1("Landing.real-time-activity")
);
return (

View File

@ -2,7 +2,7 @@ import { useTranslations } from "next-intl";
import { Typography } from "@/components/ui";
import { emailMarketingCompV2Images } from "@/shared/constants/images";
import { translatePathEmailMarketingCompatibilityV2 } from "@/shared/constants/translate";
import { translatePathEmailMarketingSoulmateV1 } from "@/shared/constants/translate";
import Review, { IReviewProps } from "../Review/Review";
@ -14,7 +14,7 @@ type ILocalReview = Pick<IReviewProps, "stars" | "avatar">;
export default function Reviews() {
const t = useTranslations(
translatePathEmailMarketingCompatibilityV2("Landing.reviews")
translatePathEmailMarketingSoulmateV1("Landing.reviews")
);
const reviewsFromTranslate = Object.values(

View File

@ -5,7 +5,7 @@ import { useTranslations } from "next-intl";
import { Typography } from "@/components/ui";
import { emailMarketingCompV2Images } from "@/shared/constants/images";
import { translatePathEmailMarketingCompatibilityV2 } from "@/shared/constants/translate";
import { translatePathEmailMarketingSoulmateV1 } from "@/shared/constants/translate";
import styles from "./SearchCompatiblePartnerCard.module.scss";
@ -23,7 +23,7 @@ interface IBar {
export default function SearchCompatiblePartnerCard() {
const t = useTranslations(
translatePathEmailMarketingCompatibilityV2(
translatePathEmailMarketingSoulmateV1(
"Landing.what-get.search-compatible-partner"
)
);

View File

@ -2,7 +2,7 @@ import { getTranslations } from "next-intl/server";
import { Typography } from "@/components/ui";
import { IFunnelPaymentVariant } from "@/entities/session/funnel/types";
import { translatePathEmailMarketingCompatibilityV2 } from "@/shared/constants/translate";
import { translatePathEmailMarketingSoulmateV1 } from "@/shared/constants/translate";
import { Currency } from "@/types";
import { PeriodType } from "@/types/period";
@ -27,7 +27,7 @@ export default async function SpecialOffer({
trialPeriod,
}: ISpecialOfferProps) {
const t = await getTranslations(
translatePathEmailMarketingCompatibilityV2("Landing.special-offer")
translatePathEmailMarketingSoulmateV1("Landing.special-offer")
);
return (

View File

@ -6,7 +6,7 @@ import { useTranslations } from "next-intl";
import { Button, Typography } from "@/components/ui";
import { BlurComponent } from "@/components/widgets";
import { ROUTES } from "@/shared/constants/client-routes";
import { translatePathEmailMarketingCompatibilityV2 } from "@/shared/constants/translate";
import { translatePathEmailMarketingSoulmateV1 } from "@/shared/constants/translate";
import styles from "./SpecialOfferButtonWrapper.module.scss";
@ -23,7 +23,7 @@ export default function SpecialOfferButtonWrapper({
}: SpecialOfferButtonWrapperProps) {
const router = useRouter();
const t = useTranslations(
translatePathEmailMarketingCompatibilityV2("SpecialOffer")
translatePathEmailMarketingSoulmateV1("SpecialOffer")
);
const openPaymentModal = () => {

View File

@ -3,7 +3,7 @@ import { getTranslations } from "next-intl/server";
import { Typography } from "@/components/ui";
import { emailMarketingCompV2Images } from "@/shared/constants/images";
import { translatePathEmailMarketingCompatibilityV2 } from "@/shared/constants/translate";
import { translatePathEmailMarketingSoulmateV1 } from "@/shared/constants/translate";
import styles from "./Statistics.module.scss";
@ -13,7 +13,7 @@ const avatarsUrl = Array.from({ length: 6 }, (_, i) =>
export default async function Statistics() {
const t = await getTranslations(
translatePathEmailMarketingCompatibilityV2("Landing.statistics")
translatePathEmailMarketingSoulmateV1("Landing.statistics")
);
return (

View File

@ -1,7 +1,7 @@
import { getTranslations } from "next-intl/server";
import { Typography } from "@/components/ui";
import { translatePathEmailMarketingCompatibilityV2 } from "@/shared/constants/translate";
import { translatePathEmailMarketingSoulmateV1 } from "@/shared/constants/translate";
import { getPeriodTextServer } from "@/shared/utils/period-server";
import { PeriodType } from "@/types/period";
@ -19,7 +19,7 @@ export default async function TrialIntervalOffer({
newTrialInterval,
}: ITrialIntervalOfferProps) {
const t = await getTranslations(
translatePathEmailMarketingCompatibilityV2(
translatePathEmailMarketingSoulmateV1(
"Landing.special-offer.trial-offer"
)
);

View File

@ -1,7 +1,7 @@
import { getTranslations } from "next-intl/server";
import { Typography } from "@/components/ui";
import { translatePathEmailMarketingCompatibilityV2 } from "@/shared/constants/translate";
import { translatePathEmailMarketingSoulmateV1 } from "@/shared/constants/translate";
import DetailedPortraitCard from "../DetailedPortraitCard/DetailedPortraitCard";
import GuideCard from "../GuideCard/GuideCard";
@ -12,7 +12,7 @@ import styles from "./WhatGet.module.scss";
export default async function WhatGet() {
const t = await getTranslations(
translatePathEmailMarketingCompatibilityV2("Landing.what-get")
translatePathEmailMarketingSoulmateV1("Landing.what-get")
);
return (

View File

@ -15,7 +15,7 @@ const profilePrefix = "profile";
const retainingFunnelPrefix = "retaining";
const emailMarketingPrefix = "em";
const emailMarketingCompatibilityV1Prefix = `${emailMarketingPrefix}/c/v1`;
const emailMarketingCompatibilityV2Prefix = `${emailMarketingPrefix}/c/v2`;
const emailMarketingSoulmateV1Prefix = `${emailMarketingPrefix}/s/v1`;
export const ROUTES = {
home: () => createRoute([]),
@ -91,11 +91,11 @@ export const ROUTES = {
emailMarketingCompatibilityV1SpecialOffer: () =>
createRoute([emailMarketingCompatibilityV1Prefix, "special-offer"]),
// Email Marketing Compatibility V2
emailMarketingCompatibilityV2Landing: () =>
createRoute([emailMarketingCompatibilityV2Prefix, "landing"]),
emailMarketingCompatibilityV2SpecialOffer: () =>
createRoute([emailMarketingCompatibilityV2Prefix, "special-offer"]),
// Email Marketing Soulmate V1
emailMarketingSoulmateV1Landing: () =>
createRoute([emailMarketingSoulmateV1Prefix, "landing"]),
emailMarketingSoulmateV1SpecialOffer: () =>
createRoute([emailMarketingSoulmateV1Prefix, "special-offer"]),
// // Compatibility
// compatibilities: () => createRoute(["compatibilities"]),

View File

@ -1,5 +1,5 @@
export const translatePathEmailMarketingCompatibilityV1 = (path: string) =>
`EmailMarketing.Compatibility.v1.${path}`;
export const translatePathEmailMarketingCompatibilityV2 = (path: string) =>
`EmailMarketing.Compatibility.v2.${path}`;
export const translatePathEmailMarketingSoulmateV1 = (path: string) =>
`EmailMarketing.Soulmate.v1.${path}`;

View File

@ -72,6 +72,7 @@ export enum ELocalesPlacement {
EmailMarketingCompatibilityV1 = "email-marketing-comp-v1",
EmailMarketingPalmistryV2 = "email-marketing-palmistry-v2",
EmailMarketingCompatibilityV2 = "email-marketing-comp-v2",
EmailMarketingSoulmateV1 = "email-marketing-soulmate-v1",
EmailMarketingCompatibilityV3 = "email-marketing-comp-v3",
EmailMarketingCompatibilityV4 = "email-marketing-comp-v4",
CompatibilityV2 = "compatibility-v2",