Все сервисы

Админка: аналитика и CRM

Воронка от расхода до прибыли, атрибуция по каналам и досье на каждого человека. Вынуто из боевого SaaS как есть.

Обновлено 16 августа 2026 г.saasаналитикаcrmреалити
Войди чтобы скачать

Что это

Админ-панель из работающего сервиса. Та самая, что видно во втором ролике реалити «Строю SaaS». Не демо и не заготовка - файлы внутри архива те же, что крутятся в бою.

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

Рядом - CRM: карточка на каждого человека. Откуда пришёл, что делал, сколько принёс.

Ценность тут не в интерфейсе, а в схеме данных и SQL-отчётах. Интерфейс вы перепишете под себя за вечер, а вот учёт визитов с атрибуцией, которая переживает регистрацию, руками собирается долго и с ошибками.

Что внутри

  • Воронка по каналам: расход → охваты → переходы → регистрации → первое действие → оплаты → выручка → прибыль → ROI
  • Свой учёт визитов с рекламной атрибуцией - не зависит от внешних счётчиков
  • Порог 15 секунд: отсеивает ботов и случайные заходы из поиска
  • UTM-разметка с разбивкой по каналам, кампаниям и креативам
  • CRM: досье на человека - канал, действия, платежи, повторные оплаты
  • Стоимость привлечения по каналам: CPC, CPL, CPG
  • Ручной ввод рекламного расхода на /admin/spend
  • Панель на отдельном поддомене + доступ по белому списку почт
  • Согласие на аналитику и выключатель в личном кабинете - без серых схем
  • Свои учётные записи не попадают в отчёты
  • Готовые Prisma-миграции и 11 файлов тестов

Что понадобится

  • Next.js 16 (App Router), React 19, Prisma 7, PostgreSQL
  • Домен, на котором можно поднять поддомен admin.
  • Яндекс.Метрика - по желанию, для сверки цифр

Стек другой? Переносите схему данных и SQL-отчёты - в них вся ценность, интерфейс проще написать заново.

Установка

Полная инструкция лежит внутри архива: КАК-ПОСТАВИТЬ.md для человека и ДЛЯ-ИИ.md - его копируешь в чат целиком вместе с архивом, если ставишь через Claude Code или Cursor. Кратко:

Шаги

  • Распакуй архив и скопируй src/ в свой проект, сохранив структуру папок.
  • Открой prisma-models.prisma, вставь модели в свою схему и свяжи с моделью User - какие именно связи, написано в шапке файла. Готовые SQL-миграции лежат в prisma/migrations/.

npx prisma migrate dev --name analytics

  • Пропиши переменные окружения:

ADMIN_EMAILS="твоя@почта.ru"      # кому открыта панель, через запятую
ADMIN_HOST="admin.твойдомен.ru"    # пусто - подойдёт любой поддомен admin.
ANALYTICS_IP_SALT=""               # пусто - возьмётся AUTH_SECRET
NEXT_PUBLIC_METRIKA_ID=""          # счётчик Яндекс.Метрики, если нужен

Пустой ADMIN_EMAILS выключает панель целиком.

  • Вставь два куска в свой middleware - выдачу куки посетителя и разведение по хостам. Оба лежат готовыми в proxy-fragment.ts.
  • Подключи в корневом макете.
  • В обработчике регистрации вызови attachVisitorToUser. Без этого шага канал не свяжется с человеком и воронка останется пустой - самая частая ошибка при переносе.
  • Прогони тесты из tests/. Им нужна живая база.

Три вещи, которые стоит знать заранее

Атрибуцию нельзя восстановить задним числом. Если в момент перехода по объявлению метку не записали, канал этого человека потерян навсегда. Поэтому визиты пишутся раньше регистрации, а при регистрации превращаются в снимок, который больше не меняется. Пустой ADMIN_EMAILS в проде - это не «панель закрыта», а «фильтр своих не работает». Собственные заходы и тестовые платежи попадут в отчёты как настоящие. У меня это однажды нарисовало выручку, которой не было. Часовые пояса.** Даты хранятся в UTC, перевод в местное время идёт в два шага (AT TIME ZONE 'UTC' AT TIME ZONE 'Europe/Moscow'). Одношаговый сдвигает сутки на несколько часов, и графики врут незаметно - числа выглядят правдоподобно.

Чего внутри нет

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

Про ключи

В архиве нет ни ключей, ни паролей, ни строк подключения - только имена переменных окружения. Домены и почты в тестах заменены на example.com.