- Use `viper.SetConfigName()` and `viper.AddConfigPath()` to load config from files — support multiple formats (YAML, TOML, JSON) automatically.
- Bind environment variables with `viper.AutomaticEnv()` and `viper.SetEnvPrefix()` — env vars override file config by default.
- Unmarshal config into typed structs with `viper.Unmarshal(&config)` — use `mapstructure` struct tags for field name mapping.
- Unmarshal config into typed structs with `viper.Unmarshal(&config)` for type-safe access.
- Set sensible defaults with `viper.SetDefault()` for all config keys — don't crash on missing optional config.
- Use `viper.SetConfigName()` and `viper.AddConfigPath()` to search multiple locations (`.`, `$HOME`, `/etc`).
- Use `viper.BindPFlag()` to bind CLI flags to config keys for unified config access.