# ============================================================================= # Greg Kilmer Profile Site - Environment Variables # ============================================================================= # Copy this file to `.env` (local dev) or pass via Cosmos container environment. # Never commit your real `.env`. All values are optional unless noted. # ============================================================================= # --- Server ----------------------------------------------------------------- # Port and host the Node server binds to. Cosmos reverse proxy should forward here. PORT=4321 HOST=0.0.0.0 # Canonical site URL (used for absolute metadata URLs and API responses). SITE_URL=https://gregkilmer.com # --- Contact form -> /api/contact ------------------------------------------- # Two delivery modes. If SMTP is configured, email is sent. Otherwise, if a webhook # URL is set, the payload is POSTed there (e.g. a Discord/Slack/n8n webhook). If # neither is set, the API returns 503 so you can wire delivery later. # SMTP (nodemailer). CONTACT_TO is the inbox that receives submissions. # Point this at your homelab SMTP relay (Postfix/Mailcow/etc.). The relay must # have SPF/DKIM/DMARC configured or mail will land in spam. Leave SMTP_HOST blank # to disable delivery (the API returns 503 until this is set). SMTP_HOST= SMTP_PORT=587 SMTP_USER= SMTP_PASS= CONTACT_TO=contact@gregkilmer.com SMTP_FROM="Greg's Site " # Set to "true" to accept a self-signed TLS certificate on the SMTP connection. # Only enable when the relay is on a trusted private network (e.g. the homelab # Docker network) and presents a self-signed cert. Defaults to false (verify). SMTP_ALLOW_SELFSIGNED= # Optional webhook fallback (JSON POST). Only used if SMTP_HOST is unset. # CONTACT_WEBHOOK_URL= # Honeypot / basic abuse control. Maximum submissions per IP per window. CONTACT_RATE_LIMIT=5 CONTACT_RATE_WINDOW_MIN=15 # --- Cloudflare Turnstile (bot protection) ---------------------------------- # Get free keys at: https://dash.cloudflare.com/?to=/:account/turnstile # SITE_KEY is public (ships to the client); SECRET_KEY is server-only. # Leave both blank to skip Turnstile entirely (e.g. local dev). TURNSTILE_SITE_KEY= TURNSTILE_SECRET_KEY= # --- Gaming box-art tool ---------------------------------------------------- # Used by scripts/fetch-box-art.mjs to download box/banner art for Gaming Hall # of Fame entries via the RAWG API. Get a free key at: # https://rawg.io/login?forward=developer RAWG_API_KEY=