From claude-codex
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.
npx claudepluginhub aventerica89/claude-codex --plugin claude-codexThis skill uses the workspace's default tool permissions.
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.
Provides Ktor server patterns for routing DSL, plugins (auth, CORS, serialization), Koin DI, WebSockets, services, and testApplication testing.
Conducts multi-source web research with firecrawl and exa MCPs: searches, scrapes pages, synthesizes cited reports. For deep dives, competitive analysis, tech evaluations, or due diligence.
Provides demand forecasting, safety stock optimization, replenishment planning, and promotional lift estimation for multi-location retailers managing 300-800 SKUs.
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) |