---
description: "Feature-First architecture conventions for TaskFlow"
alwaysApply: true
---

# Feature-First Architecture — TaskFlow

## 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)
- features/auth/ MUST NOT import from features/home/ etc.
- Shared code lives in core/ or shared/ only
- Each feature is self-contained: screen + provider + model + repo

## 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)
