Перейти к основному содержимому

ТЗ: Страница TG Soft (/tg-soft)

Метаданные

ПараметрЗначение
Дата создания2026-08-03
Дата последнего изменения2026-08-03
Статус апрува⏳ На рассмотрении
Дата апрува

1. Назначение

Раздел TG Soft в сайдбаре был помечен «(Скоро)» и отключён: на проде — disabled, на стендах — disabledStyleOnly с четырьмя заглушками-подпунктами (админ, ассистент, инвайтер, парсер), ведущими в /. Страницы /traffic, на которую он ссылался, в проекте не существовало.

Сам продукт при этом уже работает: TG Soft-бот принимает пользователей, а бэкенд отдаёт ему уровни программ и доступы по NFT (apps/backend/src/telegram-soft-connector). Задача — открыть раздел и дать пользователю точку входа: описание продукта и кнопку перехода в бота.

Реализуется во фронтенде (apps/frontend), без изменений на бэкенде.


2. Функциональные требования

2.1. Пользовательские сценарии

  1. Пользователь видит в сайдбаре активный пункт «TG Soft» и переходит на /tg-soft.
  2. На странице он читает, что такое TG Soft и из чего состоит (админ-бот, AI-ассистент, инвайтер, парсер), и видит картинку своей TG Soft NFT с её уровнем.
  3. По кнопке OPEN TG SOFT он уходит в Telegram-бота (новая вкладка).
  4. Если уровня NFT не хватает для нужных функций, кнопка «Прокачать NFT» ведёт в карьеру (/career) — туда же, куда уводит гейт NftLevelGate.

2.2. Бизнес-логика

  • Уровень NFT. TG Soft — вторая программа (program: 2), её уровень бэкенд синхронизирует в users.lp2 (тот же источник, что отдаётся боту как p2Level). Уровень читается синхронно из объекта пользователя хуком useTgSoftNftLevel, без обращения к контракту — по тем же причинам, что описаны в useMainNftLevel (getUserProgramLevelByAddress отсутствует в фасетах на preprod-стендах).
  • Нулевой уровень. При lp2 = 0 вместо номера уровня показывается «NFT ещё не получена», картинка при этом остаётся местом под NFT.
  • Гейта по уровню на самой странице нет: страница информационная, ограничения по уровню применяет сам бот.
  • Ссылка на бота берётся из NEXT_PUBLIC_TG_SOFT_BOT_URL; дефолт — бот стенда preprod-start-v2 (https://t.me/preprod_start_v2_tg_soft_bot).

2.3. UI/UX требования

  • Hero-карточка: слева картинка NFT текущего уровня (225×360, из облака, getProductNftImage), справа — бейдж, заголовок, два абзаца описания и пара кнопок (основная «OPEN TG SOFT», вторичная «Прокачать NFT»).
  • Ниже — четыре карточки с составом продукта: админ-бот, AI-ассистент, инвайтер, парсер.
  • Адаптив: на мобильном колонки складываются в одну (картинка сверху), кнопки растягиваются на всю ширину, карточки состава идут в один столбец; абзацы остаются выровненными по левому краю.
  • Пока уровень не загружен (isLoading), вместо картинки и чипа уровня — скелетоны, чтобы не мигать нулевым уровнем.
  • Если картинка из облака не загрузилась — на её месте плейсхолдер с иконкой Telegram.

3. Техническая реализация

3.1. Архитектура

СлойФайлРоль
pagesrc/pages/tg-soft/index.tsxтонкая обёртка над виджетом
widgetsrc/widgets/tgSoft/ui/TgSoftPage.tsxвся вёрстка страницы
entitysrc/entities/nft/lib/useTgSoftNftLevel.tsуровень TG Soft NFT (user.lp2)
navsrc/app/components/VerticalNavigation/index.tsпункт «TG Soft» → /tg-soft, без disabled
routingsrc/middleware.ts/tg-soft добавлен в allowedPaths
i18nsrc/shared/translations/*.jsonключи Навигация.TG Soft и tgSoft.* (9 языков)

3.2. Описание технической реализации

  • Пункт навигации из двух веток (isProductionMainnet / остальное) свёрнут в один активный пункт без подпунктов-заглушек.
  • Без записи в allowedPaths middleware на проде редиректит любой неразрешённый путь на /career — раздел был бы виден, но не открывался.
  • Состав продукта в карточках соответствует ролям из NFT_CONFIG_BY_LEVELS[NftType.TG_SOFT].requiredRolesToAccessParams.

4. Проблемы и компромиссы

4.1. Известные ограничения

  1. Одна ссылка на бота для всех стендов

    • Дефолт указывает на бота preprod-start-v2.
    • На проде и других стендах нужно задать NEXT_PUBLIC_TG_SOFT_BOT_URL в окружении, иначе пользователи уйдут в preprod-бота.
  2. Картинка NFT нулевого уровня

    • Если TG_soft_0.webp в облаке отсутствует, показывается плейсхолдер вместо картинки — это ожидаемое поведение, отдельного ассета под «нет NFT» не заводили.

4.2. Технический долг

  • Завести отдельные значения NEXT_PUBLIC_TG_SOFT_BOT_URL в CI для preprod / preprod-start / preprod-start-v2 / прода.
  • Ключи Навигация.тг.* (админ / Ассистент / Инвайтер / Парсер) больше не используются — вычистить из переводов вместе со следующей уборкой i18n.

5. Ссылки

  • apps/backend/src/telegram-soft-connector — API бота (уровни программ, доступы по NFT).
  • docs/superpowers/specs/2026-08-02-nft-level-gate-design.md — почему уровень читается из lp1/lp2/lp3, а не ончейн.