Environment Variables
Complete reference of all environment variables across ZapTicket services ā backend, dashboard, widget, marketing, and docs.
Overview
ZapTicket is a monorepo with multiple services, each requiring its own set of environment variables. This page lists every variable for every service with descriptions and example values.
šØNever commit secrets to version control. Use environment variable injection via your hosting provider (Coolify UI, Docker secrets, etc.) for production deployments.
Backend (.NET API)
backend/.env
# Database
ConnectionStrings__DefaultConnection=Host=localhost;Database=zapticket_dev;Username=zapticket;Password=zapticket_local
# Authentication
JWT_SECRET=your-secret-key-must-be-at-least-32-characters-long
JWT_ISSUER=zapticket-api
JWT_AUDIENCE=zapticket-clients
JWT_EXPIRY_HOURS=1
# Application
ASPNETCORE_ENVIRONMENT=Development|Production
ASPNETCORE_URLS=http://+:5000
# Migrations
RUN_MIGRATIONS_ON_STARTUP=true|false
# CORS
CORS_ORIGINS=http://localhost:3000,http://localhost:3001
# Email (optional ā for verification emails)
SMTP_HOST=smtp.resend.com
SMTP_PORT=587
SMTP_USERNAME=resend
SMTP_PASSWORD=re_xxxxxxxxxxxx
[email protected]
SMTP_FROM_NAME=ZapTicket
# Rate Limiting
RATE_LIMIT_PER_IP=100
RATE_LIMIT_PER_SITE_KEY=60
RATE_LIMIT_AUTH=10Variable Details ā Backend
Reference Table
Variable ā Required ā Default ā Description
āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā¼āāāāāāāāāāā¼āāāāāāāāāāāāāā¼āāāāāāāāāāāāāāāāāāāāāāāāāāāāā
ConnectionStrings__DefaultConnection ā Yes ā ā ā PostgreSQL connection string
JWT_SECRET ā Yes ā ā ā HMAC signing key for JWTs (min 32 chars)
JWT_ISSUER ā No ā zapticket ā JWT iss claim value
JWT_AUDIENCE ā No ā zapticket ā JWT aud claim value
JWT_EXPIRY_HOURS ā No ā 1 ā Token lifetime in hours
ASPNETCORE_ENVIRONMENT ā No ā Production ā Runtime environment
ASPNETCORE_URLS ā No ā http://+:5000 ā Listening URLs
RUN_MIGRATIONS_ON_STARTUP ā No ā false ā Auto-run EF migrations on startup
CORS_ORIGINS ā No ā * ā Comma-separated allowed origins
SMTP_HOST ā No ā ā ā SMTP server for email sending
SMTP_PORT ā No ā 587 ā SMTP port
SMTP_USERNAME ā No ā ā ā SMTP auth username
SMTP_PASSWORD ā No ā ā ā SMTP auth password
SMTP_FROM_EMAIL ā No ā ā ā Sender email address
SMTP_FROM_NAME ā No ā ZapTicket ā Sender display name
RATE_LIMIT_PER_IP ā No ā 100 ā Requests/min per IP
RATE_LIMIT_PER_SITE_KEY ā No ā 60 ā Requests/min per site key
RATE_LIMIT_AUTH ā No ā 10 ā Auth attempts per 5 min per IPDashboard (Next.js)
dashboard/.env.local
# API Connection
NEXT_PUBLIC_API_URL=http://localhost:5000
NEXT_PUBLIC_SIGNALR_URL=http://localhost:5000/hubs/chat
# App
NEXT_PUBLIC_APP_NAME=ZapTicket
NEXT_PUBLIC_APP_URL=http://localhost:3000
# Port (used by Coolify/Railpack)
PORT=3000Variable Details ā Dashboard
Reference Table
Variable ā Required ā Default ā Description
āāāāāāāāāāāāāāāāāāāāāāāāāāā¼āāāāāāāāāāā¼āāāāāāāāāāāāāāāāāāāāāāāāā¼āāāāāāāāāāāāāāāāāāāāāāāāāāāāāā
NEXT_PUBLIC_API_URL ā Yes ā ā ā Backend API base URL
NEXT_PUBLIC_SIGNALR_URL ā Yes ā ā ā SignalR hub URL
NEXT_PUBLIC_APP_NAME ā No ā ZapTicket ā Display name in UI
NEXT_PUBLIC_APP_URL ā No ā http://localhost:3000 ā Dashboard URL (for links)
PORT ā No ā 3000 ā HTTP listen portWidget (Next.js)
widget/.env.local
# API Connection
NEXT_PUBLIC_API_URL=http://localhost:5000
NEXT_PUBLIC_SIGNALR_URL=http://localhost:5000/hubs/chat
# Widget
NEXT_PUBLIC_WIDGET_URL=http://localhost:3001
# Port
PORT=3000Variable Details ā Widget
Reference Table
Variable ā Required ā Default ā Description
āāāāāāāāāāāāāāāāāāāāāāāāāāā¼āāāāāāāāāāā¼āāāāāāāāāāāāāāāāāāāāāāāāā¼āāāāāāāāāāāāāāāāāāāāāāāāāāāāāā
NEXT_PUBLIC_API_URL ā Yes ā ā ā Backend API base URL
NEXT_PUBLIC_SIGNALR_URL ā Yes ā ā ā SignalR hub URL
NEXT_PUBLIC_WIDGET_URL ā No ā http://localhost:3001 ā Widget iframe/CDN URL
PORT ā No ā 3000 ā HTTP listen portMarketing Site (Next.js)
marketing/.env.local
# Links
NEXT_PUBLIC_APP_URL=http://localhost:3000
NEXT_PUBLIC_DOCS_URL=http://localhost:3002
# Port
PORT=3000Docs Site (Next.js)
docs-site/.env.local
# Links
NEXT_PUBLIC_APP_URL=http://localhost:3000
NEXT_PUBLIC_API_URL=http://localhost:5000
# Port
PORT=3000Production Example
In production, all NEXT_PUBLIC_* URLs should point to your actual domains:
Production URLs
NEXT_PUBLIC_API_URL=https://api.zapticket.app
NEXT_PUBLIC_SIGNALR_URL=https://api.zapticket.app/hubs/chat
NEXT_PUBLIC_APP_URL=https://app.zapticket.app
NEXT_PUBLIC_WIDGET_URL=https://widget.zapticket.app
NEXT_PUBLIC_DOCS_URL=https://docs.zapticket.appā ļøVariables prefixed with
NEXT_PUBLIC_ are bundled into the client-side JavaScript. Never put secrets in NEXT_PUBLIC_ variables ā they are visible to anyone who views source.