Environment Variables Guide

A complete guide on how to obtain and configure every environment variable for your project.

Critical (Required for the site to run)

License

These keys are required to verify your purchase and start the application.

  • LICENSE_KEY — The license key you received after your purchase.
  • LICENSE_PRODUCT — The identifier for the template/product you bought.
  • LICENSE_SERVER_URL & LICENSE_SERVER_SECRET — Used to validate your license key on launch.

How to get these:

You will receive LICENSE_KEY, LICENSE_PRODUCT, and LICENSE_SERVER_URL in an email immediately after purchasing the template.

For LICENSE_SERVER_SECRET, you must generate your own random 32-character string. The easiest way is to ask our chatbot (widget in the bottom right corner) to generate one for you. For example, just ask: Generate 32 random characters for my LICENSE_SERVER_SECRET.

Alternatively, you can generate it using your terminal:

openssl rand -base64 32

Or simply type any long, random sequence of characters.

🛡️ Staging & Development

Your license key is only "consumed" when deployed on a custom production domain. You can freely use it on localhost or *.vercel.app domains during the development phase without affecting your license binding.

email-license-screenshot

Database (Neon)

Your connection to the database. Without it, the app will throw a 500 error instantly.

  • DATABASE_URL — Your primary pooled database connection string.
  • DATABASE_URL_UNPOOLED — The unpooled connection string (helps avoid timeouts/overloads).
  • DIRECT_URL — Sometimes required by Prisma. Often has the exact same value as your regular database URL or unpooled URL.

How to configure your Neon database project:

  1. Go to neon.tech and sign up.
  2. Project nameType any name you like (e.g., your website name or "production-db").
  3. Postgres versionLeave it on the default version (Postgres 17). It's the most recent and stable version, fully supported by our template.
  4. Region (Important 🌍)Choose the region that matches your Vercel deployment location to ensure maximum speed.
    • If your website is deployed in the US, select: AWS US East 1 (N. Virginia)
    • If your website is deployed in Europe, select: AWS EU Central 1 (Frankfurt) or the closest European region available in the dropdown.
  5. Backend Services (Authentication)You can leave this unchecked/disabled. Our template already comes with its own built-in, pre-configured authentication system, so you don't need Neon's managed auth.
  6. Once configured, click "Create Project". A page will appear with the section "Connect your app manually". Click "Copy Snippet".
    postgresql://neondb_owner:p5QW...eY@ep-lingering-water-a2v...c-3.eu-central-1.aws.neon.tech/neondb?sslmode=require
    This is your DATABASE_URL and DIRECT_URL.
  7. For DATABASE_URL_UNPOOLED, click "Go to project" at the bottom. At the top of the dashboard, click the "Connect" button. This opens the "Connect to your database" modal. Turn off the "Connection pooling" switch, copy the resulting string, and paste it into Vercel as DATABASE_URL_UNPOOLED.
neon-db-screenshot-1

Authentication

  • NEXTAUTH_SECRET — A secret used to encrypt session tokens. Without it, you cannot log in.
  • JWT_SECRET — Used for custom session encryption.
  • NEXTAUTH_URL — The base URL for authentication (e.g., https://yourdomain.com).

How to get these:

For NEXTAUTH_SECRET and JWT_SECRET, you must generate random 32-character strings. The easiest way is to ask our chatbot (widget in the bottom right corner) to generate them for you. For example, just ask: Generate 32 random characters for my NEXTAUTH_SECRET.

Alternatively, you can generate them using your terminal:

openssl rand -base64 32

Or simply type any long, random, secure string of characters.

nextauth-screenshot

Site URLs

  • NEXT_PUBLIC_APP_URL
  • NEXT_PUBLIC_SITE_URL
  • NEXT_PUBLIC_STORE_URL

How to get these:

These should simply be set to your actual domain name (e.g., https://mywebsite.com). It is necessary for generating correct links and ensuring cookies work properly.

If you don't have a domain name yet, you need to purchase one from a domain registrar like Cloudflare, Namecheap, or GoDaddy before you can fully deploy and use the site in production.

urls-screenshot

Admin Credentials

  • ADMIN_EMAIL — Your email address. The system uses this to recognize you and grant admin rights in the dashboard.
  • ADMIN_PASSWORD — The password you'll use to log in as an administrator.

How to get these:

Simply invent a strong password and use your primary email address. Add them to your environment variables in Vercel.

admin-screenshot

Level 2: Important

The site will run without these, but core features will be broken. You won't be able to accept payments, upload images, or send emails.

Email (Resend)

  • RESEND_API_KEY — The API key required to send emails. Without it, users won't get magic links, purchase confirmations, etc.
  • EMAIL_FROM — The sender address (e.g., no-reply@yourdomain.com).

How to get these:

  1. Create an account at resend.com.
  2. On the main page of your dashboard, click the Add API Key button to generate your RESEND_API_KEY for Vercel.
  3. To send emails to your customers from your own custom domain (like info@yourwebsite.com):
    • Go to the Domains tab in the left sidebar of Resend.
    • Click Add Domain and enter your domain name.
    • Resend will provide a few DNS records (TXT and MX). Copy them and add them to your domain provider (Cloudflare, GoDaddy, Namecheap, Route53, etc.).
    • Once verified, you can update your Vercel variables to use your real domain:
      EMAIL_FROM="hello@yourwebsite.com"
resend-screenshot-1

Payments (Stripe)

  • STRIPE_SECRET_KEY & STRIPE_WEBHOOK_SECRET — Without these, the "Buy" button won't work, and orders won't be processed after successful payment.
  • STRIPE_PUBLIC_KEY — Required by the Stripe frontend to initialize payment forms and securely transmit payment data from the client.

How to get these:

  1. Registration & Business Setup

    Log in to your Stripe Dashboard and start the activation process. You'll need to provide your business name, country, website, and describe your services.

  2. Choosing your business model

    When prompted to select how you want to use Stripe, please choose:

    👉Non-recurring payments (Accept payments for products and services using a checkout page or invoices).

    Why this option?

    • Standard for E-commerce, Taxi booking, and Service platforms.
    • Allows customers to pay instantly for orders or booked sessions.

    Note: Do NOT choose "Recurring payments" (subscriptions) or "Build a platform or marketplace" (Stripe Connect).

  3. Finalizing Settings

    Follow the prompts for "Next, tell us what you sell" and "Who should handle global sales?". When you reach Select how you want to use Stripe, it is MANDATORY to select:

    Non-recurring payments

  4. Get your API Keys

    We suggest clicking "Go to sandbox" first to verify that everything works correctly. Once confirmed, you can switch to Live mode, get the live keys, and redeploy on Vercel.

    How to extract keys:

    • 1. Click "Developers" (bottom left) → "API keys".
      Publishable key:Copy and paste asSTRIPE_PUBLIC_KEY="pk_..."
    • 2. Reveal the Secret key and copy it.
      Secret key:Copy and paste asSTRIPE_SECRET_KEY="sk_..."

    Note: Restricted keys are NOT needed for this setup.

  5. Configure Webhooks

    While still in the Developers tab, click Webhooks and then + Add destination.

    1. Configure Destination

    • Select "Your account".
    • Keep the default API version.

    2. Events to send

    Search for and check the following event:

    3. Destination Details

    • Destination type: Webhook endpoint
    • Destination name: e.g., "Production Website" or "Vercel Webhook"
    • Endpoint URL (Most Important 🚀):
      Generated Webhook URL:
      https://your-vercel-domain.com/api/webhooks/stripe

    After saving, click on the new destination to see Destination details. Copy the Signing secret (it looks like whsec_...) and use it as your STRIPE_WEBHOOK_SECRET.

stripe-screenshot-1

Media (Cloudinary)

Required to upload logos, screenshots, or product images.

  • CLOUDINARY_URL — The general connection URL. Usually auto-generated by combining your keys.
  • CLOUDINARY_CLOUD_NAME & NEXT_PUBLIC_CLOUDINARY_CLOUD_NAME — Your Cloudinary cloud ID.
  • CLOUDINARY_API_KEY & CLOUDINARY_API_SECRET — Access keys for uploading images.
  • NEXT_PUBLIC_CLOUDINARY_UPLOAD_PRESET — Instructs Cloudinary how to process and store incoming files.

How to set up Cloudinary:

  1. Go to cloudinary.com and Sign up for a free plan.
  2. When asked about your use case, select "Hobby".
  3. After logging in, navigate to your DashboardSettings (gear icon) → API Keys.
  4. Copy and save these values:
    • Cloud Name (shown in the top left of your dashboard) ➔ paste as CLOUDINARY_CLOUD_NAME and NEXT_PUBLIC_CLOUDINARY_CLOUD_NAME
    • API Key ➔ paste as CLOUDINARY_API_KEY
    • API Secret (click "reveal" to see it) ➔ paste as CLOUDINARY_API_SECRET
  5. Create an Upload Preset:
    • Go to SettingsUpload.
    • Scroll down to the "Upload presets" section and click "Add upload preset".
    • Set the Signing Mode to "Unsigned".
    • Save it, copy the name of the preset, and paste it as NEXT_PUBLIC_CLOUDINARY_UPLOAD_PRESET.
cloudinary-screenshot

Rate Limiting (Upstash Redis)

Upstash provides fast Redis storage used to protect your site from spam and bot attacks. Without this, attackers could exhaust your API limits quickly.

Note: If you use Cloudflare protection, this may be optional — ask support if unsure.

  • UPSTASH_REDIS_REST_URL & UPSTASH_REDIS_REST_TOKEN

How to set up Upstash Redis:

  1. Go to upstash.com and sign in with Google or GitHub.
  2. Click "Create Database".
  3. Enter any name (e.g., my-site-cache) ➔ select a region matching your server (e.g., "Europe (Frankfurt)" or US) ➔ click "Create".
  4. Open the created project, then scroll down to the "REST API" section on the database details page.
  5. Copy and paste:
    • UPSTASH_REDIS_REST_URL (the https://... URL)
    • UPSTASH_REDIS_REST_TOKEN (click the eye icon to reveal it)
upstash-screenshot-1

Social Login (OAuth)

Allows users to easily sign in to your site with their existing accounts (optional but highly recommended).

GitHub Login Setup

  • GITHUB_ID & GITHUB_SECRET
  1. Go to github.com → click your profile icon → Settings.
  2. Scroll to the bottom of the left sidebar → Developer settingsOAuth Apps.
  3. Click "New OAuth App".
  4. Fill in the URLs:
    • Homepage URL: https://yoursite.vercel.app
    • Authorization callback URL: https://yoursite.vercel.app/api/auth/callback/github
  5. Click "Register application".
  6. Copy "Client ID" ➔ this is your GITHUB_ID.
  7. Click "Generate a new client secret", copy it immediately ➔ this is your GITHUB_SECRET.

Google Login Setup

The most popular login method. Users love signing in with Google.

  • GOOGLE_CLIENT_ID (or GOOGLE_ID) & GOOGLE_SECRET
  1. Go to console.cloud.google.com (use the same project as Google Maps if applicable).
  2. In the left menu, go to APIs & ServicesOAuth consent screen.
  3. Choose "External" → Click Create. Fill in your app name and email, then click Save.
  4. Go back to the left menu: APIs & ServicesCredentials.
  5. Click "+ Create Credentials" → select "OAuth client ID".
  6. Set Application type to "Web application".
  7. Under "Authorized redirect URIs" click "Add URI" and paste:https://yoursite.vercel.app/api/auth/callback/google
  8. Click "Create". A popup will show your keys:
    • Client ID ➔ this is your GOOGLE_CLIENT_ID
    • Client Secret ➔ this is your GOOGLE_SECRET

Google Maps

Required if your site relies on location services (e.g., Taxi Service template).

  • NEXT_PUBLIC_GOOGLE_MAPS_API_KEY — The API key to load the maps script.

How to set up Google Maps:

  1. Go to console.cloud.google.com and sign in.
  2. Click the project selector at the top → "New Project" → name it after your site.
  3. In the search bar, find and enable (click "Enable") these 4 APIs one by one:
    • Maps JavaScript API (the map itself)
    • Places API (address search)
    • Directions API (routes)
    • Geocoding API (coordinates to address)
  4. In the left menu go to APIs & ServicesCredentials.
  5. Click "+ Create Credentials""API Key".
  6. Copy the generated key ➔ this is your NEXT_PUBLIC_GOOGLE_MAPS_API_KEY.
  7. 🛡️ Security tip:Click "Restrict Key" and add your domain (e.g., yoursite.vercel.app) under Website restrictions. This prevents others from using your key and spending your quota.

Still stuck? We've got you.

Our support team can help you deploy your template or even do it for you.