Перейти к содержимому
PR4WEB
ЛендингNext.jsЛичный бренд2026

Лендинг личного бренда специалиста по рекламе

Next.js 16 + Framer Motion: 6 анимированных кадров, ROI-калькулятор, Telegram-уведомления - без шаблонов и SaaS

Next.js 16Tailwind v4Framer Motion v12React 19Netlify
Платных инструментов
0 ₽/мес
нет Tilda, Webflow, Yagla
Кадров hero
6
3 тёмных + 3 светлых
Уведомление о лиде
Telegram
приходит сразу при отправке формы

Контекст и проблема

Специалист по рекламе, который продаёт технический бэкграунд, не может продавать его через шаблонный сайт на Tilda. Технически грамотный клиент видит конструктор сразу - и это сигнал об уровне. Три конкретных требования: лаконичный и быстрый на мобайле; каждая заявка - мгновенное уведомление в Telegram; стек демонстрирует реальные возможности автора.

Что нужно было сделать

Спроектировать и собрать с нуля лендинг на современном стеке. Реализовать анимированный hero, кастомные UI-компоненты, ROI-калькулятор. Подключить лидогенерацию через Telegram Bot API без сторонних SaaS. Подготовить сайт к старту платного трафика: Метрика, Schema.org, политика 152-ФЗ.

Как решал

01

Позиционирование и архитектура секций

Выбор стека зафиксирован сразу: Next.js 16 App Router, Tailwind v4, Framer Motion v12 - весь код авторский, без конструкторов. Структура из 9 секций: Hero → Преимущества → Кейсы → ROI-калькулятор → Процесс → AI-стек → Инструменты → Контакты. Tone of voice: уверенный, конкретный, от первого лица. H1 "Больше лидов с того же бюджета" ставит задачу клиента в центр, а не список услуг.

Позиционирование и архитектура секций
02

Дизайн-система и тёмная тема без мигания

Все цвета вынесены в CSS-переменные: --page-bg, --page-fg, --card-bg, --modal-bg и ещё 8. При переключении темы меняется один класс на html, весь сайт реагирует без хардкода в компонентах. Проблема FOUC (мигание при SSR): стандартный next-themes на долю секунды показывает неверную тему. Решение - document.documentElement.style.colorScheme устанавливается в JS до первого рендера. Нативные OS-контролы (select, scrollbar) получают правильную тему без дополнительных CSS-правил.

Дизайн-система и тёмная тема без мигания
03

Анимированный hero - 6 кадров, split layout, портретные кропы

Hero разбит на две панели: левая - полноэкранная bg-image, правая - контент. На мобайле правая панель скрыта, левая растягивается на весь экран. 6 кадров меняются через Framer Motion AnimatePresence: 3 тёмных + 3 светлых, crossfade 1.4s каждые 2.8s. Проблема мобайла: landscape-кадры при crop:center теряли главное - лицо уходило за край. Решение: отдельные портретные кропы 824×1527 для мобайла с намеренной композицией. Оптимизация PNG → JPEG q=82: каждый кадр с 1.8 МБ до 120 КБ.

04

Кастомные UI-компоненты

LetterReveal: заголовок появляется снизу при попадании в viewport, каждая буква реагирует на hover. Скрытая проблема: обёртка каждого символа в display:inline-block ломала перенос слов - браузер переносил по буквам посреди слова. Решение: каждое слово обёртывается в whiteSpace:nowrap, внутри - буквы. Odometer: слот-машина для счётчиков в hero, анимирует цифры как колонки прокручивающихся чисел, 4.5s ease-out. ROI-калькулятор: 4 ползунка (бюджет, CPL, средний чек, цикл сделки) → Recharts AreaChart обновляется в реальном времени.

Кастомные UI-компоненты
05

Форма и инфраструктура лидогенерации

Выбор бюджета: нативный select на мобайле открывает OS-диалог в стиле системы - выбивается из визуального контекста формы в самый ответственный момент. Заменён на grid из 5 кнопок с react-hook-form setValue/watch: единый стиль на любом устройстве, валидация работает как у обычного поля. Telegram Bot API: POST /api/contact → fetch к api.telegram.org, форматированное Markdown-сообщение (имя, контакт, бюджет, задача). Яндекс.Метрика: событие form_submit через window.ym() на успешной отправке.

Форма и инфраструктура лидогенерации
06

Деплой и автоматизация

GitHub → Netlify: каждый git push в main запускает сборку и деплой (~1 мин). Конфигурация через netlify.toml + @netlify/plugin-nextjs. Переменные окружения TELEGRAM_BOT_TOKEN и TELEGRAM_CHAT_ID хранятся в Netlify - не попадают в репозиторий. DNS: A-запись @ → 75.2.60.5 в Beget, CNAME www → адрес Netlify. SSL от Let's Encrypt автоматически.

Ключевые решения

Авторский стек vs конструктор

Стандартный подход
Tilda / Webflow - быстро, но шаблонно. Технически грамотный клиент видит конструктор сразу - это сигнал об уровне специалиста
Наше решение
Next.js 16 + авторский код - сайт является демонстрацией того уровня исполнения, который специалист продаёт клиентам

Для специалиста с техническим бэкграундом инструмент создания сайта - часть позиционирования. Нельзя продавать технический бэкграунд через шаблон.

Кастомный выбор бюджета vs нативный select

Стандартный подход
Нативный select: на мобайле открывает OS-диалог в стиле системы - выбивается из визуального контекста формы
Наше решение
Grid из 5 кнопок с react-hook-form setValue/watch: единый стиль на любом устройстве, валидация как у обычного поля

Форма - последний барьер перед заявкой. Нативный picker ломает ощущение целостности интерфейса в самый ответственный момент.

Портретные кропы vs масштабирование landscape

Стандартный подход
Одно landscape-изображение масштабируется на мобайле: crop:center часто теряет главное - лицо или ключевой объект уходят за край
Наше решение
Отдельные портретные кропы 824×1527 с намеренной мобильной композицией, оптимизированные JPEG: с 1.8 МБ до 120 КБ каждый

Первый экран на мобайле - отдельная задача. Хорошая мобильная версия не адаптирует десктоп, а решает задачу заново.

Результат

0 ₽/месПлатных инструментов
6Кадров hero
TelegramУведомление о лиде

Сайт развёрнут на pr4web.ru. Каждый элемент сделан с намерением: от портретных кропов на мобайле до обработки FOUC при переключении темы. Инфраструктура лидогенерации работает - заявка из формы приходит в Telegram с именем, контактом и бюджетом. Сайт используется как якорный материал в переговорах с новыми клиентами.

Скорее всего, я уже решал похожую задачу

Опишите задачу — разберусь за час