Skip to content

Configuration

The application is configured using environment variables. Create a .env file in the root directory based on .env.example.

Core Settings

VariableDescriptionDefault
PORTBackend port3000
BASE_URLPublic base URL (crucial for email links)http://localhost:3000
ADMIN_USERNAMEInitial admin usernameadmin
ADMIN_PASSWORDInitial admin password-
JWT_SECRETSecret for signing auth tokens-

Database

VariableDescriptionDefault
DB_PATHPath to the SQLite database file./data/booking.db

Email (SMTP)

VariableDescription
SMTP_HOSTSMTP server hostname
SMTP_PORTSMTP port (e.g., 587)
SMTP_USERSMTP username
SMTP_PASSSMTP password
SMTP_FROMSender address (e.g., Name <noreply@domain.com>)

Web Push (VAPID)

VariableDescription
VITE_VAPID_PUBLIC_KEYPublic key (build-time)
VAPID_PRIVATE_KEYPrivate key (runtime)

CalDAV (Optional)

Use these variables if you enable CalDAV integration for anonymous busy-time checks, approved appointment write-back, or background retry sync.

VariableDescriptionDefault
CALDAV_ENCRYPTION_SECRETSecret used to encrypt stored CalDAV passwords at restJWT_SECRET fallback
CALDAV_REQUEST_TIMEOUT_MSNetwork timeout for CalDAV discovery, busy reads, and write-back10000
CALDAV_BUSY_CACHE_TTL_MSIn-memory cache TTL for fetched busy intervals60000
CALDAV_BACKGROUND_SYNC_INTERVAL_MSInterval for warming CalDAV state and retrying failed appointment syncs300000
CALDAV_BACKGROUND_SYNC_LOOKAHEAD_DAYSFuture window used when background sync refreshes remote busy data30
CALDAV_BACKGROUND_SYNC_BATCH_SIZEMaximum number of appointments retried in one background sync pass50

Set CALDAV_BACKGROUND_SYNC_INTERVAL_MS=0 to disable periodic background sync entirely.

Rate Limiting

VariableDescriptionDefault
RATE_LIMIT_WINDOW_MSWindow in milliseconds60000
RATE_LIMIT_MAX_REQUESTSMax requests per window30

SEO Metadata (Build-time)

VariableDescription
VITE_SEO_TITLEPage title
VITE_SEO_DESCRIPTIONMeta description
VITE_SEO_LANGHTML language attribute

REBUILD REQUIRED

Variables starting with VITE_ are embedded into the frontend bundle at build time. If you change them, you must rebuild the frontend or the Docker image.

Released under the GPL 3.0 License.