Статический снимок живого multipage-приложения streamlit-app: детерминированный синтетический датасет (seed 42, 8 000 пользователей, январь 2024 — июнь 2025). Панель KPI, которые приложение считает само; рост MRR с переключателем метрики; структура навигации по пяти страницам.
@st.cache_data, поэтому все пять страниц внутри сессии видят одни и те же числа.
Это ровно те пять показателей, которые считает pages/overview.py: len(users), subs.user_id.nunique(), сумма MRR активных подписок, active_users(events, end−30д, end) и их отношение. Нижние два (активные за 30 дней и stickiness) зависят от правой границы диапазона дат; при полном диапазоне это конец периода — 2025-06-30. Total users, Paid users и MRR от фильтра дат не зависят: приложение режет по датам только поток событий, а не таблицу подписок.
Уникальные пользователи на каждом шаге (funnel_counts), а не последовательная воронка. Шаги app_open и signup совпадают по построению датасета — оба пишутся на дату регистрации, поэтому 100 % на втором шаге это определение, а не конверсия. Настоящий отвал начинается с activate.
st.navigation — переключение меняет весь экран@st.cache_data держит датасет между перезапусками в одной сессииИсточник чисел — тот же датасет, что и в data.py: метрики получены перезапуском собственных функций репозитория. Репозиторий приватный, поэтому борд не ссылается на него и не воспроизводит ничего, кроме агрегатов.