# Cassandra environment — copy to .env and fill in. # .env is mounted read-only into the containers; never commit real secrets. # --- Database (MariaDB) --- MARIADB_ROOT_PASSWORD=changeme-root MARIADB_DATABASE=cassandra MARIADB_USER=cassandra MARIADB_PASSWORD=changeme # --- API keys (mirror of the prototype .env) --- API_KEY= # Trading 212 API key SECRET_KEY= # Trading 212 secret FRED_API_KEY= # FRED economic data OPENROUTER_API_KEY= # OpenRouter (AI log generation) # --- App --- CASSANDRA_TOKEN= # Bearer token required if set; LAN-only no-auth if empty CASSANDRA_PORT=8000 CASSANDRA_BASE_CURRENCY=GBP CASSANDRA_ANCHOR_DATE=2026-03-04 # YYYY-MM-DD; used by market_pulse anchor column CASSANDRA_MOCK=0 # 1 = serve canned fixtures, skip live APIs # --- AI log --- OPENROUTER_MODEL=deepseek/deepseek-v4-flash # cheap & fast; swap to anthropic/claude-sonnet-4.6 or anthropic/claude-opus-4.7 for higher quality OPENROUTER_MONTHLY_CAP_USD=20 CASSANDRA_TONE=INTERMEDIATE # NOVICE | INTERMEDIATE | PRO CASSANDRA_ANALYSIS=SPECULATIVE # DRY | SPECULATIVE # --- Compliance feature flags (default false = compliance-safe) --- # See docs/read-markets-compliance-changes.md. Code paths stay in the tree; # flip a flag to reactivate. PORTFOLIO_AI_ENABLED=false # /api/analyze + dashboard AI read + reviewer portfolio rider PORTFOLIO_SYNC_ENABLED=false # /api/portfolio/sync* + cloud-sync UI + PortfolioSync writes TICKER_UNIVERSE_AGGREGATE_ENABLED=false # ticker_universe buffer/flush/upsert writes (server-learns-nothing) SUBSCRIPTIONS_ENABLED=false # Stripe checkout/webhook/portal + /pricing + paid-tier gating