🔒

Your keys never leave your browser

This tool runs 100% locally — no data is sent to any server. Every API key you enter stays on your computer. The generated file is assembled in JavaScript memory and copied or downloaded directly to your device. You can inspect the source to verify.

Step 1 of 7
Your Site Domain
Enter your practice website domain. This automatically fills several related variables so you don't have to type them separately.
Include https:// — no trailing slash. Example: https://mypractice.com
Your site's permanent *.netlify.app subdomain — find it in Netlify → Site settings → Domain management. Required if you use a custom domain with Cloudflare, otherwise booking notifications and reminders will return 403 errors.
⚡ Auto-filled from your domain
SITE_URL
PORTAL_URL
NOTIFY_FUNCTION_URL
URL (Netlify internal)
Step 2 of 7
Supabase
Your database and authentication provider. Find all three values in your Supabase Dashboard → Settings → API.
💡 Open Supabase Dashboard → select your project → Settings (gear icon) → API. You'll see all three values on that page.
Labeled "Project URL" — looks like https://xxxxxxxxxxxx.supabase.co
Labeled "anon public" — safe to use in frontend code. Fills both SUPABASE_ANON_KEY and VITE_SUPABASE_ANON_KEY.
⚠ Labeled "service_role" — bypasses Row Level Security. Never share this or put it in frontend code. Server-side only (Netlify Functions).
⚡ Auto-filled from Supabase URL
VITE_SUPABASE_URL (same as Project URL)
VITE_SUPABASE_ANON_KEY (same as Anon Key)
Will match your Anon Key above
Step 3 of 7
Email (Resend)
Resend powers all patient emails — confirmations, reminders, portal invites. Your "From" address must be a domain you've verified in Resend.
💡 Resend API Keys — create a key with "Full Access." Your sending domain must be verified under Resend → Domains.
Starts with re_
Must be on a Resend-verified domain. Recommended format: noreply@from.yourdomain.com or info@from.yourdomain.com
Where patients' replies go — typically your practice's main email or doctor's email.
Step 4 of 7
Practice Info
Used in automated email templates so patients see your practice name and brand color — not generic placeholders.
Used by appointment reminders to fire at the correct local time. Wrong timezone = reminders arrive hours off.
Hex color used in email headers and buttons. Should match your website's primary color.
Step 5 of 7
Stripe Payments
Required for patient payment processing. Use your live secret key for production.
💡 Stripe Dashboard → Developers → API Keys — copy the Secret key (starts with sk_live_). Make sure you're in Live mode, not Test mode.
⚠ Never share this key — it can charge cards. Server-side only.
Step 6 of 7
SMS Reminders Optional
Enable automated SMS appointment reminders. You can skip this now and add it later without regenerating the rest of your file.
Enable SMS Reminders
💡 Twilio Console — Account SID and Auth Token are on your dashboard home page. Phone number is under Phone Numbers → Manage → Active Numbers.
E.164 format — include country code: +1 then 10 digits.
💡 Plivo Console — Auth ID and Auth Token on your dashboard. Phone number under Phone Numbers → Your Numbers.
⚠ Add this last — it activates Plivo. Add Auth Token and From Number first.
E.164 format — include +1 country code.
Step 7 of 8
Google Calendar Optional
Syncs booked appointments to your Google Calendar automatically. Skip if you don't need this.
Enable Google Calendar Sync
💡 Google Cloud Console → APIs & Credentials — create an OAuth 2.0 Client ID (Web Application). Add your domain to authorized redirect URIs: https://yourdomain.com/.netlify/functions/google-oauth-callback
Step 8 of 8
AI Chat Assistant Optional
Add a conversational AI widget to your site that can answer patient questions and book appointments. Supports Claude (Anthropic), GPT-4o (OpenAI), and Gemini (Google).
Enable AI Chat
💡 The AI key is stored only in your Netlify environment — never in your browser or database. Supports Claude (api.anthropic.com), OpenAI (platform.openai.com), or Gemini (aistudio.google.com).
Claude uses claude-opus-4-6 · OpenAI uses gpt-4o · Gemini uses gemini-1.5-flash.
Get your key from the provider's dashboard. Enable the AI Chat widget in Admin → Integrations after deploying.
Final Step
Review & Generate
Here's a summary of what you've configured. Your NOTIFY_SECRET has been generated automatically — a cryptographically secure random key.
This protects your Netlify Functions from unauthorized access. It's already included in your generated file.
✓ Your .env File is Ready
⚠ Treat this file like a password.
• Never commit it to git (.env is already in your .gitignore)
• Never share it via email or Slack
• Delete it from your Downloads folder after importing to Netlify
• Store a backup in a password manager (1Password, Bitwarden, etc.)

Next: Import into Netlify

1
Go to your Netlify Dashboard → select your site → Site configurationEnvironment variables
2
Click "Import from a .env file"
3
Click Copy above and paste the entire contents into the box, then click Import variables
4
Trigger a redeploy — Deploys → Trigger deploy → Deploy site. Environment variables take effect on the next deploy.
5
Delete the .env file from your Downloads folder once imported.