CMakeLists.txt (project root -- required by ESP-IDF) sdkconfig.defaults partitions.csv README.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/ │ ├── display/ │ │ ├── display_rgb.h │ │ └── display_rgb.c │ └── touch/ │ ├── touch_gt911.h │ └── touch_gt911.c ├── ui/ │ ├── lvgl_port.h (tick, service task, locking) │ ├── lvgl_port.c │ ├── ui_manager.h │ └── ui_manager.c ├── api/ │ ├── ambient_weather.h │ └── ambient_weather.c └── utils/ ├── utils.h └── utils.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.