# Database DATABASE_URL= # Standard postgres:// URL (e.g. postgres://user:pass@127.0.0.1:5432/dbname). If absent, site runs in mock mode. # NOTE: Use postgres:// (not prisma+postgres://) — PrismaPg adapter requires a direct connection. # Auth.js AUTH_SECRET= # Generate: openssl rand -base64 32 AUTH_URL=http://localhost:3000 # Full URL of the site (for Auth.js callbacks) # Admin credentials (used by npm run db:seed) ADMIN_EMAIL=admin@localhost ADMIN_PASSWORD=change-me # Contact form (Resend) RESEND_API_KEY= # Get from resend.com dashboard CONTACT_EMAIL=you@yourdomain.com # Where contact form submissions are delivered CONTACT_FROM_EMAIL=portfolio@yourdomain.com # Must be a verified sender domain in Resend # AI agents ANTHROPIC_API_KEY= # Required for LLM summarization in agents (github-summarizer, blog-suggester, opportunity-watcher) GITHUB_TOKEN= # Optional - increases GitHub API rate limits (also enables GraphQL for Skills Inference) GITHUB_USERNAME= # Your GitHub username (for the GitHub Summarizer agent) GITHUB_IMPORT_BATCH=5 # Optional - max repos to import per run (default: 5, range 1-20) # ROBOTICS_RSS_FEEDS=https://spectrum.ieee.org/feeds/topic/robotics.rss,https://hackaday.com/feed/,https://www.therobotreport.com/feed/,https://discourse.ros.org/latest.rss,https://www.reddit.com/r/robotics/.rss BRAND_MONITOR_API_KEY= # Optional - set when you have a brand monitoring service API key (e.g. Mention.com, Brand24) GOOGLE_ALERTS_RSS_FEEDS= # Optional - comma-separated Google Alerts RSS feed URLs. Set up alerts at google.com/alerts, copy the RSS URL for each alert (your name, GitHub username, project names). TWITTER_BEARER_TOKEN= # Optional - X/Twitter API v2 Bearer Token (for Platform Sync agent) TWITTER_USERNAME= # Your X/Twitter handle without @ (for Platform Sync agent) # Opportunity Watcher alerts OPPORTUNITY_ALERT_EMAIL=false # Set to "true" to enable email alerts for high-match jobs (requires RESEND_API_KEY and ADMIN_EMAIL) OPPORTUNITY_ALERT_THRESHOLD=8 # Jobs scoring >= this value (1-10) trigger an email alert (default: 8) # SEO / Public URL NEXT_PUBLIC_BASE_URL=https://yourdomain.com # Canonical site URL used in sitemap and JSON-LD schemas # Cloudflare R2 file storage (optional - for media uploads in admin panel) R2_ACCOUNT_ID= R2_ACCESS_KEY_ID= R2_SECRET_ACCESS_KEY= R2_BUCKET_NAME= R2_PUBLIC_URL= # MCP Server MCP_SECRET= # Bearer token for HTTP mode — leave empty to disable auth MCP_SERVER_PORT=3001 # HTTP transport port (default: 3001) # Career-Ops service CAREER_OPS_INTERNAL_SECRET= # Shared secret between app and career-ops HTTP server; generate with: openssl rand -base64 32 CAREER_OPS_INTERNAL_URL=http://career-ops:4200 # Internal Docker URL; override for local dev without Docker