mobile-ui

mobile-ui is a skill for Claude Code, Codex from tmj-90/gaffer. It costs 125 tokens per session (1,992 once invoked), scanned A, original, Apache-2.0.

A set of guidelines for building mobile screens with React Native, Expo, or similar tools so they behave and look like native phone apps.

In plain words
What is it for?
Design or revise screens with safe areas, gestures, haptics, transitions, typography, launch screens, and store-readiness in mind.
Why use it?
It helps avoid the appearance and performance problems of a mobile website wrapped inside an app.

Skill for Claude CodeCodex

Written for no agent in particular: nothing here depends on one.

Good fit Design or revise screens with safe areas, gestures, haptics, transitions, typography, launch screens, and store-readiness in mind.

Compare 6 skills from other repositories ↓
Install with agentmods
npx agentmods add skills/tmj-90/gaffer/mobile-ui
Install

Getting it into your agent

One page per mod, every tool's command on it. A separate URL per tool would split the same page into five that compete with each other.

Any agent
npx skills add tmj-90/gaffer --skill mobile-ui
Clone the repo
git clone --depth 1 https://github.com/tmj-90/gaffer

Made for: Claude Code, Codex.

Wrote this? Show the measurements

A badge with what this costs and how it scanned, read live from this page, so it follows the numbers instead of freezing them. Markdown for a README, HTML for a documentation site or a project page.

agentmods badge for mobile-ui

README.md
[![agentmods](https://agentmods.dev/badge/skills/tmj-90/gaffer/mobile-ui/github.svg)](https://agentmods.dev/skills/tmj-90/gaffer/mobile-ui)
Your own site
<a href="https://agentmods.dev/skills/tmj-90/gaffer/mobile-ui"><img src="https://agentmods.dev/badge/skills/tmj-90/gaffer/mobile-ui/github.svg" alt="Measured on agentmods" height="20"></a>

Or the 80×15 button, for a site that already has a row of RSS and ATOM ones. Only the verdict fits; the numbers stay here.

agentmods 80×15 button for mobile-ui

Your own site · 80×15
<a href="https://agentmods.dev/skills/tmj-90/gaffer/mobile-ui"><img src="https://agentmods.dev/badge/skills/tmj-90/gaffer/mobile-ui.svg" alt="Reviewed on agentmods" width="80" height="20"></a>
Per session 125 Skills are progressive disclosure: only the name and description are preloaded; the body loads when the skill is used.
When invoked 1,992 The whole file, excluding the scripts and references it only reads on demand.
Security scan A 0 findings. A grade says what 26 rules found in the file — not that it is safe.
Origin original No closer match found in the catalogue.
Token cost

What it costs to keep this loaded

Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.

ModelPer sessionOnce invoked
Fable 5.1 $0.00125 $0.01992
Opus 5.5 $0.00050 $0.00797
Sonnet 5.5 $0.00025 $0.00398
Haiku 4.5 $0.00013 $0.00199

Measured 21d ago against content hash 005c24fe0baa, method: parsed. Prices are Anthropic first-party input rates as of 2026-10-07, from the pricing page.

Security

Grade A, and why

mobile-ui scanned grade A with 0 findings against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured 21d ago.

A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.

Nothing flagged

None of the 26 patterns this scan looks for appear in this file: no shell pipes, no recursive deletes, no credential paths, no hidden text, no instruction-override or anti-refusal phrasing, no agent-config snooping. That is not a guarantee, it is the absence of the things that are checkable.

runner/skills/mobile-ui/SKILL.md · 119 lines

How it starts

The opening of the file, as written. The whole thing — 119 lines — stays where its author put it; the contents beside it link to each section on GitHub.

Build store-credible native-feel mobile UI

A mobile screen is judged against the platform: Apple's Human Interface Guidelines on iOS, Material 3 and Android's system behaviour on Android. It must respect insets and system gestures, scale with the user's text size, speak to VoiceOver and TalkBack, stay smooth, and clear the store reviewers' checklist. Build to that bar, and change only what the ticket asks: a visual rework does not alter navigation routes, state, business or game logic. A structural idea ("this should be a sheet") goes in the evidence as a proposal, not into the diff.

Steps

  1. Read the set-up. Call search_lore; read BRAND.md/tokens (the design-system skill) and a sibling screen. Confirm the stack and versions: React Native (0.82+ runs only the New Architecture), Expo SDK, navigation library (React Navigation / Expo Router), animation (Reanimated), list (FlatList/FlashList), or Capacitor with a web UI. Extend the existing design language; do not re-pitch it.
  2. Insets and edge-to-edge. Android apps targeting Android 15+ draw edge-to-edge, and targeting Android 16 removes the opt-out. Use react-native-safe-area-context (SafeAreaProvider + useSafeAreaInsets or its SafeAreaView; React Native's own SafeAreaView is deprecated) and apply insets per edge — backgrounds run under the bars, content and touch targets do not. Capacitor/web: viewport-fit=cover plus env(safe-area-inset-*). Never hardcode status-bar or home-indicator heights.
  3. Navigation and back. Use the navigator's native stack and platform transitions; iOS swipe-back works on every pushed screen; Android back (gesture, button, predictive back) goes through the navigator or BackHandler, closes sheets and dialogs first, and never exits the app from a nested screen. Unsaved-changes guards use the navigator's prevent-remove API, not a raw back-key listener.
  4. Platform idioms. Bottom sheets or native modals for contextual tasks rather than centred web-style dialogs; native pickers, date pickers and share sheets; tab bars with 3–5 destinations; pull-to-refresh only on refreshable lists. Follow the platform where the two differ (iOS back chevron and large titles; Android top app bar and system back) unless the brand explicitly unifies them. Close the usual web-hybrid tells: fade-only screen transitions (use the platform push or a shared-element transition), fonts flashing in after the splash (load them before hiding it), wrong scroll bounce, the default launch screen. On a visual rework, commit to the brand: a real type scale, branded chrome and one named hero detail per screen (taste items; they do not block review).
  5. Touch and feedback. Targets at least 44×44 pt (iOS) / 48×48 dp (Android) — use hitSlop when the visual is smaller; pressed states on every touchable (Pressable with a style callback or Android ripple); haptics (expo-haptics or the repo's wrapper) on meaningful moments only — selection change, success, error — through one shared hook.
  6. Text size and accessibility. Text scales with Dynamic Type / Android font scale up to at least 200%: no fixed-height text containers, layouts that wrap or scroll, and maxFontSizeMultiplier only on chrome that truly cannot grow. Every touchable has accessibilityRole (or role), an accessibilityLabel when it has no visible text, and accessibilityState for selected/disabled/checked; group related text with accessible; announce async results with AccessibilityInfo.announceForAccessibility. Respect Reduce Motion (AccessibilityInfo.isReduceMotionEnabled or Reanimated's useReducedMotion) and the system colour scheme (useColorScheme); check contrast in both schemes (4.5:1 text, 3:1 icons and borders).
  7. Keyboard. Forms stay visible above the keyboard (KeyboardAvoidingView or the repo's keyboard library), returnKeyType moves to the next field, correct keyboardType/textContentType/autoComplete for email, codes and passwords, and tapping outside dismisses the keyboard where expected.
  8. Performance. Animations on the UI thread (Reanimated worklets or useNativeDriver: true) using transforms and opacity; long lists virtualised with stable keyExtractor and memoised rows (FlashList where the repo uses it); images sized to their box and cached; no heavy work in render or on the JS thread during gestures. Frame-rate claims need a release build on a mid-range Android device or emulator — dev builds are not representative; without one, list it as unverified in the evidence rather than claiming smoothness.
  9. Store readiness (flag, do not guess, anything that needs a human decision): purpose strings for every permission requested (iOS NS…UsageDescription, requested in context, not on launch); iOS privacy manifest and Play Data safety entries kept in step with new data collection; a real launch screen and app icon; no placeholder text or broken links; in-app account deletion when the app creates accounts (App Review 5.1.1(v)); enough native functionality that the app is not a repackaged website (App Review 4.2).
  10. Verify and evidence. Run type-check, lint and tests (React Native Testing Library: query by role and label). For each AC, a test or an E2E flow (Maestro or Detox if the repo has one, run only if a simulator or emulator is already available) that exercises its behaviour. Where one is, screenshot small and large phone, largest text size, dark mode and Android gesture back (into the repo's git-ignored test output; never committed unless an AC asks); you cannot drive VoiceOver/TalkBack, so assert roles, labels and states in tests and name any unchecked item in the evidence. A failing existing logic test means you changed behaviour — undo that change; never edit the test to pass. Record per-AC evidence with the record-evidence skill, then stop.

Read the full file on GitHub · 119 lines

Changes

What this file has done since we first saw it

Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.

  1. 21d ago Changed · +23 lines · +14 tokens per session 005c24fe0baa
  2. 1mo ago First seen · 96 lines · 111 tokens per session scan A 9bba515b97e0

Subscribe to this mod's changes

mobile-ui is a skill published in the GitHub repository tmj-90/gaffer (2 stars, last pushed 21d ago), licensed Apache-2.0. It adds 125 tokens to every session and 1,992 once invoked, about $0.0005 per session on Opus 5.5. A static security scan graded it A with 0 findings. No closer match exists in the catalogue, so it is treated as the original; first seen 2026-08-31.

Related

Other skills, from other repositories

apple-hig-designer

Design Apple-style iOS/macOS interfaces following Human Interface Guidelines. Creates HIG-compliant components with SF Symbols, San Francisco typography, and proper accessibility. Supports optional modern effects. Use when designing Apple-style UI, iOS/macOS interfaces, HIG-compliant components, or implementing design…

nek1987/auto-agent-harness · 67 tokens

app-ui-design

Mobile app UI design expert for iOS and Android. Use when designing app interfaces, creating design systems, ensuring accessibility, or following platform guidelines. Covers Material Design 3, Human Interface Guidelines, color theory, typography, and 2025 trends.

majiayu000/spellbook · 54 tokens

android-compose-patterns

Use when building native Android with Jetpack Compose - stateless composables, state hoisting, ViewModel-owned state, edge-to-edge, predictive back, adaptive layout, atomic components, and Material theming over hardcoded values.

makifbaysal/tasktrooper · 50 tokens

mobile-design-system-foundation

Use when the mobile repository has no theme tokens or component library yet (a new app, an "Apply design system" task, or a task that asks for one), before building any screen - writes the approved design system's generated files from getdesignsystem (files true) and builds the theme from them when there is one.

makifbaysal/tasktrooper · 72 tokens

mobile-ui-ux

Use when designing or building any mobile screen or component a user sees (Flutter, SwiftUI or Compose) - platform conventions, hierarchy, type that scales, colour roles and dark mode, safe areas and insets, forms and keyboard, states, feedback, and the generic-mobile anti-patterns.

makifbaysal/tasktrooper · 64 tokens

liquid-glass

Implement Liquid Glass design using .glassEffect() API for iOS/macOS 26+. Covers SwiftUI, AppKit, UIKit, and WidgetKit. Use when creating modern glass-based UI effects.

rshankras/claude-code-apple-skills · 45 tokens