# Project Structure Rules ## Single Module - This is a single-module Android project — all code lives under `:app` - Do not create new Gradle modules or suggest modularization ## Dependency Injection - Manual DI via `AppContainer` interface + `DefaultAppContainer` implementation - **Do not introduce Hilt, Dagger, Koin, or any DI framework** - New repositories/services are added to `AppContainer` and lazily initialized in `DefaultAppContainer` - Access the container via `(application as VBHelper).container` ## External Libraries - `vb-nfc-reader` is resolved from `mavenLocal()` — it must be installed locally before building - Version catalog is in `gradle/libs.versions.toml` — all dependency versions go there - New dependencies must be added to the version catalog first, then referenced via `libs.*` accessor ## Package Conventions - New screens: create a sub-package under `screens/` (e.g., `screens/myFeature/`) - Each screen package contains: `MyFeatureController.kt` (interface), `MyFeatureControllerImpl.kt`, `MyFeatureScreen.kt` - Shared UI components go in `components/` - Domain models go in `domain/` organized by feature sub-package