CMakeLists.txt (project root -- required by ESP-IDF) sdkconfig.defaults partitions.csv README.md TODO.md main/ ├── CMakeLists.txt (the only component registration in the project) ├── idf_component.yml ├── app_config.h.example (template; copy to app_config.h) ├── app_config.h (gitignored -- credentials) ├── main.c ├── wifi/ │ ├── wifi_manager.h │ └── wifi_manager.c ├── drivers/ │ ├── i2c_bus.h (shared bus: STC8H1K28 + GT911) │ ├── i2c_bus.c │ ├── backlight/ │ │ ├── backlight.h (STC8H1K28 -- also gates GT911 reset) │ │ └── backlight.c │ ├── display/ │ │ ├── display_rgb.h │ │ └── display_rgb.c │ └── touch/ │ ├── touch_gt911.h │ └── touch_gt911.c ├── ui/ │ ├── lvgl_port.h (tick, service task, locking, pause/resume) │ ├── lvgl_port.c │ ├── ui_manager.h │ └── ui_manager.c └── api/ ├── ambient_weather.h └── ambient_weather.c Note: main/ subdirectories are plain source folders, not ESP-IDF components. IDF only auto-discovers components under a top-level components/ directory, so all sources are registered by main/CMakeLists.txt.