Brothers Analytics Platform

Аналитика посетителей
в реальном времени

Определяем психотип посетителя за первые секунды. Отслеживаем каждое действие. Даём аналитикам данные мгновенно.

6
Психотипов
<2с
Первый upsert
200+
Одновременных
150
RPS на Pi 5

6 психотипов покупателя

Каждый посетитель получает профиль на основе поведения и источника трафика

🏠

Семья и безопасность

Изучает отзывы, фокус на разделе «О нас». Пришёл по прямой ссылке или рекомендации.

🌳

Природа и уединение

Органический трафик. Интересуется фото, видео, окружением посёлка.

🏗

Активная жизнь

Фокус на инфраструктуре: дороги, магазины, школы, транспортная доступность.

📊

Рациональный подход

Яндекс.Директ / Google Ads. Изучает планировки, каталог, цены, отделку.

Комфорт и сервис

Внимание к отделке, обслуживанию, управляющей компании.

👑

Статус и эмоции

Соцсети (VK, Telegram, Instagram). Реагирует на визуальный контент и CTA.

Как это работает

От первого клика до профиля в базе данных — менее 2 секунд

1

Загрузка

Определяем источник трафика, UTM

2

Мгновенный upsert

Предварительный психотип за 0-2с

3

Трекинг

Скролл, клики, квиз, время

4

Debounce

Уточнение каждые 3с

5

Профиль

Полный психотип в PostgreSQL

Архитектура

Self-hosted на Raspberry Pi 5 — полный контроль над данными

  Browser (200 concurrent)
  ├── init()  → instant upsert (jitter 0-2s)
  ├── events  → debounce 3s → upsert
  ├── batch   → flush 5s → bulk insert
  └── unload  → keepalive fetch
          ↓
    nginx (reverse proxy + SSL)
          ↓
    Kong API Gateway (:54322)
          ↓
    PostgREST (1000+ rps)
          ↓
    PgBouncer (connection pool)
          ↓
    PostgreSQL 15 (Supabase)
Raspberry Pi 5
PostgreSQL 15
Supabase (self-hosted)
PostgREST
Kong
nginx
Vanilla JS
Python + FastAPI
AmoCRM API v4
Let's Encrypt
Docker

Нагрузочное тестирование

500 запросов, 200 одновременных соединений — 0 ошибок

0

Failed requests

Из 500 запросов при 200 concurrent

150

RPS (upsert)

Медиана 741 мс, макс 3.2с

452

RPS (events)

Медиана 307 мс, макс 1.1с

Что собираем

Два потока данных: профиль посетителя и поток событий

visitor_profiles

Upsert в реальном времени

  • → visitor_id (UUID, уникальный)
  • → psychotype + psychotype_label
  • → scores (6 осей, JSONB)
  • → traffic_source + utm_data
  • → session_id + session_start
  • → visit_count, visitor_type
  • → pages_viewed, total_time_sec

visitor_events

Батч каждые 5 секунд

  • → page_view (с UTM и источником)
  • → scroll_view (секция видна)
  • → click (CTA, контакт, прочее)
  • → quiz_interact (поля форм)
  • → time_spent (секунды в секции)