ffca-architecture
FFCA Architecture
Orientation skill for Feature-First Clean Architecture (FFCA) monorepos. It tells you how to navigate the structure and which rules apply. It does not restate the conventions: those live in ${CLAUDE_PLUGIN_ROOT}/references/ffca/. Every step below names the file and section to read.
Confirm you are in an FFCA repo
The detection signal is a features/ folder whose packages follow the {feature}_domain, {feature}_data, or {feature}_presentation naming. If the repo uses the standard VGV layered structure (packages/ with _repository/_api_client), this is not an FFCA repo: defer to the layered-architecture skill instead.
Workflow: deciding where code lives
- Read
references/ffca/overview.md, section The structure, to place the work in one of the three top-level folders:apps/,features/,shared/. - To decide between a feature and a shared package, apply the two-question decision rule in
references/ffca/overview.md, section Shared libraries (a business capability an app composes goes tofeatures/; something you could publish to pub.dev and a stranger would use unchanged goes toshared/). Use its component table to settle edge cases. - To decide which layers a feature needs, read
references/ffca/overview.md, sections Headless features and Presentation-only features. A feature with no screens stays domain plus data and can grow a presentation package later with no structural change. A feature that only composes other features' domains into a screen has a presentation package and nothing else. - Before naming any package, read
references/ffca/project_structure.md, section Naming conventions. The names are mechanically validated by the hook, so they are not optional. - To place a file inside a package, read
references/ffca/project_structure.md, section Layer subfolders, for the per-layer folder map (models/,repositories/,use_cases/,data_sources/,dtos/,mappers/, and the per-screenbloc/,views/, module layout).
Vocabulary: Command and Query, not use case
The classes in use_cases/ are named Command (mutates, execute) and Query (reads, get or watch). Use those words when you talk about them and when you name them. The folder keeps the conventional use_cases/ name so the layout matches other clean architecture projects, but the term "use case" is not used for the classes. Read references/ffca/domain.md, section Business rules.