Skip to main content

API (apps/api/.env)

Authentication (Auth0)

VariableRequiredDescription
AUTH0_DOMAINYesAuth0 tenant domain (e.g. acme.us.auth0.com)
AUTH0_AUDIENCEYesAPI identifier configured in Auth0
AUTH0_MGMT_CLIENT_IDYesM2M client ID for Auth0 Management API
AUTH0_MGMT_CLIENT_SECRETYesM2M client secret

Database

VariableRequiredDescription
DATABASE_RO_URLYesPostgreSQL connection URL (read-only replica)
DATABASE_RW_URLYesPostgreSQL connection URL (read-write primary)
For single-server deployments, you can use the same URL for both DATABASE_RO_URL and DATABASE_RW_URL.
Database URLs follow the standard format:
postgres://user:password@host:5432/dbname?sslmode=require

Stripe

VariableRequiredDescription
STRIPE_SECRET_KEYYesStripe secret key (sk_live_... or sk_test_...)
STRIPE_WEBHOOK_SECRETYesWebhook signing secret from Stripe dashboard
STRIPE_PRICE_BASIC_MONTHLYYesStripe Price ID for Basic monthly
STRIPE_PRICE_BASIC_ANNUALYesStripe Price ID for Basic annual
STRIPE_PRICE_PRO_MONTHLYYesStripe Price ID for Pro monthly
STRIPE_PRICE_PRO_ANNUALYesStripe Price ID for Pro annual
STRIPE_PRICE_ENT_PER_DEVICEYesStripe Price ID for Enterprise per-device

Email (AWS SES)

VariableRequiredDescription
SES_FROM_EMAILYesVerified sender address (e.g. noreply@charley.yourdomain.com)
AWS_REGIONNoAWS region (default: us-east-1)
AWS_ACCESS_KEY_IDNoAWS access key (not needed if using IAM role on ECS)
AWS_SECRET_ACCESS_KEYNoAWS secret key (not needed if using IAM role on ECS)

URLs

VariableRequiredDescription
DASHBOARD_URLYesPublic URL of the React dashboard
CORS_ORIGINNoAdditional CORS origin to allow (beyond DASHBOARD_URL)
PORTNoHTTP port (default: 3001)

Slack Integration

VariableRequiredDescription
SLACK_CLIENT_IDNoSlack OAuth app client ID
SLACK_CLIENT_SECRETNoSlack OAuth app client secret
SLACK_REDIRECT_URINoSlack OAuth callback URL

Dashboard (apps/web/.env)

VariableRequiredDescription
VITE_AUTH0_DOMAINYesAuth0 tenant domain
VITE_AUTH0_CLIENT_IDYesAuth0 SPA client ID
VITE_AUTH0_AUDIENCEYesAuth0 API audience
VITE_API_BASE_URLYesBase URL of the Charley API (e.g. https://api.yourdomain.com)

Example .env Files

API

AUTH0_DOMAIN=acme.us.auth0.com
AUTH0_AUDIENCE=https://api.charleyanalytics.com
AUTH0_MGMT_CLIENT_ID=...
AUTH0_MGMT_CLIENT_SECRET=...

DATABASE_RO_URL=postgres://charley:secret@db.internal:5432/charley?sslmode=require
DATABASE_RW_URL=postgres://charley:secret@db.internal:5432/charley?sslmode=require

STRIPE_SECRET_KEY=sk_live_...
STRIPE_WEBHOOK_SECRET=whsec_...
STRIPE_PRICE_BASIC_MONTHLY=price_...
STRIPE_PRICE_BASIC_ANNUAL=price_...
STRIPE_PRICE_PRO_MONTHLY=price_...
STRIPE_PRICE_PRO_ANNUAL=price_...
STRIPE_PRICE_ENT_PER_DEVICE=price_...

SES_FROM_EMAIL=noreply@charley.acme.com
AWS_REGION=us-east-1

DASHBOARD_URL=https://dashboard.acme.com
PORT=3001

Dashboard

VITE_AUTH0_DOMAIN=acme.us.auth0.com
VITE_AUTH0_CLIENT_ID=...
VITE_AUTH0_AUDIENCE=https://api.charleyanalytics.com
VITE_API_BASE_URL=https://api.acme.com