# Copy to .env and fill in. Do NOT commit .env. DB_USER=jqc_features DB_PASSWORD=change_me DB_HOST=127.0.0.1 DB_PORT=3306 DB_NAME=jqc_features # Or set a full URI and it overrides the parts above: # DATABASE_URL=mysql+pymysql://user:pass@127.0.0.1:3306/jqc_features?charset=utf8mb4 # Fallback "email us directly" link shown under the booking form DEMO_CONTACT_URL=mailto:info@ltservicesinc.com # --- Demo appointments (/demo) --- # Owner notification address. Blank -> no mail, requests still land in /admin/demos. DEMO_NOTIFY_EMAIL=info@ltservicesinc.com # Email the customer a confirmation copy too (1/0) DEMO_CONFIRM_CUSTOMER=1 # Bookable window and slot size DEMO_HOUR_START=8 DEMO_HOUR_END=17 DEMO_SLOT_MINUTES=30 DEMO_MAX_DAYS_AHEAD=90 DEMO_TIMEZONE_LABEL=Eastern Time # Max form submissions per IP per hour (per gunicorn worker) DEMO_RATE_LIMIT=5 # --- Outgoing mail (SMTP). Leave SMTP_HOST blank to disable mail entirely. --- SMTP_HOST= SMTP_PORT=587 SMTP_USER= SMTP_PASSWORD= # STARTTLS on port 587: SMTP_USE_TLS=1 # Implicit TLS on port 465 (set SMTP_USE_TLS=0 if you use this): SMTP_USE_SSL=0 SMTP_TIMEOUT=20 # From address; defaults to SMTP_USER when blank MAIL_FROM= MAIL_SUBJECT_PREFIX=[JQC] # --- Admin panel --- # Sign session cookies + CSRF tokens. Generate: python3 -c "import secrets; print(secrets.token_hex(32))" SECRET_KEY=change_me_to_a_long_random_string ADMIN_USERNAME=admin # Generate: python3 -c "from werkzeug.security import generate_password_hash as g; print(g('yourpassword'))" ADMIN_PASSWORD_HASH= # Set to 1 once served over HTTPS (required for the login cookie to send). Use 0 for plain-HTTP local testing. SESSION_COOKIE_SECURE=1 # Where the auth log fail2ban watches is written. Blank -> /logs/auth.log AUTH_LOG_PATH= # CSRF token lifetime (seconds). Blank -> token lasts the whole session (no 1h expiry). WTF_CSRF_TIME_LIMIT=