services: web: build: . container_name: mtg-deckbuilder-web ports: - "8080:8080" environment: PYTHONUNBUFFERED: "1" TERM: "xterm-256color" DEBIAN_FRONTEND: "noninteractive" # UI features/flags SHOW_LOGS: "1" # 1=enable /logs page; 0=hide SHOW_SETUP: "1" # 1=show Setup/Tagging card; 0=hide (still runs if WEB_AUTO_SETUP=1) SHOW_DIAGNOSTICS: "1" # 1=enable /diagnostics & /diagnostics/perf; 0=hide ENABLE_PWA: "0" # 1=serve manifest/service worker (experimental) ENABLE_THEMES: "1" # 1=expose theme selector; 0=hide (THEME still applied) ENABLE_PRESETS: "0" # 1=show presets section WEB_VIRTUALIZE: "1" # 1=enable list virtualization in Step 5 ALLOW_MUST_HAVES: "1" # 1=enable must-include/must-exclude cards feature; 0=disable SHOW_MISC_POOL: "0" # Theming THEME: "dark" # system|light|dark # Setup/Tagging performance WEB_AUTO_SETUP: "1" # 1=auto-run setup/tagging when needed WEB_AUTO_REFRESH_DAYS: "7" # Refresh cards.csv if older than N days; 0=never WEB_TAG_PARALLEL: "1" # 1=parallelize tagging WEB_TAG_WORKERS: "4" # Worker count when parallel tagging # Misc land tuning (utility land selection – Step 7) # MISC_LAND_DEBUG: "1" # 1=write misc land debug CSVs (post-filter, candidates); off by default unless SHOW_DIAGNOSTICS=1 # MISC_LAND_EDHREC_KEEP_PERCENT_MIN: "0.75" # Lower bound (0–1). When both MIN & MAX set, a random keep % in [MIN,MAX] is rolled each build # MISC_LAND_EDHREC_KEEP_PERCENT_MAX: "1.0" # Upper bound (0–1) for dynamic EDHREC keep range # MISC_LAND_EDHREC_KEEP_PERCENT: "0.80" # Legacy single fixed keep % (used only if MIN/MAX not both provided) # (Optional theme weighting overrides) # MISC_LAND_THEME_MATCH_BASE: "1.4" # Multiplier if at least one theme tag matches # MISC_LAND_THEME_MATCH_PER_EXTRA: "0.15" # Increment per extra matching tag beyond first # MISC_LAND_THEME_MATCH_CAP: "2.0" # Cap for total theme multiplier # Paths (optional overrides) # DECK_EXPORTS: "/app/deck_files" # Where the deck browser looks for exports # DECK_CONFIG: "/app/config" # Where the config browser looks for *.json # OWNED_CARDS_DIR: "/app/owned_cards" # Preferred path for owned inventory uploads # CARD_LIBRARY_DIR: "/app/owned_cards" # Back-compat alias for OWNED_CARDS_DIR # Headless-only settings # DECK_MODE: "headless" # Auto-run headless flow in CLI mode # HEADLESS_EXPORT_JSON: "1" # 1=export resolved run config JSON # DECK_COMMANDER: "" # Commander name query # DECK_PRIMARY_CHOICE: "1" # Primary tag index (1-based) # DECK_SECONDARY_CHOICE: "" # Optional secondary index # DECK_TERTIARY_CHOICE: "" # Optional tertiary index # DECK_PRIMARY_TAG: "" # Or tag names instead of indices # DECK_SECONDARY_TAG: "" # DECK_TERTIARY_TAG: "" # DECK_BRACKET_LEVEL: "3" # 1–5 # DECK_ADD_LANDS: "1" # DECK_ADD_CREATURES: "1" # DECK_ADD_NON_CREATURE_SPELLS: "1" # DECK_ADD_RAMP: "1" # DECK_ADD_REMOVAL: "1" # DECK_ADD_WIPES: "1" # DECK_ADD_CARD_ADVANTAGE: "1" # DECK_ADD_PROTECTION: "1" # DECK_FETCH_COUNT: "3" # DECK_DUAL_COUNT: "" # DECK_TRIPLE_COUNT: "" # DECK_UTILITY_COUNT: "" # DECK_TAG_MODE: "AND" # AND|OR (if supported) # Entrypoint knobs (only if you change the entrypoint behavior) # APP_MODE: "web" # web|cli — selects uvicorn vs CLI # HOST: "0.0.0.0" # Uvicorn bind host # PORT: "8080" # Uvicorn port # WORKERS: "1" # Uvicorn workers volumes: - ${PWD}/deck_files:/app/deck_files - ${PWD}/logs:/app/logs - ${PWD}/csv_files:/app/csv_files - ${PWD}/config:/app/config - ${PWD}/owned_cards:/app/owned_cards working_dir: /app restart: "no"