mobile-app-interface
Design native iOS mobile app interfaces and components. Creates user-centric mobile designs following platform conventions and best practices.
What this skill does
Expo iOS Designer
Core Design Prompt
“Design a modern, clean iOS app using Expo and React Native that follows Apple’s Human Interface Guidelines: prioritize clear hierarchy and harmony; respect safe areas; use responsive Flexbox layouts and Dynamic Type with SF Pro; support dark mode with semantic system-friendly colors; keep minimum 44pt touch targets; use native navigation patterns (tabs, stacks, modals) and standard gestures; apply Liquid Glass materials sparingly for overlays like bars, sheets, and popovers with AA contrast; add purposeful motion and gentle haptics; honor Reduce Motion and Reduce Transparency; deliver icons/splash and store assets per Apple guidance.”.
Design Rules
1) Safe Areas Rule
Wrap screens with SafeAreaProvider/SafeAreaView to avoid notches and the home indicator; never hard‑code insets.
tsx
import { SafeAreaView } from "react-native-safe-area-context";
export function Screen({ children }) {
return <SafeAreaView style={{ flex: 1 }}>{children}</SafeAreaView>;
}
2) Typography Rule
Use SF Pro Text/Display (or system) with a documented type ramp; support Dynamic Type so text scales with user settings.
tsx
<Text style={{ fontSize: 17, fontWeight: "600" }} accessibilityRole="header">
Title
</Text>
<Text style={{ fontSize: 15, color: "#6b7280" }}>Secondary text</Text>
3) Touch Target Rule
Ensure interactive controls are at least 44×44pt, with adequate spacing between targets for accurate taps.
tsx
<TouchableOpacity
style={{ minHeight: 44, minWidth: 44, justifyContent: "center", alignItems: "center" }}
accessibilityRole="button"
>
<Text>Action</Text>
</TouchableOpacity>
4) Color & Theming Rule
Use semantic roles and support light/dark with AA contrast for text and essential UI; prefer system-friendly palettes that adapt across appearances.
tsx
const scheme = useColorScheme();
const bg = scheme === "dark" ? "#0B0B0B" : "#FFFFFF";
const fg = scheme === "dark" ? "#E5E7EB" : "#111827";
5) Navigation Rule
Use tab bars for top-level sections, stack for drill-ins, and modals for short tasks; align back navigation with iOS gestures and conventions.
**IMPORTANT: For Tab Bars with Liquid Glass**
ALWAYS use `NativeTabs` from Expo Router instead of custom tab bars. NativeTabs provides native iOS `UITabBarController` with built-in Liquid Glass effect - no manual implementation needed!
tsx
// ✅ CORRECT: Native tab bar with built-in Liquid Glass
import { NativeTabs, Icon, Label } from "expo-router/unstable-native-tabs";
export default function TabLayout() {
return (
<NativeTabs>
<NativeTabs.Trigger name="index">
<Icon sf={{ default: 'house', selected: 'house.fill' }} />
<Label>Home</Label>
</NativeTabs.Trigger>
<NativeTabs.Trigger name="settings">
<Icon sf={{ default: 'gearshape', selected: 'gearshape.fill' }} />
<Label>Settings</Label>
</NativeTabs.Trigger>
</NativeTabs>
);
}
// ❌ WRONG: Custom tab bars - requires manual Liquid Glass implementation
import { createBottomTabNavigator } from "@react-navigation/bottom-tabs";
const Tab = createBottomTabNavigator();
**NativeTabs Features:**
- Built-in Liquid Glass blur (automatic on iOS 26+)
- SF Symbols for icons (`sf` prop with default/selected states)
- Native iOS animations and haptics
- Automatic light/dark mode adaptation
- System-native behavior (matches Safari, Apple Music, etc.)
- No custom styling required
**SF Symbols Icon Examples:**
- Home: `house` / `house.fill`
- Settings: `gearshape` / `gearshape.fill`
- Messages: `message` / `message.fill`
- Profile: `person` / `person.fill`
- Search: `magnifyingglass`
- Calendar: `calendar` / `calendar.fill`
- Star: `star` / `star.fill`
Find more at: https://developer.apple.com/sf-symbols/
6) Motion & Haptics Rule
Keep transitions 200–400ms with native-feeling ease or spring; pair key state changes and confirmations with gentle haptics.
tsx
import * as Haptics from "expo-haptics";
const onPress = async () => { await Haptics.selectionAsync(); /* action */ };
7) Accessibility Rule
Provide accessibilityLabel, Role, Hint, and state; verify logical focus order and complete VoiceOver announcements across flows.
tsx
<Switch
value={isOn}
onValueChange={setOn}
accessibilityRole="switch"
accessibilityLabel="Notifications"
accessibilityState={{ checked: isOn }}
/>
8) List & Performance Rule
Use FlatList/SectionList with keyExtractor, optional getItemLayout, and memoized rows; avoid re-render churn for smooth 60fps scrolling.
tsx
<FlatList
data={items}
keyExtractor={(it) => it.id}
renderItem={memo(({ item }) => <Row item={item} />)}
/>
9) Assets & App Store Rule
Create icons and splash per Expo docs; verify in an EAS build, not Expo Go; keep store metadata and permissions aligned to behavior.
json
// app.json (excerpt)
{
"expo": {
"icon": "./assets/icon.png",
"splash": { "image": "./assets/splash.png", "resizeMode": "contain", "backgroundColor": "#000000" }
}
}
10) Layout & Spacing Rule
Compose with Flexbox and a consistent spacing scale; adapt padding to dynamic type and safe areas for balanced, accessible layouts.
tsx
<View style={{ padding: 16, gap: 12, flex: 1 }}>
{/* content */}
</View>
11) Liquid Glass Materials Rule
Use Liquid Glass on overlay surfaces (navigation/tab bars, large headers, sheets, popovers, floating cards) to add depth without distracting from content; verify AA contrast over dynamic backdrops in light and dark modes.
Respect Reduce Transparency and provide solid/tinted fallbacks; avoid placing dense text over highly saturated or high-frequency backdrops.
Keep materials subtle: modest opacity/blur, applied sparingly to chrome rather than full-screen backgrounds for readability and performance.
12) Expo Glass Modules Rule
Official module: expo-glass-effect. Provides GlassView, GlassContainer, and isLiquidGlassAvailable() to detect capability and compose grouped glass surfaces.
Community SwiftUI module: expo-liquid-glass-view. Fine control over corner radius, styles, and tints; iOS-only; ensure platform fallbacks.
Install and basic usage:
bash
npx expo install expo-glass-effect
tsx
import { GlassView } from "expo-glass-effect";
<GlassView glassEffectStyle="regular" tintColor="systemMaterialLight" />
SwiftUI-powered option:
bash
npx expo install expo-liquid-glass-view
tsx
import { ExpoLiquidGlassView } from "expo-liquid-glass-view";
These render native iOS Liquid Glass via UIVisualEffectView/SwiftUI, and gracefully fall back to a regular View on unsupported platforms.
13) Availability & Fallbacks Rule
Check availability on iOS 26+ with isLiquidGlassAvailable(); also honor AccessibilityInfo.isReduceTransparencyEnabled() for fallbacks to solid/tinted surfaces.
tsx
import { isLiquidGlassAvailable, GlassView } from "expo-glass-effect";
import { AccessibilityInfo, Platform } from "react-native";
const useGlass = async () => {
const supported = Platform.OS === "ios" && (await isLiquidGlassAvailable());
const reduceTransparency = await AccessibilityInfo.isReduceTransparencyEnabled();
return { supported, reduceTransparency };
};
14) Materials Performance Rule
Avoid full-screen realtime blur on animated scenes; scope glass to small overlays, cache where possible, and profile on device; fall back to static blur or solids when FPS dips.
15) Icon Variants Rule
Provide dark and tinted icon variants following updated Apple resources for consistent appearance with system tints and wallpapers.
Workflow
1) Interview User
Scope: screen, flow, or component; target file/repo path; materials use-cases (bars, sheets, overlays); accessibility/performance targets.
2) Design & Implement
Match HIG patterns and the existing design system; compose UI first; define component variants/states.
Apply all rules (safe area, type, touch, color, nav, motion, a11y, performance, materials, icons). Test Dynamic Type, dark mode, VoiceOver, Reduce Transparency/Motion, and iOS 26 availability.
Validate on deviceRelated in Design
contribute
IncludedLocal-only OSS contribution command center. Auto-refreshes the user's in-flight PR and issue state on invoke so conversations start with full context — no need to brief Claude on what's in flight. Helps the user find issues to contribute to on GitHub, builds per-repo dossiers of what each upstream expects (CLA, DCO, branch convention, AI policy, draft-first, review bots, issue templates), runs deterministic gates before any external action so AI-assisted contributions don't reach maintainers as slop. State is markdown-only: candidate files at ~/.contribute-system/candidates/, repo dossiers at ~/.contribute-system/research/, append-only event log at ~/.contribute-system/log.jsonl. No database, no cloud calls. Use when the user asks about their PRs / issues / contributions, wants to find new work to take on, claim an issue, build/refresh a repo's dossier, or draft a Design Issue or PR. Trigger with "/contribute", "what's my PR status", "find a contribution", "claim issue X", "draft a Design Issue for Y", "refresh dossier for Z".
architectural-analysis
IncludedUser-triggered deep architectural analysis of a codebase or scoped subtree across eight modes — information architecture, data flow, integration points, UI surfaces, interaction patterns, data model, control flow, and failure modes. This skill should be used when the user asks to "diagram this codebase," "map the architecture," "show the data flow," "give me an ERD," "trace control flow," "find the integration points," "verify the layout pattern," "audit the UX architecture," or any similar request whose primary deliverable is mermaid diagrams plus cited reports under docs/architecture/. Dispatches haiku/sonnet sub-agents in parallel for per-mode exploration, then verifies every citation mechanically before any node lands in a diagram. Not for one-off prose explanations of code (use code-explanation) or for high-level system design from scratch (use system-design).
mcp
IncludedModel Context Protocol (MCP) server development and tool management. Languages: Python, TypeScript. Capabilities: build MCP servers, integrate external APIs, discover/execute MCP tools, manage multi-server configs, design agent-centric tools. Actions: create, build, integrate, discover, execute, configure MCP servers/tools. Keywords: MCP, Model Context Protocol, MCP server, MCP tool, stdio transport, SSE transport, tool discovery, resource provider, prompt template, external API integration, Gemini CLI MCP, Claude MCP, agent tools, tool execution, server config. Use when: building MCP servers, integrating external APIs as MCP tools, discovering available MCP tools, executing MCP capabilities, configuring multi-server setups, designing tools for AI agents.
react-native-skia
IncludedDesign, build, debug, and optimise high-polish animated graphics in React Native or Expo using @shopify/react-native-skia, Reanimated, and Gesture Handler. Use when the user wants canvas-driven UI, shaders, paths, rich text, image filters, sprite fields, Skottie, video frames, snapshots, web CanvasKit setup, or performance tuning for custom motion-heavy elements such as loaders, hero art, cards, charts, progress indicators, particle systems, or gesture-driven surfaces. Also use when the user asks for fluid, glow, glass, blob, parallax, 60fps/120fps, or GPU-friendly animated effects in React Native, even if they do not explicitly say "Skia". Do not use for ordinary form/layout work with standard views.
plaid
IncludedProduct Led AI Development — guides founders from idea to launched product. Six capabilities: Idea (discover a product idea), Validate (pressure-test the idea against fatal flaws, problem reality, competition, and 2-week MVP feasibility), Plan (vision intake + document generation), Design (translate image references into a design.md spec), Launch (go-to-market strategy), and Build (roadmap execution). Use when someone says "PLAID", "plaid idea", "help me find an idea", "product idea", "idea from my business", "idea from my expertise", "plaid validate", "validate my idea", "pressure-test", "is this idea good", "find fatal flaws", "validate the problem", "plan a product", "define my vision", "generate a PRD", "product strategy", "plaid design", "design from image", "translate image to design", "create design.md", "extract design tokens", "plaid launch", "go-to-market", "launch plan", "GTM strategy", "launch playbook", "plaid build", "build the app", "start building", or "execute the roadmap".
nextjs-framer-motion-animations
IncludedAdds production-safe Motion for React or Framer Motion animations to Next.js apps, including reveal, hover and tap micro-interactions, whileInView, stagger, AnimatePresence, layout and layoutId transitions, reorder, scroll-linked UI, and lightweight route-content transitions. Use when the user asks to add, refactor, or debug Motion or Framer Motion in App Router or Pages Router codebases, especially around server/client boundaries, reduced motion, LazyMotion, bundle size, hydration, or route transitions. Avoid for GSAP-style timelines, WebGL or 3D scenes, heavy scroll storytelling, or CSS-only effects unless Motion is explicitly requested.