Configuration Reference
Complete reference for the Hydra-based configuration system in Syntropy Journals.
Overview
Configuration is managed via Hydra with 13 YAML groups composed by a rootdefault.yaml. Each group can have a typed Python schema (dataclass) for type-safe access. Values support environment variable overrides via OmegaConf interpolation (${oc.env:VAR_NAME,default}).
Config root: syntropy_journals/app/config/
Schema root: syntropy_journals/app/config/schemas/
Access pattern: from syntropy_journals.app.hydra_config import get_app_config, get_llm_config, ...
Composition Order
Groups are loaded in this order (later overrides earlier):| # | Group | Schema | Description |
|---|---|---|---|
| 1 | app | schemas/app.py | App identity, database, auth, features, notifications |
| 2 | content | schemas/content.py | Branding, landing page, chat copy, navigation, SEO |
| 3 | legal | via schemas/content.py | Privacy Policy and Terms of Service full text |
| 4 | llm | schemas/llm.py | LLM providers, agent config, vector DB, memory |
| 5 | ui | schemas/ui.py | Colors, typography, component CSS classes |
| 6 | head | schemas/head.py | Meta tags, analytics, favicons, external scripts |
| 7 | catalog | (none) | Product catalog display, categories, pricing |
| 8 | users | (none) | User types, seed users, default settings |
| 9 | subscription | (none) | Plans (Free/Hobby/Pro), billing, payment config |
| 10 | admin | schemas/admin.py | Admin panel config, permissions, table names |
| 11 | integrations | (none) | HubSpot, Ghost, Stripe, PostHog, Bland.ai, MCP, CDN |
| 12 | diet | (none) | Diet scoring weights, model config, thresholds |
| 13 | demo | (none) | Demo/seed data config (NOT auto-composed) |
Environment Variable Quick Reference
All env vars that override config values, grouped by concern.App Identity
| Env Var | Config Path | Default | Description |
|---|---|---|---|
APP_ENV | app.environment | DEV | Runtime environment (DEV/test/prod) |
REFLEX_DEPLOY_URL | app.deploy_url | http://localhost:3000 | Public frontend URL |
REFLEX_API_URL | app.api_url | http://0.0.0.0:8000 | Backend API URL |
LOG_LEVEL | app.log_level | DEBUG | Python log level |
GTM_ONLY | app.gtm_only_mode | false | GTM-only landing page mode |
Database
| Env Var | Config Path | Default | Description |
|---|---|---|---|
REFLEX_DB_URL | app.database.url | sqlite:///app.db | PostgreSQL connection URL |
DB_USERNAME | app.database.username | postgres | DB username |
DB_PASSWORD | app.database.password | "" | DB password |
AUTO_MIGRATE | app.database.auto_migrate | true | Run Alembic on startup |
Authentication (Clerk)
| Env Var | Config Path | Default | Description |
|---|---|---|---|
CLERK_PUBLISHABLE_KEY | app.auth.clerk.publishable_key | "" | Clerk frontend key |
CLERK_SECRET_KEY | app.auth.clerk.secret_key | "" | Clerk backend key |
CLERK_AUTHORIZED_DOMAINS | app.auth.clerk.authorized_domains | localhost:3000,* | Allowed sign-in domains |
MOCK_LOGIN | app.auth.clerk.mock_login | false | Dev-only mock auth bypass |
LLM & AI
| Env Var | Config Path | Default | Description |
|---|---|---|---|
OPENAI_API_KEY | llm.openai_api_key | "" | OpenAI API key |
OPENROUTER_API_KEY | llm.openrouter_api_key | "" | OpenRouter API key |
CEREBRAS_API_KEY | llm.cerebras_api_key | "" | Cerebras API key |
LLM_PROVIDER | llm.provider | openrouter | Primary LLM provider |
LLM_MODEL | llm.model | nvidia/nemotron-3-nano-30b-a3b:free | Primary LLM model |
LLM_MAX_TOKENS | llm.max_token_limit | 8192 | Max context tokens |
LLM_TEMPERATURE | llm.temperature | 0.7 | Sampling temperature |
MOCK_LLM | llm.mock_llm | false | Use mock LLM responses |
MOCK_TRANSCRIPTION | llm.mock_transcription | false | Mock voice transcription |
Vector Database
| Env Var | Config Path | Default | Description |
|---|---|---|---|
MILVUS_URI | llm.vector_db.uri | "" | Milvus/Zilliz connection URI |
MILVUS_API_KEY | llm.vector_db.api_key | "" | Milvus/Zilliz API key |
VECTOR_DB_TYPE | llm.vector_db.type | milvus | Vector DB provider |
EMBEDDING_MODEL | llm.vector_db.embedding_model | text-embedding-ada-002 | Embedding model |
Memory (Graphiti / Neo4j)
| Env Var | Config Path | Default | Description |
|---|---|---|---|
GRAPHITI_API_URL | llm.memory.long_term.api_url | "" | Graphiti REST API URL |
NEO4J_URI | llm.memory.long_term.neo4j_uri | "" | Neo4j connection URI |
NEO4J_USER | llm.memory.long_term.neo4j_user | neo4j | Neo4j username |
NEO4J_PASSWORD | (referenced by name) | — | Neo4j password |
GRAPHITI_GROUP_ID | llm.memory.long_term.group_id | "" | Graphiti tenant group |
GRAPHITI_TIMEOUT | llm.memory.long_term.timeout_seconds | 10 | HTTP timeout |
Integrations
| Env Var | Config Path | Default | Description |
|---|---|---|---|
HUBSPOT_API_KEY | integrations.hubspot.api_key | "" | HubSpot API key |
GHOST_API_URL | integrations.ghost.api_url | "" | Ghost CMS API URL |
GHOST_CONTENT_API_KEY | integrations.ghost.content_api_key | "" | Ghost content key |
POSTHOG_PROJECT_API_KEY | integrations.posthog.api_key | "" | PostHog project key |
POSTHOG_HOST | integrations.posthog.host | https://us.i.posthog.com | PostHog ingest host |
POSTHOG_ENABLED | integrations.posthog.enabled | true | Enable PostHog |
CALL_LOGS_BASE_URL | integrations.call_logs.api_url | Bland.ai URL | Call logs endpoint |
CALL_LOGS_API_KEY | integrations.call_logs.api_token | "" | Bland.ai API token |
ASSETS_CDN_BASE_URL | integrations.assets.cdn_base_url | "" | CDN base URL |
MCP_SERVER_URL | integrations.mcp.server_url | Production URL | MCP server base URL |
Diet Engine
| Env Var | Config Path | Default | Description |
|---|---|---|---|
DIET_ENABLED | app.diet.enabled | false | Enable DIET pipeline |
DIET_USE_REAL_LLM | app.diet.pipeline.use_real_llm | true | Real vs mock LLM for DIET |
DIET_LLM_MODEL | app.diet.llm.model | deepseek/deepseek-chat-v3-0324:free | DIET pipeline LLM model |
DIET_LLM_PROVIDER | app.diet.llm.provider | openrouter | DIET pipeline LLM provider |
DIET_MODEL_PROVIDER | diet.model.provider | cerebras | Diet scoring LLM provider |
DIET_MODEL | diet.model.model | qwen-3-235b-a22b-instruct-2507 | Diet scoring LLM model |
DIET_LOOKBACK_DAYS | diet.scoring.lookback_days | 30 | Scoring history window |
Feature Flags
| Env Var | Config Path | Default | Description |
|---|---|---|---|
PARTNER_PORTAL_ENABLED | app.features.partner_portal | true | Partner portal feature |
ASK_THE_SHRINE_ENABLED | app.features.ask_the_shrine | true | Landing chat feature |
Testing
| Env Var | Config Path | Default | Description |
|---|---|---|---|
TEST_CLERK_USER_ID | app.testing.test_clerk_user_id | user_test_001 | Test user ID |
TEST_SESSION_ID | app.testing.test_session_id | UUID string | Test session ID |
Group Details
app — Application Identity & Core
File:config/app/default.yaml | Schema: schemas/app.py
Core application metadata, database connection, Clerk authentication, feature flags, notification config, catalog settings, voice line, and test fixtures.
Key dataclasses: AppConfig, DatabaseConfig, AuthConfig, ClerkConfig, SessionConfig
Access: get_app_config() returns the full app group.
content — Branding & Copy
File:config/content/default.yaml | Schema: schemas/content.py
All user-facing text: branding (company name, taglines, product names), landing page content (hero, features, testimonials, stats, preset questions), chat configuration (AI name, system prompt, welcome/error messages, document sources for RAG), navigation links, social profiles, legal contact info, and SEO defaults.
Key dataclasses: ContentConfig, BrandingConfig, LandingConfig, ChatConfig, NavigationConfig, SocialConfig, LegalConfig, SEOConfig
Access: get_content_config(), get_branding_config(), get_chat_config()
legal — Privacy Policy & Terms of Service
File:config/legal/default.yaml | Schema: via schemas/content.py
Full legal document text stored as structured YAML. Privacy Policy has 11 sections; Terms of Service has 14 named sections. Also contains consent link text and URLs.
No env overrides — all content requires legal review before changes.
Access: get_legal_config()
llm — AI Stack
File:config/llm/default.yaml | Schema: schemas/llm.py
LLM provider config (OpenRouter, OpenAI, Cerebras), fallback chain (3 models tried in order), agent system prompt and tool capabilities (8 tools), vector DB settings (Milvus/Zilliz), memory config (short-term trimming, long-term Graphiti/Neo4j, conversation summarization, audit log), LangGraph checkpoint backend, and external routing (OpenClaw).
Key dataclasses: LLMConfig, VectorDBConfig, AgentConfig, RouterConfig, MemoryConfig, CheckpointConfig
Access: get_llm_config(), get_agent_config()
ui — Design Tokens
File:config/ui/default.yaml | Schema: schemas/ui.py
Color palette (primary, secondary, neutral), gradients (brand, SMB, background), typography (font families, sizes, weights), and component CSS classes (buttons, cards, forms).
No env overrides — design tokens are static.
Access: get_ui_config(), get_theme_config()
head — HTML Head & Analytics
File:config/head/default.yaml | Schema: schemas/head.py
Site verification tokens (Impact, Google, Facebook), meta tags (viewport, OG, Twitter), font preconnects, stylesheets, analytics (GA4 + GTM), inline scripts (Apollo.io tracker), and favicon config.
Access: get_head_config()
catalog — Product Display
File:config/catalog/default.yaml | Schema: (none — raw DictConfig)
Catalog UI settings: items per page, sort options, price range, category definitions, feature toggles (search, pagination, favorites), and empty/loading/error messages.
Access: get_app_config().catalog (inline) or get_catalog_config()
users — User Types & Seed Data
File:config/users/default.yaml | Schema: (none)
User type enums (GUEST, USER, ADMIN, SUPER_ADMIN), initial seed users (2 admins), and default user settings (avatar, subscription, theme, locale).
Access: get_users_config()
subscription — Plans & Billing
File:config/subscription/default.yaml | Schema: (none)
Three subscription plans (Free, Hobby 29.99) with feature lists and limits (chat rounds, Shrine Energy, history days, API access). Default billing settings (trial period, grace period, auto-downgrade). Payment provider config (Stripe enabled, PayPal disabled).
Access: get_subscription_config()
admin — Admin Panel
File:config/admin/default.yaml | Schema: schemas/admin.py
Admin panel metadata, super-admin email list, DB table names, and seed config entry.
Access: get_admin_config()
integrations — External Services
File:config/integrations/default.yaml | Schema: (none)
Connection details and API keys for: HubSpot, Ghost CMS, Stripe, PostHog, Bland.ai (voice calls), MCP server (rate limits, allowed hosts/origins), and CDN assets.
Access: get_integrations_config()
diet — Diet Scoring
File:config/diet/default.yaml | Schema: (none)
Scoring weights (dietary 30%, consistency 25%, check-in 25%, device 20%), lookback window, trend calculation, LLM model for diet insights, and score thresholds (good >= 7, warning >= 4).
Access: get_diet_config()
demo — Demo/Seed Data
File:config/demo/default.yaml | Schema: (none)
Demo Clerk user ID for seed data. Not auto-composed — must be explicitly included.
Adding New Configuration
- Create
config/<group>/default.yamlwith your fields - Add
- <group>toconfig/default.yamldefaults list - (Optional) Create
schemas/<group>.pywith a typed dataclass - Add
get_<group>_config()accessor tohydra_config.py - Use env overrides:
field: ${oc.env:MY_VAR,default_value}