Non-secret configuration is loaded from TOML files. Secrets come from environment variables with dev defaults. The Settings class (app/settings.py) reads in this order, each layer overriding the previous:
config.toml — base settings, committed to git (no secrets)
Secrets are read from environment variables. Dev defaults are built in so local development requires zero configuration:
Variable
Description
Dev default
SECRET_KEY
JWT signing key (min 32 chars)
CHANGE_ME_min_32_chars_long_!!!!
MONGO_USER
MongoDB root username
root
MONGO_PASSWORD
MongoDB root password
rootpassword
REDIS_PASSWORD
Redis password
redispassword
Docker Compose passes these via a shared x-backend-secrets YAML anchor to all backend services. For production, set the env vars through GitHub Actions secrets or your deployment platform.
# Integr8sCode backend configuration (development defaults).# Secrets (SECRET_KEY, MONGO_USER, MONGO_PASSWORD, REDIS_PASSWORD) come from# environment variables with dev defaults — see Settings.__init__() in settings.py.# Production: set env vars via docker-compose or GitHub Actions secrets.PROJECT_NAME="integr8scode"DATABASE_NAME="integr8scode_db"ALGORITHM="HS256"ACCESS_TOKEN_EXPIRE_MINUTES=1440MONGO_HOST="mongo"MONGO_PORT=27017MONGO_DB="integr8scode"
Legend
Key
Description
Default
PROJECT_NAME
Application name for logs and metadata
integr8scode
DATABASE_NAME
MongoDB database name
integr8scode_db
SECRET_KEY
JWT signing key, min 32 chars. From env var
CHANGE_ME_min_32_chars_long_!!!!
ALGORITHM
JWT signing algorithm
HS256
ACCESS_TOKEN_EXPIRE_MINUTES
Token lifetime in minutes
1440 (24h)
MONGODB_URL
MongoDB connection string. Built from MONGO_USER/MONGO_PASSWORD env vars + MONGO_HOST/MONGO_PORT/MONGO_DB from TOML
Each worker runs with a small override TOML that sets TRACING_SERVICE_NAME and KAFKA_CONSUMER_GROUP_ID. These are mounted alongside config.toml in Docker Compose:
config.test.toml is a full config file tuned for fast test execution (lower bcrypt rounds, relaxed rate limits, shorter Kafka timeouts). Tests load it with:
Settings(config_path="config.test.toml")
Secrets come from environment variables with dev defaults — no extra setup needed in CI or locally.