accessibility
Audits or remediates Flutter widgets against WCAG 2.2 conformance levels A, AA, or AAA across iOS, Android, Web, macOS, Windows,…
VGV layered monorepo architecture in Flutter: four layers Data, Repository, Business Logic, and Presentation, unidirectional dependency rules, and model transformation across layers. Use when structuring a multi-package Flutter app, creating data or repository packages, defining
$ npx -y skills add VeryGoodOpenSource/vgv-ai-flutter-plugin --skill layered-architecture --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
/layered-architectureContext preview
The summary Claude sees to decide when to auto-load this skill.
VGV layered monorepo architecture in Flutter: four layers Data, Repository, Business Logic, and Presentation, unidirectional dependency rules, and model transformation across layers. Use when structuring a multi-package Flutter app, creating data or repository packages, defining
name: layered-architecture
description: >
VGV layered monorepo architecture in Flutter: four layers Data, Repository, Business Logic, and
Presentation, unidirectional dependency rules, and model transformation across layers. Use when
structuring a multi-package Flutter app, creating data or repository packages, defining layer
boundaries, or wiring packages in app bootstrap via path dependencies, barrel exports, and
RepositoryProvider. Use too when asked to put a domain model or shared class in an api_client
or data package, or to add a cross-package dependency the layers forbid. Also use for a new app
described in one line ("I'm starting a weather app that reads from a REST API") plus a request
for the package, project, folder, or directory layout, or for where a file or feature should
live and which package code belongs in. Applies even when the user never says monorepo, layer,
or architecture.
allowed-tools: Read Glob Grep mcp__very-good-cli__create mcp__very-good-cli__packages_get mcp__very-good-cli__test
effort: highLayered monorepo architecture for Flutter apps — four layers organized as independent Dart packages with strict unidirectional dependencies.
---
Apply these standards to all layered architecture work:
> **Cross-harness fallback.** This skill scaffolds and tests packages via the Very Good CLI MCP server. On a host without this plugin's Bash hooks and without that MCP server connected, run the equivalent `very_good create dart_package …`, `very_good packages get`, and `very_good test` commands directly.
| Layer | Responsibility | Location | Depends On | Example | | --- | --- | --- | --- | --- | | **Data** | External communication — API calls, local storage, platform plugins | `packages/<name>_api_client/` | External packages only | `user_api_client`, `local_storage_client` | | **Repository** | Data orchestration — combines data sources, transforms models, caches | `packages/<name>_repository/` | Zero or more data layer packages | `user_repository`, `weather_repository` | | **Business Logic** | State management — processes user actions, emits state changes | `lib/<feature>/bloc/` or `lib/<feature>/cubit/` | Repository layer | `LoginBloc`, `ProfileCubit` | | **Presentation** | UI — widgets, pages, views, layout | `lib/<feature>/view/` | Business Logic layer | `LoginPage`, `ProfileView` |
┌─────────────────────────────────────────────┐
│ Presentation │
│ (lib/<feature>/view/) │
└──────────────────┬──────────────────────────┘
│ reads state / dispatches events
┌──────────────────▼──────────────────────────┐
│ Business Logic │
│ (lib/<feature>/bloc/) │
└──────────────────┬──────────────────────────┘
│ calls repository methods
┌──────────────────▼──────────────────────────┐
│ Repository │
│ (packages/<name>_repository/) │
└──────────────────┬──────────────────────────┘
│ calls data clients
┌──────────────────▼──────────────────────────┐
│ Data │
│ (packages/<name>_api_client/) │
└─────────────────────────────────────────────┘Features live in `lib/`, one directory each, split `bloc|cubit/` and `view/` with a barrel file. Layers live in `packages/`, one package per data source and one per repository. The second data package and the second repository follow the same shape as the first.
my_app/ ├── lib/ │ ├── app/ │ │ ├── app.dart # Barrel file │ │ └── view/ │ │ └── app.dart # App widget with MultiRepositoryProvider │ ├── login/ # Feature: login │ │ ├── login.dart # Barrel file │ │ ├── bloc/ │ │ │ ├── login_bloc.dart │ │ │ ├── login_event.dart │ │ │ └── login_state.dart │ │ └── view/ │ │ ├── login_pag
A Claude Code plugin that accelerates Flutter & Dart development with best-practices skills from Very Good Ventures. Developed with 💙 by Very Good Ventures 🦄
Audits or remediates Flutter widgets against WCAG 2.2 conformance levels A, AA, or AAA across iOS, Android, Web, macOS, Windows,…
Best practices for Flutter animations using the built-in animation framework, covering implicit animations, explicit…
Best practices for Bloc state management in Flutter/Dart, covering Cubit versus Bloc, event and state naming, sealed classes with…
Scaffold a new Dart or Flutter project from a Very Good CLI template, covering the flutter_app, dart_package, flutter_package,…
VGV-specific reference for bumping Dart and Flutter SDK constraints across packages, covering pubspec.yaml environment…
Drives a Dart or Flutter package fully green through a verify-fix-rerun loop across four gates: analyze, format, test, coverage.…