
Ui Mobile
Implement React Native screens that meet mandatory touch-target and WCAG contrast rules before shipping mobile UI.
Overview
Ui-mobile is an agent skill for the Build phase that enforces React Native mobile accessibility patterns for touch targets and color contrast.
Install
npx skills add https://github.com/alinaqi/claude-bootstrap --skill ui-mobileWhat is this skill?
- Non-negotiable minimum 44×44 point touch targets for every button, link, and icon control
- WCAG 2.1 AA contrast guidance with safe light/dark text pairings and explicit forbidden low-contrast grays
- StyleSheet patterns for buttons and icon buttons with minHeight/minWidth enforcement
- Scoped to React Native paths: **/*.tsx, ios/**, android/**, and related JSX/Dart globs
- Effort marked medium—expects systematic pass over interactive components, not one-off tweaks
- Minimum interactive touch target: 44×44 points
- WCAG 2.1 AA: 4.5:1 text contrast and 3:1 for large text/UI
Adoption & trust: 857 installs on skills.sh; 691 GitHub stars; 3/3 security scanners passed (skills.sh audits).
What problem does it solve?
Your agent keeps generating small icon buttons and low-contrast gray text that fail mobile accessibility and store review expectations.
Who is it for?
Solo builders coding React Native (or hybrid TSX) apps who want the agent to apply the same accessibility rules on every UI change.
Skip if: Web-only Next.js layouts, native SwiftUI/UIKit-only projects without the skill’s path globs, or backend API design with no UI layer.
When should I use this skill?
When building mobile UI components (when-to-use: building mobile UI components).
What do I get? / Deliverables
Interactive elements use 44×44 minimum targets and AA-safe color tokens in StyleSheet definitions across your mobile screens.
- Accessible StyleSheet definitions for buttons and icon buttons
- Documented safe light/dark color token choices
Recommended Skills
Journey fit
Mobile UI implementation belongs in Build when you are composing components and styles for iOS and Android targets. Frontend subphase is the shelf for cross-platform UI patterns, StyleSheet rules, and accessibility checks on interactive elements.
How it compares
Opinionated React Native accessibility guardrails—not a full design system generator or Figma-to-code pipeline.
Common Questions / FAQ
Who is ui-mobile for?
Indie developers building React Native or Expo apps who need agents to respect platform touch and contrast minimums on every component edit.
When should I use ui-mobile?
Use it in Build while creating or reviewing mobile UI components, form controls, and navigation chrome under ios/** or android/**.
Is ui-mobile safe to install?
It is local StyleSheet and documentation guidance with no network calls; still review the Security Audits panel on this Prism page for the parent repo.
SKILL.md
READMESKILL.md - Ui Mobile
# Mobile UI Design Skill (React Native) --- ## MANDATORY: Mobile Accessibility Standards **These rules are NON-NEGOTIABLE. Every UI element must pass these checks.** ### 1. Touch Targets (CRITICAL) ```typescript // MINIMUM 44x44 points for ALL interactive elements const MINIMUM_TOUCH_SIZE = 44; // EVERY button, link, icon button must meet this const styles = StyleSheet.create({ button: { minHeight: MINIMUM_TOUCH_SIZE, minWidth: MINIMUM_TOUCH_SIZE, paddingVertical: 12, paddingHorizontal: 16, }, iconButton: { width: MINIMUM_TOUCH_SIZE, height: MINIMUM_TOUCH_SIZE, justifyContent: 'center', alignItems: 'center', }, }); // NEVER DO THIS: style={{ height: 30 }} // ✗ TOO SMALL style={{ padding: 4 }} // ✗ RESULTS IN TINY TARGET ``` ### 2. Color Contrast (CRITICAL) ```typescript // WCAG 2.1 AA: 4.5:1 for text, 3:1 for large text/UI // SAFE COMBINATIONS: const colors = { // Light mode textPrimary: '#000000', // on white = 21:1 ✓ textSecondary: '#374151', // gray-700 on white = 9.2:1 ✓ // Dark mode textPrimaryDark: '#FFFFFF', // on gray-900 = 16:1 ✓ textSecondaryDark: '#E5E7EB', // gray-200 on gray-900 = 11:1 ✓ }; // FORBIDDEN - FAILS CONTRAST: // ✗ '#9CA3AF' (gray-400) on white = 2.6:1 // ✗ '#6B7280' (gray-500) on '#111827' = 4.0:1 // ✗ Any text below 4.5:1 ratio ``` ### 3. Visibility Rules ```typescript // ALL BUTTONS MUST HAVE visible boundaries // PRIMARY: Solid background with contrasting text <Pressable style={styles.primaryButton}> <Text style={{ color: '#FFFFFF' }}>Submit</Text> </Pressable> const styles = StyleSheet.create({ primaryButton: { backgroundColor: '#1F2937', // gray-800 paddingVertical: 16, paddingHorizontal: 24, borderRadius: 12, minHeight: 44, }, }); // SECONDARY: Visible background <Pressable style={styles.secondaryButton}> <Text style={{ color: '#1F2937' }}>Cancel</Text> </Pressable> const styles = StyleSheet.create({ secondaryButton: { backgroundColor: '#F3F4F6', // gray-100 minHeight: 44, }, }); // GHOST: MUST have visible border <Pressable style={styles.ghostButton}> <Text style={{ color: '#374151' }}>Skip</Text> </Pressable> const styles = StyleSheet.create({ ghostButton: { borderWidth: 1, borderColor: '#D1D5DB', // gray-300 minHeight: 44, }, }); // NEVER CREATE invisible buttons: // ✗ backgroundColor: 'transparent' without border // ✗ Text color matching background ``` ### 4. Accessibility Labels (REQUIRED) ```tsx // EVERY interactive element needs accessibility props // Buttons <Pressable accessible={true} accessibilityRole="button" accessibilityLabel="Submit form" accessibilityHint="Double tap to submit your information" > <Text>Submit</Text> </Pressable> // Icon buttons (NO visible text = MUST have label) <Pressable accessible={true} accessibilityRole="button" accessibilityLabel="Close menu" > <CloseIcon /> </Pressable> // Images <Image accessible={true} accessibilityRole="image" accessibilityLabel="User profile photo" source={...} /> ``` ### 5. Focus/Selection States ```tsx // EVERY Pressable needs visible pressed state <Pressable style={({ pressed }) => [ styles.button, pressed && styles.buttonPressed, ]} > {children} </Pressable> const styles = StyleSheet.create({ button: { backgroundColor: '#1F2937', }, buttonPressed: { opacity: 0.7, // OR backgroundColor: '#374151', }, }); ``` --- ## Core Philosophy **Mobile UI is about touch, speed, and focus.** No hover states, smaller screens, thumb-friendly targets. Design for one-handed use and interruption recovery. ## Platform Differences ### iOS vs Android ```typescript import { Platform } from 'react-n