# MASTER HANDOFF — Воронка чаттер-рекрутинга ONLYTOP

**Дата:** 2026-05-23
**Цель:** запустить полный flow Z1 → Email → Z2 → Recruiter call к 1 июня 2026
**Языки:** RU и UA (две независимые воронки, routing по языку Z1)
**Кто что делает:**
- Антон: Brevo, Tally, deploy, DNS, Meta-creatives
- Claude: HTML/copy/ТЗ (всё сделано, см. ниже)

---

## 1. Архитектура воронки

```
                   Meta Ads (RU)              Meta Ads (UA)
                        ↓                          ↓
            start.onlytop-agency.com    start.onlytop-agency.com/ua
              (Z1 нейтральный)              (Z1 нейтральный)
                        ↓                          ↓
                  Quiz 1 RU (Tally)          Quiz 1 UA (Tally)
                        ↓                          ↓
                  Brevo: ru_chatter         Brevo: ua_chatter
                        ↓                          ↓
                  Mail 1 RU immediate       Mail 1 UA immediate
                        ↓ (+24h, no Q2)            ↓ (+24h, no Q2)
                  Mail 2 RU                  Mail 2 UA
                        ↓ (+24h, no Q2)            ↓ (+24h, no Q2)
                  Mail 3 RU                  Mail 3 UA
                        ↓                          ↓
            join.onlytop-agency.com    join.onlytop-agency.com/ua
              (Z2 reveal)                  (Z2 reveal)
                        ↓                          ↓
                  Quiz 2 RU (Tally)          Quiz 2 UA (Tally)
                        ↓                          ↓
                  Q2_DONE=true → exit       Q2_DONE=true → exit
                        ↓                          ↓
                  Recruiter Telegram         Recruiter Telegram (+24h)
                        ↓                          ↓
                  Calendly → Call            Calendly → Call
```

---

## 2. Готовые материалы — где что лежит

### Landing pages (уже задеплоено на Cloudflare Pages)

| Зона | URL | Источник |
|---|---|---|
| Z1 RU | https://start.onlytop-agency.com/ | `onlytop/projects/chatter-recruitment/07-funnel/01-zone1-neutral/prototype/index-ru.html` |
| Z1 UA | https://start.onlytop-agency.com/ua/ | `.../prototype/index-ua.html` |
| Z2 RU | https://join.onlytop-agency.com/ | `.../02-zone2-reveal/prototype/index.html` |
| Z2 UA | https://join.onlytop-agency.com/ua/ | `.../02-zone2-reveal/prototype/ua/index.html` |

**Z2 noindex + nofollow:** ✅ стоит (meta + x-robots-tag header).

### Tally формы (создаются вручную в Tally UI)

| Форма | ТЗ | Где создать |
|---|---|---|
| Quiz 1 RU | [`01-zone1-neutral/03-quiz-tz-v3-final.md`](01-zone1-neutral/03-quiz-tz-v3-final.md) | Tally → new form |
| Quiz 1 UA | [`01-zone1-neutral/03-quiz-tz-v3-final-ua.md`](01-zone1-neutral/03-quiz-tz-v3-final-ua.md) | Tally → new form |
| Quiz 2 RU | [`02-zone2-reveal/quiz2-tz-v2-final.md`](02-zone2-reveal/quiz2-tz-v2-final.md) | Tally → new form |
| Quiz 2 UA | [`02-zone2-reveal/quiz2-tz-v2-final-ua.md`](02-zone2-reveal/quiz2-tz-v2-final-ua.md) | Tally → new form |

**Текущий Tally Quiz 1:** `obk20b` (старый, на основе v1). Лучше создать заново под v3 — структура существенно изменилась (английский убран, страны сокращены, pre-qual переехал в конец, reveal-экран удалён).

### Email последовательность (готовый текст для Brevo)

📧 [`02-zone2-reveal/email-sequence-final.md`](02-zone2-reveal/email-sequence-final.md) — все 6 писем (RU + UA), Subject, Preview, Body, Footer, From-Header.

---

## 3. Brevo setup — что создать

### 3.1 Sender

- **Sender name (общий для обоих языков):** `Антон, OnlyTop`
- **Sender email:** `admin@onlytop-agency.com`
- **DNS:** убедиться что для `onlytop-agency.com` прописаны SPF, DKIM, DMARC (Brevo даст конкретные TXT-записи)

### 3.2 Lists

- `ru_chatter` — все RU-кандидаты после Q1
- `ua_chatter` — все UA-кандидаты после Q1

### 3.3 Contact attributes

| Атрибут | Тип | Источник |
|---|---|---|
| `NAME` | text | Q1 capture |
| `EMAIL` | email | Q1 capture |
| `LANG` | enum (ru / ua) | webhook (по Tally form ID) |
| `COUNTRY` | enum (ua / europe / asia / other) | Q1 Q1 |
| `INCOME_BAND` | enum (unemployed / under_300 / 300_700 / 700_1500 / 1500_plus) | Q1 Q2 |
| `EXP_TYPE` | enum (no_experience / offline / sales / content / marketing / support) | Q1 Q3 |
| `WORK_STYLE` | enum (communication / data / creative / structure) | Q1 Q4 |
| `HOURS_BAND` | enum (2_4h / 5_6h / 7_8h / 8_plus) | Q1 Q5 + Q2 Q4 |
| `READINESS` | enum (this_week / this_month / 2_3_months / browsing) | Q1 Q6 |
| `PREQUAL` | enum (yes / no) | Q1 Q7 |
| `ROLE_PRIMARY` | enum (chat / client / content / traffic / va) | Worker scoring |
| `TELEGRAM` | text | Q2 capture |
| `Q2_DONE` | boolean | Q2 submit (любой ответ) |
| `Q2_OUTCOME` | enum (qualified / parttime / declined_industry / declined_role / declined_pay) | Q2 logic |

### 3.4 Segments

| Сегмент | Условие | Назначение |
|---|---|---|
| `prequal_q2_done` | `Q2_DONE = true` | EXIT-condition для email-flow Mail 1/2/3 |
| `q2_qualified` | `Q2_OUTCOME = qualified` | Передать recruiter в Telegram |
| `q2_parttime` | `Q2_OUTCOME = parttime` | Manual review |
| `q2_declined_industry/role/pay` | `Q2_OUTCOME = declined_*` | 1 polite-no письмо, exit |

### 3.5 Automations

**Automation 1: RU email-flow**
```
Trigger: contact added to list "ru_chatter"
  ↓
Send Mail 1 RU (immediate)
  ↓
Wait 24h
  ↓
If contact in segment "prequal_q2_done" → EXIT
Else:
  ↓
Send Mail 2 RU
  ↓
Wait 24h
  ↓
If contact in segment "prequal_q2_done" → EXIT
Else:
  ↓
Send Mail 3 RU
  ↓
END
```

**Automation 2: UA email-flow** — зеркало Automation 1, только список `ua_chatter` и письма Mail 1/2/3 UA.

**Automation 3: polite-no flow (RU + UA)** — для тех, кто declined в Q2:
```
Trigger: contact entered segment "q2_declined_*"
  ↓
Send polite-no letter (язык по LANG атрибуту)
  ↓
END
```

*(Polite-no письмо отдельно не написано — нужно создать. Можно использовать упрощённую версию Mail 3.)*

---

## 4. Cloudflare quiz-webhook — что обновить

**Текущий endpoint:** `onlytop/tools/quiz-webhook/` (Cloudflare Worker)

**Что должен делать:**

### Quiz 1 RU webhook
```
INPUT: Tally payload (Quiz 1 RU)
ACTION:
  1. Parse все поля (country, income, exp, work_style, hours, readiness, prequal)
  2. Скоринг → ROLE_PRIMARY
  3. POST to Brevo API:
     - Create/update contact
     - Set attributes: NAME, EMAIL, LANG=ru, COUNTRY, INCOME_BAND, EXP_TYPE, WORK_STYLE, HOURS_BAND, READINESS, PREQUAL, ROLE_PRIMARY
     - Set Q2_DONE = false (initialize)
     - Add to list `ru_chatter`
```

### Quiz 1 UA webhook — зеркало, `LANG=ua`, list `ua_chatter`.

### Quiz 2 (RU или UA) webhook
```
INPUT: Tally payload (Quiz 2)
ACTION:
  1. Найти contact по email
  2. Update attributes: TELEGRAM, Q2_DONE=true, Q2_OUTCOME
  3. Brevo автоматически:
     - Поместит в сегмент `prequal_q2_done` → exit email-flow
     - Если Q2_OUTCOME=qualified → попадёт в сегмент `q2_qualified` → recruiter notification
     - Если declined → попадёт в polite-no flow
```

**Removed from v2 (English question deletion):**
- Убрать чтение поля `ENGLISH`
- Атрибут `ENGLISH` в Brevo можно archive (не удалять — для исторических контактов до v3)

---

## 5. Recruiter notification setup

Когда contact попадает в сегмент `q2_qualified`:
- Trigger: webhook на Telegram-бот recruiter'а (или просто Brevo emails recruiter'у)
- Payload: имя, email, Telegram, ROLE_PRIMARY, HOURS_BAND, COUNTRY
- Recruiter пишет в Telegram в 24 часа
- Calendly link для созвона

Этот шаг — за пределами этого handoff'а. Делается отдельной задачей.

---

## 6. Checklist запуска

### Подготовка (без зависимости от заливки)
- [ ] Brevo: sender `Антон, OnlyTop <admin@onlytop-agency.com>` верифицирован
- [ ] DNS: SPF, DKIM, DMARC прописаны на `onlytop-agency.com`
- [ ] Brevo: создан атрибутный набор (см. 3.3)
- [ ] Brevo: созданы списки `ru_chatter` и `ua_chatter`
- [ ] Tally: созданы 4 формы (Quiz 1 RU/UA, Quiz 2 RU/UA) по ТЗ
- [ ] Tally: все формы протестированы вручную (1 submit на каждую)

### Email-цепочки
- [ ] Brevo: создан Mail 1 RU template (копи из `email-sequence-final.md`)
- [ ] Brevo: создан Mail 2 RU template
- [ ] Brevo: создан Mail 3 RU template
- [ ] Brevo: создан Mail 1/2/3 UA templates
- [ ] Brevo: создан polite-no template (RU + UA версии)

### Automation
- [ ] Brevo Automation 1 (RU email-flow) собрана и протестирована
- [ ] Brevo Automation 2 (UA email-flow) собрана и протестирована
- [ ] Brevo Automation 3 (polite-no flow) собрана
- [ ] Exit-condition `prequal_q2_done` сегмент проверен (E2E)

### Webhook
- [ ] Cloudflare quiz-webhook обновлён под v3 (Q1 без english, Q2 новый)
- [ ] Webhook URLs прописаны в Tally formах
- [ ] E2E тест: Q1 RU submit → contact в Brevo → Mail 1 в почту
- [ ] E2E тест: Q2 submit → Q2_DONE=true → Mail 2/3 не приходят
- [ ] E2E тест: Q2 declined → polite-no приходит

### Z2 embedding
- [ ] Quiz 2 RU embedded на Z2 RU (`data-tally-open` на все CTA-кнопки)
- [ ] Quiz 2 UA embedded на Z2 UA

### Запуск
- [ ] Meta ad campaigns подготовлены (отдельная задача)
- [ ] Z1 RU и UA проверены на CTA → Quiz 1 (правильная форма по языку)
- [ ] Z2 RU и UA проверены на CTA → Quiz 2 (правильная форма по языку)
- [ ] DNS на 100% распространился (TTL 24h обычно)
- [ ] Soft launch: 50 кликов с Meta → проверить flow E2E
- [ ] Full launch к 1 июня

---

## 7. Что НЕ в этом handoff'е (отдельные задачи)

- ✅ **Polite-no письма** — готовы, см. [`02-zone2-reveal/polite-no-letters.md`](02-zone2-reveal/polite-no-letters.md) (4 письма RU+UA, 2 automation схемы)
- **Recruiter onboarding playbook** (что говорить в Telegram, скрипт первого сообщения)
- **Calendly setup**
- **Meta ad creatives** (отдельная сессия по `ad-creative` skill)
- **Worker code update** (требует доступ к репо и redeploy)

---

## 8. Лог финальных решений

| Решение | Принято | Дата |
|---|---|---|
| Английский вопрос убран из Q1 и Q2 | Антон | 23.05 |
| Pre-qualifica в конец Q1, мягкая формулировка («чатиться с подписчиками инфлюенсера от его имени») | Антон | 23.05 |
| Q1 reveal-экран удалён, всё раскрытие в Mail 1 | Антон | 23.05 |
| Country в Q1: 4 опции + Other | Антон | 23.05 |
| Mail 1 без упоминания OnlyFans, full-management, выручки | Антон | 23.05 |
| Подпись писем: «— Антон, основатель OnlyTop» (RU) / «засновник OnlyTop» (UA) | Антон | 23.05 |
| Footer писем минимальный: «Это письмо отправлено после твоей заявки на ...» | Антон | 23.05 |
| Sender name: «Антон, OnlyTop» | Антон | 23.05 |
| Имя в quiz capture — required | Антон | 23.05 |
| Earnings table: убрано «целевой» с лендинга (синий цвет сохранён) | Антон | 23.05 |
| Z2 sticky CTA: только мобильная версия (<768px) | Антон | 23.05 |
| Z2 4 inline CTA: после #role, #whoweare grid, 3 стадий, «Берём не всех» | Антон | 23.05 |
| Z2 Team Lead row: $1,200–2,500 (без « + % с команды») | Антон | 23.05 |
| Z2 hero counter «6 з 8 місць у потоці» убран | Антон | 23.05 |
| H2 talk-to-chatter: «Познакомься с будущими коллегами» | Антон | 23.05 |
| Testimonials Даниил: убрана «агрессия в чатах» | Антон | 23.05 |

---

## 9. Контакты

- Антон — owner
- Marina — соруководитель
- Responsabile selezioni — recruiter (assignee для Q2-qualified)

Cloudflare account: `Mashaanatoly@gmail.com`
DNS: Cloudflare DNS, zone `onlytop-agency.com`
Tally workspace: текущий (form `obk20b` — legacy)
Brevo workspace: TBD
