Files
hack/tools/scripts/llm-key-hunter/results/_cache/content/amine2bxl_trade-vault.json
T

1 line
22 KiB
JSON

{"repo": "amine2bxl/trade-vault", "files": {".env.example": {"d76b034690cb913647721c693cee2f6fe5750b54": {"t": 1785747077.868506, "n": 3279, "h": "ce5e286091c1ae7f", "c": "# TradeVault — variables d'environnement.\n# Documentation complète : BACKEND.md §11.\n# Tout ce qui n'est PAS préfixé VITE_ est server-only et ne doit jamais\n# atteindre le bundle client.\n\n# --- Domaine canonique (client, build-time) ---\n# LA seule variable à changer le jour où un domaine personnalisé est branché.\n# Sert de base à toutes les redirections d'authentification (Google OAuth,\n# confirmation d'e-mail, réinitialisation de mot de passe). Sans trailing slash.\n# Repli codé dans src/shared/site.ts si absente. Détail : BACKEND.md §12.\nVITE_SITE_URL=https://tradevault.be\n\n# --- Supabase (client + serveur) ---\nSUPABASE_PROJECT_ID=\nSUPABASE_PUBLISHABLE_KEY=\nSUPABASE_URL=\nVITE_SUPABASE_PROJECT_ID=\nVITE_SUPABASE_PUBLISHABLE_KEY=\nVITE_SUPABASE_URL=\n# Secret critique : crons et webhooks uniquement (contourne la RLS).\n# Jamais utilisé par une server function agissant pour un utilisateur.\nSUPABASE_SERVICE_ROLE_KEY=\n\n# --- AI provider (server-only) ---\n# The app is provider-agnostic: it uses the first configured provider, or the\n# one named by AI_PROVIDER. Multiple keys are supported: if a provider fails\n# (quota, outage), the next configured one answers automatically.\n# AI_PROVIDER= # optional: \"gemini\" | \"anthropic\" | \"openai\" | \"groq\" | \"openrouter\"\nGEMINI_API_KEY=\n# GEMINI_MODEL=gemini-2.5-flash\nANTHROPIC_API_KEY=\n# ANTHROPIC_MODEL=claude-sonnet-5\n# OpenAI-compatible endpoints — one instance per provider, each with its own key.\nOPENAI_API_KEY=\n# OPENAI_MODEL=gpt-4o-mini\n# OPENAI_BASE_URL=https://api.openai.com/v1\nGROQ_API_KEY=\n# GROQ_MODEL=llama-3.3-70b-versatile\n# GROQ_BASE_URL=https://api.groq.com/openai/v1\nOPENROUTER_API_KEY=\n# OPENROUTER_MODEL=deepseek/deepseek-chat-v3-0324:free\n# OPENROUTER_BASE_URL=https://openrouter.ai/api/v1\n\n# --- AI access (server-only) ---\n# Paid gating switch. Leave empty / \"false\" during free early access so every\n# signed-in user gets full AI access. Set to \"true\" to require an active Pro\n# plan or trial once subscriptions launch.\nAI_REQUIRE_PRO=false\n# Per-user hourly cap on AI calls (abuse/cost protection, always on). Default 60.\nAI_RATE_LIMIT_PER_HOUR=60\n\n# --- Voice (server-only) ---\n# One hosted coach voice for every platform (deep, calm, charismatic EN).\n# Without this key the app silently falls back to the browser voice.\nELEVENLABS_API_KEY=\n# Force the browser voice even when a hosted key is set.\n# TTS_PROVIDER=local\n\n# --- Billing (server-only) ---\nSTRIPE_SECRET_KEY=\nSTRIPE_WEBHOOK_SECRET=\nSTRIPE_PRICE_PRO_MONTHLY=\nSTRIPE_PRICE_PRO_YEARLY=\nCOINBASE_COMMERCE_API_KEY=\nCOINBASE_COMMERCE_WEBHOOK_SECRET=\n\n# --- Lifecycle emails (server-only) ---\nRESEND_API_KEY=\nEMAIL_FROM=\"TradeVault <hello@tradevault.be>\"\nPUBLIC_SITE_URL=https://tradevault.be\n\n# --- Crons (server-only) ---\n# Shared secret expected as `Authorization: Bearer $CRON_SECRET` on every cron\n# endpoint. Without it the cron handlers answer 401 — never leave it empty in\n# production.\nCRON_SECRET=\n\n# --- Web push (server-only) ---\n# The public key is public by nature (it also ships in the client bundle); the\n# private key is required for sendWebPush to work at all.\n# VAPID_PUBLIC_KEY=\nVAPID_PRIVATE_KEY=\n# VAPID_SUBJECT=mailto:tradevault@outlook.fr\n\n# --- Trustpilot TrustBox (public) ---\nVITE_TRUSTPILOT_BUSINESS_UNIT_ID=\n"}, "b877ec0e78fc714afea62e4ec0a842c924b9bb01": {"t": 1785770280.555168, "n": 3279, "h": "ce5e286091c1ae7f", "c": "# TradeVault — variables d'environnement.\n# Documentation complète : BACKEND.md §11.\n# Tout ce qui n'est PAS préfixé VITE_ est server-only et ne doit jamais\n# atteindre le bundle client.\n\n# --- Domaine canonique (client, build-time) ---\n# LA seule variable à changer le jour où un domaine personnalisé est branché.\n# Sert de base à toutes les redirections d'authentification (Google OAuth,\n# confirmation d'e-mail, réinitialisation de mot de passe). Sans trailing slash.\n# Repli codé dans src/shared/site.ts si absente. Détail : BACKEND.md §12.\nVITE_SITE_URL=https://tradevault.be\n\n# --- Supabase (client + serveur) ---\nSUPABASE_PROJECT_ID=\nSUPABASE_PUBLISHABLE_KEY=\nSUPABASE_URL=\nVITE_SUPABASE_PROJECT_ID=\nVITE_SUPABASE_PUBLISHABLE_KEY=\nVITE_SUPABASE_URL=\n# Secret critique : crons et webhooks uniquement (contourne la RLS).\n# Jamais utilisé par une server function agissant pour un utilisateur.\nSUPABASE_SERVICE_ROLE_KEY=\n\n# --- AI provider (server-only) ---\n# The app is provider-agnostic: it uses the first configured provider, or the\n# one named by AI_PROVIDER. Multiple keys are supported: if a provider fails\n# (quota, outage), the next configured one answers automatically.\n# AI_PROVIDER= # optional: \"gemini\" | \"anthropic\" | \"openai\" | \"groq\" | \"openrouter\"\nGEMINI_API_KEY=\n# GEMINI_MODEL=gemini-2.5-flash\nANTHROPIC_API_KEY=\n# ANTHROPIC_MODEL=claude-sonnet-5\n# OpenAI-compatible endpoints — one instance per provider, each with its own key.\nOPENAI_API_KEY=\n# OPENAI_MODEL=gpt-4o-mini\n# OPENAI_BASE_URL=https://api.openai.com/v1\nGROQ_API_KEY=\n# GROQ_MODEL=llama-3.3-70b-versatile\n# GROQ_BASE_URL=https://api.groq.com/openai/v1\nOPENROUTER_API_KEY=\n# OPENROUTER_MODEL=deepseek/deepseek-chat-v3-0324:free\n# OPENROUTER_BASE_URL=https://openrouter.ai/api/v1\n\n# --- AI access (server-only) ---\n# Paid gating switch. Leave empty / \"false\" during free early access so every\n# signed-in user gets full AI access. Set to \"true\" to require an active Pro\n# plan or trial once subscriptions launch.\nAI_REQUIRE_PRO=false\n# Per-user hourly cap on AI calls (abuse/cost protection, always on). Default 60.\nAI_RATE_LIMIT_PER_HOUR=60\n\n# --- Voice (server-only) ---\n# One hosted coach voice for every platform (deep, calm, charismatic EN).\n# Without this key the app silently falls back to the browser voice.\nELEVENLABS_API_KEY=\n# Force the browser voice even when a hosted key is set.\n# TTS_PROVIDER=local\n\n# --- Billing (server-only) ---\nSTRIPE_SECRET_KEY=\nSTRIPE_WEBHOOK_SECRET=\nSTRIPE_PRICE_PRO_MONTHLY=\nSTRIPE_PRICE_PRO_YEARLY=\nCOINBASE_COMMERCE_API_KEY=\nCOINBASE_COMMERCE_WEBHOOK_SECRET=\n\n# --- Lifecycle emails (server-only) ---\nRESEND_API_KEY=\nEMAIL_FROM=\"TradeVault <hello@tradevault.be>\"\nPUBLIC_SITE_URL=https://tradevault.be\n\n# --- Crons (server-only) ---\n# Shared secret expected as `Authorization: Bearer $CRON_SECRET` on every cron\n# endpoint. Without it the cron handlers answer 401 — never leave it empty in\n# production.\nCRON_SECRET=\n\n# --- Web push (server-only) ---\n# The public key is public by nature (it also ships in the client bundle); the\n# private key is required for sendWebPush to work at all.\n# VAPID_PUBLIC_KEY=\nVAPID_PRIVATE_KEY=\n# VAPID_SUBJECT=mailto:tradevault@outlook.fr\n\n# --- Trustpilot TrustBox (public) ---\nVITE_TRUSTPILOT_BUSINESS_UNIT_ID=\n"}, "c2c07c3cd4014e159be7be40b35387f6568cbcee": {"t": 1785770281.945017, "n": 3065, "h": "f04bc72817131e6a", "c": "# TradeVault — variables d'environnement.\n# Documentation complète : BACKEND.md §11.\n# Tout ce qui n'est PAS préfixé VITE_ est server-only et ne doit jamais\n# atteindre le bundle client.\n\n# --- Domaine canonique (client, build-time) ---\n# LA seule variable à changer le jour où un domaine personnalisé est branché.\n# Sert de base à toutes les redirections d'authentification (Google OAuth,\n# confirmation d'e-mail, réinitialisation de mot de passe). Sans trailing slash.\n# Repli codé dans src/shared/site.ts si absente. Détail : BACKEND.md §12.\nVITE_SITE_URL=https://tradevault.be\n\n# --- Supabase (client + serveur) ---\nSUPABASE_PROJECT_ID=\nSUPABASE_PUBLISHABLE_KEY=\nSUPABASE_URL=\nVITE_SUPABASE_PROJECT_ID=\nVITE_SUPABASE_PUBLISHABLE_KEY=\nVITE_SUPABASE_URL=\n# Secret critique : crons et webhooks uniquement (contourne la RLS).\n# Jamais utilisé par une server function agissant pour un utilisateur.\nSUPABASE_SERVICE_ROLE_KEY=\n\n# --- AI provider (server-only) ---\n# The app is provider-agnostic: it uses the first configured provider, or the\n# one named by AI_PROVIDER. Tool-calling features require a tool-capable\n# provider (openai or anthropic).\n# AI_PROVIDER= # optional: \"gemini\" | \"anthropic\" | \"openai\"\nGEMINI_API_KEY=\n# GEMINI_MODEL=gemini-2.5-flash\nANTHROPIC_API_KEY=\n# ANTHROPIC_MODEL=claude-sonnet-5\n# OpenAI-compatible: works with OpenAI and any compatible endpoint (OpenRouter,\n# Together, Groq, local vLLM/Ollama) by pointing OPENAI_BASE_URL at it.\nOPENAI_API_KEY=\n# OPENAI_MODEL=gpt-4o-mini\n# OPENAI_BASE_URL=https://api.openai.com/v1\n\n# --- AI access (server-only) ---\n# Paid gating switch. Leave empty / \"false\" during free early access so every\n# signed-in user gets full AI access. Set to \"true\" to require an active Pro\n# plan or trial once subscriptions launch.\nAI_REQUIRE_PRO=false\n# Per-user hourly cap on AI calls (abuse/cost protection, always on). Default 60.\nAI_RATE_LIMIT_PER_HOUR=60\n\n# --- Voice (server-only) ---\n# One hosted coach voice for every platform (deep, calm, charismatic EN).\n# Without this key the app silently falls back to the browser voice.\nELEVENLABS_API_KEY=\n# Force the browser voice even when a hosted key is set.\n# TTS_PROVIDER=local\n\n# --- Billing (server-only) ---\nSTRIPE_SECRET_KEY=\nSTRIPE_WEBHOOK_SECRET=\nSTRIPE_PRICE_PRO_MONTHLY=\nSTRIPE_PRICE_PRO_YEARLY=\nCOINBASE_COMMERCE_API_KEY=\nCOINBASE_COMMERCE_WEBHOOK_SECRET=\n\n# --- Lifecycle emails (server-only) ---\nRESEND_API_KEY=\nEMAIL_FROM=\"TradeVault <hello@tradevault.be>\"\nPUBLIC_SITE_URL=https://tradevault.be\n\n# --- Crons (server-only) ---\n# Shared secret expected as `Authorization: Bearer $CRON_SECRET` on every cron\n# endpoint. Without it the cron handlers answer 401 — never leave it empty in\n# production.\nCRON_SECRET=\n\n# --- Web push (server-only) ---\n# The public key is public by nature (it also ships in the client bundle); the\n# private key is required for sendWebPush to work at all.\n# VAPID_PUBLIC_KEY=\nVAPID_PRIVATE_KEY=\n# VAPID_SUBJECT=mailto:tradevault@outlook.fr\n\n# --- Trustpilot TrustBox (public) ---\nVITE_TRUSTPILOT_BUSINESS_UNIT_ID=\n"}, "21345120904ec72dfeeb7b2a61fc6c4314590cfc": {"t": 1785770283.8923292, "n": 3084, "h": "b894bddae4f7dd64", "c": "# TradeVault — variables d'environnement.\n# Documentation complète : BACKEND.md §11.\n# Tout ce qui n'est PAS préfixé VITE_ est server-only et ne doit jamais\n# atteindre le bundle client.\n\n# --- Domaine canonique (client, build-time) ---\n# LA seule variable à changer le jour où un domaine personnalisé est branché.\n# Sert de base à toutes les redirections d'authentification (Google OAuth,\n# confirmation d'e-mail, réinitialisation de mot de passe). Sans trailing slash.\n# Repli codé dans src/shared/site.ts si absente. Détail : BACKEND.md §12.\nVITE_SITE_URL=https://tradevaultt.vercel.app\n\n# --- Supabase (client + serveur) ---\nSUPABASE_PROJECT_ID=\nSUPABASE_PUBLISHABLE_KEY=\nSUPABASE_URL=\nVITE_SUPABASE_PROJECT_ID=\nVITE_SUPABASE_PUBLISHABLE_KEY=\nVITE_SUPABASE_URL=\n# Secret critique : crons et webhooks uniquement (contourne la RLS).\n# Jamais utilisé par une server function agissant pour un utilisateur.\nSUPABASE_SERVICE_ROLE_KEY=\n\n# --- AI provider (server-only) ---\n# The app is provider-agnostic: it uses the first configured provider, or the\n# one named by AI_PROVIDER. Tool-calling features require a tool-capable\n# provider (openai or anthropic).\n# AI_PROVIDER= # optional: \"gemini\" | \"anthropic\" | \"openai\"\nGEMINI_API_KEY=\n# GEMINI_MODEL=gemini-2.5-flash\nANTHROPIC_API_KEY=\n# ANTHROPIC_MODEL=claude-sonnet-5\n# OpenAI-compatible: works with OpenAI and any compatible endpoint (OpenRouter,\n# Together, Groq, local vLLM/Ollama) by pointing OPENAI_BASE_URL at it.\nOPENAI_API_KEY=\n# OPENAI_MODEL=gpt-4o-mini\n# OPENAI_BASE_URL=https://api.openai.com/v1\n\n# --- AI access (server-only) ---\n# Paid gating switch. Leave empty / \"false\" during free early access so every\n# signed-in user gets full AI access. Set to \"true\" to require an active Pro\n# plan or trial once subscriptions launch.\nAI_REQUIRE_PRO=false\n# Per-user hourly cap on AI calls (abuse/cost protection, always on). Default 60.\nAI_RATE_LIMIT_PER_HOUR=60\n\n# --- Voice (server-only) ---\n# One hosted coach voice for every platform (deep, calm, charismatic EN).\n# Without this key the app silently falls back to the browser voice.\nELEVENLABS_API_KEY=\n# Force the browser voice even when a hosted key is set.\n# TTS_PROVIDER=local\n\n# --- Billing (server-only) ---\nSTRIPE_SECRET_KEY=\nSTRIPE_WEBHOOK_SECRET=\nSTRIPE_PRICE_PRO_MONTHLY=\nSTRIPE_PRICE_PRO_YEARLY=\nCOINBASE_COMMERCE_API_KEY=\nCOINBASE_COMMERCE_WEBHOOK_SECRET=\n\n# --- Lifecycle emails (server-only) ---\nRESEND_API_KEY=\nEMAIL_FROM=\"TradeVault <hello@tradevault.app>\"\nPUBLIC_SITE_URL=https://tradevaultt.vercel.app\n\n# --- Crons (server-only) ---\n# Shared secret expected as `Authorization: Bearer $CRON_SECRET` on every cron\n# endpoint. Without it the cron handlers answer 401 — never leave it empty in\n# production.\nCRON_SECRET=\n\n# --- Web push (server-only) ---\n# The public key is public by nature (it also ships in the client bundle); the\n# private key is required for sendWebPush to work at all.\n# VAPID_PUBLIC_KEY=\nVAPID_PRIVATE_KEY=\n# VAPID_SUBJECT=mailto:tradevault@outlook.fr\n\n# --- Trustpilot TrustBox (public) ---\nVITE_TRUSTPILOT_BUSINESS_UNIT_ID=\n"}, "a233f9ec494b51b1a9a0c468bed90ff475719614": {"t": 1785770285.0816226, "n": 2681, "h": "c8b77609a8dc48ab", "c": "# TradeVault — variables d'environnement.\n# Documentation complète : BACKEND.md §11.\n# Tout ce qui n'est PAS préfixé VITE_ est server-only et ne doit jamais\n# atteindre le bundle client.\n\n# --- Supabase (client + serveur) ---\nSUPABASE_PROJECT_ID=\nSUPABASE_PUBLISHABLE_KEY=\nSUPABASE_URL=\nVITE_SUPABASE_PROJECT_ID=\nVITE_SUPABASE_PUBLISHABLE_KEY=\nVITE_SUPABASE_URL=\n# Secret critique : crons et webhooks uniquement (contourne la RLS).\n# Jamais utilisé par une server function agissant pour un utilisateur.\nSUPABASE_SERVICE_ROLE_KEY=\n\n# --- AI provider (server-only) ---\n# The app is provider-agnostic: it uses the first configured provider, or the\n# one named by AI_PROVIDER. Tool-calling features require a tool-capable\n# provider (openai or anthropic).\n# AI_PROVIDER= # optional: \"gemini\" | \"anthropic\" | \"openai\"\nGEMINI_API_KEY=\n# GEMINI_MODEL=gemini-2.5-flash\nANTHROPIC_API_KEY=\n# ANTHROPIC_MODEL=claude-sonnet-5\n# OpenAI-compatible: works with OpenAI and any compatible endpoint (OpenRouter,\n# Together, Groq, local vLLM/Ollama) by pointing OPENAI_BASE_URL at it.\nOPENAI_API_KEY=\n# OPENAI_MODEL=gpt-4o-mini\n# OPENAI_BASE_URL=https://api.openai.com/v1\n\n# --- AI access (server-only) ---\n# Paid gating switch. Leave empty / \"false\" during free early access so every\n# signed-in user gets full AI access. Set to \"true\" to require an active Pro\n# plan or trial once subscriptions launch.\nAI_REQUIRE_PRO=false\n# Per-user hourly cap on AI calls (abuse/cost protection, always on). Default 60.\nAI_RATE_LIMIT_PER_HOUR=60\n\n# --- Voice (server-only) ---\n# One hosted coach voice for every platform (deep, calm, charismatic EN).\n# Without this key the app silently falls back to the browser voice.\nELEVENLABS_API_KEY=\n# Force the browser voice even when a hosted key is set.\n# TTS_PROVIDER=local\n\n# --- Billing (server-only) ---\nSTRIPE_SECRET_KEY=\nSTRIPE_WEBHOOK_SECRET=\nSTRIPE_PRICE_PRO_MONTHLY=\nSTRIPE_PRICE_PRO_YEARLY=\nCOINBASE_COMMERCE_API_KEY=\nCOINBASE_COMMERCE_WEBHOOK_SECRET=\n\n# --- Lifecycle emails (server-only) ---\nRESEND_API_KEY=\nEMAIL_FROM=\"TradeVault <hello@tradevault.app>\"\nPUBLIC_SITE_URL=https://tradevaultt.vercel.app\n\n# --- Crons (server-only) ---\n# Shared secret expected as `Authorization: Bearer $CRON_SECRET` on every cron\n# endpoint. Without it the cron handlers answer 401 — never leave it empty in\n# production.\nCRON_SECRET=\n\n# --- Web push (server-only) ---\n# The public key is public by nature (it also ships in the client bundle); the\n# private key is required for sendWebPush to work at all.\n# VAPID_PUBLIC_KEY=\nVAPID_PRIVATE_KEY=\n# VAPID_SUBJECT=mailto:tradevault@outlook.fr\n\n# --- Trustpilot TrustBox (public) ---\nVITE_TRUSTPILOT_BUSINESS_UNIT_ID=\n"}, "7a91938fcdd5b9a79e4377259bd58155b4dd1b17": {"t": 1785770286.3609483, "n": 1708, "h": "9e398e40a2a9d578", "c": "SUPABASE_PROJECT_ID=\nSUPABASE_PUBLISHABLE_KEY=\nSUPABASE_URL=\nVITE_SUPABASE_PROJECT_ID=\nVITE_SUPABASE_PUBLISHABLE_KEY=\nVITE_SUPABASE_URL=\nGEMINI_API_KEY=\n\n# --- AI provider (server-only) ---\n# The app is provider-agnostic: it uses the first configured provider, or the\n# one named by AI_PROVIDER. Tool-calling features require a tool-capable\n# provider (openai or anthropic).\n# AI_PROVIDER= # optional: \"gemini\" | \"anthropic\" | \"openai\"\nANTHROPIC_API_KEY=\n# ANTHROPIC_MODEL=claude-sonnet-5\n# OpenAI-compatible: works with OpenAI and any compatible endpoint (OpenRouter,\n# Together, Groq, local vLLM/Ollama) by pointing OPENAI_BASE_URL at it.\n# --- Voice (server-only) ---\n# One hosted coach voice for every platform (deep, calm, charismatic EN).\n# Without this key the app silently falls back to the browser voice.\nELEVENLABS_API_KEY=\n\nOPENAI_API_KEY=\n# OPENAI_MODEL=gpt-4o-mini\n# OPENAI_BASE_URL=https://api.openai.com/v1\n\n# --- AI access (server-only) ---\n# Paid gating switch. Leave empty / \"false\" during free early access so every\n# signed-in user gets full AI access. Set to \"true\" to require an active Pro\n# plan or trial once subscriptions launch.\nAI_REQUIRE_PRO=false\n# Per-user hourly cap on AI calls (abuse/cost protection, always on). Default 60.\nAI_RATE_LIMIT_PER_HOUR=60\n\n# --- Billing (server-only) ---\nSTRIPE_SECRET_KEY=\nSTRIPE_WEBHOOK_SECRET=\nSTRIPE_PRICE_PRO_MONTHLY=\nSTRIPE_PRICE_PRO_YEARLY=\nCOINBASE_COMMERCE_API_KEY=\nCOINBASE_COMMERCE_WEBHOOK_SECRET=\n\n# --- Lifecycle emails (server-only) ---\nRESEND_API_KEY=\nEMAIL_FROM=\"TradeVault <hello@tradevault.app>\"\nPUBLIC_SITE_URL=https://tradevaultt.vercel.app\n\n# --- Trustpilot TrustBox (public) ---\nVITE_TRUSTPILOT_BUSINESS_UNIT_ID=\n"}, "38d0156a1494ad0053ab717583938ebae680f711": {"t": 1785770287.6891663, "n": 1514, "h": "91baf4deaf6fa10e", "c": "SUPABASE_PROJECT_ID=\nSUPABASE_PUBLISHABLE_KEY=\nSUPABASE_URL=\nVITE_SUPABASE_PROJECT_ID=\nVITE_SUPABASE_PUBLISHABLE_KEY=\nVITE_SUPABASE_URL=\nGEMINI_API_KEY=\n\n# --- AI provider (server-only) ---\n# The app is provider-agnostic: it uses the first configured provider, or the\n# one named by AI_PROVIDER. Tool-calling features require a tool-capable\n# provider (openai or anthropic).\n# AI_PROVIDER= # optional: \"gemini\" | \"anthropic\" | \"openai\"\nANTHROPIC_API_KEY=\n# ANTHROPIC_MODEL=claude-sonnet-5\n# OpenAI-compatible: works with OpenAI and any compatible endpoint (OpenRouter,\n# Together, Groq, local vLLM/Ollama) by pointing OPENAI_BASE_URL at it.\nOPENAI_API_KEY=\n# OPENAI_MODEL=gpt-4o-mini\n# OPENAI_BASE_URL=https://api.openai.com/v1\n\n# --- AI access (server-only) ---\n# Paid gating switch. Leave empty / \"false\" during free early access so every\n# signed-in user gets full AI access. Set to \"true\" to require an active Pro\n# plan or trial once subscriptions launch.\nAI_REQUIRE_PRO=false\n# Per-user hourly cap on AI calls (abuse/cost protection, always on). Default 60.\nAI_RATE_LIMIT_PER_HOUR=60\n\n# --- Billing (server-only) ---\nSTRIPE_SECRET_KEY=\nSTRIPE_WEBHOOK_SECRET=\nSTRIPE_PRICE_PRO_MONTHLY=\nSTRIPE_PRICE_PRO_YEARLY=\nCOINBASE_COMMERCE_API_KEY=\nCOINBASE_COMMERCE_WEBHOOK_SECRET=\n\n# --- Lifecycle emails (server-only) ---\nRESEND_API_KEY=\nEMAIL_FROM=\"TradeVault <hello@tradevault.app>\"\nPUBLIC_SITE_URL=https://tradevaultt.vercel.app\n\n# --- Trustpilot TrustBox (public) ---\nVITE_TRUSTPILOT_BUSINESS_UNIT_ID=\n"}, "2af719f4e0c1d918409cb1101a6e6819083cdca4": {"t": 1785770289.0631988, "n": 928, "h": "66c28ece461bb30f", "c": "SUPABASE_PROJECT_ID=\nSUPABASE_PUBLISHABLE_KEY=\nSUPABASE_URL=\nVITE_SUPABASE_PROJECT_ID=\nVITE_SUPABASE_PUBLISHABLE_KEY=\nVITE_SUPABASE_URL=\nGEMINI_API_KEY=\n\n# --- AI access (server-only) ---\n# Paid gating switch. Leave empty / \"false\" during free early access so every\n# signed-in user gets full AI access. Set to \"true\" to require an active Pro\n# plan or trial once subscriptions launch.\nAI_REQUIRE_PRO=false\n# Per-user hourly cap on AI calls (abuse/cost protection, always on). Default 60.\nAI_RATE_LIMIT_PER_HOUR=60\n\n# --- Billing (server-only) ---\nSTRIPE_SECRET_KEY=\nSTRIPE_WEBHOOK_SECRET=\nSTRIPE_PRICE_PRO_MONTHLY=\nSTRIPE_PRICE_PRO_YEARLY=\nCOINBASE_COMMERCE_API_KEY=\nCOINBASE_COMMERCE_WEBHOOK_SECRET=\n\n# --- Lifecycle emails (server-only) ---\nRESEND_API_KEY=\nEMAIL_FROM=\"TradeVault <hello@tradevault.app>\"\nPUBLIC_SITE_URL=https://tradevaultt.vercel.app\n\n# --- Trustpilot TrustBox (public) ---\nVITE_TRUSTPILOT_BUSINESS_UNIT_ID=\n"}, "857e92b94f78d8fdc7a6307c883167a498a2b0b0": {"t": 1785770290.347313, "n": 566, "h": "8c3d4148ed42f75c", "c": "SUPABASE_PROJECT_ID=\nSUPABASE_PUBLISHABLE_KEY=\nSUPABASE_URL=\nVITE_SUPABASE_PROJECT_ID=\nVITE_SUPABASE_PUBLISHABLE_KEY=\nVITE_SUPABASE_URL=\nGEMINI_API_KEY=\n\n# --- Billing (server-only) ---\nSTRIPE_SECRET_KEY=\nSTRIPE_WEBHOOK_SECRET=\nSTRIPE_PRICE_PRO_MONTHLY=\nSTRIPE_PRICE_PRO_YEARLY=\nCOINBASE_COMMERCE_API_KEY=\nCOINBASE_COMMERCE_WEBHOOK_SECRET=\n\n# --- Lifecycle emails (server-only) ---\nRESEND_API_KEY=\nEMAIL_FROM=\"TradeVault <hello@tradevault.app>\"\nPUBLIC_SITE_URL=https://tradevaultt.vercel.app\n\n# --- Trustpilot TrustBox (public) ---\nVITE_TRUSTPILOT_BUSINESS_UNIT_ID=\n"}, "ee9c7f0fc0882a8da2463dd1276f6bf7edcd171b": {"t": 1785770291.6677618, "n": 153, "h": "2b38c3fc038e6224", "c": "SUPABASE_PROJECT_ID=\nSUPABASE_PUBLISHABLE_KEY=\nSUPABASE_URL=\nVITE_SUPABASE_PROJECT_ID=\nVITE_SUPABASE_PUBLISHABLE_KEY=\nVITE_SUPABASE_URL=\nGEMINI_API_KEY=\n"}, "d074e9b656776fa875715f1c8e57f85d74867325": {"t": 1785770293.2461045, "n": 137, "h": "575546a42f87d266", "c": "SUPABASE_PROJECT_ID=\nSUPABASE_PUBLISHABLE_KEY=\nSUPABASE_URL=\nVITE_SUPABASE_PROJECT_ID=\nVITE_SUPABASE_PUBLISHABLE_KEY=\nVITE_SUPABASE_URL=\n"}}}}