«По любви» · чат после мэтча · к созвону 03.09.2026

Карточки после мэтча

Наборы вопросов для пары в чате, по мотивам Twinby Cards, но с подбором под конкретную пару, пользовательскими наборами и выходом на живую встречу через «По душе». Ниже: что сделал Twinby, чем отличаемся, принятые решения, как ложится на наш бэкенд, этапы и открытые вопросы для команды.

Статус: предложение, не спецификация Дата: 02.09.2026 Основа: код ветки integration/dev-stand-2026-08-31, публичные материалы Twinby

1. Что сделал Twinby

Twinby Cards живут в чате пары. Факты из FAQ и телеграм-канала Twinby:

2. Чем мы отличаемся

Копировать механику приглашения и скрытых ответов имеет смысл: она понятна и проверена. Отличие в пяти вещах, которых у Twinby нет.

ОтличиеЧто это даётНа чём строится у нас
Набор «для вас двоих»Пара получает не каталог из 22 паков, а один-два набора, собранные под неё: по общим интересам и по тем пунктам анкеты, где ответы разошлись. Разногласия про детей, религию, курение выясняются на первой неделе, а не через месяц.Анкета из 26 вопросов, хобби в профиле, уже посчитанный процент совместимости пары. Правила, без модели в рантайме.
Наборы от пользователейЛюбой может собрать свой набор и сыграть его со своими парами. Прошедшие модерацию попадают в общий раздел «От пользователей».Матерный фильтр, ИИ-премодерация через уже существующий клиент модели, ручная проверка в операторской консоли.
Один платит, оба играютПремиальный набор открывает тот, кто приглашает. Второй играет бесплатно и видит, что даёт подписка.Тарифы и подписки уже есть, проверка на стороне того, кто начинает игру.
Выход на встречуВторая очередь: карточка «Пошли бы на это в субботу?» с реальным событием из каталога «По душе». Карточки ведут к свиданию.Общий каталог событий и смешанная лента уже связаны с дейтингом.
Бот оживляет тишинуВторая очередь: чат молчит сутки, приложение само кладёт одну карточку под пару.Чат-сервис уже шлёт пуши и знает активность; нужен только планировщик.

3. Принятые решения

Это то, что обсудили 02.09 и предлагаем как исходную позицию. Всё можно оспорить на созвоне, но лучше спорить с позицией, чем с пустым местом.

ВопросРешениеПочему
Где живётТолько в чате пары. Плюс отдельный раздел «Карточки» (каталог, свои наборы, история) и подсказка в пустом чате, ведущая в раздел.Минимальный скоуп, как у Twinby. До мэтча и в чатах событий не лезем.
МеханикаСинхронная игра: приглашение, принятие, оба отвечают, ответы скрыты до второго.Проверенная механика, есть что показать. Дороже «карточки как сообщения», но без состояния игры не будет ни итога, ни скрытых ответов.
Формат ответаСвободный текст. Пропуск и право не отвечать у обоих, второй видит «пропустил».Пропуск важен для острых тем, иначе игра превращается в допрос.
Длина сессииСессия идёт по всему набору до конца, одна активная на чат. В конце процент совпадения.У игры есть конец и есть повод сыграть следующий набор.
Процент совпаденияСловари с морфологией: у каждой карточки список слов-маркеров с полярностью, ответ лемматизируется, отрицания учитываются. Без модели.Модель на каждой сессии дорога. Словари дёшевы, но их качество придётся доказать (см. риск в §6).
Умный подборПо общим интересам и по разногласиям в анкете. Уточняется с командой.Данные уже есть, правила прозрачны, ничего не уходит наружу.
Контент на стартеГенерация моделью с ручной вычиткой. Плюс пользовательские наборы.Клиент к Opus 5 с бюджетом уже есть в разделе SEO. Сотни вопросов за день, тон правит человек.
Модерация наборовПервый фронт: бан-слова и ИИ-премодерация. Прошёл, попал в общий раздел. Ручная проверка даёт отметку «проверено» и продвижение выше в разделе.Не копим очередь на людях, но ручная проверка остаётся стимулом для авторов.
18+ и острые темыУ каждого набора своя категория. Наборы 18+ открываются только по взаимному согласию: оба нажали «хочу», одностороннего приглашения нет.Защита от «сразу в лоб» и от жалоб. Категория нужна и сторам, и модерации.
ДеньгиБазовые наборы бесплатно, тематические и «для вас двоих» по подписке. Один платит, оба играют.Ложится на существующие тарифы. Второй участник видит ценность подписки.
Офлайн-режим«Один телефон по кругу»: вопрос на весь экран, отвечают вслух, свайп дальше. Работает без сети.Отдельный простой экран, серверу не нужен. Даёт ту же ценность, что офлайн-паки Twinby.
Хранение ответовКак сообщения чата, в той же JSONB-пачке. Умирают вместе с чатом.Ничего нового в политике и согласиях. Ответы про религию и 18+ по 152-ФЗ специальные категории, отдельного хранилища для них не заводим.
Разрыв парыНераскрытое не раскрываем: ответ, который второй ещё не открыл, остаётся скрытым навсегда. Открытое живёт как обычное сообщение.Иначе удаление пары становится способом «дочитать».
Где живёт кодКаталог наборов в Django, игра в чат-сервисе.См. §5.
Клиенты и метрикаОткрытые вопросы для команды, см. §8.

4. Как выглядит одна игра

1
Выбор набораВ разделе «Карточки» или по подсказке в чате. Сверху «для вас двоих», ниже категории и «от пользователей».
2
ПриглашениеВ чат падает карточка-приглашение с названием набора. Для 18+ второй должен явно нажать «хочу».card.invite
3
ПринятиеВторой принимает или отклоняет. Открывается первая карточка. Одна активная сессия на чат.card.accept
4
ВопросОба видят один вопрос. Каждый пишет ответ или жмёт «пропустить». Свой ответ виден, чужой скрыт.card.question
5
РаскрытиеОба ответили или пропустили. Ответы раскрываются одновременно, дальше можно обсудить обычными сообщениями.card.reveal
6
ИтогНабор закончился. Процент совпадения и лента «вопрос → два ответа». История в разделе «Карточки».card.finished

Пауза без срока: сессия живёт, пока жив чат, вернулись через неделю и продолжили с той же карточки. Разрыв пары посреди игры закрывает сессию, нераскрытые ответы остаются скрытыми.

5. Как ложится на архитектуру

Два бэкенда, роли делятся по тому, кто чем уже владеет. Django знает анкеты, подписки, модерацию и консоль. Чат-сервис знает пары, сообщения, WebSocket и пуши.

Django, каталог наборов

расширяем приложение questionary
  • уже есть модели «открывашек»: категории и 28 вопросов по темам Личность, Семья, Мечты, Отношения. Это первый бесплатный набор.
  • уже есть анкета из 26 вопросов и процент совместимости пары в профиле.
  • Новые модели: набор (название, категория, автор или редакция, уровень доступа, статус модерации, отметка «проверено»), карточка (текст, порядок, словарь маркеров для процента).
  • Ручки: каталог с блоком «для вас двоих», мои наборы, создание набора, отправка на модерацию, история игр.
  • Внутренняя ручка для чата: «можно ли этой паре этот набор» (подписка, 18+, статус модерации).
  • Подбор «для вас двоих»: правила по анкете и хобби, кэш в Redis рядом с процентом совместимости.
  • Процент: pymorphy3 и razdel уже в зависимостях, используются в SEO-балле.

Чат-сервис, игра

FastAPI, WebSocket, JSONB-пачки
  • уже есть типизированные сообщения (enum типов, хранимые и служебные), событие «новая пара», пуши, межинстансная доставка через Redis.
  • Новые типы сообщений: приглашение, принятие или отказ, вопрос, ответ, пропуск, раскрытие, итог. Хранятся в тех же пачках.
  • Состояние сессии в Redis по ключу чата: набор, номер карточки, кто ответил. Раскрытие делает сервер, клиент не получает чужой ответ до раскрытия.
  • Правило «одна активная сессия на чат» и «нераскрытое не раскрываем» живут здесь.
  • Перед стартом сессии ходит в Django за разрешением, как сейчас ходит за профилями.

Клиенты

Android, iOS, веб на React
  • Экраны: раздел «Карточки», конструктор набора, карточка в чате, экран итога, офлайн-режим «один телефон».
  • Старые клиенты не знают новых типов сообщений: нужен фича-флаг и понятная заглушка «обновите приложение».
  • Веб-клиент самый быстрый путь до демо для команды.

Консоль и модерация

adminpanel, пространство «По любви»
  • уже есть фича-флаги с payload, жалобы на чат, матерный фильтр, очередь ручных согласований, клиент модели с бюджетом.
  • Новый раздел: редакция наборов, очередь пользовательских наборов, отметка «проверено», статистика игр.
  • ИИ-премодерация набора: один запрос на набор при отправке, а не на каждую карточку.
Что переиспользуем, ничего не ломая

6. Умный подбор и процент

Набор «для вас двоих»

Правила, а не модель. Для каждой пары считаем два списка по анкете и хобби:

У каждой редакционной карточки есть необязательная привязка к пункту анкеты и к хобби. Подбор берёт карточки по совпадениям и разногласиям пары и собирает из них один набор. Если анкета не заполнена, набор «для вас двоих» не показывается, остаются базовые.

Процент совпадения по словарям

Каждая карточка, которая участвует в проценте, несёт словарь: леммы-маркеры с полярностью («люблю», «обожаю» → плюс; «терпеть», «ненавидеть» → минус) и тематические леммы. Ответ разбивается на слова, лемматизируется, частица «не» переворачивает полярность ближайшего маркера. Два ответа совпадают, если полярность одинакова и пересеклись тематические леммы. Карточки без словаря в процент не входят.

Риск, который надо назвать вслух

Словари ломаются на иронии, синонимах и длинных ответах: «нормально отношусь» и «терпеть не могу» по словарю могут оказаться и совпадением, и нет. Прежде чем обещать процент, нужно прогнать словари на 50–100 живых пар ответов и посмотреть, сколько раз человек согласен с оценкой. Если качество ниже 80 %, запасной план дешевле, чем модель: после текста пользователь жмёт одну кнопку (да / нет / по-разному), и процент считается по кнопкам, а текст остаётся для разговора.

7. Этапы

1
Игра в чате

Синхронная сессия, три редакционных набора (базовый из открывашек, «Знакомство», «Сближение»), пропуск, итог без процента, раздел «Карточки» с историей, фича-флаг. Без денег, без пользовательских наборов, без 18+.

  • Даёт: механику, которую можно потрогать, и первые данные, играют ли вообще.
  • Решение по клиентам: веб как демо через одну-две недели, мобилки по готовому контракту, либо все три одним релизом. Решает команда.
2
Умный набор, процент, подписка

Набор «для вас двоих», процент по словарям (после проверки на живых ответах), премиальные наборы по подписке, «один платит, оба играют», категории и взаимное согласие на 18+.

3
Наборы от пользователей

Конструктор набора, бан-слова и ИИ-премодерация, раздел «От пользователей», ручная проверка с отметкой «проверено», жалобы на набор, офлайн-режим «один телефон».

4
Вторая очередь

Бот оживляет тишину, карточки с событиями «По душе», режим для компании 3+, публичные колоды как страницы блога для трафика из поиска.

Оценка сроков сознательно не даётся: она зависит от ответа на вопрос про клиентов и от того, кто из команды свободен. Первый этап на бэкенде это одно приложение в Django и один модуль в чат-сервисе, самое дорогое в нём экраны трёх клиентов.

8. Открытые вопросы для команды

Метрика успехаНе зафиксирована. Кандидаты: доля мэтчей, где в течение 48 часов оба написали по три сообщения; удержание на седьмой день у игравших против не игравших; конверсия в подписку после упора в премиальный набор. Считать до и после по фича-флагу.
Какой клиент первыйВеб как демо и потом мобилки, или все три одним релизом. Пара на разных платформах не должна упираться в «у тебя нет карточек».
Умный подборСовпадения и разногласия по анкете приняты за основу. Стадия диалога как третий сигнал и чтение переписки моделью отложены, обсудить.
Качество словарейКто и на каких ответах проверяет процент до того, как он появится в интерфейсе. Порог приёмки.
ЮристНаборы про религию и 18+: формулировки вопросов, возрастная маркировка в сторах, требования к пользовательскому контенту.
Название и место в меню«Карточки», «Игры», «Вопросы»: как называем раздел и как он попадает в навигацию трёх клиентов.
Кто пишет и вычитываетМодель даст сотни вопросов за день, но тон и острые формулировки должен смотреть человек. Кто.

9. Что рассмотрели и отложили

Чтобы на созвоне не тратить время на «а почему не»:

Источники по Twinby

Собрано 02.09.2026 по итогам обсуждения. Ссылки на код: questionary (открывашки и анкета), matching (процент совместимости), fastapi-chat-app (типы сообщений), moderation_queue (фича-флаги, жалобы, согласования), seo/llm.py и seo/ai_budget.py (клиент модели).