Концепции, ценность и типичные сценарии клонирования — меньше кода.
Концепции, ценность и типичные сценарии клонирования — меньше кода.
Preparing Ring content
Preparing Ring content
Preparing Ring content
Используйте вкладки Founder / Developer в боковой панели, чтобы отфильтровать эту страницу. Поверхности админ-консоли потребляют эти маршруты; сторонние провайдеры — опциональные env-хуки.
Ring поставляет first-party аналитический пайплайн: клиентская телеметрия ингестируется через /api/analytics/*, валидируется Zod на границе маршрута, сохраняется в analytics_events / web_vitals / analytics_errors и читается обратно админ-scoped GET-маршрутами. Хранение можно полностью отключить на среду — тогда каждый маршрут подтверждает без записи.
| Previous (GA-only setup) | Ring equivalent |
|---|---|
| Third-party SDK only, data leaves your clone | First-party ингест в вашу собственную базу |
| One opaque dashboard | Админ-scoped чтение + platform stats с role gates |
| No device/session context | Батчи sessionId, device telemetry с tunnel fan-out |
| Web Vitals left unmeasured | Ингест Core Web Vitals + вычисленный performanceScore |
| Endpoint | Method | Auth | Purpose |
|---|---|---|---|
/api/analytics/app | POST | optional userId | Батчированные app-события → analytics_events |
/api/analytics/device | POST | session required | Device telemetry → device_telemetry + fan-out в user tunnel |
/api/analytics/navigation | POST | — | Лёгкий acknowledgement stub (без хранения) |
/api/analytics/errors | POST | optional userId | Захват клиентских ошибок → analytics_errors (отложенная запись) |
/api/analytics/errors |
platform admin.ANALYTICS_DISABLE_STORAGE=true отключает persistence без изменений кода; endpoints продолжают отвечать.getPlatformAnalytics).| Variable | Provider |
|---|---|
GA_TRACKING_ID / GA4_MEASUREMENT_PROTOCOL_SECRET | Google Analytics |
MIXPANEL_TOKEN | Mixpanel |
AMPLITUDE_API_KEY | Amplitude |
SENTRY_DSN | Sentry error tracking |
| Variable | Default | Effect |
|---|---|---|
ANALYTICS_DISABLE_STORAGE | unset | "true" подтверждает события без записи в базу |
Используйте вкладки Founder / Developer в боковой панели, чтобы отфильтровать эту страницу. Поверхности админ-консоли потребляют эти маршруты; сторонние провайдеры — опциональные env-хуки.
Ring поставляет first-party аналитический пайплайн: клиентская телеметрия ингестируется через /api/analytics/*, валидируется Zod на границе маршрута, сохраняется в analytics_events / web_vitals / analytics_errors и читается обратно админ-scoped GET-маршрутами. Хранение можно полностью отключить на среду — тогда каждый маршрут подтверждает без записи.
| Previous (GA-only setup) | Ring equivalent |
|---|---|
| Third-party SDK only, data leaves your clone | First-party ингест в вашу собственную базу |
| One opaque dashboard | Админ-scoped чтение + platform stats с role gates |
| No device/session context | Батчи sessionId, device telemetry с tunnel fan-out |
| Web Vitals left unmeasured | Ингест Core Web Vitals + вычисленный performanceScore |
| Endpoint | Method | Auth | Purpose |
|---|---|---|---|
/api/analytics/app | POST | optional userId | Батчированные app-события → analytics_events |
/api/analytics/device | POST | session required | Device telemetry → device_telemetry + fan-out в user tunnel |
/api/analytics/navigation | POST | — | Лёгкий acknowledgement stub (без хранения) |
/api/analytics/errors | POST | optional userId | Захват клиентских ошибок → analytics_errors (отложенная запись) |
/api/analytics/errors |
platform admin.ANALYTICS_DISABLE_STORAGE=true отключает persistence без изменений кода; endpoints продолжают отвечать.getPlatformAnalytics).| Variable | Provider |
|---|---|
GA_TRACKING_ID / GA4_MEASUREMENT_PROTOCOL_SECRET | Google Analytics |
MIXPANEL_TOKEN | Mixpanel |
AMPLITUDE_API_KEY | Amplitude |
SENTRY_DSN | Sentry error tracking |
| Variable | Default | Effect |
|---|---|---|
ANALYTICS_DISABLE_STORAGE | unset | "true" подтверждает события без записи в базу |
Используйте вкладки Founder / Developer в боковой панели, чтобы отфильтровать эту страницу. Поверхности админ-консоли потребляют эти маршруты; сторонние провайдеры — опциональные env-хуки.
Ring поставляет first-party аналитический пайплайн: клиентская телеметрия ингестируется через /api/analytics/*, валидируется Zod на границе маршрута, сохраняется в analytics_events / web_vitals / analytics_errors и читается обратно админ-scoped GET-маршрутами. Хранение можно полностью отключить на среду — тогда каждый маршрут подтверждает без записи.
| Previous (GA-only setup) | Ring equivalent |
|---|---|
| Third-party SDK only, data leaves your clone | First-party ингест в вашу собственную базу |
| One opaque dashboard | Админ-scoped чтение + platform stats с role gates |
| No device/session context | Батчи sessionId, device telemetry с tunnel fan-out |
| Web Vitals left unmeasured | Ингест Core Web Vitals + вычисленный performanceScore |
| Endpoint | Method | Auth | Purpose |
|---|---|---|---|
/api/analytics/app | POST | optional userId | Батчированные app-события → analytics_events |
/api/analytics/device | POST | session required | Device telemetry → device_telemetry + fan-out в user tunnel |
/api/analytics/navigation | POST | — | Лёгкий acknowledgement stub (без хранения) |
/api/analytics/errors | POST | optional userId | Захват клиентских ошибок → analytics_errors (отложенная запись) |
/api/analytics/errors |
platform admin.ANALYTICS_DISABLE_STORAGE=true отключает persistence без изменений кода; endpoints продолжают отвечать.getPlatformAnalytics).| Variable | Provider |
|---|---|
GA_TRACKING_ID / GA4_MEASUREMENT_PROTOCOL_SECRET | Google Analytics |
MIXPANEL_TOKEN | Mixpanel |
AMPLITUDE_API_KEY | Amplitude |
SENTRY_DSN | Sentry error tracking |
| Variable | Default | Effect |
|---|---|---|
ANALYTICS_DISABLE_STORAGE | unset | "true" подтверждает события без записи в базу |
| GET |
| platform admin |
| Список ошибок с фильтрами severity/component |
/api/analytics/web-vitals | POST | optional userId | Core Web Vitals + performanceScore → web_vitals (отложенная запись) |
/api/analytics/web-vitals | GET | platform admin | Сводка scope=platform или per-user; timeframe 24h / 7d / 30d |
/api/analytics/platform-stats | GET | platform admin | Живые подсчёты для users, entities, opportunities |
DD_API_KEY / DD_APP_KEY |
| Datadog |
Ни один не обязателен — собственный пайплайн Ring работает без них.
web-vitalswebVitalsInputSchema + calculatePerformanceScore |
web_vitals с обнаруженными platform/browser |
navigation | none (stub) | ничего — возвращает { ok: true } |
GET /api/analytics/platform-stats — гейт isPlatformAdmin(session.user.role); параллельные countDocs над users / entities / opportunities.GET /api/analytics/web-vitals?scope=platform&timeframe=30d — platform summary через getPlatformAnalyticsSummary; без scope — per-user метрики.features/analytics/services/get-platform-analytics.ts (core summary + docs not-found + personal-page stats).| GET |
| platform admin |
| Список ошибок с фильтрами severity/component |
/api/analytics/web-vitals | POST | optional userId | Core Web Vitals + performanceScore → web_vitals (отложенная запись) |
/api/analytics/web-vitals | GET | platform admin | Сводка scope=platform или per-user; timeframe 24h / 7d / 30d |
/api/analytics/platform-stats | GET | platform admin | Живые подсчёты для users, entities, opportunities |
DD_API_KEY / DD_APP_KEY |
| Datadog |
Ни один не обязателен — собственный пайплайн Ring работает без них.
web-vitalswebVitalsInputSchema + calculatePerformanceScore |
web_vitals с обнаруженными platform/browser |
navigation | none (stub) | ничего — возвращает { ok: true } |
GET /api/analytics/platform-stats — гейт isPlatformAdmin(session.user.role); параллельные countDocs над users / entities / opportunities.GET /api/analytics/web-vitals?scope=platform&timeframe=30d — platform summary через getPlatformAnalyticsSummary; без scope — per-user метрики.features/analytics/services/get-platform-analytics.ts (core summary + docs not-found + personal-page stats).| GET |
| platform admin |
| Список ошибок с фильтрами severity/component |
/api/analytics/web-vitals | POST | optional userId | Core Web Vitals + performanceScore → web_vitals (отложенная запись) |
/api/analytics/web-vitals | GET | platform admin | Сводка scope=platform или per-user; timeframe 24h / 7d / 30d |
/api/analytics/platform-stats | GET | platform admin | Живые подсчёты для users, entities, opportunities |
DD_API_KEY / DD_APP_KEY |
| Datadog |
Ни один не обязателен — собственный пайплайн Ring работает без них.
web-vitalswebVitalsInputSchema + calculatePerformanceScore |
web_vitals с обнаруженными platform/browser |
navigation | none (stub) | ничего — возвращает { ok: true } |
GET /api/analytics/platform-stats — гейт isPlatformAdmin(session.user.role); параллельные countDocs над users / entities / opportunities.GET /api/analytics/web-vitals?scope=platform&timeframe=30d — platform summary через getPlatformAnalyticsSummary; без scope — per-user метрики.features/analytics/services/get-platform-analytics.ts (core summary + docs not-found + personal-page stats).