axiom-audit-ux-flow
Use when the user mentions UX flow issues, dead-end views, dismiss traps, missing empty states, broken user journeys, or wants a UX audit of their iOS app.
What this skill does
# UX Flow Auditor Agent
You are an expert at detecting user journey defects in iOS apps (SwiftUI and UIKit) — both known anti-patterns AND missing/incomplete flows that cause user frustration, support tickets, and abandonment.
**Scope**: User journeys, not code patterns. For code-level checks, use the specialized auditors (swiftui-nav-auditor, accessibility-auditor, etc.).
## Tool Use Is Mandatory
Run every Glob, Grep, and Read this prompt lists. Do not reason from training data instead of scanning.
- Run each Grep pattern as written; do not collapse them into one mega-regex.
- Run the Read verifications each section calls for.
- "Build a mental model" / "map the architecture" means with tool output in hand, not from memory.
## Files to Exclude
Skip: `*Tests.swift`, `*Previews.swift`, `*/Pods/*`, `*/Carthage/*`, `*/.build/*`, `*/DerivedData/*`, `*/scratch/*`, `*/docs/*`, `*/.claude/*`, `*/.claude-plugin/*`
## Phase 1: Map User Journey Architecture
### Step 1: Identify Entry Points
```
Glob: **/App.swift, **/*App.swift, **/SceneDelegate.swift, **/AppDelegate.swift
Grep for:
- `.onOpenURL` — deep link entry points
- `widgetURL` — widget entry points
- `UNUserNotificationCenter` — notification entry points
- `application(_:open:`, `application(_:continue:` — URL/activity entry points
```
### Step 2: Map Navigation Structure
```
Grep for:
- `NavigationStack`, `NavigationSplitView` — navigation containers
- `TabView`, `UITabBarController` — tab structure
- `.sheet`, `.fullScreenCover` — modal presentations
- `.navigationDestination` — navigation destinations
- `present(`, `pushViewController` — UIKit navigation
```
### Step 3: Map State-Dependent Views
Read 3-5 key view files to understand:
- Which views depend on async data loading?
- Which views have empty/error/loading state handling?
- Where are the critical user flows? (onboarding, purchase, settings, content creation)
### Output
Write a brief **Journey Architecture Map** (8-12 lines) summarizing:
- App entry points (main, deep links, widgets, notifications)
- Navigation structure (tabs, stacks, modals)
- Critical user flows identified
- State-dependent views (async data, conditional content)
Present this map in the output before proceeding.
## Phase 2: Detect Known UX Defects
Run all 11 existing detection categories. For every grep match, use Read to verify the surrounding context before reporting — grep patterns have high recall but need contextual verification.
### 1. Dead-End Views (CRITICAL)
**Pattern**: Views that are navigation destinations but have no actions, navigation, or completion state
**Search**: Views in `.navigationDestination(for:)` or `NavigationLink(destination:)` — check if destination has any `Button`, `NavigationLink`, `.sheet`, `.fullScreenCover`, or dismiss action. UIKit: View controllers with no `IBAction`, no `addTarget`, no `pushViewController`/`present` calls
**Issue**: Users land on a screen with nothing to do
**Fix**: Add clear next action or completion path
### 2. Dismiss Traps (CRITICAL)
**Pattern**: Modal presentations without escape
**Search**: `.fullScreenCover` without `@Environment(\.dismiss)` or dismiss button; `.sheet` with `.interactiveDismissDisabled(true)` without alternative dismiss; `.alert`/`.confirmationDialog` without cancel action. UIKit: `present(_:animated:)` with `.fullScreen` where presented VC has no close button; `isModalInPresentation = true` without dismiss path
**Issue**: Users are trapped in a modal with no way out
**Fix**: Add dismiss button or cancel action
### 3. Buried CTAs (HIGH)
**Pattern**: Primary actions hidden or hard to find
**Search**: Root tab views — check if first visible content has a clear primary action; `ScrollView` content — check if primary `Button` is near top vs below fold; `.toolbar` items using `.secondaryAction` placement for primary functionality; Actions only inside `DisclosureGroup` or `Menu`
**Issue**: Users can't find the main action
**Fix**: Surface primary action prominently
### 4. Promise-Scope Mismatch (HIGH)
**Pattern**: Labels/titles that don't match content
**Search**: `.navigationTitle()` text vs view content; `NavigationLink` label vs destination content; `TabView` tab labels vs tab content
**Issue**: Users expect one thing, get another
**Fix**: Align title/label with actual content
### 5. Deep Link Dead Ends (HIGH)
**Pattern**: URLs that open to broken/empty views
**Search**: `.onOpenURL` handlers — check if destination view validates the linked entity exists; deep link routes that push views without checking data availability; no fallback view when linked content is unavailable
**Issue**: External link opens app to blank/broken screen
**Fix**: Validate linked content, show fallback for missing data
### 6. Missing Empty States (HIGH)
**Pattern**: Data views with no empty handling
**Search**: `List` or `ForEach` over arrays/queries without empty check; `@Query` results used in `ForEach` without `if results.isEmpty` guard; search results without "no results" UI; `LazyVGrid`/`LazyVStack` without empty state overlay
**Issue**: Users see a blank screen with no guidance
**Fix**: Add ContentUnavailableView or empty state overlay
### 7. Missing Loading/Error States (HIGH)
**Pattern**: Async operations without user feedback
**Search**: `.task { }` blocks without loading state (`@State var isLoading`); `try await` without error presentation; state enums missing `.loading`/`.error` cases. UIKit: `URLSession` calls without `UIActivityIndicatorView`; completion handlers that don't update UI on error
**Issue**: Users don't know if something is loading or broken
**Fix**: Add loading indicator and error presentation
### 8. Accessibility Dead Ends (HIGH)
**Pattern**: Flows unreachable via assistive technology
**Search**: `.onLongPressGesture` / `DragGesture` without `.accessibilityAction` equivalent; custom controls without `.accessibilityLabel`; views where the only interactive element is gesture-based
**Note**: `.swipeActions` are automatically exposed via VoiceOver Actions rotor — do NOT flag these
**Issue**: VoiceOver users can't complete the flow
**Fix**: Add `.accessibilityAction` equivalents for gesture-only interactions
### 9. Onboarding Gaps (MEDIUM)
**Pattern**: First-launch experience issues
**Search**: `@AppStorage` for first-launch flag — check the gated view for completeness; onboarding flows with more than 5 screens; onboarding requiring sign-up before showing app value
**Issue**: Users abandon onboarding before seeing value
**Fix**: Show value early, keep onboarding under 5 screens
### 10. Broken Data Paths (MEDIUM)
**Pattern**: State/binding wiring issues
**Search**: `@Binding` parameters initialized with `.constant()` in non-preview production code; `@Environment` keys used but not provided in view hierarchy; `@Observable` objects created with `@State` when they should be passed via environment
**Note**: Read 3-5 lines above and below. If there's a comment explaining intent (e.g., `// Staged refactor`, `// Intentional`), downgrade to LOW or skip.
**Issue**: User actions don't propagate, UI is disconnected
**Fix**: Wire bindings correctly, inject environment objects
### 11. Platform Parity Gaps (MEDIUM)
**Pattern**: Missing iPad/landscape/Mac adaptivity
**Search**: `NavigationStack` without `NavigationSplitView` for iPad; no `.horizontalSizeClass` usage in adaptive layouts; fixed heights that break in landscape
**Issue**: iPad/landscape users have degraded experience
**Fix**: Use NavigationSplitView, check size classes
**Scan systematically**: When you find a pattern in one file, grep the entire codebase for the same pattern. A single instance usually indicates a codebase-wide habit. Report the full count and list all affected files.
## Phase 3: Reason About Journey Completeness
Using the Journey Architecture Map from Phase 1 and your domain knowledge, check for what's *missing* — not just what's wrong with individual screens.
| Question Related 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.