--- description: "Feature-First architecture conventions for {{PROJECT_NAME}}" alwaysApply: true --- # Feature-First Architecture — {{PROJECT_NAME}} ## Folder structure ``` lib/ features/ auth/ auth_screen.dart auth_provider.dart (or auth_bloc.dart) auth_repository.dart auth_model.dart widgets/ login_form.dart social_login_button.dart home/ home_screen.dart home_provider.dart ... core/ di/ ← Dependency injection setup network/ ← HTTP client, interceptors storage/ ← Local storage abstraction widgets/ ← Shared widgets used by 3+ features theme/ ← App theme, colors, text styles routing/ ← Router config shared/ models/ ← Models shared across features utils/ ← Pure utility functions ``` ## Import rules (STRICTLY ENFORCED by arch-guard hook) {{ARCH_IMPORT_RULES}} ## Feature isolation rules - A feature folder is self-contained: its own screen, state, model, repository - Features MUST NOT import from other feature folders - Shared code MUST be extracted to `core/` or `shared/` before sharing - The 3-feature rule: if 3+ features need the same widget → move it to `core/widgets/` ## File naming within a feature - `[feature]_screen.dart` — the main screen widget - `[feature]_provider.dart` — Riverpod providers (or `[feature]_bloc.dart`) - `[feature]_repository.dart` — data fetching + caching - `[feature]_model.dart` — data model (Freezed or plain Dart)