chore(analytics): Umami aus Config + Admin-UI (Welle B)

env.development/macmini.example (UMAMI_*-Blöcke), docker-compose PUBLIC_UMAMI_WEBSITE_ID,
generate-env.mjs (10 Mappings), Admin Overview/SystemTab (Umami-Service-Einträge),
funnel-tracking-Kommentar.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
Till JS 2026-05-26 14:47:55 +02:00
parent dfcda85f35
commit f81214043f
7 changed files with 11 additions and 68 deletions

View file

@ -132,26 +132,6 @@ STRIPE_POTION_HUGE_PRICE=price_1TEu8VAZjQCYS0ZJ7AO86Jrt
# Customer Portal Configuration
STRIPE_PORTAL_CONFIG_ID=bpc_1T1PFdAZjQCYS0ZJEhF9ob7q
# ============================================
# UMAMI ANALYTICS
# ============================================
# All app modules are tracked under the unified Mana website ID.
# Module segmentation happens via the `module` event property (see analytics.ts).
# Register new sites at https://stats.mana.how
UMAMI_WEBSITE_ID_MANA=32777167-e026-4618-933a-3429120b479b
# Landing Page Website IDs (separate Astro sites, each needs its own ID)
UMAMI_WEBSITE_ID_CHAT_LANDING=a264b165-80d2-47ab-91f4-2efc01de0b66
UMAMI_WEBSITE_ID_MANA_LANDING=cef3798d-85ae-47df-a44a-e9bee09dbcf9
UMAMI_WEBSITE_ID_CARDS_LANDING=2ac83d50-107f-4d4e-ac23-5540946e96e3
UMAMI_WEBSITE_ID_CALENDAR_LANDING=84862d98-727e-4e25-8645-639241dd1544
UMAMI_WEBSITE_ID_CLOCK_LANDING=0332b471-a022-46af-a726-0f45932bfd58
UMAMI_WEBSITE_ID_PICTURE_LANDING=d3ac98e6-0d1a-47a3-a218-2a81fff596bd
UMAMI_WEBSITE_ID_TODO_LANDING=538eb4b6-2241-45a3-994d-cdb9bdb0c250
UMAMI_WEBSITE_ID_FOOD_LANDING=15610d03-b280-4b92-9c71-0ef89c23202b
UMAMI_WEBSITE_ID_PRESI_LANDING=dd485016-0077-47b9-9f59-ab2c6c1730ee
UMAMI_WEBSITE_ID_MUKKE_LANDING=b2c9ab34-3c53-4463-9dde-1ecf098886a5
# ============================================
# CHAT PROJECT
# ============================================

View file

@ -88,11 +88,6 @@ OPENAI_API_KEY=
# ============================================
GRAFANA_PASSWORD=your-grafana-admin-password
# ============================================
# Web Analytics (Umami)
# ============================================
UMAMI_APP_SECRET=your-umami-secret-here
# =============================================================================
# REQUIRED — production cannot boot without these
# =============================================================================

View file

@ -21,12 +21,6 @@
description: 'System & Backend Metrics',
icon: 'grafana' as const,
},
{
name: 'Umami Analytics',
url: 'https://stats.mana.how',
description: 'Web Analytics',
icon: 'analytics' as const,
},
{
name: 'Docker Dashboard',
url: 'https://grafana.mana.how/d/backends-docker',

View file

@ -36,12 +36,6 @@
description: 'Raw metrics & queries',
icon: 'api' as const,
},
{
name: 'Umami Analytics',
url: 'https://stats.mana.how',
description: 'Web analytics dashboard',
icon: 'analytics' as const,
},
];
const statusColors = {
@ -71,7 +65,6 @@
{ name: 'Redis', status: 'healthy', url: '-' },
{ name: 'MinIO', status: 'healthy', url: 'https://s3.mana.how' },
{ name: 'Grafana', status: 'healthy', url: 'https://grafana.mana.how' },
{ name: 'Umami', status: 'healthy', url: 'https://stats.mana.how' },
];
loading = false;
});

View file

@ -2,7 +2,8 @@
* Funnel Tracking fires one-time activation & retention events.
*
* Each event uses a localStorage flag so it fires at most once per user/device.
* These events power Umami funnels:
* Analytics-Versand ist entfernt (2026-05-26) die ManaEvents-Aufrufe
* sind No-ops; Flags/Stufen bleiben für evtl. künftige lokale Auswertung:
* signup onboarding_completed first_content_created second_module_used user_return_visit
*/

View file

@ -141,7 +141,6 @@ services:
# is provisioned (see docs/plans/ai-mission-key-grant.md).
PUBLIC_AI_MISSION_GRANTS: ${PUBLIC_AI_MISSION_GRANTS:-false}
# Analytics & Error Tracking
PUBLIC_UMAMI_WEBSITE_ID: 32777167-e026-4618-933a-3429120b479b
PUBLIC_GLITCHTIP_DSN: ${GLITCHTIP_DSN_MANA_WEB:-}
# Speech-to-Text proxy: SvelteKit /api/v1/voice/transcribe forwards
# to mana-stt via Cloudflare Tunnel. The browser never sees the API

View file

@ -240,7 +240,6 @@ const APP_CONFIGS = [
// routet /api/* dorthin).
PUBLIC_MANA_AUTH_URL: (env) => env.MANA_AUTH_URL,
PUBLIC_AUTH_WEB_URL: (env) => env.MANA_AUTH_WEB_URL || 'http://localhost:3002',
PUBLIC_UMAMI_WEBSITE_ID: (env) => env.UMAMI_WEBSITE_ID_MANA || '',
PUBLIC_GLITCHTIP_DSN: (env) => env.PUBLIC_GLITCHTIP_DSN || '',
// Speech-to-Text proxy (server-side only, never exposed to the client)
MANA_STT_URL: (env) => env.STT_URL || 'http://localhost:3020',
@ -696,57 +695,43 @@ const APP_CONFIGS = [
// Chat Landing
{
path: 'apps/chat/apps/landing/.env',
vars: {
PUBLIC_UMAMI_WEBSITE_ID: (env) => env.UMAMI_WEBSITE_ID_CHAT_LANDING || '',
},
vars: {},
},
// Mana Landing
{
path: 'apps/mana/apps/landing/.env',
vars: {
PUBLIC_UMAMI_WEBSITE_ID: (env) => env.UMAMI_WEBSITE_ID_MANA_LANDING || '',
},
vars: {},
},
// Cards Landing
{
path: 'apps/cards/apps/landing/.env',
vars: {
PUBLIC_UMAMI_WEBSITE_ID: (env) => env.UMAMI_WEBSITE_ID_CARDS_LANDING || '',
},
vars: {},
},
// Calendar Landing
{
path: 'apps/calendar/apps/landing/.env',
vars: {
PUBLIC_UMAMI_WEBSITE_ID: (env) => env.UMAMI_WEBSITE_ID_CALENDAR_LANDING || '',
},
vars: {},
},
// Clock Landing
{
path: 'apps/clock/apps/landing/.env',
vars: {
PUBLIC_UMAMI_WEBSITE_ID: (env) => env.UMAMI_WEBSITE_ID_CLOCK_LANDING || '',
},
vars: {},
},
// Picture Landing
{
path: 'apps/picture/apps/landing/.env',
vars: {
PUBLIC_UMAMI_WEBSITE_ID: (env) => env.UMAMI_WEBSITE_ID_PICTURE_LANDING || '',
},
vars: {},
},
// Todo Landing
{
path: 'apps/todo/apps/landing/.env',
vars: {
PUBLIC_UMAMI_WEBSITE_ID: (env) => env.UMAMI_WEBSITE_ID_TODO_LANDING || '',
},
vars: {},
},
// Food Landing
@ -754,17 +739,13 @@ const APP_CONFIGS = [
// Presi Landing
{
path: 'apps/presi/apps/landing/.env',
vars: {
PUBLIC_UMAMI_WEBSITE_ID: (env) => env.UMAMI_WEBSITE_ID_PRESI_LANDING || '',
},
vars: {},
},
// Music Landing
{
path: 'apps/mukke/apps/landing/.env',
vars: {
PUBLIC_UMAMI_WEBSITE_ID: (env) => env.UMAMI_WEBSITE_ID_MUSIC_LANDING || '',
},
vars: {},
},
];