diff --git a/.storybook/preview.tsx b/.storybook/preview.tsx
index a009243..ca0b6b9 100644
--- a/.storybook/preview.tsx
+++ b/.storybook/preview.tsx
@@ -2,6 +2,10 @@ import type { Preview } from "@storybook/nextjs-vite";
import { Geist, Geist_Mono, Inter, Manrope, Poppins } from "next/font/google";
import "../src/app/globals.css";
import React from "react";
+import {
+ PaymentPlacementProvider,
+ TrialVariantSelectionProvider,
+} from "../src/entities/session/payment";
const geistSans = Geist({
variable: "--font-geist-sans",
@@ -58,11 +62,15 @@ const preview: Preview = {
},
decorators: [
(Story) => (
-
-
-
+
+
+
+
+
+
+
),
],
};
diff --git a/PAYMENT_TEMPLATE_VARIABLES.md b/PAYMENT_TEMPLATE_VARIABLES.md
new file mode 100644
index 0000000..cbf851f
--- /dev/null
+++ b/PAYMENT_TEMPLATE_VARIABLES.md
@@ -0,0 +1,188 @@
+# Payment Template Variables
+
+## Доступные переменные для подстановки
+
+В текстах экранов **TrialPayment** и **SpecialOffer** можно использовать следующие переменные через синтаксис `{{variableName}}`.
+
+### Основные переменные
+
+| Переменная | Описание | Пример значения |
+|------------|----------|-----------------|
+| `{{trialPrice}}` | Форматированная цена триала | `$1.00`, `€5.00` |
+| `{{billingPrice}}` | Форматированная цена подписки | `$14.99`, `€49.99` |
+| `{{trialPeriod}}` | Период триала с интервалом | `7 days`, `1 week`, `2 weeks` |
+| `{{billingPeriod}}` | Период списания с интервалом | `1 week`, `1 month`, `3 months` |
+| `{{trialPeriodHyphen}}` | Период триала через дефис | `7-day`, `1-week` |
+
+### Дополнительные переменные
+
+| Переменная | Описание | Пример значения | Шаблон |
+|------------|----------|-----------------|---------|
+| `{{oldPrice}}` | Старая цена (для скидки) | `$14.99` | TrialPayment |
+| `{{discountPercent}}` | Процент скидки | `94` | TrialPayment, SpecialOffer |
+| `{{oldTrialPrice}}` | Старая цена триала | `$14.99` | SpecialOffer |
+| `{{oldTrialPeriod}}` | Старый период триала | `7 days` | SpecialOffer |
+
+## Где использовать
+
+### TrialPayment экран
+
+Переменные работают во **ВСЕХ текстовых полях** экрана, включая:
+
+#### `tryForDays.title`
+```json
+{
+ "text": "Try it for {{trialPeriod}}!"
+}
+```
+
+#### `tryForDays.textList.items`
+```json
+{
+ "items": [
+ { "text": "Start your {{trialPeriodHyphen}} trial for just {{trialPrice}}." },
+ { "text": "Then only {{billingPrice}}/{{billingPeriod}} for full access." }
+ ]
+}
+```
+
+#### `totalPrice.priceContainer.price`
+```json
+{
+ "text": "{{trialPrice}}"
+}
+```
+
+#### `totalPrice.priceContainer.oldPrice`
+```json
+{
+ "text": "{{oldPrice}}"
+}
+```
+
+#### `totalPrice.priceContainer.discount`
+```json
+{
+ "text": "{{discountPercent}}% discount applied"
+}
+```
+
+### SpecialOffer экран
+
+Переменные работают во всех текстовых полях:
+
+#### `text.title`
+```json
+{
+ "text": "SPECIAL {{discountPercent}}% DISCOUNT"
+}
+```
+
+#### `text.subtitle`
+```json
+{
+ "text": "Only {{trialPrice}} for {{trialPeriod}}"
+}
+```
+
+#### `text.description`
+```json
+{
+ "trialPrice": { "text": "{{trialPrice}}" },
+ "text": { "text": "for {{trialPeriod}}" },
+ "oldTrialPrice": { "text": "{{oldTrialPrice}}" }
+}
+```
+
+## Policy текст (хардкоженный)
+
+Policy текст автоматически подставляет значения **без** использования `{{}}`:
+
+```tsx
+You also acknowledge that your {trialPeriodHyphen} introductory plan to Wit Lab LLC,
+billed at {formattedTrialPrice}, will automatically renew at {formattedBillingPrice}
+every {billingPeriodText} unless canceled before the end of the trial period.
+```
+
+**Этот текст НЕ редактируется через админку** - значения подставляются автоматически из выбранного variant.
+
+## Примеры использования
+
+### Пример 1: Try For Days секция
+```json
+{
+ "tryForDays": {
+ "title": {
+ "text": "Try it for {{trialPeriod}}!"
+ },
+ "textList": {
+ "items": [
+ { "text": "Receive a hand-drawn sketch of your soulmate." },
+ { "text": "Reveal the path with the guide." },
+ { "text": "Talk to live experts and get guidance." },
+ { "text": "Start your {{trialPeriodHyphen}} trial for just {{trialPrice}}." },
+ { "text": "Then {{billingPrice}} every {{billingPeriod}} for full access." },
+ { "text": "Cancel anytime—just 24 hours before renewal." }
+ ]
+ }
+ }
+}
+```
+
+**Результат** (для variant с trialPrice=100, price=1499, trialInterval=7, billingInterval=1):
+- "Try it for 7 days!"
+- "Start your 7-day trial for just $1.00."
+- "Then $14.99 every 1 week for full access."
+
+### Пример 2: Total Price секция
+```json
+{
+ "totalPrice": {
+ "priceContainer": {
+ "price": { "text": "{{trialPrice}}" },
+ "oldPrice": { "text": "{{oldPrice}}" },
+ "discount": { "text": "{{discountPercent}}% discount applied" }
+ }
+ }
+}
+```
+
+**Результат**:
+- Price: "$1.00"
+- Old Price: "$14.99"
+- Discount: "94% discount applied"
+
+## Форматирование цен
+
+Цены автоматически форматируются с учетом валюты:
+- USD: `$1.00`
+- EUR: `€1.00`
+- GBP: `£1.00`
+
+## Форматирование периодов
+
+Периоды форматируются на английском:
+- `trialPeriod="DAY"`, `interval=1` → `"1 day"`
+- `trialPeriod="DAY"`, `interval=7` → `"7 days"`
+- `trialPeriod="WEEK"`, `interval=1` → `"1 week"`
+- `trialPeriod="MONTH"`, `interval=3` → `"3 months"`
+
+С дефисом (`trialPeriodHyphen`):
+- `"1-day"`, `"7-day"`, `"1-week"`, `"3-month"`
+
+## Важные замечания
+
+1. **Регистр имеет значение**: используйте точное написание `{{trialPrice}}`, а не `{{TrialPrice}}`
+2. **Пробелы не важны**: `{{ trialPrice }}` тоже сработает
+3. **Несуществующие переменные**: если переменная не найдена, она остается как есть в тексте
+4. **Пустые значения**: если значение не определено (например, `discountPercent` для variant без скидки), подставляется пустая строка
+
+## Откуда берутся значения
+
+Все значения загружаются из **Payment Placement API**:
+- `GET /api/session/funnel/:funnelId/payment/:paymentId`
+
+И зависят от **выбранного variant**:
+- В **Trial Choice** пользователь выбирает variant → его ID сохраняется
+- В **Trial Payment** используется выбранный variant (или первый по умолчанию)
+- В **Special Offer** всегда используется первый variant из `main_secret_discount` placement
diff --git a/TRIAL_CHOICE_PAYMENT_INTEGRATION.md b/TRIAL_CHOICE_PAYMENT_INTEGRATION.md
new file mode 100644
index 0000000..e69de29
diff --git a/docs/TRIAL_CHOICE_PAYMENT_INTEGRATION.md b/docs/TRIAL_CHOICE_PAYMENT_INTEGRATION.md
new file mode 100644
index 0000000..2cd37fb
--- /dev/null
+++ b/docs/TRIAL_CHOICE_PAYMENT_INTEGRATION.md
@@ -0,0 +1,160 @@
+# Trial Choice & Payment Integration
+
+## Проблемы которые решены
+
+### 1. Связь выбора Trial Choice → Payment
+**Проблема**: Пользователь выбирает вариант триала на экране TrialChoice, но на экране Payment всегда отображался первый вариант.
+
+**Решение**:
+- Создан `TrialVariantSelectionContext` для хранения выбранного `variantId`
+- `TrialChoiceTemplate` сохраняет выбор пользователя в контекст
+- `TrialPaymentTemplate` читает выбранный вариант из контекста и использует его вместо первого
+
+### 2. Общая логика загрузки и кеширование
+**Проблема**:
+- Каждый экран (TrialChoice, Payment) делал отдельный запрос к API
+- TrialChoice показывал неправильные данные до завершения загрузки
+- Payment уже имел loader, но TrialChoice — нет
+
+**Решение**:
+- Создан `PaymentPlacementProvider` для кеширования загруженных placement данных
+- `usePaymentPlacement` hook теперь использует кеш из контекста
+- Повторные запросы к API не выполняются если данные уже загружены
+- `TrialChoiceTemplate` показывает loader (как Payment) до загрузки данных
+
+## Архитектура
+
+### Контексты
+
+#### PaymentPlacementProvider
+- **Путь**: `src/entities/session/payment/PaymentPlacementProvider.tsx`
+- **Назначение**: Кеширует результаты `loadFunnelPaymentById` чтобы избежать повторных запросов
+- **Ключ кеша**: `${funnelKey}:${paymentId}`
+- **Состояние**: `{ placement, isLoading, error }`
+
+#### TrialVariantSelectionProvider
+- **Путь**: `src/entities/session/payment/TrialVariantSelectionContext.tsx`
+- **Назначение**: Хранит выбранный пользователем `variantId` для передачи между экранами
+- **Состояние**: `{ selectedVariantId, setSelectedVariantId }`
+
+### Обновленные компоненты
+
+#### TrialChoiceTemplate
+- **Изменения**:
+ - Добавлен loader (Spinner) до загрузки placement
+ - Сохраняет выбор в `TrialVariantSelectionContext`
+ - Использует `usePaymentPlacement` с кешированием
+ - Инициализирует локальный `selectedId` из `selectedVariantId` контекста
+
+#### TrialPaymentTemplate
+- **Изменения**:
+ - Читает `selectedVariantId` из `TrialVariantSelectionContext`
+ - Использует выбранный вариант, если доступен: `placement?.variants?.find((v) => v.id === selectedVariantId)`
+ - Fallback на первый вариант если выбор отсутствует
+ - Использует `usePaymentPlacement` с кешированием
+
+#### SpecialOfferTemplate
+- **Изменения**: Нет (специально)
+- **Поведение**: Продолжает использовать первый вариант `placement?.variants?.[0]`
+- **Причина**: Использует другой `paymentId` (`"main_secret_discount"`) и не должен зависеть от выбора Trial
+
+### usePaymentPlacement Hook
+- **Изменения**:
+ - Теперь использует `PaymentPlacementContext` для получения/загрузки данных
+ - Упрощена логика: нет локального state, все в контексте
+ - Автоматически триггерит загрузку если данных нет
+
+### Layout Integration
+- **Файл**: `src/app/[funnelId]/layout.tsx`
+- **Изменения**: Обернут в два новых провайдера:
+ ```tsx
+
+
+ {children}
+
+
+ ```
+
+## Потоки данных
+
+### Поток 1: Воронка С экраном Trial Choice
+```
+1. User открывает Trial Choice
+ → PaymentPlacementProvider загружает "main" placement (если еще нет в кеше)
+ → TrialChoiceTemplate показывает loader
+ → После загрузки отображаются варианты
+
+2. User выбирает вариант (например, id="plan-123")
+ → setSelectedVariantId("plan-123") в TrialVariantSelectionContext
+
+3. User переходит на Payment
+ → PaymentPlacementProvider возвращает "main" placement из кеша (без запроса)
+ → TrialPaymentTemplate читает selectedVariantId="plan-123"
+ → Использует вариант с id="plan-123" вместо первого
+```
+
+### Поток 2: Воронка БЕЗ экрана Trial Choice
+```
+1. User сразу открывает Payment
+ → PaymentPlacementProvider загружает "main" placement
+ → TrialPaymentTemplate показывает loader
+ → selectedVariantId === null
+ → Использует первый вариант (дефолт)
+```
+
+### Поток 3: Special Offer
+```
+1. User открывает Special Offer
+ → PaymentPlacementProvider загружает "main_secret_discount" placement
+ → SpecialOfferTemplate показывает loader
+ → Всегда использует первый вариант (не зависит от Trial Choice)
+```
+
+## Тестирование
+
+### Сценарий 1: Trial Choice → Payment
+1. Открыть воронку с Trial Choice
+2. Дождаться загрузки вариантов
+3. Выбрать второй вариант (не первый)
+4. Нажать Continue
+5. **Ожидается**: На Payment отображается выбранный (второй) вариант
+
+### Сценарий 2: Прямой переход на Payment
+1. Открыть воронку без Trial Choice или перейти прямо на Payment
+2. **Ожидается**: На Payment отображается первый вариант (дефолт)
+
+### Сценарий 3: Кеширование
+1. Открыть Trial Choice → загрузка placement
+2. Перейти на Payment
+3. **Ожидается**: Payment загружается мгновенно (из кеша), без повторного API запроса
+
+### Сценарий 4: Special Offer
+1. Открыть Special Offer
+2. **Ожидается**: Всегда показывается первый вариант, независимо от выбора в Trial Choice
+
+## API изменения (Backend)
+
+### session.controller.ts
+- **Изменения**: Добавлены `title` и `accent` поля в варианты
+- **Поведение**: Возвращает все планы (не ограничивает до 4)
+- **Дефолты**: `title` использует `["Basic", "Standard", "Popular", "Premium"]` с fallback `"Premium"`
+
+## Файлы созданы/изменены
+
+### Новые файлы
+- `src/entities/session/payment/PaymentPlacementProvider.tsx`
+- `src/entities/session/payment/TrialVariantSelectionContext.tsx`
+- `src/entities/session/payment/index.ts`
+
+### Измененные файлы
+- `src/hooks/payment/usePaymentPlacement.ts` - использует контекст вместо локального state
+- `src/components/funnel/templates/TrialChoiceTemplate/TrialChoiceTemplate.tsx` - loader + сохранение выбора
+- `src/components/funnel/templates/TrialPaymentTemplate/TrialPaymentTemplate.tsx` - использует выбранный вариант
+- `src/app/[funnelId]/layout.tsx` - обернут в провайдеры
+
+## Будущие улучшения
+
+1. **Персистентность**: Сохранять выбор в localStorage/sessionStorage для сохранения при перезагрузке
+2. **Аналитика**: Трекинг выбора вариантов для A/B тестирования
+3. **Валидация**: Проверять что выбранный variant все еще существует в placement
+4. **Типизация**: Усилить типы для garantie что только валидные paymentId используются
diff --git a/public/funnels/soulmate-prod.json b/public/funnels/soulmate-prod.json
new file mode 100644
index 0000000..3023189
--- /dev/null
+++ b/public/funnels/soulmate-prod.json
@@ -0,0 +1,2935 @@
+{
+ "meta": {
+ "id": "soulmate-prod",
+ "title": "Soulmate V1",
+ "description": "Soulmate",
+ "firstScreenId": "onboarding",
+ "googleAnalyticsId": "G-4N17LL3BB5",
+ "yandexMetrikaId": "104471567"
+ },
+ "defaultTexts": {
+ "nextButton": "Next",
+ "privacyBanner": "We don’t share personal information — it stays safe and under your control."
+ },
+ "screens": [
+ {
+ "id": "onboarding",
+ "template": "soulmate",
+ "header": {
+ "showBackButton": false,
+ "showProgress": true,
+ "show": false
+ },
+ "title": {
+ "text": "Soulmate Portrait",
+ "show": true,
+ "font": "manrope",
+ "weight": "bold",
+ "size": "2xl",
+ "align": "center",
+ "color": "default"
+ },
+ "bottomActionButton": {
+ "show": true,
+ "text": "Continue",
+ "cornerRadius": "3xl",
+ "showPrivacyTermsConsent": true
+ },
+ "navigation": {
+ "rules": [],
+ "defaultNextScreenId": "gender",
+ "isEndScreen": false
+ },
+ "description": {
+ "text": "Ready to see who your true soulmate is?",
+ "font": "manrope",
+ "weight": "regular",
+ "size": "md",
+ "align": "center",
+ "color": "default"
+ },
+ "variants": [
+ {
+ "conditions": [
+ {
+ "screenId": "onboarding",
+ "operator": "includesAny",
+ "conditionType": "unleash",
+ "unleashFlag": "soulmate-onboarding-image",
+ "unleashVariants": [
+ "v0"
+ ]
+ }
+ ],
+ "overrides": {}
+ },
+ {
+ "conditions": [
+ {
+ "screenId": "onboarding",
+ "operator": "includesAny",
+ "conditionType": "unleash",
+ "unleashFlag": "soulmate-onboarding-image",
+ "unleashVariants": [
+ "v1"
+ ]
+ }
+ ],
+ "overrides": {
+ "soulmatePortraitsDelivered": {
+ "image": null,
+ "mediaUrl": "/images/90b8c77f-c0cd-475d-a4de-bcabb3708c59.png",
+ "mediaType": "image"
+ }
+ }
+ },
+ {
+ "conditions": [
+ {
+ "screenId": "onboarding",
+ "operator": "includesAny",
+ "conditionType": "unleash",
+ "unleashFlag": "soulmate-onboarding-image",
+ "unleashVariants": [
+ "v2"
+ ]
+ }
+ ],
+ "overrides": {
+ "soulmatePortraitsDelivered": {
+ "image": null,
+ "mediaUrl": "/images/275472b0-30e0-47d7-a1ab-8090bc9fb236.mp4",
+ "mediaType": "video"
+ }
+ }
+ }
+ ],
+ "soulmatePortraitsDelivered": {
+ "image": "/soulmate-portrait-delivered-male.jpg",
+ "text": {
+ "text": "soulmate portraits delivered today",
+ "font": "inter",
+ "weight": "medium",
+ "size": "sm",
+ "color": "primary"
+ },
+ "avatars": [
+ {
+ "src": "/avatars/male-1.jpg",
+ "alt": "Male 1"
+ },
+ {
+ "src": "/avatars/male-2.jpg",
+ "alt": "Male 2"
+ },
+ {
+ "src": "/avatars/male-3.jpg",
+ "alt": "Male 3"
+ },
+ {
+ "src": "",
+ "fallbackText": "900+"
+ }
+ ]
+ },
+ "textList": {
+ "items": [
+ {
+ "text": "Just 2 minutes — and the Portrait will reveal the one who’s destined to be with you."
+ },
+ {
+ "text": "Astonishing 99% accuracy."
+ },
+ {
+ "text": "An unexpected revelation awaits you."
+ },
+ {
+ "text": "All that’s left is to dare to look."
+ }
+ ]
+ }
+ },
+ {
+ "id": "gender",
+ "template": "list",
+ "header": {
+ "showBackButton": true,
+ "showProgress": true,
+ "show": true
+ },
+ "title": {
+ "text": "What’s your gender?",
+ "show": true,
+ "font": "manrope",
+ "weight": "bold",
+ "size": "2xl",
+ "align": "left",
+ "color": "default"
+ },
+ "subtitle": {
+ "text": "It all starts with you! Choose your gender.",
+ "show": true,
+ "font": "manrope",
+ "weight": "medium",
+ "size": "lg",
+ "align": "left",
+ "color": "default"
+ },
+ "bottomActionButton": {
+ "show": false,
+ "cornerRadius": "3xl",
+ "showPrivacyTermsConsent": false
+ },
+ "navigation": {
+ "rules": [],
+ "defaultNextScreenId": "partner-gender",
+ "isEndScreen": false
+ },
+ "list": {
+ "selectionType": "single",
+ "options": [
+ {
+ "id": "female",
+ "label": "FEMALE",
+ "emoji": "🩷",
+ "disabled": false
+ },
+ {
+ "id": "male",
+ "label": "MALE",
+ "emoji": "💙",
+ "disabled": false
+ }
+ ],
+ "registrationFieldKey": "profile.gender"
+ },
+ "variants": []
+ },
+ {
+ "id": "partner-gender",
+ "template": "list",
+ "header": {
+ "showBackButton": true,
+ "showProgress": true,
+ "show": true
+ },
+ "title": {
+ "text": "Who are you interested in?",
+ "show": true,
+ "font": "manrope",
+ "weight": "bold",
+ "size": "2xl",
+ "align": "left",
+ "color": "default"
+ },
+ "bottomActionButton": {
+ "show": false,
+ "cornerRadius": "3xl",
+ "showPrivacyTermsConsent": false
+ },
+ "navigation": {
+ "rules": [],
+ "defaultNextScreenId": "analysis-target",
+ "isEndScreen": false
+ },
+ "list": {
+ "selectionType": "single",
+ "options": [
+ {
+ "id": "male",
+ "label": "Male",
+ "disabled": false
+ },
+ {
+ "id": "female",
+ "label": "Female",
+ "disabled": false
+ }
+ ],
+ "registrationFieldKey": "partner.gender"
+ },
+ "variants": []
+ },
+ {
+ "id": "relationship-status",
+ "template": "list",
+ "header": {
+ "showBackButton": true,
+ "showProgress": true,
+ "show": true
+ },
+ "title": {
+ "text": "You are currently?",
+ "show": true,
+ "font": "manrope",
+ "weight": "bold",
+ "size": "2xl",
+ "align": "left",
+ "color": "default"
+ },
+ "subtitle": {
+ "text": "This helps make the portrait and insights more accurate.",
+ "show": true,
+ "font": "manrope",
+ "weight": "medium",
+ "size": "lg",
+ "align": "left",
+ "color": "default"
+ },
+ "bottomActionButton": {
+ "show": false,
+ "cornerRadius": "3xl",
+ "showPrivacyTermsConsent": false
+ },
+ "navigation": {
+ "rules": [],
+ "defaultNextScreenId": "analysis-target",
+ "isEndScreen": false
+ },
+ "list": {
+ "selectionType": "single",
+ "options": [
+ {
+ "id": "in_relationship",
+ "label": "In a relationship",
+ "disabled": false
+ },
+ {
+ "id": "single",
+ "label": "Single",
+ "disabled": false
+ },
+ {
+ "id": "after_breakup",
+ "label": "Just went through a breakup",
+ "disabled": false
+ },
+ {
+ "id": "its_complicated",
+ "label": "It’s complicated",
+ "disabled": false
+ }
+ ]
+ },
+ "variants": []
+ },
+ {
+ "id": "analysis-target",
+ "template": "list",
+ "header": {
+ "showBackButton": true,
+ "showProgress": true,
+ "show": true
+ },
+ "title": {
+ "text": "Who are we analyzing?",
+ "show": true,
+ "font": "manrope",
+ "weight": "bold",
+ "size": "2xl",
+ "align": "left",
+ "color": "default"
+ },
+ "subtitle": {
+ "text": "This helps make the portrait and insights more accurate.",
+ "show": true,
+ "font": "manrope",
+ "weight": "regular",
+ "size": "md",
+ "align": "center",
+ "color": "default"
+ },
+ "bottomActionButton": {
+ "show": false,
+ "cornerRadius": "3xl",
+ "showPrivacyTermsConsent": false
+ },
+ "navigation": {
+ "rules": [],
+ "defaultNextScreenId": "partner-age",
+ "isEndScreen": false
+ },
+ "list": {
+ "selectionType": "single",
+ "options": [
+ {
+ "id": "current_partner",
+ "label": "Current partner",
+ "disabled": false
+ },
+ {
+ "id": "crush",
+ "label": "Crush",
+ "disabled": false
+ },
+ {
+ "id": "ex_partner",
+ "label": "Ex",
+ "disabled": false
+ },
+ {
+ "id": "future_date",
+ "label": "Future connection",
+ "disabled": false
+ }
+ ]
+ },
+ "variants": []
+ },
+ {
+ "id": "partner-age",
+ "template": "list",
+ "header": {
+ "showBackButton": true,
+ "showProgress": true,
+ "show": true
+ },
+ "title": {
+ "text": "Current partner’s age",
+ "show": true,
+ "font": "manrope",
+ "weight": "bold",
+ "size": "2xl",
+ "align": "left",
+ "color": "default"
+ },
+ "bottomActionButton": {
+ "show": false,
+ "cornerRadius": "3xl",
+ "showPrivacyTermsConsent": false
+ },
+ "navigation": {
+ "rules": [
+ {
+ "conditions": [
+ {
+ "screenId": "partner-age",
+ "conditionType": "options",
+ "operator": "includesAny",
+ "optionIds": [
+ "under_29"
+ ],
+ "values": [],
+ "unleashVariants": []
+ }
+ ],
+ "nextScreenId": "partner-age-detail"
+ }
+ ],
+ "defaultNextScreenId": "partner-ethnicity",
+ "isEndScreen": false
+ },
+ "list": {
+ "selectionType": "single",
+ "options": [
+ {
+ "id": "under_29",
+ "label": "Under 29",
+ "disabled": false
+ },
+ {
+ "id": "from_30_to_39",
+ "label": "30–39",
+ "disabled": false
+ },
+ {
+ "id": "from_40_to_49",
+ "label": "40–49",
+ "disabled": false
+ },
+ {
+ "id": "from_50_to_59",
+ "label": "50–59",
+ "disabled": false
+ },
+ {
+ "id": "over_60",
+ "label": "60+",
+ "disabled": false
+ }
+ ]
+ },
+ "variants": [
+ {
+ "conditions": [
+ {
+ "screenId": "analysis-target",
+ "operator": "includesAny",
+ "optionIds": [
+ "current_partner"
+ ]
+ }
+ ],
+ "overrides": {}
+ },
+ {
+ "conditions": [
+ {
+ "screenId": "analysis-target",
+ "operator": "includesAny",
+ "optionIds": [
+ "crush"
+ ]
+ }
+ ],
+ "overrides": {
+ "title": {
+ "text": "Age of the person you like"
+ }
+ }
+ },
+ {
+ "conditions": [
+ {
+ "screenId": "analysis-target",
+ "operator": "includesAny",
+ "optionIds": [
+ "ex_partner"
+ ]
+ }
+ ],
+ "overrides": {
+ "title": {
+ "text": "Ex’s age"
+ }
+ }
+ },
+ {
+ "conditions": [
+ {
+ "screenId": "analysis-target",
+ "operator": "includesAny",
+ "optionIds": [
+ "future_date"
+ ]
+ }
+ ],
+ "overrides": {
+ "title": {
+ "text": "Future partner’s age"
+ }
+ }
+ }
+ ]
+ },
+ {
+ "id": "partner-age-detail",
+ "template": "list",
+ "header": {
+ "showBackButton": true,
+ "showProgress": true,
+ "show": true
+ },
+ "title": {
+ "text": "Please specify a bit more",
+ "show": true,
+ "font": "manrope",
+ "weight": "bold",
+ "size": "2xl",
+ "align": "left",
+ "color": "default"
+ },
+ "subtitle": {
+ "text": "So the portrait can be as accurate as possible.",
+ "show": true,
+ "font": "manrope",
+ "weight": "medium",
+ "size": "lg",
+ "align": "left",
+ "color": "default"
+ },
+ "bottomActionButton": {
+ "show": false,
+ "cornerRadius": "3xl",
+ "showPrivacyTermsConsent": false
+ },
+ "navigation": {
+ "rules": [],
+ "defaultNextScreenId": "partner-ethnicity",
+ "isEndScreen": false
+ },
+ "list": {
+ "selectionType": "single",
+ "options": [
+ {
+ "id": "from_18_to_21",
+ "label": "18–21",
+ "disabled": false
+ },
+ {
+ "id": "from_22_to_25",
+ "label": "22–25",
+ "disabled": false
+ },
+ {
+ "id": "from_26_to_29",
+ "label": "26–29",
+ "disabled": false
+ }
+ ]
+ },
+ "variants": []
+ },
+ {
+ "id": "partner-ethnicity",
+ "template": "list",
+ "header": {
+ "showBackButton": true,
+ "showProgress": true,
+ "show": true
+ },
+ "title": {
+ "text": "Your partner’s ethnicity?",
+ "show": true,
+ "font": "manrope",
+ "weight": "bold",
+ "size": "2xl",
+ "align": "left",
+ "color": "default"
+ },
+ "bottomActionButton": {
+ "show": false,
+ "cornerRadius": "3xl",
+ "showPrivacyTermsConsent": false
+ },
+ "navigation": {
+ "rules": [],
+ "defaultNextScreenId": "partner-eye-color",
+ "isEndScreen": false
+ },
+ "list": {
+ "selectionType": "single",
+ "options": [
+ {
+ "id": "white",
+ "label": "White",
+ "disabled": false
+ },
+ {
+ "id": "hispanic_latino",
+ "label": "Hispanic / Latino",
+ "disabled": false
+ },
+ {
+ "id": "african_african_american",
+ "label": "African / African-American",
+ "disabled": false
+ },
+ {
+ "id": "asian",
+ "label": "Asian",
+ "disabled": false
+ },
+ {
+ "id": "indian_south_asian",
+ "label": "Indian / South Asian",
+ "disabled": false
+ },
+ {
+ "id": "middle_eastern_arab",
+ "label": "Middle Eastern / Arab",
+ "disabled": false
+ },
+ {
+ "id": "native_american_indigenous",
+ "label": "Native American / Indigenous",
+ "disabled": false
+ },
+ {
+ "id": "no_preference",
+ "label": "No preference",
+ "disabled": false
+ }
+ ]
+ },
+ "variants": []
+ },
+ {
+ "id": "partner-eye-color",
+ "template": "list",
+ "header": {
+ "showBackButton": true,
+ "showProgress": true,
+ "show": true
+ },
+ "title": {
+ "text": "Your partner’s eye color?",
+ "show": true,
+ "font": "manrope",
+ "weight": "bold",
+ "size": "2xl",
+ "align": "left",
+ "color": "default"
+ },
+ "bottomActionButton": {
+ "show": false,
+ "cornerRadius": "3xl",
+ "showPrivacyTermsConsent": false
+ },
+ "navigation": {
+ "rules": [],
+ "defaultNextScreenId": "partner-hair-length",
+ "isEndScreen": false
+ },
+ "list": {
+ "selectionType": "single",
+ "options": [
+ {
+ "id": "brown",
+ "label": "Brown",
+ "disabled": false
+ },
+ {
+ "id": "blue",
+ "label": "Blue",
+ "disabled": false
+ },
+ {
+ "id": "hazel",
+ "label": "Hazel",
+ "disabled": false
+ },
+ {
+ "id": "green",
+ "label": "Green",
+ "disabled": false
+ },
+ {
+ "id": "amber",
+ "label": "Amber",
+ "disabled": false
+ },
+ {
+ "id": "gray",
+ "label": "Gray",
+ "disabled": false
+ },
+ {
+ "id": "unknown",
+ "label": "I don’t know",
+ "disabled": false
+ }
+ ]
+ },
+ "variants": []
+ },
+ {
+ "id": "partner-hair-length",
+ "template": "list",
+ "header": {
+ "showBackButton": true,
+ "showProgress": true,
+ "show": true
+ },
+ "title": {
+ "text": "Choose the hair length",
+ "show": true,
+ "font": "manrope",
+ "weight": "bold",
+ "size": "2xl",
+ "align": "left",
+ "color": "default"
+ },
+ "subtitle": {
+ "text": "It affects the portrait’s shape and mood.",
+ "show": true,
+ "font": "manrope",
+ "weight": "medium",
+ "size": "lg",
+ "align": "left",
+ "color": "default"
+ },
+ "bottomActionButton": {
+ "show": false,
+ "cornerRadius": "3xl",
+ "showPrivacyTermsConsent": false
+ },
+ "navigation": {
+ "rules": [],
+ "defaultNextScreenId": "burnout-support",
+ "isEndScreen": false
+ },
+ "list": {
+ "selectionType": "single",
+ "options": [
+ {
+ "id": "short",
+ "label": "Short",
+ "disabled": false
+ },
+ {
+ "id": "medium",
+ "label": "Medium",
+ "disabled": false
+ },
+ {
+ "id": "long",
+ "label": "Long",
+ "disabled": false
+ }
+ ]
+ },
+ "variants": []
+ },
+ {
+ "id": "burnout-support",
+ "template": "list",
+ "header": {
+ "showBackButton": true,
+ "showProgress": true,
+ "show": true
+ },
+ "title": {
+ "text": "When you’re burned out, you need your partner to",
+ "show": true,
+ "font": "manrope",
+ "weight": "bold",
+ "size": "2xl",
+ "align": "left",
+ "color": "default"
+ },
+ "bottomActionButton": {
+ "show": false,
+ "cornerRadius": "3xl",
+ "showPrivacyTermsConsent": false
+ },
+ "navigation": {
+ "rules": [],
+ "defaultNextScreenId": "burnout-result",
+ "isEndScreen": false
+ },
+ "list": {
+ "selectionType": "single",
+ "options": [
+ {
+ "id": "acknowledged_and_calmed",
+ "label": "Acknowledge your frustration and comfort you",
+ "disabled": false
+ },
+ {
+ "id": "gave_emotional_support",
+ "label": "Give emotional support and a safe space",
+ "disabled": false
+ },
+ {
+ "id": "took_over_tasks",
+ "label": "Take over daily tasks so you can recover",
+ "disabled": false
+ },
+ {
+ "id": "inspired_with_plan",
+ "label": "Inspire you with a goal and a short action plan",
+ "disabled": false
+ },
+ {
+ "id": "shifted_to_positive",
+ "label": "Shift your focus to something positive — a walk, a movie, funny stories",
+ "disabled": false
+ }
+ ]
+ },
+ "variants": []
+ },
+ {
+ "id": "burnout-result",
+ "template": "info",
+ "header": {
+ "showBackButton": true,
+ "showProgress": true,
+ "show": true
+ },
+ "title": {
+ "text": "burnout-result",
+ "show": false,
+ "font": "manrope",
+ "weight": "bold",
+ "size": "2xl",
+ "align": "center",
+ "color": "default"
+ },
+ "subtitle": {
+ "text": "This kind of partner **knows how to listen and support**, and you’re a **deep soul** who values honesty and the power of genuine emotions.",
+ "show": true,
+ "font": "manrope",
+ "weight": "medium",
+ "size": "lg",
+ "align": "center",
+ "color": "default"
+ },
+ "bottomActionButton": {
+ "show": true,
+ "cornerRadius": "3xl",
+ "showPrivacyTermsConsent": false
+ },
+ "navigation": {
+ "rules": [],
+ "defaultNextScreenId": "birthdate",
+ "isEndScreen": false
+ },
+ "icon": {
+ "type": "image",
+ "value": "/images/fb6eb360-db1e-4433-9c8a-33eedfad1b12.svg",
+ "size": "lg"
+ },
+ "variables": [],
+ "variants": [
+ {
+ "conditions": [
+ {
+ "screenId": "burnout-support",
+ "operator": "includesAny",
+ "optionIds": [
+ "acknowledged_and_calmed"
+ ]
+ }
+ ],
+ "overrides": {}
+ },
+ {
+ "conditions": [
+ {
+ "screenId": "burnout-support",
+ "operator": "includesAny",
+ "optionIds": [
+ "gave_emotional_support"
+ ]
+ }
+ ],
+ "overrides": {
+ "subtitle": {
+ "text": "This kind of person creates a **sense of security**, and you have the wisdom and emotional maturity to choose closeness and trust."
+ }
+ }
+ },
+ {
+ "conditions": [
+ {
+ "screenId": "burnout-support",
+ "operator": "includesAny",
+ "optionIds": [
+ "took_over_tasks"
+ ]
+ }
+ ],
+ "overrides": {
+ "subtitle": {
+ "text": "This kind of partner is ready to **lend a shoulder** when it’s needed, and your strength lies in your ability to **trust** and **accept support** — that’s your natural wisdom."
+ }
+ }
+ },
+ {
+ "conditions": [
+ {
+ "screenId": "burnout-support",
+ "operator": "includesAny",
+ "optionIds": [
+ "inspired_with_plan"
+ ]
+ }
+ ],
+ "overrides": {
+ "subtitle": {
+ "text": "This kind of person **brings clarity** and **motivates**, while you stand out for your **willpower** and **drive for growth** — you’re not afraid to move forward."
+ }
+ }
+ },
+ {
+ "conditions": [
+ {
+ "screenId": "burnout-support",
+ "operator": "includesAny",
+ "optionIds": [
+ "shifted_to_positive"
+ ]
+ }
+ ],
+ "overrides": {
+ "subtitle": {
+ "text": "This kind of partner knows how to **bring back joy**, and you show your strength through your ability to **stay lighthearted** and **keep a bright outlook** on life."
+ }
+ }
+ }
+ ]
+ },
+ {
+ "id": "birthdate",
+ "template": "date",
+ "header": {
+ "showBackButton": true,
+ "showProgress": true,
+ "show": true
+ },
+ "title": {
+ "text": "When were you born?",
+ "show": true,
+ "font": "manrope",
+ "weight": "bold",
+ "size": "2xl",
+ "align": "left",
+ "color": "default"
+ },
+ "subtitle": {
+ "text": "The moment you were born holds deep underlying patterns.",
+ "show": true,
+ "font": "manrope",
+ "weight": "medium",
+ "size": "lg",
+ "align": "left",
+ "color": "default"
+ },
+ "bottomActionButton": {
+ "show": false,
+ "cornerRadius": "3xl",
+ "showPrivacyTermsConsent": false
+ },
+ "navigation": {
+ "rules": [],
+ "defaultNextScreenId": "nature-archetype",
+ "isEndScreen": false
+ },
+ "dateInput": {
+ "monthLabel": "Month",
+ "dayLabel": "Month",
+ "yearLabel": "Month",
+ "monthPlaceholder": "MM",
+ "dayPlaceholder": "DD",
+ "yearPlaceholder": "YYYY",
+ "showSelectedDate": true,
+ "selectedDateFormat": "dd MMMM yyyy",
+ "selectedDateLabel": "Selected date:",
+ "zodiac": {
+ "enabled": true,
+ "storageKey": "userZodiac"
+ },
+ "registrationFieldKey": "profile.birthdate",
+ "validationMessage": "Please enter a valid date"
+ },
+ "variants": []
+ },
+ {
+ "id": "nature-archetype",
+ "template": "list",
+ "header": {
+ "showBackButton": true,
+ "showProgress": true,
+ "show": true
+ },
+ "title": {
+ "text": "Which natural symbol best matches your personality?",
+ "show": true,
+ "font": "manrope",
+ "weight": "bold",
+ "size": "2xl",
+ "align": "left",
+ "color": "default"
+ },
+ "bottomActionButton": {
+ "show": false,
+ "cornerRadius": "3xl",
+ "showPrivacyTermsConsent": false
+ },
+ "navigation": {
+ "rules": [],
+ "defaultNextScreenId": "love-priority",
+ "isEndScreen": false
+ },
+ "list": {
+ "selectionType": "single",
+ "options": [
+ {
+ "id": "flower",
+ "label": "Flower — tenderness, care, charm",
+ "emoji": "🌹",
+ "disabled": false
+ },
+ {
+ "id": "sea",
+ "label": "Sea — depth, mystery, emotion",
+ "emoji": "🌊",
+ "disabled": false
+ },
+ {
+ "id": "sun",
+ "label": "Sun — energy, strength, brightness",
+ "emoji": "🌞️",
+ "disabled": false
+ },
+ {
+ "id": "moon",
+ "label": "Moon — intuition, sensitivity",
+ "emoji": "🌙",
+ "disabled": false
+ }
+ ]
+ },
+ "variants": []
+ },
+ {
+ "id": "love-priority",
+ "template": "list",
+ "header": {
+ "showBackButton": true,
+ "showProgress": true,
+ "show": true
+ },
+ "title": {
+ "text": "When it comes to love, what matters more to you: heart or mind?",
+ "show": true,
+ "font": "manrope",
+ "weight": "bold",
+ "size": "2xl",
+ "align": "left",
+ "color": "default"
+ },
+ "bottomActionButton": {
+ "show": false,
+ "cornerRadius": "3xl",
+ "showPrivacyTermsConsent": false
+ },
+ "navigation": {
+ "rules": [],
+ "defaultNextScreenId": "love-priority-result",
+ "isEndScreen": false
+ },
+ "list": {
+ "selectionType": "single",
+ "options": [
+ {
+ "id": "follow_heart",
+ "label": "I follow my heart",
+ "emoji": "🧡",
+ "disabled": false
+ },
+ {
+ "id": "follow_mind",
+ "label": "I rely on my mind",
+ "emoji": "🧠",
+ "disabled": false
+ },
+ {
+ "id": "balance_heart_mind",
+ "label": "A balance of heart and mind",
+ "emoji": "🎯",
+ "disabled": false
+ },
+ {
+ "id": "depends_on_situation",
+ "label": "Depends on the situation",
+ "emoji": "⚖️",
+ "disabled": false
+ }
+ ]
+ },
+ "variants": []
+ },
+ {
+ "id": "love-priority-result",
+ "template": "info",
+ "header": {
+ "showBackButton": true,
+ "showProgress": true,
+ "show": true
+ },
+ "title": {
+ "text": "Title",
+ "show": false,
+ "font": "manrope",
+ "weight": "bold",
+ "size": "2xl",
+ "align": "center",
+ "color": "default"
+ },
+ "subtitle": {
+ "text": "According to our statistics, **51% of {{gender}} {{zodiac}}** trust their emotions. But sensitivity alone isn’t enough. We’ll show which qualities in your partner will bring warmth and confidence — and create their portrait.",
+ "show": true,
+ "font": "manrope",
+ "weight": "medium",
+ "size": "lg",
+ "align": "center",
+ "color": "default"
+ },
+ "bottomActionButton": {
+ "show": true,
+ "cornerRadius": "3xl",
+ "showPrivacyTermsConsent": false
+ },
+ "navigation": {
+ "rules": [],
+ "defaultNextScreenId": "relationship-block",
+ "isEndScreen": false
+ },
+ "icon": {
+ "type": "image",
+ "value": "/images/528c3574-2121-46cd-b5e5-b1fda5ae9315.svg",
+ "size": "xl"
+ },
+ "variables": [
+ {
+ "name": "gender",
+ "mappings": [
+ {
+ "conditions": [
+ {
+ "screenId": "gender",
+ "conditionType": "values",
+ "operator": "includesAny",
+ "values": [
+ "male"
+ ]
+ }
+ ],
+ "value": "men"
+ }
+ ],
+ "fallback": "women"
+ },
+ {
+ "name": "zodiac",
+ "mappings": [
+ {
+ "conditions": [
+ {
+ "screenId": "userZodiac",
+ "conditionType": "values",
+ "operator": "includesAny",
+ "values": [
+ "aries"
+ ]
+ }
+ ],
+ "value": "Aries"
+ },
+ {
+ "conditions": [
+ {
+ "screenId": "userZodiac",
+ "conditionType": "values",
+ "operator": "includesAny",
+ "values": [
+ "taurus"
+ ]
+ }
+ ],
+ "value": "Taurus"
+ },
+ {
+ "conditions": [
+ {
+ "screenId": "userZodiac",
+ "conditionType": "values",
+ "operator": "includesAny",
+ "values": [
+ "gemini"
+ ]
+ }
+ ],
+ "value": "Gemini"
+ },
+ {
+ "conditions": [
+ {
+ "screenId": "userZodiac",
+ "conditionType": "values",
+ "operator": "includesAny",
+ "values": [
+ "cancer"
+ ]
+ }
+ ],
+ "value": "Cancer"
+ },
+ {
+ "conditions": [
+ {
+ "screenId": "userZodiac",
+ "conditionType": "values",
+ "operator": "includesAny",
+ "values": [
+ "leo"
+ ]
+ }
+ ],
+ "value": "Leo"
+ },
+ {
+ "conditions": [
+ {
+ "screenId": "userZodiac",
+ "conditionType": "values",
+ "operator": "includesAny",
+ "values": [
+ "virgo"
+ ]
+ }
+ ],
+ "value": "Virgo"
+ },
+ {
+ "conditions": [
+ {
+ "screenId": "userZodiac",
+ "conditionType": "values",
+ "operator": "includesAny",
+ "values": [
+ "libra"
+ ]
+ }
+ ],
+ "value": "Libra"
+ },
+ {
+ "conditions": [
+ {
+ "screenId": "userZodiac",
+ "conditionType": "values",
+ "operator": "includesAny",
+ "values": [
+ "scorpio"
+ ]
+ }
+ ],
+ "value": "Scorpio"
+ },
+ {
+ "conditions": [
+ {
+ "screenId": "userZodiac",
+ "conditionType": "values",
+ "operator": "includesAny",
+ "values": [
+ "sagittarius"
+ ]
+ }
+ ],
+ "value": "Sagittarius"
+ },
+ {
+ "conditions": [
+ {
+ "screenId": "userZodiac",
+ "conditionType": "values",
+ "operator": "includesAny",
+ "values": [
+ "capricorn"
+ ]
+ }
+ ],
+ "value": "Capricorn"
+ },
+ {
+ "conditions": [
+ {
+ "screenId": "userZodiac",
+ "conditionType": "values",
+ "operator": "includesAny",
+ "values": [
+ "aquarius"
+ ]
+ }
+ ],
+ "value": "Aquarius"
+ },
+ {
+ "conditions": [
+ {
+ "screenId": "userZodiac",
+ "conditionType": "values",
+ "operator": "includesAny",
+ "values": [
+ "pisces"
+ ]
+ }
+ ],
+ "value": "Pisces"
+ }
+ ],
+ "fallback": "Pisces"
+ }
+ ],
+ "variants": [
+ {
+ "conditions": [
+ {
+ "screenId": "love-priority",
+ "operator": "includesAny",
+ "optionIds": [
+ "follow_mind"
+ ]
+ }
+ ],
+ "overrides": {
+ "subtitle": {
+ "text": "According to our statistics, **43% of {{gender}} {{zodiac}}** choose reason. But calculations alone aren’t enough. We’ll reveal which traits in your partner will build trust — and create their portrait."
+ },
+ "icon": {
+ "value": "/images/575ab717-eaa5-462b-8aa6-0202a62c9099.svg"
+ }
+ }
+ },
+ {
+ "conditions": [
+ {
+ "screenId": "love-priority",
+ "operator": "includesAny",
+ "optionIds": [
+ "balance_heart_mind"
+ ]
+ }
+ ],
+ "overrides": {
+ "subtitle": {
+ "text": "According to our statistics, **47% of {{gender}} {{zodiac}}** seek balance. But keeping it isn’t easy. We’ll show which qualities in your partner will unite passion and stability — and create their portrait."
+ },
+ "icon": {
+ "value": "/images/7dd85bf0-4b92-4213-9e2a-82ba1e53d165.svg"
+ }
+ }
+ },
+ {
+ "conditions": [
+ {
+ "screenId": "love-priority",
+ "operator": "includesAny",
+ "optionIds": [
+ "depends_on_situation"
+ ]
+ }
+ ],
+ "overrides": {
+ "subtitle": {
+ "text": "According to our statistics, **37% of {{gender}} {{zodiac}}** make their choice based on circumstances. But such flexibility often leads to doubt. We’ll reveal who can bring you stability and confidence — and draw your partner’s portrait."
+ },
+ "icon": {
+ "value": "/images/6bd25c4d-9308-4907-a54f-b7bc10322fa8.svg"
+ }
+ }
+ }
+ ]
+ },
+ {
+ "id": "relationship-block",
+ "template": "list",
+ "header": {
+ "showBackButton": true,
+ "showProgress": true,
+ "show": true
+ },
+ "title": {
+ "text": "What gets in the way of your relationships the most?",
+ "show": true,
+ "font": "manrope",
+ "weight": "bold",
+ "size": "2xl",
+ "align": "left",
+ "color": "default"
+ },
+ "bottomActionButton": {
+ "show": false,
+ "cornerRadius": "3xl",
+ "showPrivacyTermsConsent": false
+ },
+ "navigation": {
+ "rules": [],
+ "defaultNextScreenId": "relationship-block-result",
+ "isEndScreen": false
+ },
+ "list": {
+ "selectionType": "single",
+ "options": [
+ {
+ "id": "fear_of_wrong_choice",
+ "label": "Fear of making the wrong choice again",
+ "emoji": "💔",
+ "disabled": false
+ },
+ {
+ "id": "wasted_years",
+ "label": "Wasting years on the “wrong” person",
+ "emoji": "🕰️",
+ "disabled": false
+ },
+ {
+ "id": "lack_of_depth",
+ "label": "There’s passion, but not enough depth",
+ "emoji": "🔥",
+ "disabled": false
+ },
+ {
+ "id": "unclear_desires",
+ "label": "Not sure what I really want",
+ "emoji": "🗝",
+ "disabled": false
+ },
+ {
+ "id": "stuck_in_past",
+ "label": "Can’t let go of a past relationship",
+ "emoji": "👻",
+ "disabled": false
+ },
+ {
+ "id": "fear_of_loneliness",
+ "label": "Afraid of being alone",
+ "emoji": "🕯",
+ "disabled": false
+ }
+ ]
+ },
+ "variants": [
+ {
+ "conditions": [
+ {
+ "screenId": "relationship-status",
+ "operator": "includesAny",
+ "optionIds": [
+ "single",
+ "after_breakup"
+ ]
+ }
+ ],
+ "overrides": {
+ "list": {
+ "options": [
+ {
+ "id": "fear_of_wrong_choice",
+ "label": "Fear of making the wrong choice again",
+ "emoji": "💔"
+ },
+ {
+ "id": "wasted_years",
+ "label": "Feeling like the years are slipping away",
+ "emoji": "🕰️"
+ },
+ {
+ "id": "wrong_people",
+ "label": "Meeting interesting people, but not the right one",
+ "emoji": "😕"
+ },
+ {
+ "id": "unclear_needs",
+ "label": "Not sure who I really need",
+ "emoji": "🧩"
+ },
+ {
+ "id": "stuck_in_past",
+ "label": "The past keeps me from moving on",
+ "emoji": "👻"
+ },
+ {
+ "id": "fear_of_loneliness",
+ "label": "Afraid of being alone",
+ "emoji": "🕯"
+ }
+ ]
+ },
+ "title": {
+ "text": "What gets in the way of finding love the most?"
+ }
+ }
+ }
+ ]
+ },
+ {
+ "id": "relationship-block-result",
+ "template": "info",
+ "header": {
+ "showBackButton": true,
+ "showProgress": true,
+ "show": true
+ },
+ "title": {
+ "text": "You’re not alone in this fear.",
+ "show": true,
+ "font": "manrope",
+ "weight": "bold",
+ "size": "2xl",
+ "align": "center",
+ "color": "default"
+ },
+ "subtitle": {
+ "text": "Many people are afraid of repeating the past. We’ll help you recognize the right signs and choose the person who’s truly meant for you.",
+ "show": true,
+ "font": "manrope",
+ "weight": "medium",
+ "size": "lg",
+ "align": "center",
+ "color": "default"
+ },
+ "bottomActionButton": {
+ "show": true,
+ "cornerRadius": "3xl",
+ "showPrivacyTermsConsent": false
+ },
+ "navigation": {
+ "rules": [],
+ "defaultNextScreenId": "core-need",
+ "isEndScreen": false
+ },
+ "icon": {
+ "type": "image",
+ "value": "/images/1d7d3979-6627-416e-8f80-c0388a6cec22.svg",
+ "size": "xl"
+ },
+ "variables": [],
+ "variants": [
+ {
+ "conditions": [
+ {
+ "screenId": "relationship-block",
+ "operator": "includesAny",
+ "optionIds": [
+ "wasted_years"
+ ]
+ }
+ ],
+ "overrides": {
+ "title": {
+ "text": "This pain is familiar to many."
+ },
+ "subtitle": {
+ "text": "The feeling of wasted time is hard. We’ll show you how to stop getting stuck in the past and move forward."
+ },
+ "icon": {
+ "value": "/images/5ae02c30-44a0-4a8c-a814-9fd2490cdc77.svg"
+ }
+ }
+ },
+ {
+ "conditions": [
+ {
+ "screenId": "relationship-block",
+ "operator": "includesAny",
+ "optionIds": [
+ "lack_of_depth"
+ ]
+ }
+ ],
+ "overrides": {
+ "title": {
+ "text": "Many people face this."
+ },
+ "subtitle": {
+ "text": "Bright emotions fade quickly without a foundation. We’ll help you turn a connection into true closeness."
+ }
+ }
+ },
+ {
+ "conditions": [
+ {
+ "screenId": "relationship-block",
+ "operator": "includesAny",
+ "optionIds": [
+ "unclear_desires"
+ ]
+ }
+ ],
+ "overrides": {
+ "title": {
+ "text": "This is often hard to figure out."
+ },
+ "subtitle": {
+ "text": "Understanding yourself is the key to making the right choice. We’ll help you see which qualities truly matter to you."
+ }
+ }
+ },
+ {
+ "conditions": [
+ {
+ "screenId": "relationship-block",
+ "operator": "includesAny",
+ "optionIds": [
+ "stuck_in_past"
+ ]
+ }
+ ],
+ "overrides": {
+ "title": {
+ "text": "You’re not the only one stuck in the past."
+ },
+ "subtitle": {
+ "text": "The past can hold on too tightly. We’ll show you how to let go and make room for new love."
+ }
+ }
+ },
+ {
+ "conditions": [
+ {
+ "screenId": "relationship-block",
+ "operator": "includesAny",
+ "optionIds": [
+ "fear_of_loneliness"
+ ]
+ }
+ ],
+ "overrides": {
+ "title": {
+ "text": "This fear is very familiar to many."
+ },
+ "subtitle": {
+ "text": "The thought of a lonely future is frightening. We’ll help you build a path where someone special walks beside you."
+ }
+ }
+ },
+ {
+ "conditions": [
+ {
+ "screenId": "relationship-block",
+ "operator": "includesAny",
+ "optionIds": [
+ "wrong_people"
+ ]
+ }
+ ],
+ "overrides": {
+ "title": {
+ "text": "Many people go through this."
+ }
+ }
+ },
+ {
+ "conditions": [
+ {
+ "screenId": "relationship-block",
+ "operator": "includesAny",
+ "optionIds": [
+ "unclear_needs"
+ ]
+ }
+ ],
+ "overrides": {
+ "title": {
+ "text": "It’s okay not to know right away."
+ },
+ "subtitle": {
+ "text": "Figuring out what kind of partner you truly need isn’t easy. We’ll help you see which qualities really matter."
+ }
+ }
+ }
+ ]
+ },
+ {
+ "id": "core-need",
+ "template": "list",
+ "header": {
+ "showBackButton": true,
+ "showProgress": true,
+ "show": true
+ },
+ "title": {
+ "text": "What’s your core need right now?",
+ "show": true,
+ "font": "manrope",
+ "weight": "bold",
+ "size": "2xl",
+ "align": "left",
+ "color": "default"
+ },
+ "bottomActionButton": {
+ "show": false,
+ "cornerRadius": "3xl",
+ "showPrivacyTermsConsent": false
+ },
+ "navigation": {
+ "rules": [],
+ "defaultNextScreenId": "partner-similarity",
+ "isEndScreen": false
+ },
+ "list": {
+ "selectionType": "single",
+ "options": [
+ {
+ "id": "safety_and_support",
+ "label": "Safety and support",
+ "disabled": false
+ },
+ {
+ "id": "passion_and_spark",
+ "label": "Passion and spark",
+ "disabled": false
+ },
+ {
+ "id": "calm_and_acceptance",
+ "label": "Calm and acceptance",
+ "disabled": false
+ },
+ {
+ "id": "inspiration_and_growth",
+ "label": "Inspiration and growth",
+ "disabled": false
+ },
+ {
+ "id": "not_important",
+ "label": "Doesn’t matter",
+ "disabled": false
+ }
+ ]
+ },
+ "variants": []
+ },
+ {
+ "id": "partner-similarity",
+ "template": "list",
+ "header": {
+ "showBackButton": true,
+ "showProgress": true,
+ "show": true
+ },
+ "title": {
+ "text": "Is your partner similar to you?",
+ "show": true,
+ "font": "manrope",
+ "weight": "bold",
+ "size": "2xl",
+ "align": "left",
+ "color": "default"
+ },
+ "bottomActionButton": {
+ "show": false,
+ "cornerRadius": "3xl",
+ "showPrivacyTermsConsent": false
+ },
+ "navigation": {
+ "rules": [],
+ "defaultNextScreenId": "partner-role",
+ "isEndScreen": false
+ },
+ "list": {
+ "selectionType": "single",
+ "options": [
+ {
+ "id": "similar",
+ "label": "Yes, we have things in common",
+ "disabled": false
+ },
+ {
+ "id": "different",
+ "label": "We’re completely different",
+ "disabled": false
+ }
+ ]
+ },
+ "variants": []
+ },
+ {
+ "id": "partner-role",
+ "template": "list",
+ "header": {
+ "showBackButton": true,
+ "showProgress": true,
+ "show": true
+ },
+ "title": {
+ "text": "Preferred partner role",
+ "show": true,
+ "font": "manrope",
+ "weight": "bold",
+ "size": "2xl",
+ "align": "left",
+ "color": "default"
+ },
+ "bottomActionButton": {
+ "show": false,
+ "cornerRadius": "3xl",
+ "showPrivacyTermsConsent": false
+ },
+ "navigation": {
+ "rules": [],
+ "defaultNextScreenId": "relationship-strength",
+ "isEndScreen": false
+ },
+ "list": {
+ "selectionType": "single",
+ "options": [
+ {
+ "id": "leader",
+ "label": "Leader",
+ "disabled": false
+ },
+ {
+ "id": "equal",
+ "label": "Equal",
+ "disabled": false
+ },
+ {
+ "id": "supportive",
+ "label": "Supportive",
+ "disabled": false
+ },
+ {
+ "id": "flexible",
+ "label": "Flexible",
+ "disabled": false
+ },
+ {
+ "id": "dependent",
+ "label": "Dependent on me",
+ "disabled": false
+ },
+ {
+ "id": "situational",
+ "label": "Depends on the situation",
+ "disabled": false
+ }
+ ]
+ },
+ "variants": []
+ },
+ {
+ "id": "relationship-strength",
+ "template": "list",
+ "header": {
+ "showBackButton": true,
+ "showProgress": true,
+ "show": true
+ },
+ "title": {
+ "text": "What’s your main source of strength in a relationship?",
+ "show": true,
+ "font": "manrope",
+ "weight": "bold",
+ "size": "2xl",
+ "align": "left",
+ "color": "default"
+ },
+ "bottomActionButton": {
+ "show": false,
+ "cornerRadius": "3xl",
+ "showPrivacyTermsConsent": false
+ },
+ "navigation": {
+ "rules": [],
+ "defaultNextScreenId": "love-expression",
+ "isEndScreen": false
+ },
+ "list": {
+ "selectionType": "single",
+ "options": [
+ {
+ "id": "support_and_care",
+ "label": "Support and care",
+ "disabled": false
+ },
+ {
+ "id": "admiration_and_recognition",
+ "label": "Admiration and appreciation",
+ "disabled": false
+ },
+ {
+ "id": "freedom_and_space",
+ "label": "Freedom and space",
+ "disabled": false
+ },
+ {
+ "id": "shared_goals_and_plans",
+ "label": "Shared goals and plans",
+ "disabled": false
+ },
+ {
+ "id": "joy_and_lightness",
+ "label": "Joy and lightness",
+ "disabled": false
+ }
+ ]
+ },
+ "variants": []
+ },
+ {
+ "id": "love-expression",
+ "template": "list",
+ "header": {
+ "showBackButton": true,
+ "showProgress": true,
+ "show": true
+ },
+ "title": {
+ "text": "How do you express love?",
+ "show": true,
+ "font": "manrope",
+ "weight": "bold",
+ "size": "2xl",
+ "align": "left",
+ "color": "default"
+ },
+ "bottomActionButton": {
+ "show": false,
+ "cornerRadius": "3xl",
+ "showPrivacyTermsConsent": false
+ },
+ "navigation": {
+ "rules": [],
+ "defaultNextScreenId": "relationship-future",
+ "isEndScreen": false
+ },
+ "list": {
+ "selectionType": "single",
+ "options": [
+ {
+ "id": "words",
+ "label": "With words",
+ "disabled": false
+ },
+ {
+ "id": "actions",
+ "label": "Through actions",
+ "disabled": false
+ },
+ {
+ "id": "quality_time",
+ "label": "By spending time together",
+ "disabled": false
+ },
+ {
+ "id": "care",
+ "label": "With care",
+ "disabled": false
+ },
+ {
+ "id": "passion",
+ "label": "With passion",
+ "disabled": false
+ },
+ {
+ "id": "in_my_own_way",
+ "label": "In my own way",
+ "disabled": false
+ }
+ ]
+ },
+ "variants": []
+ },
+ {
+ "id": "relationship-future",
+ "template": "list",
+ "header": {
+ "showBackButton": true,
+ "showProgress": true,
+ "show": true
+ },
+ "title": {
+ "text": "How do you see your relationship’s future?",
+ "show": true,
+ "font": "manrope",
+ "weight": "bold",
+ "size": "2xl",
+ "align": "left",
+ "color": "default"
+ },
+ "bottomActionButton": {
+ "show": false,
+ "cornerRadius": "3xl",
+ "showPrivacyTermsConsent": false
+ },
+ "navigation": {
+ "rules": [],
+ "defaultNextScreenId": "relationship-energy",
+ "isEndScreen": false
+ },
+ "list": {
+ "selectionType": "single",
+ "options": [
+ {
+ "id": "home_and_family",
+ "label": "A shared home and family",
+ "disabled": false
+ },
+ {
+ "id": "travel_and_discovery",
+ "label": "Travel and new discoveries",
+ "disabled": false
+ },
+ {
+ "id": "shared_goals",
+ "label": "Joint projects and goals",
+ "disabled": false
+ },
+ {
+ "id": "present_moment",
+ "label": "Just being together “here and now”",
+ "disabled": false
+ },
+ {
+ "id": "unsure",
+ "label": "Hard to say for now",
+ "disabled": false
+ }
+ ]
+ },
+ "variants": []
+ },
+ {
+ "id": "relationship-energy",
+ "template": "list",
+ "header": {
+ "showBackButton": true,
+ "showProgress": true,
+ "show": true
+ },
+ "title": {
+ "text": "What kind of energy do you want in a relationship?",
+ "show": true,
+ "font": "manrope",
+ "weight": "bold",
+ "size": "2xl",
+ "align": "left",
+ "color": "default"
+ },
+ "bottomActionButton": {
+ "show": false,
+ "cornerRadius": "3xl",
+ "showPrivacyTermsConsent": false
+ },
+ "navigation": {
+ "rules": [],
+ "defaultNextScreenId": "relationship-metaphor",
+ "isEndScreen": false
+ },
+ "list": {
+ "selectionType": "single",
+ "options": [
+ {
+ "id": "lightness_and_joy",
+ "label": "Lightness and joy",
+ "disabled": false
+ },
+ {
+ "id": "strength_and_drive",
+ "label": "Strength and drive",
+ "disabled": false
+ },
+ {
+ "id": "comfort_and_safety",
+ "label": "Comfort and stability",
+ "disabled": false
+ },
+ {
+ "id": "depth_and_meaning",
+ "label": "Depth and meaning",
+ "disabled": false
+ },
+ {
+ "id": "freedom_and_space",
+ "label": "Freedom and space",
+ "disabled": false
+ }
+ ]
+ },
+ "variants": []
+ },
+ {
+ "id": "relationship-metaphor",
+ "template": "list",
+ "header": {
+ "showBackButton": true,
+ "showProgress": true,
+ "show": true
+ },
+ "title": {
+ "text": "Which image of a relationship feels closest to you?",
+ "show": true,
+ "font": "manrope",
+ "weight": "bold",
+ "size": "2xl",
+ "align": "left",
+ "color": "default"
+ },
+ "subtitle": {
+ "text": "You can choose several options.",
+ "show": true,
+ "font": "manrope",
+ "weight": "medium",
+ "size": "lg",
+ "align": "left",
+ "color": "default"
+ },
+ "bottomActionButton": {
+ "show": true,
+ "cornerRadius": "3xl",
+ "showPrivacyTermsConsent": false
+ },
+ "navigation": {
+ "rules": [],
+ "defaultNextScreenId": "portrait-generation",
+ "isEndScreen": false
+ },
+ "list": {
+ "selectionType": "multi",
+ "options": [
+ {
+ "id": "bridge",
+ "label": "Bridge — connection through obstacles",
+ "disabled": false
+ },
+ {
+ "id": "mountain_path",
+ "label": "Mountain path — challenges and meaning",
+ "disabled": false
+ },
+ {
+ "id": "dance",
+ "label": "Dance — balance and mutual steps",
+ "disabled": false
+ },
+ {
+ "id": "key_and_lock",
+ "label": "Key and lock — shared values",
+ "disabled": false
+ },
+ {
+ "id": "harbor",
+ "label": "Harbor — safety and peace",
+ "disabled": false
+ },
+ {
+ "id": "lighthouse",
+ "label": "Lighthouse — guidance and support",
+ "disabled": false
+ },
+ {
+ "id": "ocean_after_storm",
+ "label": "Ocean after the storm — renewal and new beginnings",
+ "disabled": false
+ },
+ {
+ "id": "garden",
+ "label": "Garden — care and growth",
+ "disabled": false
+ }
+ ]
+ },
+ "variants": []
+ },
+ {
+ "id": "portrait-generation",
+ "template": "loaders",
+ "header": {
+ "showBackButton": false,
+ "showProgress": true,
+ "show": false
+ },
+ "title": {
+ "text": "Creating the portrait of your other half.",
+ "show": true,
+ "font": "manrope",
+ "weight": "bold",
+ "size": "2xl",
+ "align": "center",
+ "color": "default"
+ },
+ "bottomActionButton": {
+ "show": true,
+ "text": "Continue",
+ "cornerRadius": "3xl",
+ "showPrivacyTermsConsent": false
+ },
+ "navigation": {
+ "rules": [],
+ "defaultNextScreenId": "email",
+ "isEndScreen": false
+ },
+ "progressbars": {
+ "items": [
+ {
+ "processingTitle": "Analyzing your answers",
+ "processingSubtitle": "Processing...",
+ "completedTitle": "Analyzing your answers",
+ "completedSubtitle": "Complete"
+ },
+ {
+ "processingTitle": "Portrait of the Soulmate",
+ "processingSubtitle": "Processing...",
+ "completedTitle": "Portrait of the Soulmate",
+ "completedSubtitle": "Complete"
+ },
+ {
+ "processingTitle": "Portrait of the Soulmate",
+ "processingSubtitle": "Processing...",
+ "completedTitle": "Connection Insights",
+ "completedSubtitle": "Complete"
+ }
+ ],
+ "transitionDuration": 3000
+ },
+ "variants": []
+ },
+ {
+ "id": "email",
+ "template": "email",
+ "header": {
+ "showBackButton": true,
+ "showProgress": true,
+ "show": true
+ },
+ "title": {
+ "text": "Your soulmate’s portrait is ready! Where should we send it?",
+ "show": true,
+ "font": "manrope",
+ "weight": "bold",
+ "size": "2xl",
+ "align": "center",
+ "color": "default"
+ },
+ "bottomActionButton": {
+ "show": true,
+ "text": "Continue",
+ "cornerRadius": "3xl",
+ "showPrivacyTermsConsent": true
+ },
+ "navigation": {
+ "rules": [],
+ "defaultNextScreenId": "coupon",
+ "isEndScreen": false
+ },
+ "emailInput": {
+ "label": "Email",
+ "placeholder": "example@email.com"
+ },
+ "image": {
+ "src": "/female-portrait.jpg"
+ },
+ "variants": [
+ {
+ "conditions": [
+ {
+ "screenId": "partner-gender",
+ "operator": "includesAny",
+ "optionIds": [
+ "male"
+ ]
+ }
+ ],
+ "overrides": {
+ "image": {
+ "src": "/male-portrait.jpg"
+ }
+ }
+ }
+ ]
+ },
+ {
+ "id": "coupon",
+ "template": "coupon",
+ "header": {
+ "showBackButton": true,
+ "showProgress": true,
+ "show": true
+ },
+ "title": {
+ "text": "You’re in luck!",
+ "show": true,
+ "font": "manrope",
+ "weight": "bold",
+ "size": "2xl",
+ "align": "center",
+ "color": "default"
+ },
+ "subtitle": {
+ "text": "You’ve received an exclusive 94% discount.",
+ "show": true,
+ "font": "manrope",
+ "weight": "medium",
+ "size": "lg",
+ "align": "center",
+ "color": "default"
+ },
+ "bottomActionButton": {
+ "show": true,
+ "cornerRadius": "3xl",
+ "showPrivacyTermsConsent": false
+ },
+ "navigation": {
+ "rules": [],
+ "defaultNextScreenId": "payment",
+ "isEndScreen": false
+ },
+ "coupon": {
+ "title": {
+ "text": "Special Offer",
+ "font": "manrope",
+ "weight": "bold",
+ "align": "center",
+ "size": "lg",
+ "color": "default"
+ },
+ "offer": {
+ "title": {
+ "text": "94% OFF",
+ "font": "manrope",
+ "weight": "bold",
+ "align": "center",
+ "size": "3xl",
+ "color": "primary"
+ },
+ "description": {
+ "text": "One-time special offer",
+ "font": "inter",
+ "weight": "medium",
+ "color": "muted",
+ "align": "center",
+ "size": "md"
+ }
+ },
+ "promoCode": {
+ "text": "SOULMATE94",
+ "font": "geistMono",
+ "weight": "bold",
+ "align": "center",
+ "size": "lg",
+ "color": "accent"
+ },
+ "footer": {
+ "text": "Copy or click **Continue**",
+ "font": "inter",
+ "weight": "medium",
+ "color": "muted",
+ "align": "center",
+ "size": "sm"
+ }
+ },
+ "copiedMessage": "Promo code copied!",
+ "variants": []
+ },
+ {
+ "id": "payment",
+ "template": "trialPayment",
+ "header": {
+ "showBackButton": true,
+ "showProgress": true,
+ "show": false
+ },
+ "title": {
+ "text": "Title",
+ "show": false,
+ "font": "manrope",
+ "weight": "bold",
+ "size": "2xl",
+ "align": "left",
+ "color": "default"
+ },
+ "bottomActionButton": {
+ "show": false,
+ "cornerRadius": "3xl",
+ "showPrivacyTermsConsent": false
+ },
+ "navigation": {
+ "rules": [],
+ "defaultNextScreenId": "specialoffer",
+ "isEndScreen": false
+ },
+ "variants": [
+ {
+ "conditions": [
+ {
+ "screenId": "partner-gender",
+ "operator": "includesAny",
+ "optionIds": [
+ "male"
+ ]
+ }
+ ],
+ "overrides": {
+ "unlockYourSketch": {
+ "image": {
+ "src": "/trial-payment/portrait-male.jpg"
+ }
+ }
+ }
+ }
+ ],
+ "headerBlock": {
+ "text": {
+ "text": "⚠️ Your sketch expires soon!"
+ },
+ "timer": {
+ "text": ""
+ },
+ "timerSeconds": 600
+ },
+ "unlockYourSketch": {
+ "title": {
+ "text": "Unlock Your Sketch"
+ },
+ "subtitle": {
+ "text": "Just One Click to Reveal Your Match!"
+ },
+ "image": {
+ "src": "/trial-payment/portrait-female.jpg"
+ },
+ "blur": {
+ "text": {
+ "text": "Unlock to reveal your personalized portrait"
+ },
+ "icon": "lock"
+ },
+ "buttonText": "Get My Soulmate Sketch"
+ },
+ "joinedToday": {
+ "count": {
+ "text": "954"
+ },
+ "text": {
+ "text": "Joined today"
+ }
+ },
+ "trustedByOver": {
+ "text": {
+ "text": "Trusted by over **355,000** people."
+ }
+ },
+ "findingOneGuide": {
+ "header": {
+ "emoji": {
+ "text": "❤️"
+ },
+ "title": {
+ "text": "Finding the One Guide"
+ }
+ },
+ "text": {
+ "text": "You’re special — you have imagination and energy that not everyone can understand. You deserve more than to be “half-understood” — you deserve to meet someone who sees the world as deeply and vividly as you do. This guide will help you recognize the signs of destiny, trust your path, and find the one whose heart is already connected to yours.\nThey may already be closer than you think — drawn to your light, searching for the same rare connection. Stay open, follow your intuition, and notice the quiet moments that feel like fate. Every step you take brings you nearer to the soul that was always meant to walk beside you."
+ },
+ "blur": {
+ "text": {
+ "text": "Full access is required to unlock the complete report."
+ },
+ "icon": "lock"
+ }
+ },
+ "tryForDays": {
+ "title": {
+ "text": "Try it for 7 days!"
+ },
+ "textList": {
+ "items": [
+ {
+ "text": "Receive a hand-drawn sketch of your soulmate."
+ },
+ {
+ "text": "Reveal the path with the guide."
+ },
+ {
+ "text": "Talk to live experts and get guidance."
+ },
+ {
+ "text": "Start your 7-day trial for just $1.00."
+ },
+ {
+ "text": "Cancel anytime—just 24 hours before renewal."
+ }
+ ]
+ }
+ },
+ "totalPrice": {
+ "couponContainer": {
+ "title": {
+ "text": "Coupon\nCode"
+ },
+ "buttonText": "SOULMATE94"
+ },
+ "priceContainer": {
+ "title": {
+ "text": "Total"
+ },
+ "price": {
+ "text": "$1.00"
+ },
+ "oldPrice": {
+ "text": "$14.99"
+ },
+ "discount": {
+ "text": "94% discount applied"
+ }
+ }
+ },
+ "paymentButtons": {
+ "buttons": [
+ {
+ "text": "Pay",
+ "icon": "pay"
+ },
+ {
+ "text": "Pay",
+ "icon": "google"
+ },
+ {
+ "text": "Credit or debit card",
+ "icon": "card",
+ "primary": true
+ }
+ ]
+ },
+ "moneyBackGuarantee": {
+ "title": {
+ "text": "30-DAY MONEY-BACK GUARANTEE"
+ },
+ "text": {
+ "text": "If you don't receive your soulmate sketch, we'll refund your money!"
+ }
+ },
+ "policy": {
+ "text": {
+ "text": "By clicking Continue, you agree to our Terms of Use & Service and Privacy Policy. You also acknowledge that your 1 week introductory plan to Respontika, billed at $1.00, will automatically renew at $14.50 every 1 week unless canceled before the end of the trial period."
+ }
+ },
+ "usersPortraits": {
+ "title": {
+ "text": "Our Users' Soulmate Portraits"
+ },
+ "images": [
+ {
+ "src": "/trial-payment/users-portraits/1.jpg"
+ },
+ {
+ "src": "/trial-payment/users-portraits/2.jpg"
+ },
+ {
+ "src": "/trial-payment/users-portraits/3.jpg"
+ },
+ {
+ "src": "/trial-payment/users-portraits/4.jpg"
+ },
+ {
+ "src": "/trial-payment/users-portraits/5.jpg"
+ },
+ {
+ "src": "/trial-payment/users-portraits/6.jpg"
+ }
+ ],
+ "buttonText": "Get My Soulmate Sketch"
+ },
+ "joinedTodayWithAvatars": {
+ "count": {
+ "text": "954"
+ },
+ "text": {
+ "text": "people joined today"
+ },
+ "avatars": {
+ "images": [
+ {
+ "src": "/trial-payment/avatars/1.jpg"
+ },
+ {
+ "src": "/trial-payment/avatars/2.jpg"
+ },
+ {
+ "src": "/trial-payment/avatars/3.jpg"
+ },
+ {
+ "src": "/trial-payment/avatars/4.jpg"
+ },
+ {
+ "src": "/trial-payment/avatars/5.jpg"
+ }
+ ]
+ }
+ },
+ "progressToSeeSoulmate": {
+ "title": {
+ "text": "See Your Soulmate – Just One Step Away"
+ },
+ "progress": {
+ "value": 92
+ },
+ "leftText": {
+ "text": "Step 2 of 5"
+ },
+ "rightText": {
+ "text": "99% Complete"
+ }
+ },
+ "stepsToSeeSoulmate": {
+ "steps": [
+ {
+ "title": {
+ "text": "Questions Answered"
+ },
+ "description": {
+ "text": "You've provided all the necessary information."
+ },
+ "icon": "questions",
+ "isActive": true
+ },
+ {
+ "title": {
+ "text": "Profile Analysis"
+ },
+ "description": {
+ "text": "Creating your perfect soulmate profile."
+ },
+ "icon": "profile",
+ "isActive": true
+ },
+ {
+ "title": {
+ "text": "Sketch Creation"
+ },
+ "description": {
+ "text": "Your personalized soulmate sketch will be created."
+ },
+ "icon": "sketch"
+ },
+ {
+ "title": {
+ "text": "Astrological Insights"
+ },
+ "description": {
+ "text": "Unique astrology-based recommendations."
+ },
+ "icon": "astro"
+ },
+ {
+ "title": {
+ "text": "Personalized chat with an expert"
+ },
+ "description": {
+ "text": "Individual guidance."
+ },
+ "icon": "chat"
+ }
+ ],
+ "buttonText": "Show Me My Soulmate"
+ },
+ "reviews": {
+ "title": {
+ "text": "Loved and Trusted Worldwide"
+ },
+ "items": [
+ {
+ "name": {
+ "text": "Jennifer Wilson 🇺🇸"
+ },
+ "text": {
+ "text": "**“I saw my mistakes… and found my husband.”**\nThe portrait instantly struck me — I had this feeling like I’d seen him somewhere before. But the real turning point came after the guide: I finally understood why I kept choosing the “wrong” people. And the most amazing part — soon after, I met a man who turned out to be the exact image from that portrait. He’s my husband now, and when we compared the drawing to his photo, the resemblance was just wow."
+ },
+ "avatar": {
+ "src": "/trial-payment/reviews/avatars/1.jpg"
+ },
+ "portrait": {
+ "src": "/trial-payment/reviews/portraits/1.jpg"
+ },
+ "photo": {
+ "src": "/trial-payment/reviews/photos/1.jpg"
+ },
+ "rating": 5,
+ "date": {
+ "text": "1 day ago"
+ }
+ },
+ {
+ "name": {
+ "text": "Amanda Davis 🇨🇦"
+ },
+ "text": {
+ "text": "**“I understood my partner better in one evening than in several years.”**\nI took the test just for fun — the portrait surprised us. But the real breakthrough came when I read the guide about my other half. It had spot-on insights about how we can support each other. The price was nothing, but the value was huge — now we have fewer misunderstandings and so much more warmth."
+ },
+ "avatar": {
+ "src": "/trial-payment/reviews/avatars/2.jpg"
+ },
+ "portrait": {
+ "src": "/trial-payment/reviews/portraits/2.jpg"
+ },
+ "photo": {
+ "src": "/trial-payment/reviews/photos/2.jpg"
+ },
+ "rating": 5,
+ "date": {
+ "text": "4 days ago"
+ }
+ },
+ {
+ "name": {
+ "text": "Michael Johnson 🇬🇧"
+ },
+ "text": {
+ "text": "**“I saw her face — and got goosebumps.”**\nWhen I got my test results and saw the portrait, I literally froze. It was the exact girl I’d started dating a couple of weeks earlier. And the guide described perfectly why we’re drawn to each other. Honestly, I didn’t expect such a match."
+ },
+ "avatar": {
+ "src": "/trial-payment/reviews/avatars/3.jpg"
+ },
+ "portrait": {
+ "src": "/trial-payment/reviews/portraits/3.jpg"
+ },
+ "photo": {
+ "src": "/trial-payment/reviews/photos/3.jpg"
+ },
+ "rating": 5,
+ "date": {
+ "text": "1 week ago"
+ }
+ }
+ ]
+ },
+ "stillHaveQuestions": {
+ "title": {
+ "text": "Still have questions? We're here to help!"
+ },
+ "actionButtonText": "Get My Soulmate Sketch",
+ "contactButtonText": "Contact Support"
+ },
+ "commonQuestions": {
+ "title": {
+ "text": "Common Questions"
+ },
+ "items": [
+ {
+ "question": "When will I receive my sketch?",
+ "answer": "Your personalized soulmate sketch will be delivered within 24-48 hours after completing your order. You'll receive an email notification when it's ready for viewing in your account."
+ },
+ {
+ "question": "How do I cancel my subscription?",
+ "answer": "You can cancel anytime from your account settings. Make sure to cancel at least 24 hours before the renewal date to avoid being charged."
+ },
+ {
+ "question": "How accurate are the readings?",
+ "answer": "Our readings are based on a combination of your answers and advanced pattern analysis. While they provide valuable insights, they are intended for guidance and entertainment purposes."
+ },
+ {
+ "question": "Is my data secure and private?",
+ "answer": "Yes. We follow strict data protection standards. Your data is encrypted and never shared with third parties without your consent."
+ }
+ ]
+ },
+ "footer": {
+ "title": {
+ "text": "WIT LAB ©"
+ },
+ "contacts": {
+ "title": {
+ "text": "CONTACTS"
+ },
+ "email": {
+ "href": "info@witlab.us",
+ "text": "info@witlab.us"
+ },
+ "address": {
+ "text": "Wit Lab 2108 N ST STE N SACRAMENTO, CA95816, US"
+ }
+ },
+ "legal": {
+ "title": {
+ "text": "LEGAL"
+ },
+ "links": [
+ {
+ "href": "https://witlab.com/terms",
+ "text": "Terms of Service"
+ },
+ {
+ "href": "https://witlab.com/privacy",
+ "text": "Privacy Policy"
+ },
+ {
+ "href": "https://witlab.com/refund",
+ "text": "Refund Policy"
+ }
+ ],
+ "copyright": {
+ "text": "Copyright © 2025 Wit Lab™. All rights reserved. All trademarks referenced herein are the properties of their respective owners."
+ }
+ },
+ "paymentMethods": {
+ "title": {
+ "text": "PAYMENT METHODS"
+ },
+ "methods": [
+ {
+ "src": "/trial-payment/payment-methods/visa.svg",
+ "alt": "visa"
+ },
+ {
+ "src": "/trial-payment/payment-methods/mastercard.svg",
+ "alt": "mastercard"
+ },
+ {
+ "src": "/trial-payment/payment-methods/discover.svg",
+ "alt": "discover"
+ },
+ {
+ "src": "/trial-payment/payment-methods/apple.svg",
+ "alt": "apple"
+ },
+ {
+ "src": "/trial-payment/payment-methods/google.svg",
+ "alt": "google"
+ },
+ {
+ "src": "/trial-payment/payment-methods/paypal.svg",
+ "alt": "paypal"
+ }
+ ]
+ }
+ }
+ },
+ {
+ "id": "specialoffer",
+ "template": "specialOffer",
+ "header": {
+ "showBackButton": false,
+ "showProgress": true,
+ "show": true
+ },
+ "title": {
+ "text": "Special Offer",
+ "show": false,
+ "font": "manrope",
+ "weight": "bold",
+ "size": "2xl",
+ "align": "left",
+ "color": "default"
+ },
+ "bottomActionButton": {
+ "show": true,
+ "text": "GET {{trialPeriod}} TRIAL",
+ "cornerRadius": "3xl",
+ "showPrivacyTermsConsent": false
+ },
+ "variants": [],
+ "text": {
+ "title": {
+ "text": "Special Offer"
+ },
+ "subtitle": {
+ "text": "SAVE {{discountPercent}}% OFF!"
+ },
+ "description": {
+ "trialPrice": {
+ "text": "{{trialPrice}}"
+ },
+ "text": {
+ "text": " instead of "
+ },
+ "oldTrialPrice": {
+ "text": "~~{{oldTrialPrice}}~~"
+ }
+ }
+ },
+ "advantages": {
+ "items": [
+ {
+ "icon": {
+ "text": "🔥"
+ },
+ "text": {
+ "text": " **{{trialPeriodHyphen}}** trial instead of ~~{{oldTrialPeriod}}~~"
+ }
+ },
+ {
+ "icon": {
+ "text": "💝"
+ },
+ "text": {
+ "text": " Get **{{discountPercent}}%** off your Soulmate Sketch"
+ }
+ },
+ {
+ "icon": {
+ "text": "💌"
+ },
+ "text": {
+ "text": " Includes the **“Finding the One”** Guide"
+ }
+ }
+ ]
+ }
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/funnels/soulmate.json b/public/funnels/soulmate.json
index 3c9507d..c126ee6 100644
--- a/public/funnels/soulmate.json
+++ b/public/funnels/soulmate.json
@@ -1,11 +1,11 @@
{
"meta": {
"id": "soulmate",
- "title": "Soulmate V1",
+ "title": "Soulmate V1 (копия)",
"description": "Soulmate",
"firstScreenId": "onboarding",
- "googleAnalyticsId": "G-4N17LL3BB5",
- "yandexMetrikaId": "104471567"
+ "googleAnalyticsId": "",
+ "yandexMetrikaId": ""
},
"defaultTexts": {
"nextButton": "Next",
@@ -17,6 +17,7 @@
"template": "soulmate",
"header": {
"showBackButton": false,
+ "showProgress": true,
"show": false
},
"title": {
@@ -47,62 +48,7 @@
"align": "center",
"color": "default"
},
- "variants": [
- {
- "conditions": [
- {
- "screenId": "onboarding",
- "operator": "includesAny",
- "conditionType": "unleash",
- "unleashFlag": "soulmate-onboarding-image",
- "unleashVariants": [
- "v0"
- ]
- }
- ],
- "overrides": {}
- },
- {
- "conditions": [
- {
- "screenId": "onboarding",
- "operator": "includesAny",
- "conditionType": "unleash",
- "unleashFlag": "soulmate-onboarding-image",
- "unleashVariants": [
- "v1"
- ]
- }
- ],
- "overrides": {
- "soulmatePortraitsDelivered": {
- "image": null,
- "mediaUrl": "/images/90b8c77f-c0cd-475d-a4de-bcabb3708c59.png",
- "mediaType": "image"
- }
- }
- },
- {
- "conditions": [
- {
- "screenId": "onboarding",
- "operator": "includesAny",
- "conditionType": "unleash",
- "unleashFlag": "soulmate-onboarding-image",
- "unleashVariants": [
- "v2"
- ]
- }
- ],
- "overrides": {
- "soulmatePortraitsDelivered": {
- "image": null,
- "mediaUrl": "/images/275472b0-30e0-47d7-a1ab-8090bc9fb236.mp4",
- "mediaType": "video"
- }
- }
- }
- ],
+ "variants": [],
"soulmatePortraitsDelivered": {
"image": "/soulmate-portrait-delivered-male.jpg",
"text": {
@@ -153,6 +99,7 @@
"template": "list",
"header": {
"showBackButton": true,
+ "showProgress": true,
"show": true
},
"title": {
@@ -208,6 +155,7 @@
"template": "list",
"header": {
"showBackButton": true,
+ "showProgress": true,
"show": true
},
"title": {
@@ -226,7 +174,7 @@
},
"navigation": {
"rules": [],
- "defaultNextScreenId": "analysis-target",
+ "defaultNextScreenId": "email",
"isEndScreen": false
},
"list": {
@@ -247,1987 +195,12 @@
},
"variants": []
},
- {
- "id": "relationship-status",
- "template": "list",
- "header": {
- "showBackButton": true,
- "show": true
- },
- "title": {
- "text": "You are currently?",
- "show": true,
- "font": "manrope",
- "weight": "bold",
- "size": "2xl",
- "align": "left",
- "color": "default"
- },
- "subtitle": {
- "text": "This helps make the portrait and insights more accurate.",
- "show": true,
- "font": "manrope",
- "weight": "medium",
- "size": "lg",
- "align": "left",
- "color": "default"
- },
- "bottomActionButton": {
- "show": false,
- "cornerRadius": "3xl",
- "showPrivacyTermsConsent": false
- },
- "navigation": {
- "rules": [],
- "defaultNextScreenId": "analysis-target",
- "isEndScreen": false
- },
- "list": {
- "selectionType": "single",
- "options": [
- {
- "id": "in_relationship",
- "label": "In a relationship",
- "disabled": false
- },
- {
- "id": "single",
- "label": "Single",
- "disabled": false
- },
- {
- "id": "after_breakup",
- "label": "Just went through a breakup",
- "disabled": false
- },
- {
- "id": "its_complicated",
- "label": "It’s complicated",
- "disabled": false
- }
- ]
- },
- "variants": []
- },
- {
- "id": "analysis-target",
- "template": "list",
- "header": {
- "showBackButton": true,
- "show": true
- },
- "title": {
- "text": "Who are we analyzing?",
- "show": true,
- "font": "manrope",
- "weight": "bold",
- "size": "2xl",
- "align": "left",
- "color": "default"
- },
- "subtitle": {
- "text": "This helps make the portrait and insights more accurate.",
- "show": true,
- "font": "manrope",
- "weight": "regular",
- "size": "md",
- "align": "center",
- "color": "default"
- },
- "bottomActionButton": {
- "show": false,
- "cornerRadius": "3xl",
- "showPrivacyTermsConsent": false
- },
- "navigation": {
- "rules": [],
- "defaultNextScreenId": "partner-age",
- "isEndScreen": false
- },
- "list": {
- "selectionType": "single",
- "options": [
- {
- "id": "current_partner",
- "label": "Current partner",
- "disabled": false
- },
- {
- "id": "crush",
- "label": "Crush",
- "disabled": false
- },
- {
- "id": "ex_partner",
- "label": "Ex",
- "disabled": false
- },
- {
- "id": "future_date",
- "label": "Future connection",
- "disabled": false
- }
- ]
- },
- "variants": []
- },
- {
- "id": "partner-age",
- "template": "list",
- "header": {
- "showBackButton": true,
- "show": true
- },
- "title": {
- "text": "Current partner’s age",
- "show": true,
- "font": "manrope",
- "weight": "bold",
- "size": "2xl",
- "align": "left",
- "color": "default"
- },
- "bottomActionButton": {
- "show": false,
- "cornerRadius": "3xl",
- "showPrivacyTermsConsent": false
- },
- "navigation": {
- "rules": [
- {
- "conditions": [
- {
- "screenId": "partner-age",
- "conditionType": "options",
- "operator": "includesAny",
- "optionIds": [
- "under_29"
- ],
- "values": [],
- "unleashVariants": []
- }
- ],
- "nextScreenId": "partner-age-detail"
- }
- ],
- "defaultNextScreenId": "partner-ethnicity",
- "isEndScreen": false
- },
- "list": {
- "selectionType": "single",
- "options": [
- {
- "id": "under_29",
- "label": "Under 29",
- "disabled": false
- },
- {
- "id": "from_30_to_39",
- "label": "30–39",
- "disabled": false
- },
- {
- "id": "from_40_to_49",
- "label": "40–49",
- "disabled": false
- },
- {
- "id": "from_50_to_59",
- "label": "50–59",
- "disabled": false
- },
- {
- "id": "over_60",
- "label": "60+",
- "disabled": false
- }
- ]
- },
- "variants": [
- {
- "conditions": [
- {
- "screenId": "analysis-target",
- "operator": "includesAny",
- "optionIds": [
- "current_partner"
- ]
- }
- ],
- "overrides": {}
- },
- {
- "conditions": [
- {
- "screenId": "analysis-target",
- "operator": "includesAny",
- "optionIds": [
- "crush"
- ]
- }
- ],
- "overrides": {
- "title": {
- "text": "Age of the person you like"
- }
- }
- },
- {
- "conditions": [
- {
- "screenId": "analysis-target",
- "operator": "includesAny",
- "optionIds": [
- "ex_partner"
- ]
- }
- ],
- "overrides": {
- "title": {
- "text": "Ex’s age"
- }
- }
- },
- {
- "conditions": [
- {
- "screenId": "analysis-target",
- "operator": "includesAny",
- "optionIds": [
- "future_date"
- ]
- }
- ],
- "overrides": {
- "title": {
- "text": "Future partner’s age"
- }
- }
- }
- ]
- },
- {
- "id": "partner-age-detail",
- "template": "list",
- "header": {
- "showBackButton": true,
- "show": true
- },
- "title": {
- "text": "Please specify a bit more",
- "show": true,
- "font": "manrope",
- "weight": "bold",
- "size": "2xl",
- "align": "left",
- "color": "default"
- },
- "subtitle": {
- "text": "So the portrait can be as accurate as possible.",
- "show": true,
- "font": "manrope",
- "weight": "medium",
- "size": "lg",
- "align": "left",
- "color": "default"
- },
- "bottomActionButton": {
- "show": false,
- "cornerRadius": "3xl",
- "showPrivacyTermsConsent": false
- },
- "navigation": {
- "rules": [],
- "defaultNextScreenId": "partner-ethnicity",
- "isEndScreen": false
- },
- "list": {
- "selectionType": "single",
- "options": [
- {
- "id": "from_18_to_21",
- "label": "18–21",
- "disabled": false
- },
- {
- "id": "from_22_to_25",
- "label": "22–25",
- "disabled": false
- },
- {
- "id": "from_26_to_29",
- "label": "26–29",
- "disabled": false
- }
- ]
- },
- "variants": []
- },
- {
- "id": "partner-ethnicity",
- "template": "list",
- "header": {
- "showBackButton": true,
- "show": true
- },
- "title": {
- "text": "Your partner’s ethnicity?",
- "show": true,
- "font": "manrope",
- "weight": "bold",
- "size": "2xl",
- "align": "left",
- "color": "default"
- },
- "bottomActionButton": {
- "show": false,
- "cornerRadius": "3xl",
- "showPrivacyTermsConsent": false
- },
- "navigation": {
- "rules": [],
- "defaultNextScreenId": "partner-eye-color",
- "isEndScreen": false
- },
- "list": {
- "selectionType": "single",
- "options": [
- {
- "id": "white",
- "label": "White",
- "disabled": false
- },
- {
- "id": "hispanic_latino",
- "label": "Hispanic / Latino",
- "disabled": false
- },
- {
- "id": "african_african_american",
- "label": "African / African-American",
- "disabled": false
- },
- {
- "id": "asian",
- "label": "Asian",
- "disabled": false
- },
- {
- "id": "indian_south_asian",
- "label": "Indian / South Asian",
- "disabled": false
- },
- {
- "id": "middle_eastern_arab",
- "label": "Middle Eastern / Arab",
- "disabled": false
- },
- {
- "id": "native_american_indigenous",
- "label": "Native American / Indigenous",
- "disabled": false
- },
- {
- "id": "no_preference",
- "label": "No preference",
- "disabled": false
- }
- ]
- },
- "variants": []
- },
- {
- "id": "partner-eye-color",
- "template": "list",
- "header": {
- "showBackButton": true,
- "show": true
- },
- "title": {
- "text": "Your partner’s eye color?",
- "show": true,
- "font": "manrope",
- "weight": "bold",
- "size": "2xl",
- "align": "left",
- "color": "default"
- },
- "bottomActionButton": {
- "show": false,
- "cornerRadius": "3xl",
- "showPrivacyTermsConsent": false
- },
- "navigation": {
- "rules": [],
- "defaultNextScreenId": "partner-hair-length",
- "isEndScreen": false
- },
- "list": {
- "selectionType": "single",
- "options": [
- {
- "id": "brown",
- "label": "Brown",
- "disabled": false
- },
- {
- "id": "blue",
- "label": "Blue",
- "disabled": false
- },
- {
- "id": "hazel",
- "label": "Hazel",
- "disabled": false
- },
- {
- "id": "green",
- "label": "Green",
- "disabled": false
- },
- {
- "id": "amber",
- "label": "Amber",
- "disabled": false
- },
- {
- "id": "gray",
- "label": "Gray",
- "disabled": false
- },
- {
- "id": "unknown",
- "label": "I don’t know",
- "disabled": false
- }
- ]
- },
- "variants": []
- },
- {
- "id": "partner-hair-length",
- "template": "list",
- "header": {
- "showBackButton": true,
- "show": true
- },
- "title": {
- "text": "Choose the hair length",
- "show": true,
- "font": "manrope",
- "weight": "bold",
- "size": "2xl",
- "align": "left",
- "color": "default"
- },
- "subtitle": {
- "text": "It affects the portrait’s shape and mood.",
- "show": true,
- "font": "manrope",
- "weight": "medium",
- "size": "lg",
- "align": "left",
- "color": "default"
- },
- "bottomActionButton": {
- "show": false,
- "cornerRadius": "3xl",
- "showPrivacyTermsConsent": false
- },
- "navigation": {
- "rules": [],
- "defaultNextScreenId": "burnout-support",
- "isEndScreen": false
- },
- "list": {
- "selectionType": "single",
- "options": [
- {
- "id": "short",
- "label": "Short",
- "disabled": false
- },
- {
- "id": "medium",
- "label": "Medium",
- "disabled": false
- },
- {
- "id": "long",
- "label": "Long",
- "disabled": false
- }
- ]
- },
- "variants": []
- },
- {
- "id": "burnout-support",
- "template": "list",
- "header": {
- "showBackButton": true,
- "show": true
- },
- "title": {
- "text": "When you’re burned out, you need your partner to",
- "show": true,
- "font": "manrope",
- "weight": "bold",
- "size": "2xl",
- "align": "left",
- "color": "default"
- },
- "bottomActionButton": {
- "show": false,
- "cornerRadius": "3xl",
- "showPrivacyTermsConsent": false
- },
- "navigation": {
- "rules": [],
- "defaultNextScreenId": "burnout-result",
- "isEndScreen": false
- },
- "list": {
- "selectionType": "single",
- "options": [
- {
- "id": "acknowledged_and_calmed",
- "label": "Acknowledge your frustration and comfort you",
- "disabled": false
- },
- {
- "id": "gave_emotional_support",
- "label": "Give emotional support and a safe space",
- "disabled": false
- },
- {
- "id": "took_over_tasks",
- "label": "Take over daily tasks so you can recover",
- "disabled": false
- },
- {
- "id": "inspired_with_plan",
- "label": "Inspire you with a goal and a short action plan",
- "disabled": false
- },
- {
- "id": "shifted_to_positive",
- "label": "Shift your focus to something positive — a walk, a movie, funny stories",
- "disabled": false
- }
- ]
- },
- "variants": []
- },
- {
- "id": "burnout-result",
- "template": "info",
- "header": {
- "showBackButton": true,
- "show": true
- },
- "title": {
- "text": "burnout-result",
- "show": false,
- "font": "manrope",
- "weight": "bold",
- "size": "2xl",
- "align": "center",
- "color": "default"
- },
- "subtitle": {
- "text": "This kind of partner **knows how to listen and support**, and you’re a **deep soul** who values honesty and the power of genuine emotions.",
- "show": true,
- "font": "manrope",
- "weight": "medium",
- "size": "lg",
- "align": "center",
- "color": "default"
- },
- "bottomActionButton": {
- "show": true,
- "cornerRadius": "3xl",
- "showPrivacyTermsConsent": false
- },
- "navigation": {
- "rules": [],
- "defaultNextScreenId": "birthdate",
- "isEndScreen": false
- },
- "icon": {
- "type": "image",
- "value": "/images/fb6eb360-db1e-4433-9c8a-33eedfad1b12.svg",
- "size": "lg"
- },
- "variables": [],
- "variants": [
- {
- "conditions": [
- {
- "screenId": "burnout-support",
- "operator": "includesAny",
- "optionIds": [
- "acknowledged_and_calmed"
- ]
- }
- ],
- "overrides": {}
- },
- {
- "conditions": [
- {
- "screenId": "burnout-support",
- "operator": "includesAny",
- "optionIds": [
- "gave_emotional_support"
- ]
- }
- ],
- "overrides": {
- "subtitle": {
- "text": "This kind of person creates a **sense of security**, and you have the wisdom and emotional maturity to choose closeness and trust."
- }
- }
- },
- {
- "conditions": [
- {
- "screenId": "burnout-support",
- "operator": "includesAny",
- "optionIds": [
- "took_over_tasks"
- ]
- }
- ],
- "overrides": {
- "subtitle": {
- "text": "This kind of partner is ready to **lend a shoulder** when it’s needed, and your strength lies in your ability to **trust** and **accept support** — that’s your natural wisdom."
- }
- }
- },
- {
- "conditions": [
- {
- "screenId": "burnout-support",
- "operator": "includesAny",
- "optionIds": [
- "inspired_with_plan"
- ]
- }
- ],
- "overrides": {
- "subtitle": {
- "text": "This kind of person **brings clarity** and **motivates**, while you stand out for your **willpower** and **drive for growth** — you’re not afraid to move forward."
- }
- }
- },
- {
- "conditions": [
- {
- "screenId": "burnout-support",
- "operator": "includesAny",
- "optionIds": [
- "shifted_to_positive"
- ]
- }
- ],
- "overrides": {
- "subtitle": {
- "text": "This kind of partner knows how to **bring back joy**, and you show your strength through your ability to **stay lighthearted** and **keep a bright outlook** on life."
- }
- }
- }
- ]
- },
- {
- "id": "birthdate",
- "template": "date",
- "header": {
- "showBackButton": true,
- "show": true
- },
- "title": {
- "text": "When were you born?",
- "show": true,
- "font": "manrope",
- "weight": "bold",
- "size": "2xl",
- "align": "left",
- "color": "default"
- },
- "subtitle": {
- "text": "The moment you were born holds deep underlying patterns.",
- "show": true,
- "font": "manrope",
- "weight": "medium",
- "size": "lg",
- "align": "left",
- "color": "default"
- },
- "bottomActionButton": {
- "show": false,
- "cornerRadius": "3xl",
- "showPrivacyTermsConsent": false
- },
- "navigation": {
- "rules": [],
- "defaultNextScreenId": "nature-archetype",
- "isEndScreen": false
- },
- "dateInput": {
- "monthLabel": "Month",
- "dayLabel": "Month",
- "yearLabel": "Month",
- "monthPlaceholder": "MM",
- "dayPlaceholder": "DD",
- "yearPlaceholder": "YYYY",
- "showSelectedDate": true,
- "selectedDateFormat": "dd MMMM yyyy",
- "selectedDateLabel": "Selected date:",
- "zodiac": {
- "enabled": true,
- "storageKey": "userZodiac"
- },
- "registrationFieldKey": "profile.birthdate",
- "validationMessage": "Please enter a valid date"
- },
- "variants": []
- },
- {
- "id": "nature-archetype",
- "template": "list",
- "header": {
- "showBackButton": true,
- "show": true
- },
- "title": {
- "text": "Which natural symbol best matches your personality?",
- "show": true,
- "font": "manrope",
- "weight": "bold",
- "size": "2xl",
- "align": "left",
- "color": "default"
- },
- "bottomActionButton": {
- "show": false,
- "cornerRadius": "3xl",
- "showPrivacyTermsConsent": false
- },
- "navigation": {
- "rules": [],
- "defaultNextScreenId": "love-priority",
- "isEndScreen": false
- },
- "list": {
- "selectionType": "single",
- "options": [
- {
- "id": "flower",
- "label": "Flower — tenderness, care, charm",
- "emoji": "🌹",
- "disabled": false
- },
- {
- "id": "sea",
- "label": "Sea — depth, mystery, emotion",
- "emoji": "🌊",
- "disabled": false
- },
- {
- "id": "sun",
- "label": "Sun — energy, strength, brightness",
- "emoji": "🌞️",
- "disabled": false
- },
- {
- "id": "moon",
- "label": "Moon — intuition, sensitivity",
- "emoji": "🌙",
- "disabled": false
- }
- ]
- },
- "variants": []
- },
- {
- "id": "love-priority",
- "template": "list",
- "header": {
- "showBackButton": true,
- "show": true
- },
- "title": {
- "text": "When it comes to love, what matters more to you: heart or mind?",
- "show": true,
- "font": "manrope",
- "weight": "bold",
- "size": "2xl",
- "align": "left",
- "color": "default"
- },
- "bottomActionButton": {
- "show": false,
- "cornerRadius": "3xl",
- "showPrivacyTermsConsent": false
- },
- "navigation": {
- "rules": [],
- "defaultNextScreenId": "love-priority-result",
- "isEndScreen": false
- },
- "list": {
- "selectionType": "single",
- "options": [
- {
- "id": "follow_heart",
- "label": "I follow my heart",
- "emoji": "🧡",
- "disabled": false
- },
- {
- "id": "follow_mind",
- "label": "I rely on my mind",
- "emoji": "🧠",
- "disabled": false
- },
- {
- "id": "balance_heart_mind",
- "label": "A balance of heart and mind",
- "emoji": "🎯",
- "disabled": false
- },
- {
- "id": "depends_on_situation",
- "label": "Depends on the situation",
- "emoji": "⚖️",
- "disabled": false
- }
- ]
- },
- "variants": []
- },
- {
- "id": "love-priority-result",
- "template": "info",
- "header": {
- "showBackButton": true,
- "show": true
- },
- "title": {
- "text": "Title",
- "show": false,
- "font": "manrope",
- "weight": "bold",
- "size": "2xl",
- "align": "center",
- "color": "default"
- },
- "subtitle": {
- "text": "According to our statistics, **51% of {{gender}} {{zodiac}}** trust their emotions. But sensitivity alone isn’t enough. We’ll show which qualities in your partner will bring warmth and confidence — and create their portrait.",
- "show": true,
- "font": "manrope",
- "weight": "medium",
- "size": "lg",
- "align": "center",
- "color": "default"
- },
- "bottomActionButton": {
- "show": true,
- "cornerRadius": "3xl",
- "showPrivacyTermsConsent": false
- },
- "navigation": {
- "rules": [],
- "defaultNextScreenId": "relationship-block",
- "isEndScreen": false
- },
- "icon": {
- "type": "image",
- "value": "/images/528c3574-2121-46cd-b5e5-b1fda5ae9315.svg",
- "size": "xl"
- },
- "variables": [
- {
- "name": "gender",
- "mappings": [
- {
- "conditions": [
- {
- "screenId": "gender",
- "conditionType": "values",
- "operator": "includesAny",
- "values": [
- "male"
- ]
- }
- ],
- "value": "men"
- }
- ],
- "fallback": "women"
- },
- {
- "name": "zodiac",
- "mappings": [
- {
- "conditions": [
- {
- "screenId": "userZodiac",
- "conditionType": "values",
- "operator": "includesAny",
- "values": [
- "aries"
- ]
- }
- ],
- "value": "Aries"
- },
- {
- "conditions": [
- {
- "screenId": "userZodiac",
- "conditionType": "values",
- "operator": "includesAny",
- "values": [
- "taurus"
- ]
- }
- ],
- "value": "Taurus"
- },
- {
- "conditions": [
- {
- "screenId": "userZodiac",
- "conditionType": "values",
- "operator": "includesAny",
- "values": [
- "gemini"
- ]
- }
- ],
- "value": "Gemini"
- },
- {
- "conditions": [
- {
- "screenId": "userZodiac",
- "conditionType": "values",
- "operator": "includesAny",
- "values": [
- "cancer"
- ]
- }
- ],
- "value": "Cancer"
- },
- {
- "conditions": [
- {
- "screenId": "userZodiac",
- "conditionType": "values",
- "operator": "includesAny",
- "values": [
- "leo"
- ]
- }
- ],
- "value": "Leo"
- },
- {
- "conditions": [
- {
- "screenId": "userZodiac",
- "conditionType": "values",
- "operator": "includesAny",
- "values": [
- "virgo"
- ]
- }
- ],
- "value": "Virgo"
- },
- {
- "conditions": [
- {
- "screenId": "userZodiac",
- "conditionType": "values",
- "operator": "includesAny",
- "values": [
- "libra"
- ]
- }
- ],
- "value": "Libra"
- },
- {
- "conditions": [
- {
- "screenId": "userZodiac",
- "conditionType": "values",
- "operator": "includesAny",
- "values": [
- "scorpio"
- ]
- }
- ],
- "value": "Scorpio"
- },
- {
- "conditions": [
- {
- "screenId": "userZodiac",
- "conditionType": "values",
- "operator": "includesAny",
- "values": [
- "sagittarius"
- ]
- }
- ],
- "value": "Sagittarius"
- },
- {
- "conditions": [
- {
- "screenId": "userZodiac",
- "conditionType": "values",
- "operator": "includesAny",
- "values": [
- "capricorn"
- ]
- }
- ],
- "value": "Capricorn"
- },
- {
- "conditions": [
- {
- "screenId": "userZodiac",
- "conditionType": "values",
- "operator": "includesAny",
- "values": [
- "aquarius"
- ]
- }
- ],
- "value": "Aquarius"
- },
- {
- "conditions": [
- {
- "screenId": "userZodiac",
- "conditionType": "values",
- "operator": "includesAny",
- "values": [
- "pisces"
- ]
- }
- ],
- "value": "Pisces"
- }
- ],
- "fallback": "Pisces"
- }
- ],
- "variants": [
- {
- "conditions": [
- {
- "screenId": "love-priority",
- "operator": "includesAny",
- "optionIds": [
- "follow_mind"
- ]
- }
- ],
- "overrides": {
- "subtitle": {
- "text": "According to our statistics, **43% of {{gender}} {{zodiac}}** choose reason. But calculations alone aren’t enough. We’ll reveal which traits in your partner will build trust — and create their portrait."
- },
- "icon": {
- "value": "/images/575ab717-eaa5-462b-8aa6-0202a62c9099.svg"
- }
- }
- },
- {
- "conditions": [
- {
- "screenId": "love-priority",
- "operator": "includesAny",
- "optionIds": [
- "balance_heart_mind"
- ]
- }
- ],
- "overrides": {
- "subtitle": {
- "text": "According to our statistics, **47% of {{gender}} {{zodiac}}** seek balance. But keeping it isn’t easy. We’ll show which qualities in your partner will unite passion and stability — and create their portrait."
- },
- "icon": {
- "value": "/images/7dd85bf0-4b92-4213-9e2a-82ba1e53d165.svg"
- }
- }
- },
- {
- "conditions": [
- {
- "screenId": "love-priority",
- "operator": "includesAny",
- "optionIds": [
- "depends_on_situation"
- ]
- }
- ],
- "overrides": {
- "subtitle": {
- "text": "According to our statistics, **37% of {{gender}} {{zodiac}}** make their choice based on circumstances. But such flexibility often leads to doubt. We’ll reveal who can bring you stability and confidence — and draw your partner’s portrait."
- },
- "icon": {
- "value": "/images/6bd25c4d-9308-4907-a54f-b7bc10322fa8.svg"
- }
- }
- }
- ]
- },
- {
- "id": "relationship-block",
- "template": "list",
- "header": {
- "showBackButton": true,
- "show": true
- },
- "title": {
- "text": "What gets in the way of your relationships the most?",
- "show": true,
- "font": "manrope",
- "weight": "bold",
- "size": "2xl",
- "align": "left",
- "color": "default"
- },
- "bottomActionButton": {
- "show": false,
- "cornerRadius": "3xl",
- "showPrivacyTermsConsent": false
- },
- "navigation": {
- "rules": [],
- "defaultNextScreenId": "relationship-block-result",
- "isEndScreen": false
- },
- "list": {
- "selectionType": "single",
- "options": [
- {
- "id": "fear_of_wrong_choice",
- "label": "Fear of making the wrong choice again",
- "emoji": "💔",
- "disabled": false
- },
- {
- "id": "wasted_years",
- "label": "Wasting years on the “wrong” person",
- "emoji": "🕰️",
- "disabled": false
- },
- {
- "id": "lack_of_depth",
- "label": "There’s passion, but not enough depth",
- "emoji": "🔥",
- "disabled": false
- },
- {
- "id": "unclear_desires",
- "label": "Not sure what I really want",
- "emoji": "🗝",
- "disabled": false
- },
- {
- "id": "stuck_in_past",
- "label": "Can’t let go of a past relationship",
- "emoji": "👻",
- "disabled": false
- },
- {
- "id": "fear_of_loneliness",
- "label": "Afraid of being alone",
- "emoji": "🕯",
- "disabled": false
- }
- ]
- },
- "variants": [
- {
- "conditions": [
- {
- "screenId": "relationship-status",
- "operator": "includesAny",
- "optionIds": [
- "single",
- "after_breakup"
- ]
- }
- ],
- "overrides": {
- "list": {
- "options": [
- {
- "id": "fear_of_wrong_choice",
- "label": "Fear of making the wrong choice again",
- "emoji": "💔"
- },
- {
- "id": "wasted_years",
- "label": "Feeling like the years are slipping away",
- "emoji": "🕰️"
- },
- {
- "id": "wrong_people",
- "label": "Meeting interesting people, but not the right one",
- "emoji": "😕"
- },
- {
- "id": "unclear_needs",
- "label": "Not sure who I really need",
- "emoji": "🧩"
- },
- {
- "id": "stuck_in_past",
- "label": "The past keeps me from moving on",
- "emoji": "👻"
- },
- {
- "id": "fear_of_loneliness",
- "label": "Afraid of being alone",
- "emoji": "🕯"
- }
- ]
- },
- "title": {
- "text": "What gets in the way of finding love the most?"
- }
- }
- }
- ]
- },
- {
- "id": "relationship-block-result",
- "template": "info",
- "header": {
- "showBackButton": true,
- "show": true
- },
- "title": {
- "text": "You’re not alone in this fear.",
- "show": true,
- "font": "manrope",
- "weight": "bold",
- "size": "2xl",
- "align": "center",
- "color": "default"
- },
- "subtitle": {
- "text": "Many people are afraid of repeating the past. We’ll help you recognize the right signs and choose the person who’s truly meant for you.",
- "show": true,
- "font": "manrope",
- "weight": "medium",
- "size": "lg",
- "align": "center",
- "color": "default"
- },
- "bottomActionButton": {
- "show": true,
- "cornerRadius": "3xl",
- "showPrivacyTermsConsent": false
- },
- "navigation": {
- "rules": [],
- "defaultNextScreenId": "core-need",
- "isEndScreen": false
- },
- "icon": {
- "type": "image",
- "value": "/images/1d7d3979-6627-416e-8f80-c0388a6cec22.svg",
- "size": "xl"
- },
- "variables": [],
- "variants": [
- {
- "conditions": [
- {
- "screenId": "relationship-block",
- "operator": "includesAny",
- "optionIds": [
- "wasted_years"
- ]
- }
- ],
- "overrides": {
- "title": {
- "text": "This pain is familiar to many."
- },
- "subtitle": {
- "text": "The feeling of wasted time is hard. We’ll show you how to stop getting stuck in the past and move forward."
- },
- "icon": {
- "value": "/images/5ae02c30-44a0-4a8c-a814-9fd2490cdc77.svg"
- }
- }
- },
- {
- "conditions": [
- {
- "screenId": "relationship-block",
- "operator": "includesAny",
- "optionIds": [
- "lack_of_depth"
- ]
- }
- ],
- "overrides": {
- "title": {
- "text": "Many people face this."
- },
- "subtitle": {
- "text": "Bright emotions fade quickly without a foundation. We’ll help you turn a connection into true closeness."
- }
- }
- },
- {
- "conditions": [
- {
- "screenId": "relationship-block",
- "operator": "includesAny",
- "optionIds": [
- "unclear_desires"
- ]
- }
- ],
- "overrides": {
- "title": {
- "text": "This is often hard to figure out."
- },
- "subtitle": {
- "text": "Understanding yourself is the key to making the right choice. We’ll help you see which qualities truly matter to you."
- }
- }
- },
- {
- "conditions": [
- {
- "screenId": "relationship-block",
- "operator": "includesAny",
- "optionIds": [
- "stuck_in_past"
- ]
- }
- ],
- "overrides": {
- "title": {
- "text": "You’re not the only one stuck in the past."
- },
- "subtitle": {
- "text": "The past can hold on too tightly. We’ll show you how to let go and make room for new love."
- }
- }
- },
- {
- "conditions": [
- {
- "screenId": "relationship-block",
- "operator": "includesAny",
- "optionIds": [
- "fear_of_loneliness"
- ]
- }
- ],
- "overrides": {
- "title": {
- "text": "This fear is very familiar to many."
- },
- "subtitle": {
- "text": "The thought of a lonely future is frightening. We’ll help you build a path where someone special walks beside you."
- }
- }
- },
- {
- "conditions": [
- {
- "screenId": "relationship-block",
- "operator": "includesAny",
- "optionIds": [
- "wrong_people"
- ]
- }
- ],
- "overrides": {
- "title": {
- "text": "Many people go through this."
- }
- }
- },
- {
- "conditions": [
- {
- "screenId": "relationship-block",
- "operator": "includesAny",
- "optionIds": [
- "unclear_needs"
- ]
- }
- ],
- "overrides": {
- "title": {
- "text": "It’s okay not to know right away."
- },
- "subtitle": {
- "text": "Figuring out what kind of partner you truly need isn’t easy. We’ll help you see which qualities really matter."
- }
- }
- }
- ]
- },
- {
- "id": "core-need",
- "template": "list",
- "header": {
- "showBackButton": true,
- "show": true
- },
- "title": {
- "text": "What’s your core need right now?",
- "show": true,
- "font": "manrope",
- "weight": "bold",
- "size": "2xl",
- "align": "left",
- "color": "default"
- },
- "bottomActionButton": {
- "show": false,
- "cornerRadius": "3xl",
- "showPrivacyTermsConsent": false
- },
- "navigation": {
- "rules": [],
- "defaultNextScreenId": "partner-similarity",
- "isEndScreen": false
- },
- "list": {
- "selectionType": "single",
- "options": [
- {
- "id": "safety_and_support",
- "label": "Safety and support",
- "disabled": false
- },
- {
- "id": "passion_and_spark",
- "label": "Passion and spark",
- "disabled": false
- },
- {
- "id": "calm_and_acceptance",
- "label": "Calm and acceptance",
- "disabled": false
- },
- {
- "id": "inspiration_and_growth",
- "label": "Inspiration and growth",
- "disabled": false
- },
- {
- "id": "not_important",
- "label": "Doesn’t matter",
- "disabled": false
- }
- ]
- },
- "variants": []
- },
- {
- "id": "partner-similarity",
- "template": "list",
- "header": {
- "showBackButton": true,
- "show": true
- },
- "title": {
- "text": "Is your partner similar to you?",
- "show": true,
- "font": "manrope",
- "weight": "bold",
- "size": "2xl",
- "align": "left",
- "color": "default"
- },
- "bottomActionButton": {
- "show": false,
- "cornerRadius": "3xl",
- "showPrivacyTermsConsent": false
- },
- "navigation": {
- "rules": [],
- "defaultNextScreenId": "partner-role",
- "isEndScreen": false
- },
- "list": {
- "selectionType": "single",
- "options": [
- {
- "id": "similar",
- "label": "Yes, we have things in common",
- "disabled": false
- },
- {
- "id": "different",
- "label": "We’re completely different",
- "disabled": false
- }
- ]
- },
- "variants": []
- },
- {
- "id": "partner-role",
- "template": "list",
- "header": {
- "showBackButton": true,
- "show": true
- },
- "title": {
- "text": "Preferred partner role",
- "show": true,
- "font": "manrope",
- "weight": "bold",
- "size": "2xl",
- "align": "left",
- "color": "default"
- },
- "bottomActionButton": {
- "show": false,
- "cornerRadius": "3xl",
- "showPrivacyTermsConsent": false
- },
- "navigation": {
- "rules": [],
- "defaultNextScreenId": "relationship-strength",
- "isEndScreen": false
- },
- "list": {
- "selectionType": "single",
- "options": [
- {
- "id": "leader",
- "label": "Leader",
- "disabled": false
- },
- {
- "id": "equal",
- "label": "Equal",
- "disabled": false
- },
- {
- "id": "supportive",
- "label": "Supportive",
- "disabled": false
- },
- {
- "id": "flexible",
- "label": "Flexible",
- "disabled": false
- },
- {
- "id": "dependent",
- "label": "Dependent on me",
- "disabled": false
- },
- {
- "id": "situational",
- "label": "Depends on the situation",
- "disabled": false
- }
- ]
- },
- "variants": []
- },
- {
- "id": "relationship-strength",
- "template": "list",
- "header": {
- "showBackButton": true,
- "show": true
- },
- "title": {
- "text": "What’s your main source of strength in a relationship?",
- "show": true,
- "font": "manrope",
- "weight": "bold",
- "size": "2xl",
- "align": "left",
- "color": "default"
- },
- "bottomActionButton": {
- "show": false,
- "cornerRadius": "3xl",
- "showPrivacyTermsConsent": false
- },
- "navigation": {
- "rules": [],
- "defaultNextScreenId": "love-expression",
- "isEndScreen": false
- },
- "list": {
- "selectionType": "single",
- "options": [
- {
- "id": "support_and_care",
- "label": "Support and care",
- "disabled": false
- },
- {
- "id": "admiration_and_recognition",
- "label": "Admiration and appreciation",
- "disabled": false
- },
- {
- "id": "freedom_and_space",
- "label": "Freedom and space",
- "disabled": false
- },
- {
- "id": "shared_goals_and_plans",
- "label": "Shared goals and plans",
- "disabled": false
- },
- {
- "id": "joy_and_lightness",
- "label": "Joy and lightness",
- "disabled": false
- }
- ]
- },
- "variants": []
- },
- {
- "id": "love-expression",
- "template": "list",
- "header": {
- "showBackButton": true,
- "show": true
- },
- "title": {
- "text": "How do you express love?",
- "show": true,
- "font": "manrope",
- "weight": "bold",
- "size": "2xl",
- "align": "left",
- "color": "default"
- },
- "bottomActionButton": {
- "show": false,
- "cornerRadius": "3xl",
- "showPrivacyTermsConsent": false
- },
- "navigation": {
- "rules": [],
- "defaultNextScreenId": "relationship-future",
- "isEndScreen": false
- },
- "list": {
- "selectionType": "single",
- "options": [
- {
- "id": "words",
- "label": "With words",
- "disabled": false
- },
- {
- "id": "actions",
- "label": "Through actions",
- "disabled": false
- },
- {
- "id": "quality_time",
- "label": "By spending time together",
- "disabled": false
- },
- {
- "id": "care",
- "label": "With care",
- "disabled": false
- },
- {
- "id": "passion",
- "label": "With passion",
- "disabled": false
- },
- {
- "id": "in_my_own_way",
- "label": "In my own way",
- "disabled": false
- }
- ]
- },
- "variants": []
- },
- {
- "id": "relationship-future",
- "template": "list",
- "header": {
- "showBackButton": true,
- "show": true
- },
- "title": {
- "text": "How do you see your relationship’s future?",
- "show": true,
- "font": "manrope",
- "weight": "bold",
- "size": "2xl",
- "align": "left",
- "color": "default"
- },
- "bottomActionButton": {
- "show": false,
- "cornerRadius": "3xl",
- "showPrivacyTermsConsent": false
- },
- "navigation": {
- "rules": [],
- "defaultNextScreenId": "relationship-energy",
- "isEndScreen": false
- },
- "list": {
- "selectionType": "single",
- "options": [
- {
- "id": "home_and_family",
- "label": "A shared home and family",
- "disabled": false
- },
- {
- "id": "travel_and_discovery",
- "label": "Travel and new discoveries",
- "disabled": false
- },
- {
- "id": "shared_goals",
- "label": "Joint projects and goals",
- "disabled": false
- },
- {
- "id": "present_moment",
- "label": "Just being together “here and now”",
- "disabled": false
- },
- {
- "id": "unsure",
- "label": "Hard to say for now",
- "disabled": false
- }
- ]
- },
- "variants": []
- },
- {
- "id": "relationship-energy",
- "template": "list",
- "header": {
- "showBackButton": true,
- "show": true
- },
- "title": {
- "text": "What kind of energy do you want in a relationship?",
- "show": true,
- "font": "manrope",
- "weight": "bold",
- "size": "2xl",
- "align": "left",
- "color": "default"
- },
- "bottomActionButton": {
- "show": false,
- "cornerRadius": "3xl",
- "showPrivacyTermsConsent": false
- },
- "navigation": {
- "rules": [],
- "defaultNextScreenId": "relationship-metaphor",
- "isEndScreen": false
- },
- "list": {
- "selectionType": "single",
- "options": [
- {
- "id": "lightness_and_joy",
- "label": "Lightness and joy",
- "disabled": false
- },
- {
- "id": "strength_and_drive",
- "label": "Strength and drive",
- "disabled": false
- },
- {
- "id": "comfort_and_safety",
- "label": "Comfort and stability",
- "disabled": false
- },
- {
- "id": "depth_and_meaning",
- "label": "Depth and meaning",
- "disabled": false
- },
- {
- "id": "freedom_and_space",
- "label": "Freedom and space",
- "disabled": false
- }
- ]
- },
- "variants": []
- },
- {
- "id": "relationship-metaphor",
- "template": "list",
- "header": {
- "showBackButton": true,
- "show": true
- },
- "title": {
- "text": "Which image of a relationship feels closest to you?",
- "show": true,
- "font": "manrope",
- "weight": "bold",
- "size": "2xl",
- "align": "left",
- "color": "default"
- },
- "subtitle": {
- "text": "You can choose several options.",
- "show": true,
- "font": "manrope",
- "weight": "medium",
- "size": "lg",
- "align": "left",
- "color": "default"
- },
- "bottomActionButton": {
- "show": true,
- "cornerRadius": "3xl",
- "showPrivacyTermsConsent": false
- },
- "navigation": {
- "rules": [],
- "defaultNextScreenId": "portrait-generation",
- "isEndScreen": false
- },
- "list": {
- "selectionType": "multi",
- "options": [
- {
- "id": "bridge",
- "label": "Bridge — connection through obstacles",
- "disabled": false
- },
- {
- "id": "mountain_path",
- "label": "Mountain path — challenges and meaning",
- "disabled": false
- },
- {
- "id": "dance",
- "label": "Dance — balance and mutual steps",
- "disabled": false
- },
- {
- "id": "key_and_lock",
- "label": "Key and lock — shared values",
- "disabled": false
- },
- {
- "id": "harbor",
- "label": "Harbor — safety and peace",
- "disabled": false
- },
- {
- "id": "lighthouse",
- "label": "Lighthouse — guidance and support",
- "disabled": false
- },
- {
- "id": "ocean_after_storm",
- "label": "Ocean after the storm — renewal and new beginnings",
- "disabled": false
- },
- {
- "id": "garden",
- "label": "Garden — care and growth",
- "disabled": false
- }
- ]
- },
- "variants": []
- },
- {
- "id": "portrait-generation",
- "template": "loaders",
- "header": {
- "showBackButton": false,
- "show": false
- },
- "title": {
- "text": "Creating the portrait of your other half.",
- "show": true,
- "font": "manrope",
- "weight": "bold",
- "size": "2xl",
- "align": "center",
- "color": "default"
- },
- "bottomActionButton": {
- "show": true,
- "text": "Continue",
- "cornerRadius": "3xl",
- "showPrivacyTermsConsent": false
- },
- "navigation": {
- "rules": [],
- "defaultNextScreenId": "email",
- "isEndScreen": false
- },
- "progressbars": {
- "items": [
- {
- "processingTitle": "Analyzing your answers",
- "processingSubtitle": "Processing...",
- "completedTitle": "Analyzing your answers",
- "completedSubtitle": "Complete"
- },
- {
- "processingTitle": "Portrait of the Soulmate",
- "processingSubtitle": "Processing...",
- "completedTitle": "Portrait of the Soulmate",
- "completedSubtitle": "Complete"
- },
- {
- "processingTitle": "Portrait of the Soulmate",
- "processingSubtitle": "Processing...",
- "completedTitle": "Connection Insights",
- "completedSubtitle": "Complete"
- }
- ],
- "transitionDuration": 3000
- },
- "variants": []
- },
{
"id": "email",
"template": "email",
"header": {
"showBackButton": true,
+ "showProgress": true,
"show": true
},
"title": {
@@ -2247,7 +220,7 @@
},
"navigation": {
"rules": [],
- "defaultNextScreenId": "coupon",
+ "defaultNextScreenId": "trial-choice",
"isEndScreen": false
},
"emailInput": {
@@ -2277,32 +250,25 @@
]
},
{
- "id": "coupon",
- "template": "coupon",
+ "id": "trial-choice",
+ "template": "trialChoice",
"header": {
"showBackButton": true,
+ "showProgress": false,
"show": true
},
"title": {
- "text": "You’re in luck!",
- "show": true,
+ "text": "Trial Choice",
+ "show": false,
"font": "manrope",
"weight": "bold",
"size": "2xl",
- "align": "center",
- "color": "default"
- },
- "subtitle": {
- "text": "You’ve received an exclusive 94% discount.",
- "show": true,
- "font": "manrope",
- "weight": "medium",
- "size": "lg",
- "align": "center",
+ "align": "left",
"color": "default"
},
"bottomActionButton": {
"show": true,
+ "text": "Next",
"cornerRadius": "3xl",
"showPrivacyTermsConsent": false
},
@@ -2311,51 +277,6 @@
"defaultNextScreenId": "payment",
"isEndScreen": false
},
- "coupon": {
- "title": {
- "text": "Special Offer",
- "font": "manrope",
- "weight": "bold",
- "align": "center",
- "size": "lg",
- "color": "default"
- },
- "offer": {
- "title": {
- "text": "94% OFF",
- "font": "manrope",
- "weight": "bold",
- "align": "center",
- "size": "3xl",
- "color": "primary"
- },
- "description": {
- "text": "One-time special offer",
- "font": "inter",
- "weight": "medium",
- "color": "muted",
- "align": "center",
- "size": "md"
- }
- },
- "promoCode": {
- "text": "SOULMATE94",
- "font": "geistMono",
- "weight": "bold",
- "align": "center",
- "size": "lg",
- "color": "accent"
- },
- "footer": {
- "text": "Copy or click **Continue**",
- "font": "inter",
- "weight": "medium",
- "color": "muted",
- "align": "center",
- "size": "sm"
- }
- },
- "copiedMessage": "Promo code copied!",
"variants": []
},
{
@@ -2363,10 +284,11 @@
"template": "trialPayment",
"header": {
"showBackButton": true,
+ "showProgress": true,
"show": false
},
"title": {
- "text": "Title",
+ "text": "Payment",
"show": false,
"font": "manrope",
"weight": "bold",
@@ -2382,7 +304,8 @@
"navigation": {
"rules": [],
"defaultNextScreenId": "specialoffer",
- "isEndScreen": false
+ "isEndScreen": true,
+ "onBackScreenId": "screen-7"
},
"variants": [
{
@@ -2465,7 +388,7 @@
},
"tryForDays": {
"title": {
- "text": "Try it for 7 days!"
+ "text": "Try it for {{trialPeriod}}!"
},
"textList": {
"items": [
@@ -2479,7 +402,7 @@
"text": "Talk to live experts and get guidance."
},
{
- "text": "Start your 7-day trial for just $1.00."
+ "text": "Start your {{trialPeriod}} trial for just {{trialPrice}}."
},
{
"text": "Cancel anytime—just 24 hours before renewal."
@@ -2499,13 +422,13 @@
"text": "Total"
},
"price": {
- "text": "$1.00"
+ "text": "{{trialPrice}}"
},
"oldPrice": {
- "text": "$14.99"
+ "text": "{{oldPrice}}"
},
"discount": {
- "text": "94% discount applied"
+ "text": "{{discountPercent}}% discount applied"
}
}
},
@@ -2830,10 +753,11 @@
}
},
{
- "id": "specialoffer",
+ "id": "screen-7",
"template": "specialOffer",
"header": {
- "showBackButton": false,
+ "showBackButton": true,
+ "showProgress": true,
"show": true
},
"title": {
@@ -2845,12 +769,25 @@
"align": "left",
"color": "default"
},
+ "subtitle": {
+ "text": "Добавьте детали справа",
+ "show": false,
+ "font": "manrope",
+ "weight": "medium",
+ "size": "lg",
+ "align": "left",
+ "color": "default"
+ },
"bottomActionButton": {
"show": true,
"text": "GET {{trialPeriod}} TRIAL",
"cornerRadius": "3xl",
"showPrivacyTermsConsent": false
},
+ "navigation": {
+ "rules": [],
+ "isEndScreen": true
+ },
"variants": [],
"text": {
"title": {
diff --git a/src/app/[funnelId]/layout.tsx b/src/app/[funnelId]/layout.tsx
index ccf9f20..e01bf34 100644
--- a/src/app/[funnelId]/layout.tsx
+++ b/src/app/[funnelId]/layout.tsx
@@ -5,6 +5,10 @@ import { UnleashProvider } from "@/lib/funnel/unleash";
import type { FunnelDefinition } from "@/lib/funnel/types";
import { BAKED_FUNNELS } from "@/lib/funnel/bakedFunnels";
import { IS_FULL_SYSTEM_BUILD } from "@/lib/runtime/buildVariant";
+import {
+ PaymentPlacementProvider,
+ TrialVariantSelectionProvider,
+} from "@/entities/session/payment";
// Функция для загрузки воронки из базы данных
async function loadFunnelFromDatabase(
@@ -73,7 +77,11 @@ export default async function FunnelLayout({
googleAnalyticsId={funnel.meta.googleAnalyticsId}
yandexMetrikaId={funnel.meta.yandexMetrikaId}
>
- {children}
+
+
+ {children}
+
+
);
diff --git a/src/components/admin/builder/layout/BuilderPreview.tsx b/src/components/admin/builder/layout/BuilderPreview.tsx
index a5fbb7e..6ed2e9e 100644
--- a/src/components/admin/builder/layout/BuilderPreview.tsx
+++ b/src/components/admin/builder/layout/BuilderPreview.tsx
@@ -10,6 +10,10 @@ import { renderScreen } from "@/lib/funnel/screenRenderer";
import { mergeScreenWithOverrides } from "@/lib/admin/builder/variants";
import { PreviewErrorBoundary } from "@/components/admin/ErrorBoundary";
import { PREVIEW_DIMENSIONS } from "@/lib/constants";
+import {
+ PaymentPlacementProvider,
+ TrialVariantSelectionProvider,
+} from "@/entities/session/payment";
// ✅ Мемоизированные моки - создаются один раз
const MOCK_CALLBACKS = {
@@ -196,9 +200,13 @@ export function BuilderPreview() {
>
{/* Screen Content with scroll - wrapped in Error Boundary */}
-
- {renderScreenPreview()}
-
+
+
+
+ {renderScreenPreview()}
+
+
+
diff --git a/src/components/funnel/templates/TrialChoiceTemplate/TrialChoiceTemplate.tsx b/src/components/funnel/templates/TrialChoiceTemplate/TrialChoiceTemplate.tsx
index 2ffce10..c5e2cdd 100644
--- a/src/components/funnel/templates/TrialChoiceTemplate/TrialChoiceTemplate.tsx
+++ b/src/components/funnel/templates/TrialChoiceTemplate/TrialChoiceTemplate.tsx
@@ -11,8 +11,10 @@ import { createTemplateLayoutProps } from "@/lib/funnel/templateHelpers";
import { TrialOptionsGrid } from "@/components/widgets/TrialOptionsGrid";
import { useState, useMemo } from "react";
import { usePaymentPlacement } from "@/hooks/payment/usePaymentPlacement";
+import { useTrialVariantSelection } from "@/entities/session/payment/TrialVariantSelectionContext";
import { Currency } from "@/shared/types";
import { getFormattedPrice } from "@/shared/utils/price";
+import { Spinner } from "@/components/ui/spinner";
interface TrialChoiceTemplateProps {
funnel: FunnelDefinition;
@@ -37,10 +39,13 @@ export function TrialChoiceTemplate(props: TrialChoiceTemplateProps) {
} = props;
// Load trial variants from placement API (same source as TrialPayment)
const paymentId = "main"; // can be made configurable later
- const { placement } = usePaymentPlacement({ funnel, paymentId });
+ const { placement, isLoading } = usePaymentPlacement({ funnel, paymentId });
+
+ // Get/set selected variant from context (shared with Payment screen)
+ const { selectedVariantId, setSelectedVariantId } = useTrialVariantSelection();
// Local selection state
- const [selectedId, setSelectedId] = useState(null);
+ const [selectedId, setSelectedId] = useState(selectedVariantId);
const [showError, setShowError] = useState(false);
// Map variant -> TrialOption items with server-provided English titles and accent (last as fallback)
@@ -98,6 +103,15 @@ export function TrialChoiceTemplate(props: TrialChoiceTemplateProps) {
}
);
+ // Show loader while loading placement (like in Payment)
+ if (isLoading || !placement) {
+ return (
+
+
+
+ );
+ }
+
return (
{
setSelectedId(id);
+ setSelectedVariantId(id); // Save to context for Payment screen
if (showError) setShowError(false);
}}
/>
diff --git a/src/components/funnel/templates/TrialPaymentTemplate/TrialPaymentTemplate.tsx b/src/components/funnel/templates/TrialPaymentTemplate/TrialPaymentTemplate.tsx
index 8a084fa..ad947c3 100644
--- a/src/components/funnel/templates/TrialPaymentTemplate/TrialPaymentTemplate.tsx
+++ b/src/components/funnel/templates/TrialPaymentTemplate/TrialPaymentTemplate.tsx
@@ -34,6 +34,7 @@ import {
import ProgressToSeeSoulmate from "@/components/domains/TrialPayment/ProgressToSeeSoulmate/ProgressToSeeSoulmate";
import { buildTypographyProps } from "@/lib/funnel/mappers";
import { usePaymentPlacement } from "@/hooks/payment/usePaymentPlacement";
+import { useTrialVariantSelection } from "@/entities/session/payment/TrialVariantSelectionContext";
import { Spinner } from "@/components/ui/spinner";
import { Currency } from "@/shared/types";
import { getFormattedPrice } from "@/shared/utils/price";
@@ -65,15 +66,22 @@ export function TrialPaymentTemplate({
const paymentId = "main";
const { placement, isLoading } = usePaymentPlacement({ funnel, paymentId });
+ // Get selected variant from TrialChoice screen, if available
+ const { selectedVariantId } = useTrialVariantSelection();
+
const trialInterval = placement?.trialInterval || 7;
const trialPeriod = placement?.trialPeriod;
- const variant = placement?.variants?.[0];
+
+ // Use selected variant if available, otherwise use first variant
+ const variant = selectedVariantId
+ ? placement?.variants?.find((v) => v.id === selectedVariantId) || placement?.variants?.[0]
+ : placement?.variants?.[0];
const productId = variant?.id || "";
const placementId = placement?.placementId || "";
const paywallId = placement?.paywallId || "";
const trialPrice = variant?.trialPrice || 0;
const price = variant?.price || 0;
- const oldPrice = variant?.price || 0;
+ const oldPrice = (variant?.trialPrice || 100) / 0.04;
const billingPeriod = placement?.billingPeriod;
const billingInterval = placement?.billingInterval || 1;
const currency = placement?.currency || Currency.USD;
@@ -110,10 +118,10 @@ export function TrialPaymentTemplate({
const trialPeriodHyphenText = formatPeriodHyphen(trialPeriod, trialInterval);
const computeDiscountPercent = () => {
- if (!oldPrice || !trialPrice || oldPrice <= 0) return undefined;
- const ratio = 1 - trialPrice / oldPrice;
- const percent = Math.max(0, Math.min(100, Math.round(ratio * 100)));
- return String(percent);
+ // if (!oldPrice || !trialPrice || oldPrice <= 0) return undefined;
+ // const ratio = 1 - trialPrice / oldPrice;
+ // const percent = Math.max(0, Math.min(100, Math.round(ratio * 100)));
+ return String("94");
};
const replacePlaceholders = (text: string | undefined) => {
@@ -194,14 +202,26 @@ export function TrialPaymentTemplate({
{screen.headerBlock && (
)}
@@ -621,9 +713,9 @@ export function TrialPaymentTemplate({
>
Privacy Policy
- . You also acknowledge that your 1-week introductory plan to Wit
- Lab LLC, billed at $1.00, will automatically renew at $14.99 every
- 1 week unless canceled before the end of the trial period.
+ . You also acknowledge that your {trialPeriodHyphenText} introductory plan to Wit
+ Lab LLC, billed at {formattedTrialPrice}, will automatically renew at {formattedBillingPrice} every
+ {" "}{billingPeriodText} unless canceled before the end of the trial period.
)}
@@ -631,15 +723,21 @@ export function TrialPaymentTemplate({
{screen.usersPortraits && (
({
src: img.src,
alt: "user portrait",
@@ -669,14 +767,26 @@ export function TrialPaymentTemplate({
}
: undefined
}
- count={buildTypographyProps(screen.joinedTodayWithAvatars.count, {
- as: "span",
- defaults: { font: "inter", weight: "bold", size: "sm" },
- })}
- text={buildTypographyProps(screen.joinedTodayWithAvatars.text, {
- as: "p",
- defaults: { font: "inter", weight: "semiBold", size: "sm" },
- })}
+ count={buildTypographyProps(
+ {
+ ...screen.joinedTodayWithAvatars.count,
+ text: replacePlaceholders(screen.joinedTodayWithAvatars.count?.text),
+ },
+ {
+ as: "span",
+ defaults: { font: "inter", weight: "bold", size: "sm" },
+ }
+ )}
+ text={buildTypographyProps(
+ {
+ ...screen.joinedTodayWithAvatars.text,
+ text: replacePlaceholders(screen.joinedTodayWithAvatars.text?.text),
+ },
+ {
+ as: "p",
+ defaults: { font: "inter", weight: "semiBold", size: "sm" },
+ }
+ )}
/>
)}
@@ -684,24 +794,36 @@ export function TrialPaymentTemplate({
({
- title: buildTypographyProps(s.title, {
- as: "h4",
- defaults: { font: "inter", weight: "semiBold", size: "sm" },
- })!,
- description: buildTypographyProps(s.description, {
- as: "p",
- defaults: { font: "inter", size: "xs" },
- })!,
+ title: buildTypographyProps(
+ {
+ ...s.title,
+ text: replacePlaceholders(s.title?.text),
+ },
+ {
+ as: "h4",
+ defaults: { font: "inter", weight: "semiBold", size: "sm" },
+ }
+ )!,
+ description: buildTypographyProps(
+ {
+ ...s.description,
+ text: replacePlaceholders(s.description?.text),
+ },
+ {
+ as: "p",
+ defaults: { font: "inter", size: "xs" },
+ }
+ )!,
icon:
s.icon === "questions" ? (