← К портфолио Product Analytics + A/B on Supabase preview
Ситуация
Аналитическое портфолио показывает метрики на чистом CSV, а невидимой остаётся аналитика внутри multi-tenant продукта
Задача
Собрать слой целиком: авторизация, изоляция по организациям, приём событий и результат эксперимента, считаемый в базе
Действия
SQL-вьюхи считают funnel, cohort, MRR и DAU; v_results считает A/B в базе; RLS изолирует строки по организациям
Результат
Итог A/B: control 32.1% против treatment 37.2%, +5,1 пп при p = 0.0034 (χ²); метрики считаются в базе для любого клиента
Стек
PythonStreamlitSupabase (Postgres + RLS + Edge Functions)SQLsupabase-py
Исходники Смотреть на GitHub → Репозиторий приватный — доступ по запросу Обновлено: Sep 15, 2026
Содержание
  1. Ситуация
  2. Задача
  3. Действия
  4. Архитектура
  5. Модель безопасности (RLS)
  6. Результат
  7. Ограничения
  8. Документация

Product Analytics + A/B on Supabase

Ситуация

Аналитическое портфолио чаще всего показывает метрики на чистом CSV. Трудная часть остаётся невидимой: как аналитика встраивается в реальный multi-tenant продукт — авторизация, изоляция данных по организациям, путь инжеста событий и эксперимент, результат которого считается в базе, а не в ноутбуке.

Задача

От меня требовалось собрать этот слой целиком — от приёма событий до результата эксперимента — и сделать его пригодным для реальных пользователей, а не только для локального запуска.

Действия

Архитектура

Client/seed  ── POST /functions/v1/ingest (x-api-key) ──►  Edge Function (Deno)
                                                              │
Streamlit    ◄── email/password auth + SQL (RLS-scoped) ──►  Supabase Postgres
dashboard        (supabase-py, anon key)                      analytics + experiments
  • Схемы: analytics (organizations, api_keys, users, events, subscriptions, org_members) и experiments (experiments, variants, assignments, metrics).
  • Аналитика в БД: SQL-views считают funnel, cohort retention, MRR, DAU и channel conversion (sql/002_views.sql) — дашборд переформатирует, но не агрегирует.
  • A/B в БД: experiments.v_results считает по варианту assigned/converted/conversion; χ²-тест запускается поверх в дашборде.
  • Ingest: Edge Function валидирует API-ключ (SHA-256 hash, не plaintext) и вставляет событие через security definer функцию.

Модель безопасности (RLS)

На каждой таблице включён Row Level Security. Пользователь видит только строки своей организации — дашборд безопасно открывать реальным пользователям, а не только запускать локально.

Результат

Аналитика считается там же, где лежат данные: SQL-views и v_results означают, что метрики и экспериментальные результаты согласованы между любым клиентом, который подключается к базе — дашборд, BI-инструмент или ad-hoc SQL-запрос видят одни и те же цифры. Завершённый A/B даёт control 32.1% против treatment 37.2%, +5,1 пп при p = 0.0034 (χ²).

Ограничения

События для A/B сгенерированы сидом, поэтому ценность не в самой величине эффекта, а в том, что эксперимент считается в базе, изолирован по тенантам и воспроизводим любым клиентом. Продуктовой истории за числами нет — это демонстрация архитектуры, а не результат реального запуска.

Документация

Смотрите также

Карта связей

Проекты, записи и темы, связанные с этим проектом. Наведите на узел, чтобы увидеть название; клик — открыть.