Repository navigation
Expand file tree
/
Copy path.env.example
More file actions
73 lines (62 loc) · 3.6 KB
/
Copy path.env.example
File metadata and controls
73 lines (62 loc) · 3.6 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
# HackVillage environment template. Mirrors lib/env.ts (zod-validated server
# env) plus the handful of vars read from process.env directly (noted inline).
# Copy to .env for local dev. NEVER commit a filled-in .env (.gitignore blocks it).
# ── Core ────────────────────────────────────────────────────────────────
# PostgreSQL (Neon in prod, Docker locally)
DATABASE_URL=postgresql://user:***@localhost:5432/hackvillage
# Auth.js v5 (Phase 1)
NEXTAUTH_SECRET= # generate: openssl rand -base64 32
NEXTAUTH_URL=http://localhost:3000
NEXT_PUBLIC_APP_URL=http://localhost:3000
# OAuth (optional — providers activate only when configured)
GOOGLE_CLIENT_ID=
GOOGLE_CLIENT_SECRET=
GITHUB_CLIENT_ID=
GITHUB_CLIENT_SECRET=
# Email (optional in dev — mail falls back to console logging)
BREVO_API_KEY=
EMAIL_FROM="HackVillage <info@hackvillage.xyz>"
# ── Paystack (test keys are sufficient for local development) ────────────
# Absent key switches payments to the dev simulation port.
PAYSTACK_SECRET_KEY=sk_test_...
# Explicit opt-in to run the SIMULATION payment port in production — the
# pre-go-live state. Without this a keyless production boot fails closed.
# Set to "true" ONLY until real Paystack keys go in.
PAYSTACK_ALLOW_SIMULATION_IN_PROD=
# ── Chain — Polygon (Amoy testnet first; mainnet only after audit) ──────
# Absent config switches attestations to simulation (marked on /trust).
SMART_CONTRACT_ADDRESS=0x... # PrizeVaultFactory (ADR-007)
RPC_URL=https://rpc.amoy.polygonscan.com
ATTESTER_PRIVATE_KEY=0x... # platform signer — env-only, NEVER in the repo
POLYGONSCAN_URL=https://amoy.polygonscan.com
# ── Storage (read from process.env by lib/ports/storage.ts) ──────────────
# R2/S3-compatible in production; without these, media saves to public/uploads.
R2_ACCOUNT_ID=
R2_ACCESS_KEY_ID=
R2_SECRET_ACCESS_KEY=
R2_BUCKET=hackvillage-media
# Public URL prefix for uploaded media. Defaults to
# https://pub-<R2_ACCOUNT_ID>.r2.dev/<R2_BUCKET> — set when using a custom domain.
R2_PUBLIC_BASE=
# ── Error tracking (Sentry — all optional; unset = complete no-op) ───────
# Server + edge runtimes (instrumentation.ts, sentry.*.config.ts)
SENTRY_DSN=
# Browser runtime (instrumentation-client.ts, app/error.tsx) — public by design
NEXT_PUBLIC_SENTRY_DSN=
# Source-map upload at build time (next.config.ts withSentryConfig)
SENTRY_ORG=
SENTRY_PROJECT=
SENTRY_AUTH_TOKEN=
# ── SEO ops ─────────────────────────────────────────────────────────────
# scripts/ping-indexnow.ts: site root submitted to IndexNow (defaults to
# https://www.hackvillage.xyz; override for a future domain)
INDEXNOW_SITE=
# ── Ops (defaults shown; values are enforced by lib/env.ts) ──────────────
PAYOUT_MANUAL_REVIEW_THRESHOLD_KES=500000
PLATFORM_FEE_BPS=500 # 5% organizer-funded fee at deposit (ADR-012)
MIN_PRIZE_POOL_KES=10000 # minimum escrowed pool (Decision D3)
# ── Removed dead vars (2026-09-27 audit; grep confirms zero code refs) ────
# DIRECT_URL — Prisma datasource uses DATABASE_URL only (no directUrl).
# PAYSTACK_WEBHOOK_SECRET — webhook HMAC uses PAYSTACK_SECRET_KEY.
# CHAIN_ID — the chain port hardcodes Amoy; RPC_URL selects the network.
# NEXT_PUBLIC_PAYSTACK_PUBLIC_KEY — checkout is server-initialized.