DATABASE_URL="postgresql://lms_user:password@localhost:5432/lms_db" BETTER_AUTH_SECRET="generate-with: openssl rand -base64 32" BETTER_AUTH_URL="http://localhost:3000" RESEND_API_KEY="" EMAIL_FROM="noreply@school.second-brain.ru" S3_ENDPOINT="https://nbg1.your-objectstorage.com" S3_BUCKET="second-brain-lms" S3_ACCESS_KEY="" S3_SECRET_KEY="" S3_REGION="eu-central" # Cloudflare Turnstile (anti-bot защита на регистрации) NEXT_PUBLIC_TURNSTILE_SITE_KEY="" TURNSTILE_SECRET_KEY="" # Яндекс.Метрика — ID счётчика school.second-brain.ru (цели signup_free/gate_view). # Build-time (NEXT_PUBLIC_*) — передавать через --build-arg при сборке. Сам счётчик # (ym init snippet) ставится в admin → Settings → headCode, отдельно от этого ID. NEXT_PUBLIC_METRIKA_COUNTER_ID="" # Kinescope API KINESCOPE_API_KEY="" # Internal access-provisioning (payment-router → /api/internal/grant) INTERNAL_GRANT_SECRET="" # Freemium: slug бесплатного курса, в который авто-записываем новых юзеров при регистрации FREE_COURSE_SLUG=obsidian-start # Freemium quiz funnel (Typebot → /api/internal/quiz-lead) QUIZ_LEAD_SECRET="" # Listmonk API base — публичный домен (Listmonk живёт на Hetzner, наружу через newsletter.) LISTMONK_URL="https://newsletter.second-brain.ru" LISTMONK_USER="apiuser" LISTMONK_TOKEN="" LISTMONK_QUIZ_LIST_ID="" # Freemium gate: ID wow-урока (2.6 «ежедневные заметки») — после его завершения # показываем лестницу-оффер (трипвайр + полный курс) WOW_MOMENT_LESSON_ID="obs-start-l2-006" # Obsidian Toolbox (/tools): "true" — показывать точки входа и роуты (staging); # не задано/иное — скрыто, /tools редиректит на /dashboard (prod, пока дорабатываем) TOOLBOX_VISIBLE="" # Чистый PDF (browserless на staging/prod; локально — SSH-туннель на staging) BROWSER_WS_URL="ws://localhost:3333" # Секрет browserless (TOKEN в его env) — на прод/staging генерировать: openssl rand -hex 24 BROWSERLESS_TOKEN="" PDF_MONTHLY_LIMIT="100"