SubscribersHow many subscribers the channel has now. The wave shows subscribers at each point of the period. The change is against the start of the period.50.0 %+0 for the period
ViewsHow many views the posts published in the period have now. These are not views per day: MAX does not report how many views there were yesterday. The percentage is the change in the daily average: the current period is still running (today is not over yet), so it is compared with the previous one by pace rather than by total. “Was” is the whole previous period of the same length.49▼ 15.9 %was 62
ReactionsHow many reactions the posts published in the period have. The percentage is the change in the daily average: the current period is still running (today is not over yet), so it is compared with the previous one by pace rather than by total. “Was” is the whole previous period of the same length.0was 0
MentionsHow many times other channels mentioned the channel: links and reposts, excluding advertising posts. The bigger the circle, the more mentions at that point of the period. The percentage is the change in the daily average: the current period is still running (today is not over yet), so it is compared with the previous one by pace rather than by total. “Was” is the whole previous period of the same length.61▼ 18.6 %was 76with a subscription
RepostsHow many times other channels reposted this channel's posts (excluding advertising posts). Reposts are also counted as mentions. The percentage is the change in the daily average: the current period is still running (today is not over yet), so it is compared with the previous one by pace rather than by total. “Was” is the whole previous period of the same length.28▲ 13.6 %was 25after signing in
Average post reachHow many views one post gets on average. Only posts older than two days are counted: views of fresh posts are still growing. Points with fresh posts are dashed with hollow dots: the reach of all posts right now, it will still grow.5 535▲ 2.9 %was 5 381after signing in
ERRWhat share of subscribers sees an average post: average reach ÷ subscribers × 100 %. The line shows ERR at each point of the period, the dashed line — ERR of the previous period of the same length. Points with posts younger than two days are hollow dots on the dashed end of the line.29.0 %▲ 0.1 ppdashed line — was 28.9 %after signing in
Engagement ERHow often readers react to posts: reactions ÷ views × 100 %. The tick on the bar is the previous period.2.80 %▼ 0.2 pp
Posts per dayHow many posts are published per day on average. Each cell is a point of the period: the darker, the more posts per day. The percentage is the change in the daily average: the current period is still running (today is not over yet), so it is compared with the previous one by pace rather than by total. “Was” is the whole previous period of the same length.4.3▼ 7.9 %was 4.7after signing in
Ad shareWhat share of the period's posts looks like advertising: erid labeling, ad links and other signs. The scale shows the ad load by the quality index thresholds: up to 10 % — low, up to 25 % — moderate, up to 50 % — high, above — very high. A growing share is marked red.3.9 %▲ 1.8 pp
TrendTop — subscribers at the end of each point of the period; bottom — growth per point: green means more subscribers, red means fewer. Above the growth chart — the biggest gain and the biggest loss. MAX does not report how many people subscribed and unsubscribed separately.
Audience growth
0subscribers in the period
The number of subscribers did not change in the period
Channel scoreA channel score from 0 to 100 made of five parts: audience, growth integrity, ad load, trust and calculation reliability. Each bar shows how many points the part earned out of its maximum. The index is recalculated every night; channels are compared with similar ones of the same category and size.
ReachHow many views the posts published at each point of the period have now (not views per day). The record is labeled; the point with today is paler — the day is not over yet. Average post reach — posts older than two days.
Views and reach
709 891views in the period▼ 5.8 %
Average post reach — 5 535 views (posts older than two days).
EngagementER — reactions divided by views, in percent — for the posts of each point of the period. The dashed line is ER for the whole period. The change is in percentage points against the previous period of the same length.
CitationsThe citation index (CI) shows how often and by which channels this channel is mentioned over the last 30 days, excluding advertising posts. The level is its place among similar channels. The line shows CI at each point of the period (for a week or month — the average over its days).
The citation index has not been calculated yet: it will appear after the nightly calculation once other channels mention the channel.
RhythmHow many posts are published on average in each hour of each weekday, Moscow time: the darker the cell, the more posts. “Best time” — the hours when posts older than two days have the highest average reach.
When and how much it posts
MonTueWedThuFriSatSun
036912151821
Best time:09:0018:00hours when posts get the highest average reach
FormatsWhat the feed is made of. Each post has one format, by priority: repost, video, photo, link, text. The bar and percentages show the share of posts of each format; on the right — average reach of one post of the format (posts older than two days), the small bar compares it with the most viewed format.
Post formats
100 posts
Reposts99 %6 168
Video2121 %7 513
Photos3838 %5 699
Links1212 %5 239
Text2020 %7 626
On the right — average reach of one post of the format.
PostsEach dot is a post in the period: horizontally — publication date, vertically — views, dot size — reactions, color — format. This shows hits, flops and how reach changes. For large channels, the 100 most viewed posts and an even sample of the rest are shown — no more than 1,500 dots.
Every post is a dot
Higher means more views, bigger means more reactions. Click a dot to open the post.
VideoPhotosOthersize — reactionsZoom with the + and − buttons, a pinch or Ctrl + mouse wheel; drag a zoomed chart to move it
SummaryTotals for the selected period: how many posts were published, how many views and reactions they have now and the average post reach. Views are the current views of posts published on those days, not views per day. The change is against the same span before the period, if statistics cover it.
Period totals
Click a metric to see it across the period below
Viewstoday — the day is not over yetPoints with posts younger than two days are pale and dashed: their views are still growing.
AdsWhat share of the period's posts looks like advertising: erid labeling, ad links and other signs. The detector is cautious, so the real share is usually higher. The scale shows the ad load by the quality index thresholds. Below — the average reach of an ad post and a regular post, and who the channel advertises (sites that ad links lead to).
What worksPosts of the period with the most views. The bar shows views relative to first place. The preview is the post's image; for a post without an image — the channel avatar. Views are the post's current count.
RhythmHow many posts were published each day of the period (pale bars) and the 7-day average (line): you can see whether the channel is speeding up or slowing down. Today is not over yet, so its average is calculated up to yesterday.
Posts by day
Pale bars are days, the line is the 7-day average: you can see whether the channel is speeding up or slowing down
Posts per day7-day average
Data updated at 13:56 Moscow time. Views are the current counts of posts published on those days; average reach counts posts older than two days.
How the quality index is calculated
📉 Слабое УТП убивает конверсию даже у сильного продукта
Вы перечисляете функции вместо выгод, и клиент не понимает, зачем ему платить. Оффер размыт — посетитель уходит к конкуренту, который объяснил ценность за 5 секунд. Вы теряете лиды на входе, потому что не ответили на главный вопрос: «Это для меня?»
Формула жёсткого УТП:
Для кого → Проблема → Результат → Способ
1️⃣ Для кого — узкий сегмент, не категория. «Для маркетологов» читают все и никто. «Для performance-маркетологов e-commerce с бюджетом от $10K/мес» — человек сразу узнаёт себя.
2️⃣ Проблема — боль, которую клиент уже ощущает и может назвать. Не «хотите больше продаж», а «теряете 40% бюджета на неэффективные каналы, потому что аналитика врёт».
3️⃣ Результат — конкретная метрика или состояние, которое можно проверить. «Снизите CAC на 30% за месяц» вместо «улучшите показатели». Или «перестанете гадать, какой канал работает».
4️⃣ Способ — механика, которая отличает вас от остальных. Не «удобный интерфейс», а «автоматическая переатрибуция по 15 точкам касания без настройки — подключили и всё».
Сравним на примере. Допустим, ваш SaaS — CRM для агентств.
Слабо: «Удобная CRM для бизнеса. Управляйте проектами и клиентами эффективно». Кто вы? Для кого? Какую боль закрываете? Непонятно.
Сильно: «Для digital-агентств от 5 человек: перестаньте терять клиентов из-за хаоса в проектах — все задачи, платежи и коммуникации в одном окне с автосинхронизацией из почты и мессенджеров за 2 минуты». Сегмент, боль, результат, механика.
Или SaaS для email-рассылок. Слабо: «Платформа для email-маркетинга. Создавайте красивые письма». Сильно: «Для SaaS-стартапов без маркетолога: прогревайте триал-пользователей до оплаты автоцепочками — шаблоны на основе поведения в продукте, без дизайнера и вёрстки».
Тест: покажите УТП человеку из целевой аудитории на 3 секунды. Если он не ответит «это про меня» или «не моё» — переписывайте.
Чёткое УТП продаёт до первого клика — клиент понимает, его это или нет, за 3 секунды.
⚙️ WebSocket подключили, а события забыли — и приложение висит
Вы настроили WebSocket, но не описали, какие события слушать и как их обрабатывать. Клиент подключился, сервер молчит, а пользователь смотрит на пустой экран. Допустим, в чате сообщение отправляется, но не появляется у получателя — пользователь перезагружает страницу, пишет в поддержку, а через 10 минут уходит к конкурентам.
Правильная схема событий WebSocket:
Подключение → Определить события → Обработать на клиенте → Обработать на сервере → Отправить ответ
1️⃣ Создайте список событий с чёткой структурой: message.new (id, text, userId, timestamp), user.typing (userId, chatId), connection.close (reason) 2️⃣ На клиенте подпишитесь через socket.on('message.new', handler) — не забудьте socket.off при размонтировании компонента, иначе утечка памяти 3️⃣ На сервере валидируйте входящие события: проверяйте тип, payload, токен авторизации — без этого любой запрос с левым JSON роняет логику 4️⃣ Добавьте fallback для неизвестных событий: логируйте в Sentry и возвращайте error.unknown вместо молчания — так вы увидите баги до пользователей 5️⃣ Тестируйте разрыв соединения: reconnect должен восстановить состояние через event.sync, а не дублировать 50 сообщений в чате 6️⃣ Документируйте контракт в OpenAPI или отдельном файле events.schema.json — новый разработчик поймёт логику за 5 минут, а не за 2 дня
Пример: пользователь отправил сообщение, клиент эмитит message.send с текстом, сервер валидирует, сохраняет в базу, эмитит message.new всем участникам чата с id сообщения. Если на клиенте нет обработчика message.new — сообщение провалится в пустоту, и вы узнаете об этом только из тикета в поддержке.
Без явного контракта событий WebSocket превращается в чёрный ящик, где никто не знает, что сломалось и почему пользователи жалуются на «глюки».
🐳 Один лишний слой в Docker-образе — и вы платите за RAM втрое больше
Вы запустили контейнер, а он съел 2 ГБ вместо 500 МБ. Инстансы дорожают, команда ищет утечки памяти — а проблема в том, что в образ попали dev-зависимости и кеш сборки. Допустим, 10 контейнеров × 1,5 ГБ лишнего = $180/мес на пустом месте.
Как это работает:
Dockerfile → установка пакетов → кеш npm/pip → сборка → образ со всем мусором → контейнер в продакшене
1️⃣ Каждая команда RUN создаёт слой — если удалили файлы в следующем слое, они всё равно остались в образе и занимают место в предыдущем
2️⃣ npm install без флага --production тянет devDependencies: линтеры, тесты, Webpack, TypeScript — всё, что нужно только на этапе разработки, но не в runtime
3️⃣ Кеш менеджеров пакетов остаётся внутри: nodemodules/.cache весит 200–400 МБ, pip cache — ещё 150 МБ, если не очистить в той же команде RUN
4️⃣ Multi-stage build решает: собираете в одном контейнере (Node 18 + dev-tools), копируете только dist и package.json в финальный alpine-образ — с 1,2 ГБ до 250 МБ
5️⃣ .dockerignore отсекает .git, README, nodemodules, tests до сборки — они не попадут в контекст Docker и не раздуют слои на старте
6️⃣ Объединяйте команды: вместо RUN apt-get update + RUN apt-get install пишите RUN apt-get update && apt-get install && rm -rf /var/lib/apt/lists/ — всё в одном слое
Пример: базовый Node-образ 900 МБ → добавили npm install (dev) +400 МБ → кеш +200 МБ → итого 1,5 ГБ. Multi-stage: финальный образ на alpine + только prod-зависимости = 180 МБ. Экономия на 5 репликах в Kubernetes — с 7,5 ГБ RAM до 900 МБ, разница в стоимости инстансов $120–150/мес.
Оптимизация образа — это не про скорость деплоя, а про деньги на инфраструктуре каждый месяц.
Вы держите в уме десятки связей: аудитория, проблема, решение, монетизация, метрики. Но стоит кому-то из команды задать вопрос — начинаете объяснять заново. Инвестор просит питч — собираете картину на коленке за ночь.
Скачайте шаблон «Карта контуров вашего проекта» — одностраничник, который раскладывает SaaS на 6 блоков:
1️⃣ Кто клиент и какую боль решаете — не «малый бизнес», а «владелец автосервиса, теряющий клиентов из-за бумажных записей» 2️⃣ Что продаёте — формулировка оффера в одной строке 3️⃣ Как зарабатываете — модель монетизации и юнит-экономика (LTV, CAC, payback) 4️⃣ Чем отличаетесь — не «удобный интерфейс», а конкретное преимущество против названных конкурентов 5️⃣ Как привлекаете — два главных канала, которые тестируете сейчас 6️⃣ Что измеряете — три метрики, по которым принимаете решения
Заполнили карту — получили общий язык с командой, чёткий питч и фундамент для стратегии.
Карта контуров — это не бизнес-план на 50 страниц, а рентген вашего SaaS на одном листе.
🔍 Парсер «работает» — самая опасная иллюзия в разработке
Вы запустили парсер, он вернул данные, и команда ставит задачу в Done. Через неделю клиент жалуется: половина товаров пропала, цены устарели, а у конкурента всё актуально. Парсер работал — но не там, не так и не для всех.
Мы в SmartWeb 3.0 проверяем каждый парсер по 14 точкам, прежде чем отдать клиенту:
Запуск → Структура → Граничные случаи → Нагрузка
1️⃣ Парсер отработал на тестовой странице — проверяем на 20 случайных: вёрстка меняется, блоки пропадают, разметка плывёт 2️⃣ Все поля заполнены — ищем пустые значения, дубли ключей, вложенные массивы: один null роняет всю цепочку обработки 3️⃣ Скорость устраивает — гоним 1000 запросов подряд: утечки памяти, таймауты, блокировки по IP вылезают только под нагрузкой 4️⃣ Логи чистые — читаем их через день: ошибки накапливаются, а вы узнаёте, когда клиент уже ушёл 5️⃣ Обработка ошибок есть — ломаем API, подменяем ответ, рвём соединение: парсер должен упасть красиво и написать, что именно сломалось 6️⃣ Данные актуальны — сравниваем с источником вручную: парсер может месяц тянуть кеш, а вы будете думать, что цены не меняются
Один клиент пришёл с парсером, который «работал» полгода — пока конкурент не обогнал по ассортименту в три раза. Оказалось: парсер пропускал товары без фото. Никто не проверял граничные случаи.
Парсер работает не тогда, когда вернул JSON, а когда вы проверили все 14 сценариев, при которых он должен сломаться — и он не сломался.
Necessary cookies keep the site working and secure: sign-in, form protection, language, theme and others. Yandex Metrica analytics cookies and Yandex Advertising Network ad cookies are enabled only with your consent. By clicking “Accept all” you give consent to processing of cookie data; see the Personal Data Processing Policy for details.