Full Apple HIG + web standards compliance pass covering Mobile, iPad, and Desktop. Replaces hig-mobile-pass. Covers CSS token audit, platform-specific checklists, PWA asset generation, web standards (Vercel WIG), and design consistency audit.
Audits and enforces Apple HIG and web standards compliance across mobile, tablet, and desktop platforms for Next.js PWAs.
/plugin marketplace add https://www.claudepluginhub.com/api/plugins/aventerica89-claude-codex/marketplace.json/plugin install aventerica89-claude-codex@cpd-aventerica89-claude-codexThis skill inherits all available tools. When active, it can use any tool Claude has access to.
Full-platform Apple HIG + web standards compliance pass for Next.js PWAs. Covers Mobile, iPad, Desktop, CSS token master control, optional PWA asset generation, and web-standard guidelines.
Ask all 5 questions before any implementation. Do not proceed until answered.
1. Platforms: [Mobile only / Mobile + iPad / All three (+ macOS Desktop)]
2. PWA assets: [Generate from logo / Already have icons / Skip]
3. Design consistency audit: [Yes / No]
4. Web standards layer (Vercel WIG): [Yes / No]
5. New project or existing app: [New / Existing]
Store answers — every subsequent phase references them to determine what runs.
Check for context file:
Read .claude/apple-design-context.md
If the file does not exist → run /hig-project-context first, commit the output, then return here. This file makes all HIG guidance project-specific rather than generic.
If PWA assets selected (Phase 0, Q2):
Confirm logo file path. If no logo exists, ask. Note the background color (default: --background token value from globals.css).
1. Read .claude/apple-design-context.md
2. Fetch HIG docs in parallel — only fetch what's needed for selected platforms:
Mobile (always, if Mobile selected):
mcp__sosumi__fetchAppleDocumentation path: design/human-interface-guidelines/tab-bars
mcp__sosumi__fetchAppleDocumentation path: design/human-interface-guidelines/layout
mcp__sosumi__fetchAppleDocumentation path: design/human-interface-guidelines/touchscreen-gestures
mcp__sosumi__fetchAppleDocumentation path: design/human-interface-guidelines/launching
iPad (if Mobile + iPad or All three selected):
mcp__sosumi__fetchAppleDocumentation path: design/human-interface-guidelines/sidebars
mcp__sosumi__fetchAppleDocumentation path: design/human-interface-guidelines/multitasking
Desktop (if All three selected):
mcp__sosumi__fetchAppleDocumentation path: design/human-interface-guidelines/windows
The foundation. Everything else builds on this. Verify these 10 primitives exist and no component hardcodes their values inline.
The 10 primitives (only hardcoded values in the entire app):
--space-unit: 0.25rem; /* 4px base — all spacing derives */
--radius-base: 0.625rem; /* 10px — all radii derive */
--tab-bar-height: 3.25rem; /* 52px */
--top-bar-height: 3rem; /* 48px */
--sidebar-width: 15rem; /* 240px */
--tab-bar-label-size: 0.6875rem; /* 11px HIG minimum */
--breakpoint-lg: 1024px; /* tablet to desktop threshold */
--brand-hue: [project value];
--brand-chroma: [project value];
--brand-lightness-base: [project value];
Audit command:
grep -rn 'w-60\|w-\[240\|h-\[52\|h-12\|h-16\|text-\[10px\]\|text-\[11px\]\|min-h-\[52' src/components/
Zero results = passing.
Fix pattern:
// Before (hardcoded)
<aside className="w-60 bg-sidebar">
// After (token-driven)
<aside className="w-[var(--sidebar-width)] bg-sidebar">
// Or add to @theme inline for a Tailwind alias:
// --width-sidebar: var(--sidebar-width) → className="w-sidebar"
TypeScript conventions (from iOS Best Practices, translated):
strict: true in tsconfig, no any typeslowerCamelCase for all JS identifiers; PascalCase for components and typesTouch & Interaction
-webkit-tap-highlight-color: transparent on all interactive elementstouch-action: pan-yLayout & Safe Areas
--tab-bar-height token + padding-bottom: env(safe-area-inset-bottom)calc(var(--tab-bar-height) + env(safe-area-inset-bottom, 20px))height + padding-bottom: env(...) on the same element (conflict — use min-height)Scroll
overscroll-behavior: none on html and body-webkit-overflow-scrolling: touch on scrollable containersTab Bar
≥ 0.6875rem (11px HIG minimum — use --tab-bar-label-size token)position: relativePWA Manifest
id, scope, display_override: ["standalone"]apple-mobile-web-app-capable + mobile-web-app-capable meta tags in <head>apple-mobile-web-app-status-bar-style: "black-translucent" metaapple-mobile-web-app-title metatheme-color metaCSS Baseline (add to globals.css if missing):
html, body {
overscroll-behavior: none;
-webkit-tap-highlight-color: transparent;
}
@media (display-mode: standalone) {
/* installed PWA styles */
}
lg breakpoint (1024px) triggers sidebar — HIG sidebarAdaptable patternmax-w-* containerslg breakpoint handles the split — no custom iPad-specific media queries needed--sidebar-width token--ring token applied, outline not removed without replacement)lg@media (display-mode: standalone) hides browser chrome on macOS PWA installNote on contrast: This skill uses APCA contrast, not just WCAG AA. APCA is more perceptually accurate and stricter. APCA compliance also satisfies WCAG AA — no conflict with HIG.
Performance
preconnect for external fontsForms
autocomplete attributes on all standard fieldsautocomplete on password fields)type attribute on all inputs (email, tel, number, etc.)Interactions
Contrast
CSS
transform/opacity (not top/left/width)prefers-reduced-motion respectedTool: npx pwa-asset-generator (no global install required)
Confirm logo path from Phase 1, then run:
npx pwa-asset-generator <logo-path> public/icons \
--background "<hex-value-of-background-token>" \
--manifest public/manifest.json \
--index src/app/layout.tsx \
--splash-only false
Outputs:
purpose: "any maskable")manifest.json icon declarations<link> tags into layout.tsxService worker caching pattern (from pwa-skeleton):
index.html + core CSS/JS/fonts on SW installCACHE_VERSION = 'v1' — increment to bust cacheUses interface-design:audit pattern — reads existing design system, checks for consistency. Does NOT redesign.
Checks:
bg-primary not bg-violet-500)[] values unless mapping a token).dark equivalents (no hardcoded #hex in JSX)Key distinction: Reports inconsistencies. Does NOT change design direction.
Update .claude/apple-design-context.md:
Commit the updated file with message: chore: update apple-design-context after hig-ui-pass
| Mistake | Fix |
|---|---|
Fixed height + padding-bottom: env(...) on same element | Remove fixed height, use min-height |
| Generic HIG advice not matching your token system | Always read context file first (Phase 1) |
| Fetching Sosumi without specificity | Use exact paths listed in Phase 2 |
Skipping /hig-project-context when no context file exists | Context file = what makes it project-specific |
Tab label at 10px | HIG minimum is 11px — use 0.6875rem |
| Using WCAG AA only for contrast | Use APCA — stricter and APCA compliance satisfies WCAG AA |
| Hardcoded px values in components | All sizing must trace to a CSS token (Phase 3 audit) |
Activates when the user asks about AI prompts, needs prompt templates, wants to search for prompts, or mentions prompts.chat. Use for discovering, retrieving, and improving prompts.
Search, retrieve, and install Agent Skills from the prompts.chat registry using MCP tools. Use when the user asks to find skills, browse skill catalogs, install a skill for Claude, or extend Claude's capabilities with reusable AI agent components.
Creating algorithmic art using p5.js with seeded randomness and interactive parameter exploration. Use this when users request creating art using code, generative art, algorithmic art, flow fields, or particle systems. Create original algorithmic art rather than copying existing artists' work to avoid copyright violations.