-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy path.env.example
More file actions
106 lines (95 loc) · 5.32 KB
/
Copy path.env.example
File metadata and controls
106 lines (95 loc) · 5.32 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
# === Visibility Dashboard — Umgebungskonfiguration ===
# Kopiere diese Datei nach .env und trage echte Werte ein. .env wird NIE committet.
# --- App ---
APP_ENV=local
APP_TIMEZONE=Europe/Zurich
APP_LOCALE=de_CH
# Basis-URL für OAuth-Callbacks (lokal DDEV-URL, prod https://visibility.openstream.ch).
APP_BASE_URL=https://visibility-openstream.ddev.site
# --- Datenbank (DDEV setzt diese Werte im Container automatisch) ---
# Innerhalb von DDEV ist der Host "db", User/Pass/DB jeweils "db".
DB_HOST=db
DB_PORT=3306
DB_NAME=db
DB_USER=db
DB_PASS=db
# --- DataForSEO (zentrale bezahlte Datenquelle: SERP, OnPage, Backlinks, AI Optimization) ---
# Account: https://dataforseo.com (Basic Auth: Login + Passwort). Pay-per-task.
DATAFORSEO_LOGIN=
DATAFORSEO_PASSWORD=
# --- OpenAI (ChatGPT-Sichtbarkeit via web-search grounding, deutsche Prompts) ---
OPENAI_API_KEY=
# --- Perplexity Sonar (NICHT MEHR GENUTZT seit 18.07.2026) ---
# Perplexity läuft jetzt über DataForSEO LLM-Responses (wie ChatGPT/Gemini/Claude),
# daher kein separater Sonar-Key nötig. Feld bleibt für den optionalen Direkt-Weg.
PERPLEXITY_API_KEY=
# --- Anthropic Claude (Executive Summary + Onboarding-Prompt-Generierung) ---
ANTHROPIC_API_KEY=
# --- Google APIs (gratis) ---
# Search Console via Service-Account (Skill gsc-api-access). Der Key liegt
# BEWUSST ausserhalb des Repos unter ~/.config/gcloud-keys/ (öffentliches Repo!).
# Token-Helper: ~/.config/gcloud-keys/gsc_token.sh mintet ~1h-Token (nur openssl/curl).
# SA gsc-reader@openstream-apis.iam.gserviceaccount.com deckt hepro.ch + openstream.ch ab.
GSC_KEYFILE=/Users/nick/.config/gcloud-keys/gsc-reader-hepro.json
GSC_TOKEN_HELPER=/Users/nick/.config/gcloud-keys/gsc_token.sh
GSC_SERVICE_ACCOUNT=gsc-reader@openstream-apis.iam.gserviceaccount.com
# Google-API-Key für PageSpeed Insights UND Chrome UX Report (CrUX) — ein Key deckt beide.
# console.cloud.google.com/apis/credentials → API-Schlüssel; dann unter APIs & Dienste →
# Bibliothek «PageSpeed Insights API» + «Chrome UX Report API» aktivieren. Gratis-Kontingent.
GOOGLE_API_KEY=
# --- Bing Webmaster Tools (gratis) ---
BING_WEBMASTER_API_KEY=
# --- Social Media (eigene Kunden-Kanäle) ---
# YouTube Data API v3 — nur API-Key, kein OAuth. Öffentlicher Fallback (Lifetime-Views
# inkl. Shorts) für Kunden ohne OAuth-Verbindung. Ein Key deckt alle Kunden ab.
YOUTUBE_API_KEY=
#
# OAuth (Kunde verbindet seine Kanäle selbst → echte Monats-Views). Callback-URLs bei den
# Providern registrieren (lokal: DDEV-URL, prod: https://visibility.openstream.ch/connect/<p>/callback).
# App-Key verschlüsselt die Refresh-Tokens in der DB (32-Byte, base64 — mit
# `openssl rand -base64 32` erzeugen). NIE ändern, sonst sind gespeicherte Tokens unlesbar.
APP_ENCRYPTION_KEY=
# Redirect-URI je Plattform (bei jedem Provider registrieren):
# lokal: https://visibility-openstream.ddev.site/connect/<platform>/callback
# prod: https://visibility.openstream.ch/connect/<platform>/callback
# <platform> = youtube | instagram | tiktok
#
# Google / YouTube (Analytics API, Scope yt-analytics.readonly)
# App: https://console.cloud.google.com/apis/credentials → OAuth-Client-ID (Typ Web).
GOOGLE_OAUTH_CLIENT_ID=
GOOGLE_OAUTH_CLIENT_SECRET=
# Instagram (Instagram-Login-Weg, graph.instagram.com; Scopes instagram_business_basic +
# instagram_business_manage_insights). App: https://developers.facebook.com/apps/ →
# Anwendungsfall „Messaging und Content auf Instagram verwalten".
# WICHTIG: Hier die INSTAGRAM-App-ID/-Secret eintragen (im Anwendungsfall unter
# „API-Einrichtung mit Instagram-Login"), NICHT die Facebook-App-ID der Dashboard-Startseite.
# Voraussetzung: Business-/Creator-Konto; das Konto als „Instagram-Tester" (Tab App-Rollen)
# hinzufügen und die Einladung in Instagram (Einstellungen → Apps und Websites → Tester-
# Einladungen) annehmen. Für eigene Test-Konten reicht der Dev-Modus (kein voller App-Review).
INSTAGRAM_OAUTH_CLIENT_ID=
INSTAGRAM_OAUTH_CLIENT_SECRET=
# TikTok (Display API, graph via open.tiktokapis.com; Scopes user.info.basic +
# user.info.stats + video.list). App: https://developers.tiktok.com/apps/ →
# Produkt „Login Kit" hinzufügen (dort die Redirect-URI eintragen).
# Credentials heissen Client Key / Client Secret (in der Auth-URL client_key, NICHT
# client_id). Für eigene/Test-Konten reicht der Sandbox-Modus (Konto als target user
# hinzufügen) — kein Production-Review mit ToS/Datenschutz-URLs nötig.
# Grenze: Display API liefert nur aktuelle Werte, keine historischen Monate.
TIKTOK_OAUTH_CLIENT_KEY=
TIKTOK_OAUTH_CLIENT_SECRET=
# --- Newsletter (Owned Media) ---
# Tool ist PRO KUNDE verschieden (Sendy/Mailchimp). Deshalb je Kunde ein eigener Key,
# Suffix = Kunden-Slug in GROSSBUCHSTABEN. Die Kunden-YAML wählt Tool + Key-Suffix aus
# (z.B. newsletter: { provider: sendy, env_suffix: OPENSTREAM }).
# Sendy (selbst-gehostet): API-Key + Installations-URL je Kunde.
# SENDY_API_KEY_<SLUG>=
# SENDY_URL_<SLUG>=https://newsletter.example.com
# Mailchimp: API-Key (enthält den Server-Prefix nach dem Bindestrich, z.B. ...-us21).
# MAILCHIMP_API_KEY_<SLUG>=
#
# Beispiel openstream (Sendy):
# SENDY_API_KEY_OPENSTREAM=
# SENDY_URL_OPENSTREAM=https://newsletter.openstream.ch
# --- Mailversand (Gmail-Draft via MCP ist der Standard; SMTP nur als Fallback) ---
# MAILER_DSN=smtp://user:pass@smtp.example.com:587
MAIL_FROM=nick@openstream.ch