Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Produce a deep per-screen design specification extending one MOBILE_IA.md blueprint — screen shell, region layout, section composition, per-component layout detail, action inventory, gesture and interaction specifications, state-specific layouts, orientation and form-factor rules, platform variations, screen-specific motion, and accessibility commitments. Use when asked to create a SCREEN_SPEC.md for a screen, write a per-screen layout spec, deepen a MOBILE_IA blueprint with composition and gest
| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-01 | ✗→✓ | ▲ Improved | 137% | 0% |
| case-04 | ✗→✓ | ▲ Improved | 473% | 0% |
| case-24 | ✗→✓ | ▲ Improved | 82% | 0% |
| case-05 | ✗→✓ | ▲ Improved | 527% | 0% |
| case-06 | ✗→✓ | ▲ Improved | 535% | 0% |
Produce a SCREEN_SPEC.md that serves as the single source of truth for composing one screen of a native mobile application: the screen shell (status bar, nav bar, bottom area, safe-area rules, scroll behavior), the region layout, the per-section composition with spacing and container treatment cited by token name, the per-component layout for non-standard widgets, an action-inventory table with placement and visibility rules, per-gesture interaction specs (target, effect, conflict resolution, haptics, cancel behavior), state-specific layout deltas, orientation and tablet rules, platform-variation deltas (iOS / Android / iPadOS), screen-specific motion, and accessibility commitments. The defining claim — and the definition of "done" — is that the gap between MOBILE_IA's blueprint plus DESIGN.md plus this SCREEN_SPEC and the screen as built is purely mechanical: an implementing agent reading those three artifacts composes the screen on each target platform without inventing spatial decisions, gesture handling, or platform-variant treatment.
The commonest violation is silently restating something MOBILE_IA already owns — re-listing sections, re-declaring the primary CTA, re-enumerating gestures, re-stating platform availability, redefining a state from the state matrix — instead of extending it with composition and interaction detail. SCREEN_SPEC owns how each named region and section is composed and how each gesture behaves; MOBILE_IA owns that those regions, sections, and gestures exist. When the SCREEN_SPEC needs a fact that is missing from MOBILE_IA (e.g., a section the screen has but MOBILE_IA does not list, a gesture not declared in MOBILE_IA's blueprint), surface that gap as an open question for /MOBILE_IA.md to resolve — do not silently add it.
mobile-stack, mobile-tabs, mobile-modal, mobile-sheet, mobile-detail), breakpoints and safe-area rules, motion principles, typography scale, touch-target minimums. SCREEN_SPEC cites tokens, components, and templates by name from this document — it does not redefine them.mobile-screens/<screen-id>/SCREEN_SPEC.md that exists. Use these only to keep transition direction and shared surface invocation consistent — do not duplicate their content.mobile-screens/<screen-id>/SCREEN_SPEC.md (optional, auto-discovered — only if refining) — read fully; preserve every resolved open question and every decision that survives the new MOBILE_IA. Re-run citations against the current MOBILE_IA and DESIGN — do not assume stale section names, token names, component names, layout template names, or gesture names are still valid.Read-set size: MOBILE_IA + DESIGN are always read; 0–2 sibling SCREEN_SPECs and an optional prior version. Read MOBILE_IA's per-screen entry end-to-end — partial reads cause silent drift between blueprint and spec.
SCREEN_SPEC is opt-in. Before writing, verify the screen meets at least one criterion below; if it meets none, the screen should stay with its inline blueprint in MOBILE_IA.md and this skill should not produce output.
If the screen meets no criterion, surface the situation as the only entry in section 13 Open Questions with a recommendation to keep the screen inline in MOBILE_IA, rather than producing a half-spec.
MOBILE_IA owns identity; SCREEN_SPEC owns composition and interaction detail. Each fact lives in exactly one of them.
/MOBILE_IA.md. Do not silently add it.Every quantity, component, template, gesture, state, platform, and surface in SCREEN_SPEC must resolve to a name owned by MOBILE_IA, DESIGN, or this skill's canonical vocabulary.
space-12, radius-md, elevation-card, motion-medium-out), never by raw values (48dp, 8px, 200ms). If a needed token does not exist in DESIGN, surface it as an open question for /DESIGN.md.Button.primary, Cell.inset-grouped, Sheet.bottom).§ Page templates (e.g., mobile-stack, mobile-tabs, mobile-modal, mobile-sheet, mobile-detail). If the screen uses a one-off composition not in the template inventory, write a one-line custom override and surface as an open question for /DESIGN.md if the override should be promoted to a template.tap, double-tap, long-press, swipe-left, swipe-right, swipe-up, swipe-down, pull-to-refresh, pinch, drag-to-reorder, edge-swipe-back, swipe-to-dismiss. New gesture names require a MOBILE_IA edit first.Default / loaded with data, Loading (cold start), Empty, Error — transient network, Offline, Permission-denied — {permission name}, Backgrounded (mid-screen), etc.). Do not invent new states.iOS, Android, iPadOS — exact casing. The platform set in section 1 must be a subset of MOBILE_IA's Platform availability for this screen.Default / loaded with data are listed with "Layout identical to default; only chrome and inline messages differ." — silent omission is forbidden.§ Motion; no screen-specific motion." — silent omission is forbidden.medium at the trigger threshold; cancel before threshold dismisses without refetch."), not as vague summaries ("supports refresh appropriately").Sheet.bottom vs BottomSheet), use the name that DESIGN uses verbatim. If DESIGN is silent or inconsistent, surface as an open question for /DESIGN.md.skill, date, status, screen_id, platforms, template, sections_specified, actions_specified, gestures_specified, states_specified, platform_variations, open_questions).sections_specified is the number of section entries in § 4; actions_specified is the number of rows in § 6's table; gestures_specified is the number of gesture entries in § 7; states_specified is the number of state entries in § 8; platform_variations is the number of per-platform divergence entries in § 10 (zero when § 10 reads the "no platform variations" sentence); open_questions is the number of unresolved questions in § 13 (zero when § 13 reads "All questions resolved.").platforms is the platform set from § 1 as an array ([ios, android], [ios, android, ipados], [ios], etc.) — exact lowercase tokens.template is the layout-template name from § 1.status is complete only when § 13 reads "All questions resolved."; has_open_questions when one or more questions remain unresolved; blocked only when a missing input (e.g., a section the screen has but MOBILE_IA does not list, a needed token absent from DESIGN) prevents authoring the SCREEN_SPEC and the gap is explicit in § 13.[Fork]) but no full microcopy./DESIGN.md so the missing component / template is added there — do not work around the gap with code.The SCREEN_SPEC.md file must follow this exact structure. Every section is mandatory. If a section has no content (e.g., no per-component layout entries beyond standard composition), include the heading with the explicit empty-state sentence prescribed below — do not drop the heading.
markdown--- skill: SCREEN_SPEC.md date: {YYYY-MM-DD} status: {complete | has_open_questions | blocked} screen_id: {screen-id-from-MOBILE_IA} platforms: [{ios, android, ipados — subset that applies}] template: {layout-template-name | custom-override} sections_specified: {N} actions_specified: {N} gestures_specified: {N} states_specified: {N} platform_variations: {N} open_questions: {N} --- # SCREEN_SPEC: {ScreenName} — {short name} ## 1. Identity & Cross-references - **Screen ID:** `{screen-id}` from MOBILE_IA.md - **Route or deep-link:** `{copied verbatim from MOBILE_IA's per-screen entry}` - **Layout template:** `{template-name from DESIGN.md § Page templates}` (or one-line custom override with rationale) - **Platforms targeted:** {iOS | Android | iPadOS — subset of MOBILE_IA's Platform availability for this screen} - **Design tokens cited:** {comma-separated list of every token referenced anywhere in this SCREEN_SPEC — `space-12`, `radius-md`, `elevation-card`, `motion-medium-out`, …} - **Component dependencies:** {comma-separated list of every DESIGN component referenced — `Button.primary`, `Cell.inset-grouped`, `Sheet.bottom`, …} - **Sibling screens (in flows):** {SCREEN_SPEC IDs of screens this screen flows into or out of, per MOBILE_IA's entry/exit points — or "None — terminal screen in its flow."} --- ## 2. Screen Shell - **Status bar treatment:** {visible | hidden | blended}; {light-content | dark-content | adaptive} - **Navigation bar:** {large title | standard | hidden}; back-button behavior — {default pop | custom dismiss | hidden}; right-side actions — {list of nav-bar actions, by role} - **Bottom area:** {tab bar | action bar | none}; safe-area treatment — {edge-to-edge with bottom inset | inset content area | inherits app default} - **Safe-area insets:** - **Top:** {rule — e.g., "content begins below status bar; nav bar absorbs top inset"} - **Bottom:** {rule — e.g., "primary CTA inset by `space-16` above bottom safe area; tab bar absorbs bottom inset"} - **Leading / Trailing:** {rule — e.g., "content edges align to `space-16` from leading and trailing safe-area edges"} - **Scroll behavior:** {scrolls | static | parallax-header collapse | inset-header pinned}; bounces {yes | no}; supports `pull-to-refresh` {yes | no — reference Shared Surfaces} - **Vertical rhythm baseline:** {token name — e.g., "`space-8` baseline grid; section gaps use `space-24`"} --- ## 3. Region Layout For each named region — top bar, content, sidebar / drawer (iPadOS or large screens), bottom action area, tab bar, FAB — provide a sub-block. Omit regions the screen does not have; write "{region} — not present on this screen." for any region the reader might expect. ### Top bar - **Position and dimensions:** {fixed top; height — token name; spans full width} - **Background / border / separator:** {token names from DESIGN} - **Internal alignment / scroll behavior:** {static | collapses with content scroll | parallax} - **Sticky vs fixed:** {sticky | fixed | scrolls-away} - **Z-index relative to other regions:** {integer or token name} ### Content - **Position and dimensions:** {fills between top bar and bottom area} - **Background / border / separator:** {tokens} - **Internal alignment / scroll behavior:** {single-axis vertical scroll | horizontal pager | grid | list} - **Sticky vs fixed:** {scrolls} - **Z-index relative to other regions:** {integer or token name} (Repeat for each region. Use the same five-bullet structure.) --- ## 4. Section Composition Iterate every section listed in MOBILE_IA's per-screen entry for this screen, in the same order, with section names copied verbatim. ### `{Section name from MOBILE_IA}` - **Order in screen:** {1, 2, 3, …} - **Container treatment:** {card | inline | inset-grouped | plain-grouped | full-bleed} - **Internal layout:** {description — e.g., "vertical stack of rows; each row a `Cell.inset-grouped` with leading icon, title, trailing chevron"} - **Spacing above:** `{token name}` - **Spacing below:** `{token name}` - **Spacing between siblings (within section):** `{token name}` - **Header treatment:** {none | inline title `text-section-header` | floating title with `space-12` below | sticky} - **Per-section sub-states:** - **Loading skeleton:** {description — e.g., "three placeholder `Cell` rows with shimmer per `motion-shimmer-loop`"} - **Error inline:** {description — e.g., "`InlineError` row replaces the section content; CTA `[Retry]`"} - **Empty:** {description — e.g., "`EmptyState.compact` with neutral icon and role-level prompt"} (Repeat for every section. Section count must match `sections_specified` in frontmatter.) --- ## 5. Per-Component Layout Detail (For sections whose composition is a single standard component invocation, no entry is needed. Provide entries only where a section uses non-standard composition — form layout, list-item composition, action-group layout, custom widget.) ### `{Component or composite within section X}` - **Composition:** {description — e.g., "two-column form; labels in the leading column at `space-160` width, fields in the trailing column flexing to remaining width"} - **Internal spacing:** {token names — e.g., "field-to-field gap `space-12`; label-to-field gap `space-8`"} - **Component variants used:** {DESIGN component names — e.g., `TextField.outlined`, `Stepper`, `Toggle.switch`} - **Variant-by-content rule:** {if applicable — e.g., "destructive actions render `Button.destructive`; neutral actions render `Button.tertiary`"} (Repeat for each non-standard composition. If none: "All sections use standard component compositions per DESIGN.md; no per-component layout detail required.") --- ## 6. Action Inventory & Placement | Action (role) | Position | Component variant | Visibility rule | Disabled rule | |---|---|---|---|---| | {role description, not literal copy — e.g., "Fork the resource"} | {nav-bar trailing | content area at index N | bottom action area | FAB anchored bottom-trailing | swipe-action on cell row | long-press menu on cell} | {DESIGN component name} | {when this control appears — e.g., "always" | "only when viewer is not the owner" | "only in `Default / loaded with data` state"} | {when this control is enabled — e.g., "always enabled" | "disabled while a request is in flight" | "disabled when offline"} | (Add one row per interactive control. Include every control reachable on this screen across all states. Action count must match `actions_specified` in frontmatter.) --- ## 7. Gesture & Interaction Specifications For each gesture listed in MOBILE_IA's per-screen blueprint plus any gesture introduced by an action in section 6, provide an entry. Gesture names must come from the canonical vocabulary in the Cross-reference rules. ### `{gesture-name}` on `{target region or element}` - **Effect:** {what happens — e.g., "fetches latest activity; updates the Activity section in place"} - **Conflict resolution:** {how this gesture coexists with `edge-swipe-back` and tab-bar gestures — e.g., "horizontal swipe within the tab strip is captured for tab switching; outside the strip, `edge-swipe-back` takes precedence"} - **Haptic feedback:** {`light` | `medium` | `heavy` | `selection` | `success` | `warning` | `error` | `none`} at {trigger point — e.g., "the moment the refresh threshold is crossed"} - **Cancel behavior:** {what happens if the gesture is canceled mid-stream — e.g., "release before threshold dismisses without refetch; in-flight network request is canceled"} (Repeat per gesture. Gesture count must match `gestures_specified` in frontmatter.) --- ## 8. State-Specific Layouts For every state in MOBILE_IA's state matrix for this screen, declare what changes in the layout. States whose layout is identical to `Default / loaded with data` use the prescribed identical-layout sentence. ### `{State name from MOBILE_IA}` - **Layout deltas:** {what changes vs `Default / loaded with data` — e.g., "Content region replaced by `EmptyState.full` centered vertically; primary CTA in bottom action area becomes `[Create]`"} *(or "Layout identical to default; only chrome and inline messages differ.")* - **Transition behavior:** {how the layout enters this state — e.g., "skeleton fades out per `motion-fast-out` and content fades in per `motion-medium-in`"} (Repeat for every state. State count must match `states_specified` in frontmatter.) --- ## 9. Orientation & Form Factor - **Portrait:** {default behavior — e.g., "default composition as described above"} - **Landscape:** {supported | not supported}; if supported — {what reflows — e.g., "two-column layout with section list leading and detail trailing; content scrolls within trailing column"} - **iPad / tablet:** {not supported | stretches without reflow | optimized — describe split-view, primary / secondary column composition, multitasking behavior} - **Foldables / split-screen:** {adaptation rule — e.g., "in compact width on a foldable, falls back to phone composition; in expanded width, uses tablet composition"} *(or "Not optimized; falls through to phone composition.")* --- ## 10. Platform Variations (If the screen renders identically on all platforms in section 1's `Platforms targeted` list, replace the per-platform entries with: "All platforms render identically per the cross-platform component set; no platform variations." Otherwise enumerate every divergence.) ### iOS-specific behavior - {composition or interaction divergence — e.g., "overflow action sheet renders as iOS sheet (`Sheet.ios`) anchored to the trailing nav-bar action"} - {platform-idiom — e.g., "large title in nav bar collapses to standard on scroll"} - {action sheet vs alert — e.g., "destructive confirmation uses iOS action sheet"} ### Android-specific behavior - {composition or interaction divergence — e.g., "overflow action sheet renders as Material `Sheet.bottom`"} - {hardware-back handling — e.g., "hardware back dismisses the bottom sheet first, then pops the stack"} - {FAB convention — e.g., "primary CTA renders as Material `FAB.extended` anchored bottom-trailing"} ### iPadOS-specific behavior (Omit entirely if iPadOS is not in section 1's `Platforms targeted`.) - {split-view behavior — e.g., "primary column hosts the section list; secondary column hosts the detail content"} - {multitasking — e.g., "supports Slide Over and Split View; minimum width matches the phone composition"} --- ## 11. Motion & Transitions - **Screen-entry transition:** {push | modal-present | sheet-present | crossfade | none}; cite motion token from DESIGN if applicable. - **Screen-exit transition:** {push-pop | modal-dismiss | sheet-dismiss | crossfade | none}. - **Element transitions within the screen:** {list-row insertion / removal / reorder; tab-content swap; section expand / collapse — by token name} - **Loading-state choreography:** {sequence — e.g., "skeleton appears immediately; content fades in per `motion-medium-in` once data resolves; minimum visible duration `motion-min-skeleton`"} - **Toast / snackbar appearance:** {position, dismissal — reference Shared Surfaces by name} (If no screen-specific motion: "Inherits global Motion defaults from DESIGN.md `§ Motion`; no screen-specific motion.") --- ## 12. Accessibility - **VoiceOver / TalkBack labels:** {where labels deviate from on-screen text — e.g., "icon-only nav-bar trailing action announces the action role"} - **Dynamic Type / font scaling:** {what reflows when type scales up; cap at largest accessibility size — e.g., "rows reflow to two lines at extra-large; truncates at the largest accessibility size"} - **Reduced motion:** {what motion is suppressed — e.g., "skeleton shimmer disabled; element transitions become crossfades"} - **Increased contrast:** {what changes — e.g., "separator weight increases; background tint deepens per DESIGN.md tokens"} - **Hit-target sizing:** {minimums per region — cite DESIGN.md `§ Touch targets`; e.g., "all interactive cells meet `touch-target-min`"} - **Focus order (external keyboard / switch control):** {logical order — e.g., "1. nav-bar leading, 2. nav-bar trailing actions, 3. content sections in order, 4. bottom action area"} --- ## 13. Open Questions This section must be EMPTY before implementation begins. If any questions remain unresolved, the SCREEN_SPEC is not ready. The user will resolve open questions after reviewing the spec — do not ask during generation. When drafting, you will encounter decisions where multiple approaches are defensible and the input documents do not clearly favor one. Do NOT silently pick an answer to keep this section empty. Instead: - If a question has one obviously correct answer given MOBILE_IA + DESIGN, resolve it yourself and write the decision into the appropriate section. - If a question has no clear answer — multiple valid approaches exist, or MOBILE_IA / DESIGN are ambiguous or silent — list it here with proposed options and tradeoffs. Format for open questions: - [ ] {Question} - **Option A:** {description} — {tradeoff} - **Option B:** {description} — {tradeoff} - **Recommendation:** {if you lean one way, say so and why — but leave the decision to the user} Common gaps to surface here rather than resolve silently: - A section the screen has but MOBILE_IA's blueprint does not list → resolve in `/MOBILE_IA.md` first. - A gesture not declared in MOBILE_IA's gestures list → resolve in `/MOBILE_IA.md` first. - A token, component, or layout template needed but missing from DESIGN → resolve in `/DESIGN.md` first. - A platform-specific composition for a platform not in MOBILE_IA's Platform availability → resolve in `/MOBILE_IA.md` first. Once the user resolves all questions, move each resolution into the appropriate section and replace this section with: "All questions resolved."
MOBILE_IA.mdDESIGN.mdSPEC.mdINTERFACES.mdMOBILE_IA.md's Flows and Navigation ModelMOBILE_IA.mdWEB_IA.md, CLI_IA.md, VOICE_IA.md, TUI_IA.mdBefore considering a SCREEN_SPEC.md complete, verify:
skill, date, status, screen_id, platforms, template, sections_specified, actions_specified, gestures_specified, states_specified, platform_variations, open_questions)sections_specified = entries in § 4, actions_specified = rows in § 6, gestures_specified = entries in § 7, states_specified = entries in § 8, platform_variations = per-platform divergence entries in § 10, open_questions = unresolved items in § 13)status is complete if § 13 reads "All questions resolved." and has_open_questions otherwise (use blocked only when a missing input prevents authoring and § 13 makes the gap explicit)screen_id matches a screen in MOBILE_IA.md's Screen Inventory exactlyplatforms is a subset of MOBILE_IA's Platform availability for this screen, with exact lowercase tokens (ios, android, ipados)template is a name from DESIGN.md § Page templates (or a one-line custom override is documented in § 1 with rationale)[Fork])status is has_open_questionsOther measured skills in the registry, with their headline benchmark lift.