accessibility
Use when working on accessibility, a11y, WCAG, ARIA, screen readers, keyboard nav, focus order, contrast, alt text, captions, reduced motion, or target sizes;…
Use when writing store copy to character limits (name, subtitle, descriptions, keywords) or preparing listing images (icon, feature graphic, screenshots, preview video).
$ npx -y skills add evanca/flutter-ai-rules --skill store-listing-assets --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
/store-listing-assetsContext preview
The summary Claude sees to decide when to auto-load this skill.
Use when writing store copy to character limits (name, subtitle, descriptions, keywords) or preparing listing images (icon, feature graphic, screenshots, preview video).
name: store-listing-assets description: "Use when writing store copy to character limits (name, subtitle, descriptions, keywords) or preparing listing images (icon, feature graphic, screenshots, preview video)." license: MIT
Prepare the metadata, copy, and visual assets that go into an App Store / Google Play **phone** listing, sized and length-fit to each store's exact requirements. This is the *listing production* skill; pair it with a separate review-readiness audit at submission time so the fields are polished and the app itself is ready for review.
Two references hold the authoritative specs; consult them for exact numbers rather than reciting from memory (they drift):
**Default scope is phone-only.** Skip tablet, iPad, desktop, Chromebook, TV, watch, Mac, and visionOS assets unless the user says the app supports them — and if they do, note that those are separate asset families outside these specs.
1. **Gather the inputs once** (shared prep): final app name, what the app does in one sentence, primary category, whether it has ads, whether it collects/shares/tracks data, privacy policy URL, support contact, and launch languages. These feed both stores. 2. **Confirm which store(s)** the user is targeting — the required set differs enough that doing both blindly wastes effort. 3. **Produce copy AND/OR assets** per the requests below, always checking generated text against the live character/byte limits and generated images against the exact pixel/format specs.
Character limits are hard constraints — always count and show the count. Key limits (full set in the references):
| Field | Google Play | Apple | |---|---|---| | App name | 30 chars | 2–30 chars | | Subtitle | — (no field) | 30 chars | | Short description | 80 chars | — (use Promotional Text, 170) | | Full description | 4,000 chars | 4,000 chars, plain text | | Keywords | — (no field; don't keyword-stuff the description) | ≤100 **bytes**, each keyword >2 chars |
Copywriting rules that keep the listing compliant:
When generating or resizing images with tooling (ImageMagick, etc.), hit these exactly — wrong format/alpha/dimension is an instant listing error:
**Google Play**
**Apple (iPhone)**
Screenshot content rules: show **real app UI in use** (not splash/login/mockups), no unsupported devices, no fake UI, no misleading or pricing claims baked in. Verify generated images match the actual submitted build.
At submission time, also run a review-readiness audit, and if RevenueCat/paywalls are involved, verify paywall clarity separately.
36 Flutter and Dart skills your coding agent loads by itself, sourced only from official documentation. A skill is a folder with a SKILL.md file.
Use when working on accessibility, a11y, WCAG, ARIA, screen readers, keyboard nav, focus order, contrast, alt text, captions, reduced motion, or target sizes;…
Use when creating a feature, designing folder structure, adding repositories/services/view models, wiring dependency injection, or deciding which layer owns…
Use when creating a Cubit or Bloc, modeling state with sealed classes or status enums, wiring BlocBuilder/BlocListener/BlocProvider, writing bloc tests, or…
Use when asked to review a PR, MR, branch, or diff, audit changed files, or check code quality.
Use when writing switch statements, refactoring if-else chains, creating data classes, choosing records vs classes, destructuring values, or modernizing…
Use when building AI agents in Dart, implementing Genkit flows or tools, integrating LLMs into Dart or Flutter applications, or using Genkit Dart plugins.