Реализация проекта - итоговый план

План реализации "Родной" - от идеи до окупаемости

Итоговый план на основе всей информации на сайте: 36 разделов, 5 страниц, 13 схем сделок, 12 таблиц БД, 28 API endpoint'ов, 17 открытых вопросов. Всё, что нужно команде для старта - здесь.

Статус реализации - https://app.rodnoy.site

Next.js 16 + Prisma 6 + PostgreSQL 16 + Bun - 26 моделей БД - 18 API endpoints - Apple HIG - PM2 + nginx - SSL Let's Encrypt

144
✅ Сделано
функций реализовано
15
☐ Не сделано
осталось до запуска
87%
📊 Готовность
104 из 119 функций
18
🔌 API endpoints
7 ролей пользователей
Прогресс реализации 87% (104 из 119)
87%
🔐 Авторизация и роли 4✅ / 2☐
Регистрация
Email + телефон + пароль, scryptSync-хеширование
Вход в систему
По email или телефону, NextAuth-сессии
7 ролей пользователей
guest / buyer / buyer_b2b / supplier / organizer / moderator / admin
Quick-login
3 кнопки быстрого входа + галочка "новый пользователь" (сброс данных)
Telegram Login
Вход через Telegram Login Widget @rodnoy_bot
SMS-подтверждение
Подтверждение телефона по SMS (SMS-агрегатор)
🔍 Каталог и поиск 10✅
Каталог пулов
Карточки с изображениями товаров, мобильная вертикальная лента
Серверный поиск
Debounce 400 мс, поиск по названию/бренду/категории
Фильтры
Категория, бренд, подкатегория, сортировка по 5 критериям
5 категорий - 18 подкатегорий - 23 бренда
Полная иерархия с цветовыми кодами
3 типа изображений
Белый фон, в использовании, с бейджами (скидка, эскроу, опт)
Загрузка изображений
/api/upload -> S3 (Beget Cloud), sharp-сжатие в WebP, до 10 МБ
Избранное
Сердца на карточках, категориях, брендах - каскадное проставление
Недавно просмотренные
localStorage, блок на главной + персональные рекомендации
"Загрузить ещё +6/+12/+24"
AJAX-пагинация через /api/deals/{discount,closeness}
Виды торгов (4) и аукционов (4)
Карточки с модалками: подробное описание каждого типа
📦 Сделки и аукционы 14✅
8 вариантов сделок
local / federal / mixed / multipool / preorder / cross_b2b / cascade / tender
Лесенка цен (3 уровня)
priceTiers: мелкий / средний / крупный опт - автоматический расчёт
Прогресс участников
currentParticipants / minParticipants + currentVolume / minVolume
State Machine пула
draft -> collecting -> threshold_met -> confirmed -> in_progress -> delivered -> closed
Авто-подтверждение
Через 14 дней - пул подтверждается без ручного действия
Отзывы и рейтинги
Звёзды 1-5, список, средний рейтинг, фильтр по длине отзыва
"Сделка дня" - 2 блока
Максимальная экономия + почти собрано (AJAX-пагинация)
Поделиться сделкой
navigator.share + копирование ссылки ?ref=КОД
Кэшбэк 1%
На bonus-баланс при подтверждении получения товара
Flash-аукцион ⚡
Live-падение цены, таймер следующего шага 30 минут
Голландский аукцион 📉
Цена падает от максимальной к минимальной по шагу
Обратный аукцион 🔄
Поставщики торгуются - покупатели получают лучшую цену
B2B + Слотовый аукционы
Слепые торги (blind) + ставки на последние места
Форма ставки поставщика
Reverse auction bid -> понижение цены пула
💳 Платежи и эскроу 7✅ / 2☐
ЮKassa API
Интеграция готова (dev mock + prod ready)
Pikassa - платёжный шлюз
Код готов, ключи в .env, осталось подключить к flow
Escrow
frozen -> released -> refunded, заморозка средств до подтверждения
Webhook от платёжного шлюза
Приём и обработка коллбэков от ЮKassa / Pikassa
Payout поставщику
4% комиссия + 2.5% эквайринг, выплата после подтверждения
СБП QR-код
SVG-QR, NSPK payload, отдельный способ оплаты
Кэшбэк-баллы
1% с покупки -> bonus-баланс, можно тратить на следующие заказы
54-ФЗ онлайн-касса
АТОЛ / Эвотор - договор + интеграция
Реальный эскроу-счёт
Банк + API для заморозки/выплаты (сейчас - логическая заморозка)
🚚 Логистика 6✅ / 1☐
Metaship API
Реальная доставка: СДЭК, Boxberry, Почта РФ, DPD, Сбер, Яндекс, 5Post
Карта ПВЗ
Яндекс.Карты, 8 служб доставки, интерактивный выбор
DeliverySelector
Самовывоз / курьер / ПВЗ - 3 варианта в JoinPoolSheet
Shipment-объект
Создаётся после оплаты, tracking number, статус-трекинг
Отправка поставщиком
Отметка отправки -> уведомление покупателю с трек-номером
ПВЗ СДЭК + Boxberry
Mock-данные (10 пунктов), API ready для подключения
Авто-создание отправки
Через Metaship API (вместо mock-данных)
🔔 Уведомления 6✅ / 1☐
In-app уведомления
20 типов, иконки, статус прочтения, авто-удаление старых
Bell badge
Polling 30 с, счётчик непрочитанных в шапке
SMTP email
nodemailer, smtp.timeweb.ru, HTML-шаблоны
Push-токены (FCM)
Таблица + API, готово к рассылке через Firebase Cloud Messaging
Настройки уведомлений
15 параметров: скидки, срочность, размер, каналы
Socket.IO hook
Real-time чат и обновления пулов (polling 5 с fallback)
Web Push (PWA)
Push-уведомления через Service Worker
⚖ Споры и модерация 7✅
Открытие спора
6 причин, описание, SLA 3 дня (срочно) / 7 дней (обычное)
AdminTab - споры
Список, SLA-таймер, разрешение в пользу покупателя/поставщика
resolveDispute
Возврат покупателю / выплата поставщику, сreason-логом
Список пользователей
Бан / разбан, поиск, фильтр по роли
Audit log
Журнал всех действий администратора, экспорт в CSV
Доказательства
Загрузка фото/видео/PDF, до 5 файлов, превью в админ-панели
Чат buyer<->supplier
ChatRoom + ChatMessage, polling 5 с, unread badges
🛡 Антифрод и безопасность 8✅
12 правил антифрода
IP, телефон, email, 24ч, сумма, гео, ИНН, велосипед, collab, частота, бот, ЧС
3-tier санкции
allow (<0.3) / review (0.3-0.7) / block (>0.7)
CSRF-токены
Cookie + заголовок, проверка на каждом мутационном запросе
Magic bytes
Проверка реального типа файла (не по расширению)
Zod-схемы
Валидация всех API-контрактов, типобезопасные ответы
Оптимистичная блокировка
version field - защита от race conditions
S3-хранилище
Beget Cloud + sharp-сжатие WebP, приватные ссылки
Error tracker
Глобальный трекер ошибок + pino logger + health check
🌐 SEO и маркетинг 12✅
SEO-страницы /c/[slug]
Категории и подкатегории, JSON-LD CollectionPage
SEO-страницы /pool/[id]
Product + FAQPage + BreadcrumbList JSON-LD
Sitemap.xml (37 URL)
Динамический: главная + каталог + 5 категорий + 12 пулов
robots.txt
Yandex + Googlebot + GPTBot + ChatGPT-User + CCBot + Google-Extended
Метаданные
title, description, keywords, OG, Twitter, canonical
Маркетинговый модуль
61 канал, 3 типа сотрудничества (CPA / фикс / бартер)
Реферальная программа v2
Поставщик ставит бюджет, блогеры получают 5% с продаж
Business-plan
С комментариями на gb.rodnoy.site
PR-стратегия
5 статей: VC.ru, Habr, GitHub Pages, Telegram-каналы
PWA
manifest.json, Service Worker, installable на iOS/Android
CI/CD
GitHub Actions: lint + build на push/PR
Многоуровневые рефералы
L1=200руб. + L2=50руб., referredById, антицикл-защита
🎯 Онбординг и персонализация 10✅
Онбординг (4 шага)
Тур по сайту -> интересы -> траты -> приоритет (опт/срочность)
Сердца
Каскадное проставление на категориях/подкатегориях/брендах
Рекомендации
На основе предпочтений: приоритет опта + срочность + гео
704 города + геолокация
BigDataCloud + Яндекс.Геокодер, выбор и сохранение города
"Местные производители"
Фильтр по городу пользователя - российские бренды в вашем городе
Стрелка "наверх"
Плавный скролл, появляется после 400px
Умный клик по логотипу
На главной - скролл наверх, на других - переход на главную
Сворачиваемое описание
Cookie на сворачивание длинных описаний категорий
Visit tracker
Session, device, browser, pathname - для аналитики
Сброс данных
Галочка "Войти как новый пользователь" при входе
🏗 Кабинет поставщика 6✅
CRUD товаров
Название, категория, бренд, артикул, штрих-код, вес, размеры, описание
Создание пулов
Товар, вариант сделки, цены (3-tier), дата, города, доставка
Заказы
Список участников, статусы, трекинг, экспорт в CSV
Отметка отправки
Трек-номер -> уведомление покупателю
Выплаты
Сумма к выплате + история (брутто/комиссия/нетто)
CSV-импорт товаров
Шаблон, валидация, подробный отчёт об ошибках
⚡ Real-time и WebSocket 4✅
Socket.io mini-service
:3030 + HTTP /emit :3031, PM2-процесс
Live-счётчик участников
Обновление без перезагрузки страницы
Live-индикатор
Зелёный "LIVE" / серый "Offline" в карточке пула
Toast-уведомления
При новых участниках / оплате / ставке в аукционе
RU Инфраструктура 6✅ / 2☐
Production
93.183.81.233, nginx, SSL Let's Encrypt
PM2
rodnoy-app + rodnoy-ws (2 процесса, auto-restart)
PostgreSQL 16
26 моделей, миграция завершена, индексы настроены
CI/CD
GitHub Actions: lint + build на push/PR
Backup БД
Ежедневный scripts/backup_db.sh, retain 30 дней
Health check
/api/health - статус БД + Redis + WS
Redis caching
Каталог, сессии, hot-keys (сейчас - in-memory)
Sentry
Error tracking с source maps
📋 Осталось сделать до запуска 0✅ / 7☐
NEXTAUTH_SECRET
Заменить dev-секрет на продакшн-значение (5 минут)
Pikassa
Подключить к payment flow (заменить mock ЮKassa)
54-ФЗ
Онлайн-касса: АТОЛ / Эвотор - договор + интеграция
Эскроу
Реальный счёт в банке (заморозка/выплата через API)
Metaship
Подключить в JoinPoolSheet (заменить mock СДЭК)
Telegram
Login Widget + бот @rodnoy_bot для уведомлений
SMS
Подтверждение телефона через SMS-агрегатор
104 сделано 15 не сделано
Открыть приложение ->
📋

План развития - гипотезы и решения

Обсуждаемые направления развития платформы. Прокомментируйте, измените статус или добавьте свои идеи - затем нажмите "Экспорт" и пришлите файл AI в следующем чате.

📊 Прогресс: 0 принято 0 обсуждается 0 комментариев
Как работать:
1. Откройте карточку, прочитайте "Проблему" и "Решение". 2. Выберите статус (Идея -> На обсуждении -> Принято / Отклонено). 3. Напишите комментарий в поле под карточкой и нажмите "Сохранить". 4. Когда закончите - нажмите "Экспорт" сверху, скачается JSON-файл. 5. В новом чате с AI напишите "комментарии на странице оставлены" и прикрепите файл - AI прочтёт и либо начнёт реализацию согласованного, либо продолжит планировать с учётом ваших правок.
✓ Серверная синхронизация включена: ваши комментарии и статусы автоматически отправляются на сервер платформы при каждом сохранении. AI видит их без необходимости экспорта/импорта. LocalStorage остаётся как кэш.
📋

Детальный разбор: Система Тендеров (C2B)

Тендер - это перевёрнутая схема маркетплейса: не продавец ищет покупателей, а покупатели формируют спрос и поставщики соревнуются за право его удовлетворить. Ниже - пошаговый процесс от заявки до исполнения.

1
Создание тендера покупателем

Покупатель (или организатор закупок) открывает форму "Создать тендер". Заполняет: категорию/подкатегорию товара, целевые характеристики (бренд, модель, артикул), желаемый объём (минимум и максимум), срок сбора спроса (3-14 дней), города доставки, целевую цену (опционально). Платформа проверяет: нет ли уже похожего активного тендера (по categoryId + brand + cities), чтобы не плодить дубликаты. Если есть - предлагает присоединиться к существующему.

2
Сбор спроса (3-14 дней)

Тендер публикуется в каталоге с бейджем "🔴 Тендер" и на главной в блоке "Тендеры с растущим спросом". Другие покупатели присоединяются: указывают желаемое количество (от 1 до N ед.), при необходимости - желаемый бренд/модель. Счётчик спроса растёт: "143 / 200 участников - 720 / 1000 ед.". Каждый участник может поделиться ссылкой - реферальная программа v2 (блогер получает 5% с сделки если привёл участников). Опционально: участник резервирует эскроу-блокировку (сумма = целевая цена x его количество), чтобы показать серьёзность намерений.

3
Автоматическая рассылка RFQ (при 50% minVolume)

Когда спрос достигает 50% minVolume (например, 100 участников из 200), платформа автоматически запускает рассылку RFQ (Request For Quotation): отбирает верифицированных поставщиков по фильтру (категория товара + гео + рейтинг >= 4.0 + isVerified=true), отправляет им in-app уведомление, email (через SMTP) и push в Telegram-бот @rodnoy_bot с текстом: "Тендер #T-2026-001: 100+ покупателей хотят Bosch-перфоратор. Дедлайн ставки: 25 июля. Целевая цена: 8000руб./ед. Сделать ставку -> [ссылка]". Поставщики видят тендер в SupplierTab -> "Тендеры для вас".

4
Слепые ставки поставщиков (5 дней)

Поставщик делает ставку в форме: цена за единицу, срок поставки (дней), условия доставки (самовывоз/СДЭК/Boxberry), гарантия, комментарий. Ставки слепые - поставщики не видят чужие цены (как в b2b_auction), только общее число конкурентов. Каждый поставщик может сделать до 3 ставок, перебивая свою предыдущую. Минимальная ставка = целевая цена x 0.7 (защита от демпинга ниже себестоимости). Каждая ставка логируется в audit_log. Инициатор видит: "Получено 5 ставок от поставщиков. Лучшая видимая: 8200руб." (без имён).

5
Выбор победителя (2 режима)

Режим Авто (по умолчанию): система выбирает минимальную ставку, соответствующую требованиям (срок, доставка). Учитывается рейтинг поставщика как tiebreaker - при равной ставке выигрывает поставщик с рейтингом 4.9 против 4.5. Режим Голосование: инициатор + все участники спроса голосуют 24 часа за топ-3 ставки (видят цену, рейтинг, срок, но не имя поставщика до голосования). Это полезно для крупных B2B-тендеров, где важна не только цена. Победитель получает уведомление +60 секунд на подтверждение готовности исполнить.

6
Эскроу-блокировка и договор (3 дня)

Все участники спроса получают счёт на оплату по ставке победителя. Деньги замораживаются на эскроу-счёте платформы (через Pikassa / ЮKassa). Параллельно: авто-генерация договора через шаблон (PDF) - specifies поставщик, покупатель-организатор, объём, цена, сроки, условия доставки, ответственность сторон. Договор подписывается через Просто подпись / Kontur.Diadoc (ЭДО), либо простой электронной подписью (для физлиц). Если набралось >= 90% оплат - тендер переходит в "confirmed". Если < 90% - инициатор может продлить дедлайн на 3 дня или отменить (деньги возвращаются автоматически).

7
Исполнение и трекинг

Поставщик отгружает товар -> трекинг через Metaship API (СДЭК, Boxberry, Почта РФ) -> каждый участник получает трек-номер и ПВЗ для самовывоза. Получатели подтверждают получение в приложении -> эскроу автоматически выплачивает поставщику (за вычетом комиссии 3% + 2.5% эквайринг). Кэшбэк 1% на bonus-баланс участникам. Отзыв о поставщике + рейтинг. Арбитраж: если участник не подтверждает получение 14 дней - автоматически считается доставленным (если трекинг показывает "Выдан").

⚖ Юридическая сторона
  • Оферта: условия тендера = публичная оферта, акцептируемая присоединением. Шаблон оферты на gb.rodnoy.site/oferta.
  • Договор: между поставщиком-победителем и организатором (платформой как агентом). Физлица-участники присоединяются к договору через оферту.
  • Эскроу: платформа действует как эскроу-агент на основании ст. 426 ГК РФ (публичный договор). Деньги хранятся на отдельном счёте.
  • ЭДО: для B2B - Kontur.Diadoc, для B2C - простая электронная подпись (ПЭП) через SMS-код.
  • Налоги: 54-ФЗ онлайн-касса (АТОЛ) - чек пробивается при получении оплаты, не при эскроу.
  • Ответственность: за неисполнение - пени 0.5% в день от суммы, но не более 10%. Споры - через админ-панель (SLA 72 часа), затем суд (Москва).
  • Персональные данные: ФЗ-152, согласие на обработку при регистрации. Поставщик видит только имя + телефон + адрес доставки (не финансовые данные).
🛠 Что нужно реализовать (5 задач backend + 4 frontend + 2 интеграции)
1. Модель TenderBid в schema.prisma (tenderId, supplierId, pricePerUnit, deliveryDays, isWinner)
2. API /api/tenders/[id]/bid (POST) - слепые ставки
3. API /api/tenders/for-me (GET) - релевантные тендеры для поставщика
4. Cron tender_rfq.ts - рассылка RFQ при 50% спроса
5. Cron tender_winner.ts - выбор победителя по дедлайну
6. Форма "Создать тендер" для покупателя
7. Раздел "Тендеры для вас" в SupplierTab
8. Страница "Мои тендеры" для покупателя
9. Лента "Тендеры с растущим спросом" на главной
10. Telegram-бот @rodnoy_bot: push о новых тендерах
11. Email-шаблоны (RFQ, ставка получена, победа/проигрыш)
12. ЭДО-интеграция (Kontur.Diadoc) для генерации договоров
📊 Метрики успеха системы (через 3 месяца после запуска)
>= 60%
тендеров достигают 50% спроса за 7 дней
>= 3
поставщиков делают ставку на тендер
>= 40%
тендеров доходят до подтверждения
>= 15%
средняя скидка от целевой цены
[time] Срок реализации: 2-3 недели. Приоритет - высокий (это ключевая фича, отличающая платформу от маркетплейсов).
🚧
Реализация MVP - в работе
Базовый флоу тендера уже работает. Полная версия - следующие шаги.
✅ Что уже реализовано (MVP):
  • Модель TenderBid в БД (цена за ед., срок, доставка, слепой режим)
  • API /api/tenders/[id]/bid - POST ставки (слепые, макс. 3 на поставщика)
  • API /api/tenders/for-me - релевантные тендеры для поставщика
  • API /api/pools/create-tender - покупатель создаёт тендер
  • UI "Создать тендер" - кнопка на главной в блоке "Виды торгов"
  • UI "Тендеры для вас" - вкладка в кабинете поставщика
  • Логирование в audit_log, защита от демпинга (min_price x 0.7)
[...] Что ещё нужно (следующий спринт):
  • Cron-задача: авто-рассылка RFQ поставщикам при 50% спроса
  • Cron-задача: авто-выбор победителя по дедлайну
  • Голосование участников (режим "vote" - альтернатива auto)
  • ЭДО-интеграция (Kontur.Diadoc) для B2B-тендеров
  • Telegram-бот @rodnoy_bot: push о новых тендерах
  • Email-шаблоны (RFQ, ставка получена, победа/проигрыш)
  • Лента "Тендеры с растущим спросом" на главной
💡 Решения по умолчанию (применяются если не ответите)
  • Целевая цена - опциональная
  • Эскроу - после выбора победителя
  • Выбор победителя - авто
  • ЭДО - позже (оферта через SMS)
  • Кто создаёт - любой buyer
  • Категории пилота - все 5
📋 10 вопросов для продвижения - ответьте одним кликом
1. Когда запускать авто-рассылку RFQ поставщикам?
2. Сколько ставок максимум может сделать один поставщик?
3. Минимальная ставка = % от целевой цены (защита от демпинга)?
4. Срок на ставки после рассылки RFQ?
5. Когда блокировать деньги (эскроу)?
6. Кто может создавать тендеры?
7. Реферальная программа для тендеров?
8. ЭДО-интеграция на старте?
9. Telegram-бот: о каких событиях пушить?
10. Минимальный рейтинг поставщика для участия в RFQ?
Ответы сохраняются автоматически. Можно ответить на часть - остальное останется по умолчанию.
📋

Система Тендеров (C2B) - от спроса к поставщику

💡 Идея 🔴 Высокая [time] 2-3 недели #backend #frontend #telegram-bot #cron
⚠ Проблема

Сейчас все 13 видов сделок начинаются с предложения поставщика. Тендер - единственный, где всё начинается со спроса покупателей. В коде есть variant='tender', но процесса нет: покупатель не может создать тендер, поставщики не получают уведомлений, ставок нет.

✅ Решение

Полный флоу: 1) Инициатор создаёт тендер (что/сколько/когда/целевая цена) -> 2) Сбор спроса 3-14 дней -> 3) При 50% minVolume авт-рассылка RFQ верифицированным поставщикам -> 4) Слепые ставки 5 дней (до 3 ставок на поставщика) -> 5) Выбор победителя (auto или голосование) -> 6) Эскроу-блокировка 3 дня -> 7) Исполнение через СДЭК. Backend: модель TenderBid, 2 API endpoints, 2 cron-задачи. Frontend: форма "Создать тендер", раздел "Тендеры для вас" в SupplierTab, страница "Мои тендеры", лента на главной.

Сохраняется локально (localStorage). Используйте "Экспорт" сверху, чтобы отправить AI.
🧭

Помощник выбора вида сделки (Wizard)

💡 Идея 🟡 Средняя [time] 2-3 дня #frontend #ux
⚠ Проблема

На платформе 13 видов сделок и аукционов. Новичок не понимает, какой ему подходит. Сейчас только короткие описания в модалках - недостаточно для выбора.

✅ Решение

Wizard для покупателя (4 вопроса: что/сколько/когда/где -> 3 рекомендации) и для поставщика (что/сколько/сроки/гео -> 3 рекомендации). Сохраняет ответы в localStorage для персонализации главной. Функция recommendVariant() на основе логики срочность x объём x гео. Интеграция в HomeTab (кнопка под "Виды торгов") и в SupplierTab (кнопка "Помочь выбрать variant" в форме создания пула).

Сохраняется локально (localStorage). Используйте "Экспорт" сверху, чтобы отправить AI.

Анализ: как сделать компаратор лучше

Прежде чем реализовывать простую таблицу 13x7, рассмотрим 4 альтернативных подхода - у каждого свои плюсы и минусы.

Вариант A: Статичная таблица 13x7 базовый

Колонки: минимум участников, срок, скидка, доставка, комиссия, выгода покупателю, выгода продавцу. На мобильных - горизонтальный скролл.

+ просто, быстро (1-2 дня), привычный формат - скучно, плохо на мобильных, не интерактивно
Вариант B: Интерактивный фильтр-матрица рекомендую

Слева - ползунки/радио: "сколько готовы ждать", "сколько нужно", "город". Справа - карточки подходящих видов сделок с подсветкой совпадения. По мере изменения фильтров карточки переразмещаются (топ-3 крупные, остальные ниже).

+ интерактивно, обучает, персонализированно, работает на мобильных - 3-4 дня работы, нужно тестировать UX
Вариант C: Калькулятор выгоды с примерами аналитический

Пользователь вводит свой сценарий: "100 шт Pampers, Москва, нужно через 5 дней". Платформа показывает расчёт по всем 13 видам: "Локальная: -20% - 5 дней - 100 в наличии. Federal: -28% - 9 дней (не подходит). Cascade: -25% - 7 дней (если подождёте)".

+ максимально конкретно, показывает реальные цифры - нужен backend с реальными пулами, 5-7 дней
Вариант D: Гибрид - таблица + wizard оптимальный

Сверху - компактная таблица для тех, кто хочет быстро сравнить. Снизу - кнопка "Подобрать для меня" -> открывает wizard (вариант B). Таким образом: начинающие проходят wizard, опытные смотрят таблицу.

+ закрывает оба типа пользователей, единое решение - 4-5 дней, нужен и wizard, и таблица
Рекомендация: Вариант D (гибрид). Таблица даёт быстрый обзор для опытных, wizard - для новичков. Это сочетается с гипотезой #2 (Wizard) - обе фичи усиливают друг друга. Если ресурс ограничен - начать с Варианта A (базовая таблица), затем добавить wizard как улучшение.
Реализовано - Вариант A (базовая таблица)
Компаратор уже работает на production. Вариант D (гибрид с wizard) - следующий шаг.
✅ Что реализовано:
  • Таблица 13x8: вид сделки x участники / срок / скидка / цена покупателю / доход продавцу / пулы
  • Комиссия скрыта - вместо неё видна конечная цена и сколько сэкономил/заработал
  • Сортировка по заголовкам - клик по колонке сортирует по возрастанию/убыванию
  • Расчёт цен для товара за 10 000 руб. (розница) - наглядно видна разница
  • Цветовые акценты: зелёный = сильная сторона, жёлтый = средняя, серый = нейтрально
  • Кнопка "⚖ Сравнить" на главной в блоке "Виды торгов"
  • Горизонтальный скролл на мобильных, полная таблица на десктопе
  • Клик по строке -> фильтр каталога по этому variant
[...] Вариант D (гибрид с wizard) - следующий шаг:
  • Сверху таблица для опытных, снизу кнопка wizard для новичков
  • Уже есть Wizard - нужно интегрировать в компаратор
  • Отдельная SEO-страница /compare для Yandex
  • Калькулятор выгоды (Вариант C) - вводите сценарий, видите расчёт
💡 Решение по умолчанию:
Реализован Вариант A (базовая таблица) - как вы и предложили: "давай сначала реализуем так". Вариант D (гибрид с wizard) - когда wizard будет полностью готов. Отдельная SEO-страница /compare - в следующем спринте.
Если хотите другой вариант - прокомментируйте ниже.

Визуальный компаратор видов сделки

💡 Идея 🟢 Простая [time] 1-2 дня #frontend #ux
⚠ Проблема

Сложно сравнить 13 видов сделок по ключевым параметрам. Каждая карточка показывает короткое описание, но не позволяет быстро сравнить минимум участников, срок, скидку, комиссию.

✅ Решение

Таблица 13x8 (виды x параметры): минимум участников, срок сбора, скидка, цена покупателю (с расчётом экономии), доход продавцу (с вычетом комиссии), ссылка на пулы. Сортировка по любому столбцу кликом по заголовку. Комиссия скрыта - пользователь сразу видит итоговые цифры. Расчёт для товара за 10 000 руб. (розница). На мобильных - горизонтальный скролл, на десктопе - полная таблица. Цветовые акценты: зелёный = сильная сторона, жёлтый = средняя, серый = слабая. Клик по строке - фильтр каталога по variant.

Сохраняется локально (localStorage). Используйте "Экспорт" сверху, чтобы отправить AI.
🏷

Динамические бейджи на карточках пулов

💡 Идея 🟢 Простая [time] 1 день #frontend #ux
⚠ Проблема

Карточки пулов не показывают, КОМУ этот пул выгоден. Покупатель не понимает, подходит ли пул под его профиль (семья / HoReCa / срочно / оптом).

✅ Решение

9 типов бейджей с приоритетом: RU Российский производитель (90), [!] Срочно (100), 🔥 Популярный (85), 🏠 Идеально для семьи (80), 💰 Оптом дешевле (75), ☕ HoReCa-выгодно (70), 🌊 Цена падает (60), 📦 Почти собрано (50), 🎁 Кэшбэк +1% (30). Функция calculatePoolBadges(pool) -> топ-3 по приоритету. Интеграция в PoolCardMobile (под ценой) и PoolDetailSheet (полный список).

Сохраняется локально (localStorage). Используйте "Экспорт" сверху, чтобы отправить AI.
🔄

Умная рекомендация "Альтернативы"

💡 Идея 🟡 Средняя [time] 1-2 дня #backend #frontend #analytics
⚠ Проблема

В карточке пула пользователь не видит, что тот же товар доступен в других пулах с другими условиями. Например, Pampers есть в локальной (быстро, -23%), каскадной (дольше, -18%->-25%) и slot-аукционе (-18%, лимит).

✅ Решение

В PoolDetailSheet под кнопкой "Присоединиться" - блок "Альтернативы". Логика: 1) Тот же productId, другой пул (3 шт.) 2) Тот же бренд и категория, другой товар (2 шт.) 3) Тот же variant, другой товар (1 шт.). Топ-3 альтернативы с inline-подсказкой "Если подождёте 7 дней, сэкономите дополнительно 5%". Server-side endpoint /api/pools/[id]/alternatives с кэшем 5 минут. Аналитика кликов в audit_log.

Сохраняется локально (localStorage). Используйте "Экспорт" сверху, чтобы отправить AI.
🧮

Калькулятор опта "возьми больше - сэкономь"

💡 Идея 🟢 Простая [time] 1 день #frontend #conversion
⚠ Проблема

В карточке пула показывается 3 уровня цен, но пользователь не видит живой выгоды при изменении количества. Нет CTA "возьми 24 - сэкономь 6720руб.".

✅ Решение

Компонент WholesaleCalculator: слайдер/кнопки +/- для количества, динамический расчёт цены по priceTiers, подсказка "следующая скидка при N ед.", CTA-кнопка с предложением взять больше. Интеграция в JoinPoolSheet: при выборе количества автоматически применяется tier, подсказка "Добавьте ещё 5 ед. для -10%". Увеличивает средний чек.

Сохраняется локально (localStorage). Используйте "Экспорт" сверху, чтобы отправить AI.
🎯

Профильные сценарии для продавца

💡 Идея 🟡 Средняя [time] 1-2 дня #frontend #supplier-ux
⚠ Проблема

Поставщик при создании пула не понимает, какой variant выбрать для своей ситуации. Форма создания пула требует заполнить много полей без контекста.

✅ Решение

5 готовых сценариев в SupplierTab -> "Создать пул" -> "Выбрать сценарий": 📦 Распродажа остатков (flash_auction), NEW Новый товар (cascade), 🤝 B2B-контракт (cross_b2b), 💎 Лимитка (slot_auction), 🧪 Тестовый запуск (local). Каждый сценарий - предзаполненная форма с правильным variant, minParticipants, collectsUntil + tips[]. Интеграция с wizard.

Сохраняется локально (localStorage). Используйте "Экспорт" сверху, чтобы отправить AI.
💸

Правильная логика скидок по видам сделок

💡 Идея 🟢 Простая [time] 1 день #backend #seed #ux
⚠ Проблема

Сейчас в seed-данных нелогичная логика: Локальная Pampers 23% скидки, Федеральная Tide - 22%. Должно быть наоборот: локальная (малый объём) = 15-20%, федеральная (большой объём) = 25-35%.

✅ Решение

Двухуровневое решение. Уровень 1: поправить seed-данные с правильными скидками (pool-1: 18%, pool-2: 28%, pool-7: 25%, pool-8: 18%, pool-13: 25%, pool-14: 18%). Уровень 2: ввести формулу recommendDiscount(variant, minVolume, retailPrice) в форме создания пула с inline-подсказкой: "Для Локальной рекомендуемая скидка 10-20%. Ваша цена 920руб. ниже рекомендованного диапазона 960-1080руб. - проверьте маржинальность." Таблица диапазонов скидок для всех 13 variant.

Сохраняется локально (localStorage). Используйте "Экспорт" сверху, чтобы отправить AI.
📡

Как донести информацию до покупателей и поставщиков

💡 Идея 🟡 Средняя [time] 5-7 дней #content #marketing #frontend
⚠ Проблема

Даже если реализовать все фичи, пользователи не поймут, как ими пользоваться. Сейчас на платформе только короткие описания в модалках. Нужен 3-слойный подход: онбординг + контекстные подсказки + образовательный контент.

✅ Решение

Слой A (онбординг): тур для покупателя (4 шага -> персональные рекомендации) и для поставщика (4 шага -> wizard с вариантами). Слой B (contextual help): кнопка "Какой вид сделки мне подходит?" на главной, подсказки в карточке пула при простое >30 сек, блок "Альтернативы" внизу. Слой C (долгоиграющий контент): раздел "Как это работает" на gb.rodnoy.site (8 статей по одному на вид сделки), Telegram-канал @rodnoy_help (серия "Сделка недели"), email-дайджест с персональными рекомендациями, виральная механика "Я сэкономил 1120руб. - присоединяйся".

Сохраняется локально (localStorage). Используйте "Экспорт" сверху, чтобы отправить AI.
🤝

Как свести интересы покупателей и продавцов

💡 Идея 🟡 Средняя [time] 3-5 дней #backend #frontend #business-logic
⚠ Проблема

Покупатель хочет: дешевле + быстрее + меньше обязательств. Поставщик хочет: дороже + предсказуемо + больше объём. Нужно системно свести эти интересы через механики платформы.

✅ Решение

5 механик сведения: 1) 3-tier pricing (уже есть) - покупатель видит "возьми 5 - -10%", поставщик получает объём. 2) Escrow-защита (уже есть) - покупатель не боится предоплаты, поставщик уверен в оплате. 3) Каскадная лесенка (уже есть) - автоматическое снижение цены. 4) Антифрод + рейтинги (уже есть). Что добавить: 📊 Калькулятор опта, 🎁 Бонус за объём (кэшбэк 2% при 5+ ед., 3% при 10+ ед. - сейчас 1% фикс), 📦 Связанные пулы (купи Pampers + ФрутоНяня = -5% на оба), [!] Гибкий дедлайн (поставщик может продлить сбор на 3 дня).

Сохраняется локально (localStorage). Используйте "Экспорт" сверху, чтобы отправить AI.
🚀

Новые функции — июль 2026

Реализовано за последние сессии: страницы брендов, тендер-система, контекстные подсказки, дашборд поставщика

📄 Страницы брендов /brand/[slug]
  • 27 брендов с отдельными страницами (как ВК/Facebook)
  • Обложка + логотип + описание + ссылка на официальный сайт
  • Страна, категория, год основания, флаг 🇷🇺
  • Все товары бренда с фото, ценами, описаниями
  • Активные коллективные закупки
  • JSON-LD Brand schema для SEO
  • Клик по бренду на главной → страница бренда
/brand/tasty-coffee, /brand/natura-siberica, /brand/price-tolls и др.
📋 Тендер-система (C2B) — MVP
  • Модели: TenderBid, TenderRFQ, TenderVote в БД
  • API: /api/tenders/[id]/bid (слепые ставки)
  • API: /api/tenders/for-me (релевантные тендеры)
  • API: /api/pools/create-tender (создание покупателем)
  • UI «Создать тендер» на главной
  • Вкладка «Тендеры» в кабинете поставщика
  • Cron: tender_rfq.ts (каждый час, рассылка RFQ)
  • Cron: tender_winner.ts (каждый час, выбор победителя)
🏭 Дашборд поставщика
  • Главная страница для поставщика — не копия покупательской
  • Hero-блок с быстрыми действиями
  • 4 карточки статистики (товары, пулы, заказы, выплаты)
  • Быстрые действия: создать пул, добавить товар
  • Тендеры для вас (C2B)
  • Активные пулы с прогресс-барами
  • Заказы, ожидающие отправки
  • Авто-переключение на «Кабинет» после входа
💡 Контекстные подсказки
  • В карточке пула после 30 сек — синяя подсказка
  • Время получения товара (1-21 день по типу сделки)
  • Точная экономия: сумма + процент
  • Эскроу-защита, прогресс участников
  • 🇷🇺 Российский производитель
  • Закрываемая кнопкой ✕
🧭 Wizard + Comparator
  • Wizard: 4 вопроса → 3 рекомендации вида сделки
  • Comparator: таблица 13×7 видов сделок с цветовыми акцентами
  • SEO-страница /compare для Yandex
  • Кнопки на главной: «Какой вид мне подходит?» + «Сравнить»
📦 Расширенный каталог
  • 144 товара с описаниями, составом, характеристиками
  • 9 поставщиков с quick-login кнопками
  • 6 категорий, 27 подкатегорий
  • 40 пулов (все виды торгов + аукционы)
  • 50 товаров Прайс ТехноПро с реальными фото
  • Tasty Coffee: 4 реальных изображения с сайта
  • Synergetic: 8 реальных изображений с сайта
  • 3-tier оптовое ценообразование (мелкий/средний/крупный)
  • Бейджи пулов: 9 типов с приоритетами
  • Калькулятор опта в форме присоединения
  • Блок «Альтернативы» в карточке пула
  • Инлайн-раскрытие подкатегорий (+N ещё)
⚙️ Серверная инфраструктура
Cron: tender_rfq.ts (каждый час :00), tender_winner.ts (каждый час :30)
API: /api/plan-comments, /api/plan-questions, /api/pools/[id]/alternatives, /api/tenders/*
БД: PostgreSQL 16, 3 новые таблицы (TenderBid, TenderRFQ, TenderVote)
SEO: /brand/[slug], /compare, JSON-LD Brand schema, sitemap.xml

Дизайн-система Apple HIG

Источник: developer.apple.com/design/human-interface-guidelines - обновлено 23 июля 2026

Платформа "Родной" полностью переделана по образцу Apple Human Interface Guidelines - официальной дизайн-системы Apple. Три ключевых принципа: Clarity (ясность - элементы читаемы и понятны), Deference (подчинение контенту - UI не отвлекает от содержания), Depth (глубина - реалистичные слои, тени и переходы). Mobile-first дизайн с фокусом на нативный iOS-опыт.

Clarity
Жирные чёткие иконки, контрастный текст, понятные элементы
Deference
UI подчиняется контенту, белый фон, минимум визуального шума
Depth
Frosted glass material, мягкие тени, естественные переходы
Системные цвета (System Colors)
System Blue
#007AFF
primary CTA - links
System Green
#34C759
success - скидки
System Orange
#FF9500
warning - звёзды
System Red
#FF3B30
destructive - ошибки
System Gray 6
#F2F2F7
grouped background
White
#FFFFFF
card - surface
System Gray
#8E8E93
muted-foreground
Label
#000000
основной текст
Типографика (iOS Type Scale)
Коллективные закупки
Large Title - 34pt - 700 - -0.02em
Каталог
Title 1 - 28pt - 700
Подгузники Pampers
Headline - 17pt - 600
8/10 участников - 3д 4ч осталось
Body - 17pt - 400
RECENTLY VIEWED
Section Header - 13pt - uppercase

Шрифт: SF Pro на Apple устройствах, fallback на Inter (cyrillic subset). Все цифры - tabular-nums для выравнивания.

Материалы и компоненты
Frosted Glass (Material)
NavigationBar и TabBar используют backdrop-filter blur(20px) с saturate(180%) - эффект матового стекла как в iOS. Полупрозрачный фон с размытием контента под ним.
Card (Grouped List)
Белые карточки на сером фоне #F2F2F7, 12px radius, мягкая тень (1-3px). Hover lift + translateY для feedback. Grouped list pattern как в iOS Settings.
Large Title Navigation
Крупный заголовок 34pt на главной странице (HomeTab), при скролле плавно схлопывается в NavigationBar. Как в iOS Settings/Mail.
Bottom Sheet
Sheet с top radius 24px (больше чем 16px у других), тень сверху. Все drawer-компоненты используют rounded-t-3xl.
Tab Bar (iOS style)
Frosted material фон, иконки + подписи, активный таб - System Blue, минималистично без indicator-полосок (как в iOS).
Filled Button
System Blue фон, белый текст, 14px radius, font-weight 600. Active-эффект: scale(0.97) + opacity 0.85. Минимум 44pt высота.
Section Header
Маленький uppercase текст 13pt над каждой секцией, color: systemGray. Используется для категорий, недавно просмотренных, аукционов.
Listing Card 1:1
Квадратное изображение, бейджи в углах, watch-heart внизу справа на полупрозрачном круге. Цена с зачёркнутой retail и скидкой.
Design Tokens
--radius: 0.75rem
12px - card radius
--touch-target: 44px
Apple HIG minimum
--material-regular
rgba(255,255,255,0.78)
--shadow-card
soft 1-3px multi-layer
Что перенесено из Apple HIG в "Родной"
System Blue #007AFF как primary brand color
System Green #34C759 для скидок и успеха
System Gray 6 #F2F2F7 как grouped background
Frosted glass material (blur 20px)
Large Title 34pt на главной
SF Pro / Inter с letter-spacing -0.02em
12px card radius с мягкой тенью
44pt touch target минимум
Tabular-nums для всех цен
Active button scale(0.97) + opacity
Hover lift translateY(-2px) на карточках
Section headers uppercase 13pt
Grouped list pattern (iOS Settings style)
Bottom sheet с top radius 24px
Star rating #FF9500 (System Orange)
Safe-area для iPhone notch
0
Discovery Нед 1-2 2 чел. + ИИ

Подготовка инфраструктуры и валидация

Юр. оформление, Figma-прототип, первые партнёры, регистрация ТЗ.

Расходы (без ЗП)
150K руб.
2 чел. + ИИ - без ЗП - прибыль = комиссия
Задачи
  • ООО "ПАРУС" (Тверь, УСН 6%) - зарегистрировано
  • -Открытие счёта в банке-партнёре для escrow
  • -Подача заявки в реестр операторов ПДн (152-ФЗ)
  • -Регистрация ТЗ "Родной" в Роспатенте
  • -Figma-прототип 15 экранов (G1)
  • -20 customer development интервью
  • -3 LOI от потенциальных поставщиков
  • -Переговоры с СДЭК, ЮKassa, Модульбанк (G12)
  • -GitHub repo + CI/CD + дизайн-система
  • -Архитектурный документ + ER-схема БД
Deliverables
  • Зарегистрированное ООО + счёт
  • Git-репозиторий с CI/CD
  • PRD v1.0 + архитектурный документ
  • Figma-прототип 15 экранов
  • Дизайн-система (G6, G17)
  • 3 подписанных LOI
  • Контракты с СДЭК, ЮKassa
  • Заявка на ТЗ в Роспатенте
  • DPIA документ (G11)
1
MVP Нед 3-8 2 чел. + ИИ

Запуск B2C + C2C - минимальный продукт

Базовый движок, escrow, СБП, 5 категорий, Telegram-бот, soft launch.

Расходы (без ЗП)
200K руб.
2 чел. + ИИ - без ЗП - прибыль = комиссия
Спринты (2-нед)
  • Нед 3-4: Auth, профили, карточка пула, реестр
  • Нед 5-6: Лесенка цен, escrow, СБП, чеки 54-ФЗ (G2 idempotency)
  • Нед 7: Telegram-бот, уведомления, дашборд поставщика
  • Нед 8: Баг-фикс, нагрузочное тестирование, soft launch
Критичные тех. задачи:
G2 Idempotency - G3 Search (FTS) - G4 Upload (S3) - G5 Indexing - G7 Caching - G8 Retry
Deliverables
  • Production rodnoy.site
  • Telegram-бот @rodnoy_bot
  • 5 категорий: детск., корма, химия, косметика, кофе
  • Юр.документы: оферта, ПДн, согласие
  • Admin-панель модерации
  • Онлайн-касса 54-ФЗ (ОФД)
  • Escrow через банк-партнёр
KPI выхода
  • -50 сделок завершено
  • -500 регистраций покупателей
  • -5 активных поставщиков
  • -GMV 1.5M руб.
  • -NPS >= 30
  • -D7 retention >= 25%
  • -Конверсия visit->register >= 12%
2
Pilot Нед 9-12 7 человек

Пилот в Москве и СПб

СДЭК интеграция, C2C-модуль, аукционы (MVP), performance-маркетинг.

Бюджет
2.5M руб.
Спринты
  • Нед 9-10: СДЭК API, C2C-модуль, рейтинг, арбитраж
  • Нед 11: Голландский + обратный аукцион, реферальная программа
  • Нед 12: Performance-маркетинг, аналитика, hard launch
Deliverables
  • СДЭК + Boxberry интеграция
  • C2C-модуль с организаторами
  • Голландский + обратный аукцион
  • Реферальная программа
  • Система рейтингов и арбитража
  • Метрики-дашборд (PostHog)
  • 3 ключевых поставщика B2B
KPI выхода
  • -3000 регистраций
  • -200 сделок/мес
  • -20 поставщиков
  • -GMV 8M руб.
  • -CAC < 800руб.
  • -Payback < 6 мес
3
Scale Мес 4-12 10 человек

B2B + C2B + федеральное масштабирование

B2B-кооперация, C2B-тендеры, 10 городов, мобильное приложение, Series A.

Бюджет (4-12 мес)
9.0M руб.
Ключевые работы (по месяцам)
  • М4: B2B-модуль (корп.профили, ЭДО, отсрочки)
  • М5: C2B-модуль (RFQ, тендеры поставщиков)
  • М6: B2B-закупочный аукцион (слепой)
  • М7: React Native приложение, PWA (G13)
  • М8: Запуск в 10 городах
  • М9-10: Флэш-аукцион, Slot-аукцион (Scale)
  • М11-12: ML-рекомендации, 1С интеграция
Deliverables
  • Полная 4-модельная платформа
  • Мобильное приложение iOS+Android
  • 10 городов присутствия
  • 5 типов аукционов
  • Интеграция с 1С для B2B
  • Series A readiness pack
KPI выхода (конец года)
  • -15K активных покупателей/мес
  • -200 поставщиков (30 B2B)
  • -10 городов
  • -GMV 172M руб. за год
  • -Выручка 7.8M руб.
  • -NPS >= 40
Post-Year 1 Мес 13-33

Break-even и возврат инвестиций

Месяц 18 - операционный break-even. Месяц 33 - полный возврат 205Mруб. инвестиций.

Месяц 18
Break-even
GMV 80M/мес, выручка покрывает расходы
Месяц 27
Накопленный плюс
Чистый результат за весь период > 0
Месяц 33 *
Возврат инвестиций
205Mруб. полностью возвращены
Месяц 42-60
M&A / IPO
x10 (M&A) или x25-40 (IPO)

Детальный план разработки - Backend и Frontend

Покаскадная разбивка задач по бэкенду и фронтенду с привязкой к спринтам. Каждый блок - конкретные задачи, файлы, API и компоненты.

Backend - Node.js / Next.js API / Prisma / PostgreSQL

Спринт 1-2Нед 3-6
✅ ✅ БД и миграции
- prisma/schema.prisma - все 12 таблиц
- Миграции: users -> companies -> products -> pools -> pool_participants -> payments -> escrow_transactions -> payouts -> shipments -> disputes -> notifications -> audit_log
- Индексы (G5): pools(status, collects_until), pools(cities GIN), pool_participants(user_id, pool_id)
- Seed данные: 5 категорий, 25 поставщиков, тестовые пулы
✅ ✅ Auth и ролевая модель
- /api/auth/register - email + phone + password
- /api/auth/login - JWT + refresh
- /api/auth/verify-phone - SMS-код
- NextAuth.js v4 config (src/lib/auth.ts)
- Role guard middleware: guest -> buyer -> buyer_b2b -> supplier -> organizer -> moderator -> admin
- OAuth: Telegram Login Widget + ВКонтакте
✅ ✅ Каталог и поиск (G3)
- /api/products - CRUD + пагинация
- /api/pools - список с фильтрами (city, category, status, variant)
- /api/pools/:id - карточка пула с participant'ами
- PostgreSQL FTS: tsvector на products.name + description, GIN index
- Фильтры: цена, скидка, срок, тип доставки
✅ ✅ Загрузка файлов (G4)
- /api/upload/presigned - генерация S3 presigned URL
- MinIO (S3-совместимое) для MVP
- Валидация: max 5MB, JPEG/PNG/WebP, MIME-check
- Thumbnail generation: sharp (150px, 500px, 1200px)
- Хранение: /products/{id}/{filename}
Спринт 3Нед 5-6
✅ ✅ Лесенка цен и ценообразование
- src/lib/utils/price-tier.ts - расчёт текущей цены по pool_participants
- pools.price_tiers JSONB: [{min_qty, price}]
- Авто-обновление pools.current_price при join/leave
- Каскадный пул: cascade.ts - пересчёт цены для ВСЕХ при новой фазе
- Уведомление участников при смене цены
✅ ✅ Escrow и платежи (G2)
- /api/payments/sbp - СБП QR через ЮKassa
- /api/payments/card - карта через ЮKassa/Тинькофф
- /api/payments/webhook - webhook от платёжного шлюза
- Idempotency-Key header (G2): UNIQUE constraint на (participant_id, key)
- src/lib/escrow.ts - заморозка/выпуск/возврат
- Escrow status: frozen -> released -> refunded
☐ ☐ 54-ФЗ онлайн-касса
- src/lib/compliance/receipt-54fz.ts
- Интеграция: Контур.ОФД или Платформа ОФД (aaS)
- Авто-чек при payment.completed
- Агентские теги: признак агента + ИНН принципала
- Корректирующий чек при возврате
- Receipt URL -> сохранение в payments.receipt_url
✅ ✅ State Machine пула
- src/lib/utils/state-machine.ts
- draft -> collecting (publish)
- collecting -> threshold_met (reach_threshold)
- threshold_met -> confirmed (auto 1h timer)
- confirmed -> in_progress (ship)
- in_progress -> delivered (СДЭК webhook)
- delivered -> closed (confirm_receipt / auto 14d)
- collecting -> cancelled -> refunded
- Audit log на каждый переход
Спринт 4Нед 7-8
☐ ☐ Caching (G7)
- Redis: cache-aside pattern
- pool:{id} - TTL 60с, invalidate при join/leave
- catalog:page:{n} - TTL 5мин
- user:{id} - TTL 30мин, invalidate при profile update
- src/lib/cache.ts - обёртка над ioredis
☐ ☐ Retry и error handling (G8)
- Exponential backoff: 3 попытки (1с/4с/16с)
- Dead letter queue для платежей (BullMQ)
- Circuit breaker для СБП/СДЭК/ОФД API
- src/lib/utils/retry.ts - универсальный retry wrapper
- Sentry для error tracking
✅ ✅ Уведомления
- src/lib/notifications/telegram-bot.ts - @rodnoy_bot
- src/lib/notifications/email.ts - Yandex 360 SMTP
- src/lib/notifications/push.ts - Web Push API (PWA)
- src/lib/notifications/sms.ts - для критичных событий
- BullMQ воркер: mini-services/notifications-worker/
- Типы: pool_joined, threshold_met, shipped, delivered, dispute_opened
✅ ✅ Антифрод (Trust & Safety)
- src/lib/moderation/antifraud.ts
- Cron-задача (ежечасно): проверка 12 правил
- Rule #1: накрутка пулов (device fingerprint, IP)
- Rule #2: escrow-отмывание (цикличные платежи)
- Rule #6: мультиаккаунтинг (device + IP + phone)
- При срабатывании: freeze + alert модератору
- audit_log запись
PilotНед 9-12
☐ ☐ СДЭК + Boxberry интеграция
- src/lib/carriers/cdek.ts - API v2: расчёт тарифа, создание отправки, трекинг
- src/lib/carriers/boxberry.ts - JSON-RPC: то же
- /api/webhooks/cdek - webhook от СДЭК (статус обновления)
- Авто-создание отправок при pool.confirmed
- Консолидация: 1 груз -> N индивидуальных отправок
- Обновление shipments.status по webhook
✅ ✅ Аукционы (голландский + обратный)
- pools.variant: 'dutch_auction', 'reverse_auction'
- pools.auction_config JSONB: {start_price, min_price, step, interval_minutes}
- Cron: каждые 30 мин - снижение цены для dutch
- auction_bids таблица: ставки поставщиков для reverse
- /api/pools/:id/bid - ставка поставщика (reverse auction)
- WebSocket (socket.io) - live-обновление цены
✅ ✅ Арбитраж и рейтинги
- /api/disputes - открытие спора (buyer)
- /api/disputes/:id/resolve - решение (moderator)
- SLA-таймер: 24ч/72ч/5д/14д по типу
- Авто-эскалация при просрочке SLA
- users.rating: пересчёт после закрытия сделки/спора
- sanctions: strikes -> ограничение -> ban
✅ ✅ Реферальная программа
- /api/referrals/generate - генерация уникальной ссылки
- /api/referrals/apply - применение кода при регистрации
- Cookie: 30 дней, проверка device fingerprint
- Бонус: 200руб. рефереру + 200руб. другу (после первой сделки)
- Антифрод: лимит 50/мес, 3 с IP, проверка уникальности
- Многоуровневая: Level 1 (200руб.), Level 2 (50руб.)
ScaleМес 4-12
☐ ☐ B2B-модуль
- companies table: ИНН, ОГРН, КПП, банк.реквизиты
- /api/companies/verify - верификация через Контур.Фокус
- ЭДО: интеграция с Контур.Диадок (УПД, счёт-фактура)
- /api/payouts/:id/upd - генерация УПД
- B2B Premium подписка: /api/subscriptions/upgrade
- Отсрочка платежа для B2B (credit_limit поле)
☐ ☐ C2B-тендер + B2B-аукцион
- pools.variant: 'tender', 'b2b_procurement'
- /api/pools/:id/vote - голосование покупателей за товар
- /api/pools/:id/rfq - рассылка RFQ поставщикам
- Слепые ставки: auction_bids скрыты до дедлайна
- Авто-расчёт "всё включено" (цена + доставка + условия)
- /api/pools/:id/award - выбор победителя
☐ ☐ Scale-up инфраструктура
- Миграция: 1 VPS -> 2 VPS (app + DB)
- Yandex Managed PostgreSQL (managed backup, PITR)
- k8s cluster (3 nodes) при 5K+ сделок/мес
- Redis Cluster для сессий и кэша
- CDN (Yandex Cloud CDN) для статики
- ClickHouse для аналитики (post-MVP)
☐ ☐ Честный ЗНАК + Мой Налог
- src/lib/compliance/honest-sign.ts - проверка маркировки
- Для категорий: обувь, парфюм, фото (обязательная маркировка)
- /api/products/:id/verify-mark - сверка кода маркировки
- Интеграция с "Мой Налог" API для самозанятых организаторов
- Авто-формирование чека самозанятого при выдаче товара

Frontend - Next.js 16 / TypeScript / Tailwind 4 / shadcn/ui

Спринт 1-2Нед 3-6
✅ ✅ Дизайн-система (G6, G17)
- Tailwind 4 config: brand-50->900, gold, ink, emerald, purple
- Типошкала: 12px -> 48px (Inter + Manrope + JetBrains Mono)
- shadcn/ui: Button, Card, Input, Select, Dialog, Badge, Toast
- Состояния: default, hover, focus, disabled, error
- Breakpoints (G17): sm 640, md 768, lg 1024, xl 1280
- Mobile-first: min 44px tap targets
- Storybook: компонентная документация
✅ ✅ Auth страницы
- (auth)/login/page.tsx - email+пароль / Telegram OAuth
- (auth)/register/page.tsx - регистрация с выбором роли
- (auth)/verify-phone/page.tsx - SMS-код подтверждение
- Form validation: Zod + react-hook-form
- JWT хранение: httpOnly cookie (server-side)
- Redirect: после login -> по роли (buyer/supplier/admin)
✅ ✅ Каталог пулов
- (public)/catalog/page.tsx - список с фильтрами
- Фильтры: категория, город, цена, тип пула, срок
- Сортировка: скидка (%), срок (ASC), цена (DESC)
- PoolCard.tsx - карточка: фото, название, прогресс-бар, цена
- Пагинация: infinite scroll (TanStack Query useInfiniteQuery)
- Поиск: FTS через /api/pools?q=
- Skeleton loading при загрузке
✅ ✅ Карточка пула
- (public)/pool/[id]/page.tsx - детальная страница
- PoolProgress.tsx - визуальный прогресс (N/min) + %
- PriceTier.tsx - лесенка цен с подсветкой текущей
- ParticipantsList.tsx - список участников (аватары, кол-во)
- SupplierCard.tsx - рейтинг, отзывы, верификация
- Кнопка "Участвовать" -> модал выбора кол-ва + доставка
- Обратный отсчёт до collects_until
Спринт 3Нед 5-6
✅ ✅ Оплата
- components/payment/SbpQR.tsx - QR-код СБП (canvas)
- components/payment/CardForm.tsx - ЮKassa iframe
- components/payment/PaymentStatus.tsx - статус (pending/success/failed)
- Polling: GET /api/payments/:id каждые 3с
- Success -> redirect на "Мои пулы"
- Failed -> retry button
✅ ✅ Дашборд покупателя
- (buyer)/dashboard/page.tsx - обзор: активные пулы, доставки
- (buyer)/pools/page.tsx - "Мои пулы" с фильтром по статусу
- (buyer)/shipments/page.tsx - доставки с трекингом
- TrackingMap.tsx - статус отправления (СДЭК API)
- Кнопка "Получил" -> POST /api/shipments/:id/confirm
- Кнопка "Открыть спор" -> модал с формой
✅ ✅ Дашборд поставщика
- (supplier)/dashboard/page.tsx - статистика, GMV, payout
- (supplier)/products/page.tsx - CRUD товаров + массовая загрузка CSV
- (supplier)/pools/page.tsx - управление пулами (создать/редактировать/закрыть)
- (supplier)/payouts/page.tsx - история выплат, выгрузка PDF
- PoolCreationForm.tsx - шаги: товар -> тип -> лесенка -> доставка -> запуск
✅ ✅ Загрузка фото товаров
- components/product/ImageUploader.tsx
- Presigned S3 URL -> прямая загрузка в MinIO
- Drag & drop + preview
- Прогресс-бар загрузки
- Авто-thumbnail: 150/500/1200px
- Валидация на клиенте: 5MB, JPEG/PNG/WebP
Спринт 4Нед 7-8
✅ ✅ Telegram-бот
- mini-services/telegram-bot/index.ts - @rodnoy_bot
- Команды: /start, /pools, /track, /support
- Inline-кнопки: "Участвовать" -> deep link на сайт
- Push: pool_joined, threshold_met, shipped, delivered
- Чат с поддержкой: переадресация на оператора
- Привязка аккаунта: telegram_id -> users.telegram_id
✅ ✅ Admin-панель
- (admin)/users/page.tsx - список, поиск, блокировка
- (admin)/disputes/page.tsx - очередь споров с SLA-таймером
- (admin)/finance/page.tsx - GMV, revenue, payouts дашборд
- (admin)/audit-log/page.tsx - журнал действий
- ModerationQueue.tsx - проверка поставщиков L1-L5
- Антифрод-дашборд: флаги, замороженные операции
✅ ✅ PWA (G13 - MVP часть)
- manifest.json: иконки, название, тема
- Service Worker: cache-first для статики
- Offline: каталог пулов из кэша (stale-while-revalidate)
- Install prompt: "Добавить на главный экран"
- Web Push API: подписка на push-уведомления
✅ ✅ Realtime (Socket.io)
- mini-services/realtime/ - Socket.io server на порту 3001
- Live-обновление прогресса пула (без перезагрузки)
- Live-обновление цены в аукционе
- Чат между покупателем и поставщиком (по сделке)
- Caddy gateway: io("/?XTransformPort=3001")
- Redis adapter для масштабирования
PilotНед 9-12
✅ ✅ C2C-кабинет организатора
- (organizer)/dashboard/page.tsx - мои пулы, комиссия, рейтинг
- (organizer)/create/page.tsx - создание пула от своего имени
- PickupPointMap.tsx - выбор/указание ПВЗ на карте
- Приёмка партии: QR-сканер -> подтверждение по накладной
- Выдача: список участников -> отметка "выдан" по QR
✅ ✅ Аукционы UI
- DutchAuctionTimer.tsx - обратный отсчёт + цена падает
- ReverseAuctionBids.tsx - live-лента ставок поставщиков
- FlashCountdown.tsx - таймер 5-10 мин + остаток
- SlotBidForm.tsx - форма ставки на последние места
- WebSocket: live-обновление без перезагрузки
✅ ✅ Реферальная программа UI
- ReferalLink.tsx - генерация + копирование + QR
- ShareButtons.tsx - Telegram, WhatsApp, ВКонтакте
- ReferalStats.tsx - сколько приглашено, сколько заработано
- Приглашённый: модал "Введите реферальный код"
- BonusBanner.tsx - "+200руб. за первую сделку"
✅ ✅ Споры и арбитраж UI
- (buyer)/disputes/page.tsx - мои споры + статус SLA
- DisputeForm.tsx - форма: причина, описание, фото/видео
- EvidenceUploader.tsx - загрузка доказательств (S3)
- ChatBox.tsx - переписка с поставщиком + модератор
- ResolutionCard.tsx - решение модератора + апелляция
ScaleМес 4-12
☐ ☐ B2B-интерфейс
- (buyer)/b2b/dashboard.tsx - корпоративный профиль
- B2BPoolList.tsx - смешанные пулы (юр+физ)
- ЭДО-интеграция: статус УПД, счёт-фактуры
- 1C-интеграция: выгрузка документов в 1С
- Отсрочка: кредитный лимит, график платежей
- B2B Premium: подписка 990руб./мес, приоритет
☐ ☐ C2B-тендер UI
- C2BRequestForm.tsx - "Хочу товар за Xруб."
- VotingPanel.tsx - голосование покупателей за товар
- RFQStatus.tsx - статус рассылки поставщикам
- BidComparison.tsx - сравнение ставок (цена+условия)
- TenderWinner.tsx - объявление победителя
☐ ☐ Мобильное приложение
- React Native (Expo) - iOS + Android
- Экраны: каталог, карточка пула, оплата, трекинг, профиль
- Push-уведомления: APNs + FCM
- Deep links: rodnoy://pool/{id}
- Biometric auth: Face ID / Touch ID
- Offline: кэш каталога (SQLite local)
☐ ☐ ML-рекомендации
- "Вам может быть интересно" - на основе истории
- "Тот же товар снова в пуле" - D30 retention trigger
- "Похожие пулы" - коллаборативная фильтрация
- Personalized push: оптимальное время отправки
- A/B-тестирование: варианты карточек пулов

CI/CD Pipeline

☐ ☐ CI (на каждый PR)
1. ESLint + Prettier
2. TypeScript type-check
3. Unit-тесты (Jest) >= 80%
4. Build (Next.js)
5. Integration (Vitest)
6. Preview deploy (Vercel)
☐ ☐ CD (на merge в main)
1. E2E на staging (Playwright)
2. Deploy на staging сервер
3. Smoke-тесты staging
4. Manual approval (PM)
5. Deploy на production
6. Smoke-тесты production
☐ ☐ Мониторинг продакшена
- Sentry: ошибки + performance
- PostHog: продуктова аналитика
- Uptime Robot: доступность
- Custom: GMV/час, регистрации/час
- Alerts: Telegram -> duty engineer
✅ Что готово (документация на сайте)
✓ Концепция и 4 модели (B2B/B2C/C2B/C2C)
✓ 13 схем сделок (8 базовых + 5 аукционов)
✓ ER-схема БД (12 таблиц) + 28 API endpoint'ов
✓ State machine (9 статусов) + ролевая модель (7 ролей)
✓ Структура кода Next.js 16
✓ Roadmap (4 фазы, 2-нед спринты)
✓ Бизнес-план на 4 года + прогноз по категориям
✓ 50+ поставщиков в 10 категориях
✓ Trust & Safety (12 антифрод-правил, арбитраж)
✓ Customer Journey 4 персон
✓ SLA, орг.структура, RACI
✓ 17 открытых вопросов с планом решения
✓ Партнёры: СДЭК, Boxberry, ЮKassa, Модульбанк
✓ Сервер: 93.183.81.233, nginx, SSL, домен
📋 Что нужно сделать ДО спринта 1
☐ Зарегистрировать ООО (УСН 6%)
☐ Открыть счёт в банке для escrow
☐ Figma-прототип 15 экранов (G1)
☐ Дизайн-система: палитра, типографика, компоненты (G6, G17)
☐ Регистрация ТЗ "Родной" в Роспатенте (G10)
☐ Заявка в реестр операторов ПДн (152-ФЗ)
☐ Контракты с СДЭК (объёмные скидки), ЮKassa (тарифы)
☐ DPIA документ (G11)
☐ 3 LOI от поставщиков
☐ GitHub repo + CI/CD pipeline
☐ Pre-seed раунд 5Mруб. (фаундеры + ангелы)
☐ Найм: Tech Lead, 2 dev, PM, Designer
🚀 Реализация MVP - https://app.rodnoy.site
Mobile-first SPA на Next.js 16 + Prisma + SQLite + Socket.io, деплой на 93.183.81.233 через PM2 + nginx, SSL Let's Encrypt
✅ Спринты 1-8 (MVP готов)
Sprint 1 - Auth: NextAuth.js v4, 7 ролей, JWT, crypto.scrypt, регистрация buyer/supplier
Sprint 2 - Каталог: серверный поиск с debounce, ProductImage с SVG-плейсхолдерами, /api/upload
Sprint 3 - WebSocket: mini-service ws-service (Bun + socket.io), live-счётчик, Live-индикатор
Sprint 4 - ЮKassa escrow: /api/payments/create + /webhook + /mock-success, Payment+Escrow+Participant
Sprint 5 - Логистика: /api/logistics/pickup-points, PickupPointPicker СДЭК/Boxberry, Shipment
Sprint 6 - Уведомления: in-app + email/Telegram заглушки, Bell badge polling 30с, 20 типов
Sprint 7 - Споры: DisputeSheet, 6 причин, SLA 3д/7д, resolveDispute, возврат escrow
Sprint 8 - Антифрод: 12 правил, 3-tier санкции (allow/review/block), logFraudScore
✅ Gap-фиксы (цикл замкнут)
Кнопка "Получил": confirmReceipt -> escrow released + Payout (4%+2.5% комиссия)
Авто-подтверждение 14 дней: autoConfirmStaleDeliveries в getMyPools
AdminTab: 5-я вкладка для moderator/admin, список споров, SLA-таймер, разрешение
State Machine: join -> pay -> ship -> confirm -> payout (или auto 14d)
🚧 Что осталось (бонус)
☐ Дашборд поставщика (CRUD товаров, создание пулов)
☐ Аукционы (голландский, обратный, флеш) - UI и logic
☐ Реферальная программа
☐ 54-ФЗ онлайн-касса (АТОЛ/Эвотор)
☐ Telegram Login Widget (сейчас email+пароль)
☐ Tracking map для доставок
☐ PostgreSQL (сейчас SQLite)
☐ Реальная ЮKassa + СДЭК + Telegram bot
☐ Redis caching, retry/circuit breaker
☐ Storybook, Sentry, PostHog
8
спринтов готово
14
API endpoints
2
PM2 процесса (app+ws)
100%
mobile-first
15.3Mруб.
инвестиций на 1-й год
12 мес
до GMV 31Mруб./мес
18 мес
до break-even
33 мес
до полного возврата
Запуск - Q1-Q2 2026

Станьте частью запуска "Родного"

Если вы поставщик, покупатель, инвестор или хотите войти в команду - оставьте заявку. Первые 50 партнёров получат статус Founding Partner с пониженной комиссией и приоритетом в каталоге.

Нажимая кнопку, вы соглашаетесь с политикой обработки ПДн (152-ФЗ).