# Feature Context: Demo Mode ## Current State Starting implementation. No changes made yet. ## Key Architecture Notes - `EngineRegistry` (class-level dict) holds capture engines, auto-registered in `capture_engines/__init__.py` - `AudioEngineRegistry` (class-level dict) holds audio engines, auto-registered in `audio/__init__.py` - `LEDDeviceProvider` instances registered via `register_provider()` in `led_client.py` - Already has `MockDeviceProvider` + `MockClient` (device type "mock") for testing - Config is `pydantic_settings.BaseSettings` in `config.py`, loaded from YAML + env vars - Frontend header in `templates/index.html` line 27-31: title + version badge - Frontend bundle: `cd server && npm run build` (esbuild) - Data stored as JSON in `data/` directory, paths configured via `StorageConfig` ## Temporary Workarounds - None yet ## Cross-Phase Dependencies - Phase 1 (config flag) is foundational — all other phases depend on `is_demo_mode()` - Phase 2 & 3 (engines) can be done independently of each other - Phase 4 (seed data) depends on knowing what entities to create, which is informed by phases 2-3 - Phase 5 (frontend) depends on the system info API field from phase 1 - Phase 6 (engine resolution) depends on engines existing from phases 2-3 ## Implementation Notes - Demo mode activated via `WLED_DEMO=true` env var or `demo: true` in YAML config - Isolated data directory `data/demo/` keeps demo entities separate from real config - Demo engines use `ENGINE_TYPE = "demo"` and are always registered but return `is_available() = True` only in demo mode - The existing `MockDeviceProvider`/`MockClient` can be reused or extended for demo device output