-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy path.env.example
More file actions
56 lines (49 loc) · 3.12 KB
/
Copy path.env.example
File metadata and controls
56 lines (49 loc) · 3.12 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
# ── Backend (apps/backend/.env) ─────────────────────────────────
# PostgreSQL (Supabase): pooled URL + direct URL for migrations
DATABASE_URL=postgresql://user:password@localhost:5432/scanandaction
DIRECT_URL=postgresql://user:password@localhost:5432/scanandaction
# Supabase project (server-side key — never expose to the frontend)
SUPABASE_URL=https://your-project.supabase.co
SUPABASE_SERVICE_ROLE_KEY=your_service_role_key
# Gemini Vision extraction
GEMINI_API_KEY=your_gemini_api_key
# Paddle billing webhook signature secret
PADDLE_WEBHOOK_SECRET=your_paddle_webhook_secret
# Optional: comma-separated CORS origins (defaults to localhost + prod frontend)
# ALLOWED_ORIGINS=http://localhost:5173,https://scan-and-action.vercel.app
# Resend transactional email (scripts/send_reminders.js + src/services/email/mailer.ts)
# The verified Resend sending domain is the apex scan-action.com, so the From
# address must live on scan-action.com (the `send` subdomain is rejected 403).
RESEND_API_KEY=your_resend_key
MAIL_FROM="Scan & Action <noreply@scan-action.com>"
# Physical postal address shown in the commercial-email compliance footer
# (required by CAN-SPAM). REQUIRED to send: if this is unset/blank the mailer
# fails closed and skips the send rather than emailing a placeholder. Env-driven
# so a temporary address can be swapped for a P.O. box with no code change.
MAIL_POSTAL_ADDRESS="Scan & Action, <street>, <city postal>, <country>"
# Unsubscribe / contact mailbox for the List-Unsubscribe header, the footer
# "unsubscribe here" link, and Reply-To. Defaults to support@scan-action.com
# (live via Cloudflare Email Routing) when unset; set only to override.
# MAIL_UNSUBSCRIBE_MAILTO=support@scan-action.com
# Optional: HTTPS endpoint that accepts POST, enables RFC 8058 one-click unsubscribe.
# MAIL_UNSUBSCRIBE_URL=https://scan-action.com/unsubscribe
# Welcome-email kill switch (default OFF). Welcome emails are HELD unless this is
# exactly 'true'. Before enabling, set MAIL_POSTAL_ADDRESS (above) or the mailer
# fails closed and skips every send. Independent of RESEND_API_KEY.
WELCOME_EMAIL_ENABLED=false
PORT=3001
# ── Frontend (apps/frontend/.env) ────────────────────────────────
VITE_SUPABASE_URL=https://your-project.supabase.co
VITE_SUPABASE_ANON_KEY=your_supabase_anon_key
VITE_API_URL=http://localhost:3001/api
# Paddle PRICE IDS are intentionally NOT env vars. They live in
# apps/frontend/src/lib/pricing.ts, the single source of truth for the price the
# UI shows and the price Checkout.open charges. VITE_ vars are inlined at build
# time, so an env var required the same redeploy as editing the constant while
# adding a second copy of the value that no code review or test could see.
# If VITE_PADDLE_PRICE_ID_MONTHLY / _YEARLY are still set in the Vercel dashboard,
# they are now unused and can be deleted.
#
# Paddle.js client token (live_... in production, test_... for sandbox).
# Optional locally — without it the upgrade button shows a "not available" error.
VITE_PADDLE_CLIENT_TOKEN=live_xxxxxxxxxxxx