# Where contact-form messages should be delivered. CONTACT_TO_EMAIL=alexwherlan@gmail.com # SMTP connection used by POST /api/contact. SMTP_HOST=smtp.example.com SMTP_PORT=587 SMTP_USERNAME=your-smtp-username SMTP_PASSWORD=your-smtp-password SMTP_FROM_EMAIL=portfolio@example.com SMTP_USE_TLS=true SMTP_USE_SSL=false # Comma-separated origins allowed to call the API during development. FRONTEND_ORIGINS=http://localhost:5173 # Lightweight journal publisher authentication. Use long, unique values in production. JOURNAL_ADMIN_PASSWORD=replace-with-a-strong-password JOURNAL_TOKEN_SECRET=replace-with-a-long-random-secret # Vercel's daily media cleanup job authenticates with this server-only secret. # Generate a unique random value of at least 32 characters for production. CRON_SECRET= # Persistent upload directory; defaults to backend/data/uploads. # Mount durable storage here when deploying to a host with an ephemeral filesystem. # JOURNAL_UPLOAD_DIR=/var/lib/portfolio/uploads # Article uploads go to Dropbox; use local only for offline development. JOURNAL_MEDIA_STORAGE=dropbox DROPBOX_APP_KEY= DROPBOX_APP_SECRET= DROPBOX_REFRESH_TOKEN= # Optional short-lived token for initial testing; refresh tokens are preferred. DROPBOX_ACCESS_TOKEN= # Server-only Supabase article storage. Prefer the new sb_secret_ key. SUPABASE_URL=https://your-project-ref.supabase.co SUPABASE_SECRET_KEY=sb_secret_replace_me SUPABASE_ARTICLES_TABLE=articles # Optional: only needed to apply schema changes through the Management API. SUPABASE_PROJECT_REF=your-project-ref SUPABASE_ACCESS_TOKEN=sbp_your_scoped_personal_access_token