# ElevenLabs API Key (REQUIRED) # Free tier: Web UI only, no API access # Starter ($5/mo): Full API access to all premade voices (RECOMMENDED) # Get your key at: https://elevenlabs.io/app/settings/api-keys ELEVENLABS_API_KEY=your_key_here # Optional: voice quality default (subscription product keeps premium voices). # ELEVENLABS_TTS_MODEL changes the global default for all callers. # ELEVENLABS_TTS_MODEL=eleven_multilingual_v2 # # Optional: cost levers scoped to the $1 x402 briefing only # (src/app/api/mcp/briefing/route.ts) — the subscription product is untouched. # - BRIEFING_TTS_MODEL defaults to eleven_flash_v2_5 (~50% cheaper speech). # - BRIEFING_SFX_MODE=bookends (default: intro + outro jingles only, skips the # per-topic whoosh transitions that dominate briefing cost). # full = legacy produced cut, none = speech only. # BRIEFING_TTS_MODEL=eleven_flash_v2_5 # BRIEFING_SFX_MODE=bookends # - BRIEFING_TTS_TIMEOUT_MS=25000: TTS budget inside a paid briefing; over # budget degrades to a text-only 200 instead of timing out the caller. # - BRIEFING_LIVE_TIMEOUT_MS=15000: per-service budget for live re-verification # on scoped briefings (unpaid checks + paid re-verify for that service). # - BRIEFING_LIVE_PAID_BUDGET_USD=0.10: outbound paid-verification cap per # briefing (0 disables paid re-verification; always bounded by the shared # $1/day INDEX_DAILY_VERIFY_BUDGET_USD ledger). # Browser Automation Provider (EXPERIMENTAL - for free tier fallback) # Options: auto (default), agent-browser, browser-use-cli, browser-use, tinyfish # - auto: Automatically detects and uses the first available provider # - agent-browser: Local Rust CLI (requires: npm install -g agent-browser) # - browser-use-cli: Local Python CLI (requires: curl -fsSL https://browser-use.com/cli/install.sh | bash) # - browser-use: Cloud API (requires: BROWSER_USE_API_KEY) # - tinyfish: Cloud AI agent (requires: TINYFISH_API_KEY) # Note: Browser automation requires ElevenLabs web UI login and is slower than API BROWSER_PROVIDER=auto # Cloud Provider API Keys (optional, only needed if using cloud providers) # BROWSER_USE_API_KEY=your_browser_use_key # TINYFISH_API_KEY=sk-tinyfish-your_key # Optional: LLM for natural podcast scripts (falls back to templates if not set) # Works with any OpenAI-compatible API (OpenAI, Azure OpenAI, Ollama, etc.) # OPENAI_API_KEY=your_key_here # OPENAI_BASE_URL=https://api.openai.com/v1 # OPENAI_MODEL=gpt-4o-mini # # Azure OpenAI (see docs/AZURE.md): use the OpenAI-compatible v1 endpoint — # OPENAI_BASE_URL=https://YOUR_RESOURCE.openai.azure.com/openai/v1 # OPENAI_API_KEY=your_azure_openai_key # OPENAI_MODEL=your_deployment_name # Optional: Protect synthesis endpoints from unauthorized use # If not set, endpoints are open (fine for local dev) # DATABARD_API_SECRET=your_secret_here # Optional: Stripe for Pro subscriptions # All three are required for checkout to work; also register the webhook # endpoint (https:///api/webhook) in the Stripe dashboard. # STRIPE_SECRET_KEY=sk_test_... # STRIPE_PRICE_ID=price_... # STRIPE_WEBHOOK_SECRET=whsec_... # Optional: Sentry error monitoring (recommended for production) # Create a project at sentry.io and copy the DSN. # NEXT_PUBLIC_SENTRY_DSN=https://your_key@sentry.io/project_id # Optional: Schedule runner auth (required for scheduled digests to fire) # The server cron POSTs /api/schedules/run hourly with this in x-cron-secret. # Separate from DATABARD_API_SECRET, which guards browser-called routes. # CRON_SECRET=your_random_secret # Optional: Email delivery for scheduled digests (one of the two) # SMTP_URL=smtps://user:pass@smtp.example.com:465 # EMAIL_WEBHOOK_URL=https://your-email-relay.example.com/send # EMAIL_FROM=DataBard # Optional: Plausible analytics (page views/referrers; custom events are # first-party via /api/events regardless). BUILD-TIME variable — must be set # in the environment where `npm run build` runs, not just on the server. # NEXT_PUBLIC_PLAUSIBLE_DOMAIN=databard.persidian.com # NEXT_PUBLIC_PLAUSIBLE_SRC=https://plausible.io/js/script.js # Optional: Token-gated private RSS feed # DATABARD_FEED_TOKEN=your_team_token # Optional: Webhook URL for notifications on episode generation (Slack, Discord, etc.) # DATABARD_WEBHOOK_URL=https://hooks.slack.com/services/T.../B.../xxx # Optional: Configure default data source (openmetadata, dbt-cloud, dbt-local) # These can be overridden in the UI # OPENMETADATA_URL=http://localhost:8585 # OPENMETADATA_TOKEN=your_token_here # Optional: Shared OpenMetadata sandbox mode (used when UI selects "Use Sandbox") # OM_SANDBOX_URL=https://sandbox.open-metadata.org # OM_SANDBOX_TOKEN=your_sandbox_bot_jwt # NEXT_PUBLIC_OM_SANDBOX_URL=https://sandbox.open-metadata.org # DBT_CLOUD_ACCOUNT_ID=12345 # DBT_CLOUD_PROJECT_ID=67890 # DBT_CLOUD_TOKEN=your_token_here # DBT_MANIFEST_PATH=./target/manifest.json # Optional: Monid metered endpoints ("OpenRouter for agent tools") — source: "monid". # Runs any discovered endpoint via the `monid` CLI, maps the result rows to a health # score, and captures the measured per-run cost as a receipt. RUNTIME variables # (read server-side at request time, NOT baked into the build). The CLI must be on # the server: `npm i -g @monid-ai/cli`. See docs/MONID_HACKATHON.md. # MONID_API_KEY=your_monid_key # env-first (adapter materialises a temp CLI credential store per run; verified CLI 0.1.7 does NOT read this env var directly); a request may override with monid.apiKey # MONID_BIN=monid # path to the monid CLI if it isn't on PATH # MONID_TIMEOUT_MS=130000 # must exceed the CLI's max --wait window (120s) # MONID_MAX_BUFFER=10485760 # 10 MB stdout cap for large result sets # Optional: DataBard Probe — outbound x402 payments to probed services. # The private key (hex, with 0x prefix) of the X Layer wallet that pays for # outbound probe calls. Reuse the same wallet as PAY_TO_ADDRESS or a dedicated # one. Must hold ≥ $1 USDT0 per probe run. Never commit this value. # PROBE_PAYER_PK=0xYOUR_PRIVATE_KEY_HERE # PROBE_RPC_URL=https://xlayerrpc.okx.com # X Layer RPC (default) # PROBE_ATTESTATION_PK=0x... # optional; if unset, attestation falls back to PROBE_PAYER_PK # PROBE_REGISTRY_ADDRESS= # ProbeVerdictRegistry on X Layer — publishRun writes per-service scores on-chain # LIGIS_BASE_URL=https://ligis.dev # Ligis credential-lookup base URL # Optional: portable-receipt HTTP API (runtime server-only RPC; defaults to devnet). # Used only by /api/attestation/solana/{prepare,anchor,verify}; legacy routes unchanged. # SOLANA_ATTESTATION_RPC_URL=https://api.devnet.solana.com # No issuer private key: callers sign and pay with their own wallet. # Never set a NEXT_PUBLIC variable containing a private RPC credential. # Optional: Solana configuration (for on-chain episode minting and Palm USD payments) # NEXT_PUBLIC_SOLANA_NETWORK=devnet # mainnet-beta, devnet, or testnet # NEXT_PUBLIC_SOLANA_RPC_URL=https://api.devnet.solana.com # Custom RPC endpoint # NEXT_PUBLIC_PALM_USD_MINT=CZzgUBvxaMLwMhVSLgqJn3npmxoTo6nzMNQPAnwtHF3s # Palm USD token mint (Solana mainnet) # PALM_USD_RECIPIENT=your_treasury_wallet # Where Palm USD payments are received # --- Beam (reflection/Beam-1.0-501B-A23B) access — see docs/BEAM.md --- # All three are OpenAI-compatible providers in src/lib/llm-providers.ts. # They are NOT in the default fallback chain — opt in per run: # LOOP_PROVIDER_ORDER=reflection,openrouter (or hf) ... # REFLECTION_API_KEY= # Reflection's own API (platform.reflection.ai) — free daily allowance # REFLECTION_BASE_URL= # default https://api.reflection.ai/openai/v1 # LOOP_REFLECTION_MODEL= # default Beam-1.0-501B-A23B # OPENROUTER_API_KEY= # OpenRouter listing, $0.25/M in, $1/M out # LOOP_OPENROUTER_MODEL= # default reflection/beam-1.0-501b-a23b # HF_API_KEY= # Hugging Face token w/ claimed credits # HF_INFERENCE_PROVIDER= # router backend: together|cerebras|novita (default together) # LOOP_HF_MODEL= # default reflection/Beam-1.0-501B-A23B