-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy path.env.example
More file actions
101 lines (84 loc) · 4.2 KB
/
Copy path.env.example
File metadata and controls
101 lines (84 loc) · 4.2 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
# PostgreSQL (optional — omit to use local SQLite)
# DATABASE_URL=postgresql://user:password@host:5432/influencex
# Network proxy (optional, for local dev behind restrictive networks)
# HTTPS_PROXY=http://127.0.0.1:7890
# HTTP_PROXY=http://127.0.0.1:7890
# YouTube Data API v3
YOUTUBE_API_KEY=your_youtube_api_key
# Gmail OAuth — lets each workspace connect their own Gmail to send outreach
# from their real identity. Requires a Google Cloud project with Gmail API
# enabled and the gmail.send scope, which is a restricted scope (2-5 day
# verification review). Redirect URI to register:
# https://<your-domain>/api/publish/oauth/gmail/callback
# When a workspace has connected, sends from that workspace prefer Gmail over
# Resend; if Gmail fails or isn't connected the send falls back to Resend/SMTP.
# GMAIL_OAUTH_CLIENT_ID=xxx.apps.googleusercontent.com
# GMAIL_OAUTH_CLIENT_SECRET=GOCSPX-xxx
# Encryption key for OAuth tokens stored in platform_connections (Gmail only
# for now; existing YouTube/TikTok tokens remain plaintext until migrated).
# MUST decode to 32 bytes — generate with `openssl rand -base64 32`. Without
# this set, a dev-only derived key is used and a warning is logged at startup.
# MAILBOX_ENCRYPTION_KEY=
# Resend Email API
RESEND_API_KEY=your_resend_api_key
RESEND_FROM_EMAIL=contact@yourdomain.com
RESEND_REPLY_TO=replies@yourdomain.com
RESEND_WEBHOOK_SECRET=whsec_your_signing_secret
# Hunter.io - domain email search
HUNTER_API_KEY=your_hunter_api_key
# LLM providers — pick at least ONE for personalized outreach emails.
# Without any of these, the server falls back to a hardcoded template.
# Detection order in server/llm/index.js: Anthropic → OpenAI → Google.
ANTHROPIC_API_KEY=
# OPENAI_API_KEY=
# GOOGLE_AI_API_KEY=
# Admin setup (first run only)
ADMIN_EMAIL=admin@yourdomain.com
ADMIN_PASSWORD=change_me_on_first_run
ADMIN_NAME=Admin
# CORS (comma-separated, only enforced in production)
# CORS_ORIGINS=https://yourdomain.com,https://www.yourdomain.com
# Scheduler (background email sending)
# SCHEDULER_ENABLED=true
# SCHEDULER_TICK_MS=300000 # 5 min
# FOLLOW_UP_AFTER_DAYS=4
# MAX_FOLLOW_UPS=1
# YouTube API daily quota (default 10000, set lower if you have a reduced quota)
# YOUTUBE_QUOTA_DAILY=10000
# Apify - enables real Instagram / TikTok hashtag discovery + profile scraping
# Sign up at https://apify.com, copy your personal API token
APIFY_TOKEN=
# Daily quota guards (defaults: 200 runs / 10000 items, with 0.9 safety margin)
# APIFY_DAILY_RUN_QUOTA=200
# APIFY_DAILY_ITEMS_QUOTA=10000
# Sentry — error tracking. Without DSN every Sentry call is a no-op so safe
# to deploy unset. Both server and client SDKs use their respective DSN.
# SENTRY_DSN=https://<key>@o123.ingest.sentry.io/456
# SENTRY_ENVIRONMENT=production
# SENTRY_TRACES_SAMPLE_RATE=0.1
# Client build-time variables (Vite reads VITE_*-prefixed vars at BUILD time,
# not runtime — set them in your .env *before* `npm run build`).
# VITE_API_BASE=/api # Override only when serving under a sub-path
# VITE_SENTRY_DSN=https://<key>@o123.ingest.sentry.io/789
# VITE_SENTRY_ENVIRONMENT=production
# VITE_SENTRY_RELEASE=v1.0.0
# VITE_SENTRY_TRACES_RATE=0.1
# VITE_SENTRY_REPLAY_RATE=0
# Server-side hardening knobs (audit-driven defaults are sane; override only
# when you understand the trade-off).
# BCRYPT_ROUNDS=12 # Cost factor for new password hashes (10-14 sensible)
# STRICT_WORKSPACE_SCOPE=true # Force every /api/* call to send X-Workspace-Id (no default fallback)
# HARD_BOUNCE_BLOCK_THRESHOLD=2 # Block a KOL after this many bounce/complaint events
# OpenTelemetry — traces to Cloud Trace / Honeycomb / Grafana Cloud / etc.
# Without ENDPOINT every otel call is a no-op. Auto-instruments HTTP +
# Express + pg + fetch. Sprint Q2 task A2.
# OTEL_EXPORTER_OTLP_ENDPOINT=https://api.honeycomb.io
# OTEL_EXPORTER_OTLP_HEADERS=x-honeycomb-team=YOUR_KEY,x-honeycomb-dataset=influencex
# OTEL_SERVICE_NAME=influencex
# OTEL_SERVICE_VERSION=1.0.0
# Redis — Memorystore for BullMQ + cache + rate-limit. Without REDIS_URL the
# in-process queue/cache fallback is used. Sprint Q2 tasks A3+A4.
# REDIS_URL=redis://10.0.0.1:6379
# Email template defaults
# SENDER_NAME=Your Name
# PRODUCT_NAME=Your Product