-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy path.env.example
More file actions
106 lines (92 loc) · 6.87 KB
/
Copy path.env.example
File metadata and controls
106 lines (92 loc) · 6.87 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
# ─── Supabase ────────────────────────────────────────────────────────────────
# REQUIRED for live (non-mock) reads. The server client needs all three.
# With none set, the app builds + serves deterministic mock data (no throw).
NEXT_PUBLIC_SUPABASE_URL=
NEXT_PUBLIC_SUPABASE_ANON_KEY=
SUPABASE_SERVICE_ROLE_KEY=
# ─── Stripe (TEST mode) ──────────────────────────────────────────────────────
# Use test-prefixed keys for smoke. Routes 503 stripe_not_configured until set.
STRIPE_SECRET_KEY=sk_test_
NEXT_PUBLIC_STRIPE_PUBLISHABLE_KEY=pk_test_
STRIPE_WEBHOOK_SECRET=whsec_
# Stripe price ids (recurring). Each tier 503s price_not_configured until set.
STRIPE_PRICE_PATRON_MONTHLY=price_
STRIPE_PRICE_PRO_MONTHLY=price_
STRIPE_PRICE_PRO_YEARLY=price_
STRIPE_PRICE_CIRCLE_SPONSOR=price_
# One-time claim purchase. OPERATOR_OVERRIDE_REQUIRED — set to the test/live price id.
STRIPE_PRICE_CLAIM_LIFETIME=price_
# ─── Site ────────────────────────────────────────────────────────────────────
# Set to the real Vercel/production URL in prod, or Stripe redirect/return URLs
# will point at localhost.
NEXT_PUBLIC_SITE_URL=http://localhost:3000
# ─── PostHog (product analytics) ─────────────────────────────────────────────
# Funnel/usage analytics. UNSET = no-ops cleanly — every capture guards on the key,
# so local/mock builds never phone home. Set these in Vercel to turn analytics on;
# events flow the moment the key lands (no redeploy of app logic needed).
# Client + server reuse the same PUBLIC project API key (phc_...).
# Default host is US cloud; for an EU project set NEXT_PUBLIC_POSTHOG_HOST to the
# https://eu.i.posthog.com host (the /ingest reverse proxy + assets host follow it).
NEXT_PUBLIC_POSTHOG_KEY=phc_
NEXT_PUBLIC_POSTHOG_HOST=https://us.i.posthog.com
# Server-side capture (posthog-node, at the API boundary) reuses the same key:
POSTHOG_KEY=phc_
# ─── Scoring ruleset (server-only IP boundary) ───────────────────────────────
# SIGRANK_RULESET — JSON blob of the REAL proprietary RS.xx scoring parameters.
# Read once at server start by lib/scoring/secret-config.ts; unset = the public
# PLACEHOLDER values in lib/scoring/ruleset.ts (build/runtime work with none set).
# Partial blob allowed — only the keys present override; omitted/invalid keys keep
# the placeholder. NEVER commit real values; set this ONLY in Vercel env.
# Example (placeholder shapes — replace numbers with the real ruleset):
# SIGRANK_RULESET={"RS01_SIGNA_WEIGHTS":{"comp":0.3,"sd":0.2,"pc":0.2,"ct":0.15,"tt":0.15},"RS05_CLASS_THRESHOLDS":[{"class":"TRANSMITTER","compMin":0.85,"signaMin":85}]}
SIGRANK_RULESET=
# ─── Public API (CORPUS gate #3) ─────────────────────────────────────────────
# Grants bulk/full reads of the public /api/v1 read endpoints (leaderboard,
# metrics/leaders) via the `x-api-key` request header. UNSET = public top-N only:
# unauthenticated callers are clamped to the top 25 and large limits / full-corpus
# requests get a `gated:true` note. Hand this key only to trusted external
# consumers.
# Rate limit: a best-effort per-IP fixed-window limit (60/min) also guards these
# reads. It is IN-MEMORY and per-serverless-instance (defense-in-depth only) — see
# TODO(RATELIMIT.DURABLE) in lib/api/gate.ts for the durable @upstash/ratelimit
# upgrade. It needs no env var.
SIGRANK_API_KEY=
# ─── Feature flags (optional, default false) ─────────────────────────────────
# Built but not yet live. Accept '1' or 'true'. Leave false for TOKEN-ONLY launch.
NEXT_PUBLIC_GATE_ARENA=false
NEXT_PUBLIC_GATE_CHALLENGES=false
NEXT_PUBLIC_GATE_SIGNAL_DROP=false
NEXT_PUBLIC_GATE_BRACKETS=false
NEXT_PUBLIC_GATE_TRADING_CARD_SPECIES=false
# ─── Realtime (live board updates) ──────────────────────────────────────────
# When enabled, the /board/all page opens a WebSocket to Supabase Realtime
# and updates live when new snapshots land. Free plan: 200 connections, 2M msgs/mo.
# Set to false to kill all Realtime traffic (the kill switch).
NEXT_PUBLIC_REALTIME_ENABLED=false
# ─── SignalAF Live demo ──────────────────────────────────────────────────────
# Protects POST /api/live outside localhost. The route accepts token pillars
# and presentation labels only; it never accepts prompts, transcripts, or code.
# Generate with: openssl rand -hex 24
SIGNALAF_LIVE_TOKEN=
# ─── Resend (contact form email) ─────────────────────────────────────────────
# API key for Resend (https://resend.com). The contact form at /contact posts to
# /api/v1/contact which uses this key to send email to hello@signalaf.com.
# UNSET = the API returns 503 "Contact form is not configured."
# On Cloudflare: set via `wrangler secret put RESEND_API_KEY` (NOT in vars).
RESEND_API_KEY=
# ─── Vercel AI Gateway ───────────────────────────────────────────────────────
# Unified API for 100s of AI models (OpenAI, Anthropic, Google, etc.) through
# one endpoint. No markup on token costs. Automatic failover between providers.
# Created via: vercel ai-gateway api-keys create --name sigrank-ai --budget 5
# Base URL is fixed; swap your existing OpenAI/Anthropic SDK baseURL to use it.
AI_GATEWAY_API_KEY=
AI_GATEWAY_BASE_URL=https://ai-gateway.vercel.sh/v1
# ─── Vercel Cron (daily recompute workflow) ──────────────────────────────────
# Secret that Vercel Cron sends as Bearer token to /api/cron/recompute.
# Prevents external abuse of the cron endpoint. Generated with openssl rand.
# UNSET = the cron endpoint returns 500 (loud failure, no unauthenticated runs).
CRON_SECRET=
# ─── Not read from env (documentation only — do NOT rely on these) ───────────
# STRIPE_GRACE_PERIOD_DAYS — inert; lib/stripe/tier.ts hardcodes 7.
# RULESET_VERSION — inert; lib/scoring/ruleset.ts hardcodes '1.0'.
# SIG_ARMY_DIR — inert; appears only in comments, never read.