Claude Code
Reads every page and component against a fixed checklist, takes screenshots at phone and tablet widths, fixes CSS and markup in small commits and leaves you a reusable slash command.
Claude Code + design
Reviewers judge a wrapped web app within seconds: content under the notch, buttons too small to hit, a page that zooms when you tap an input. None of it is hard to fix, and Claude Code is good at finding it once it has a checklist and a way to see the screen. This guide sets up an audit subagent, a screenshot loop, the CSS the fixes should converge on and the matching WebViewGold settings.
From $109 one-time per platform, or let our team do it all from $698.
Guideline 4.0 asks for apps that are refined and easy to use, and web-based apps get extra scrutiny under 4.2 for feeling like a website. The issues that trigger those comments are predictable: a header that slides under the status bar or Dynamic Island, a tab bar sitting on the home indicator, icon buttons smaller than Apple's 44 x 44 point guidance (Android's Material guidance is 48 x 48 dp), horizontal scrolling on a small iPhone, inputs that zoom on focus because their font is smaller than 16 px, a full-height layout that jumps because of 100vh, and menus that only open on hover. Reviewers also run iPhone apps on iPads, so a layout that breaks at tablet width shows up too.
Each issue lives in one of two places: your CSS or the WebViewGold settings around the WebView. The guideline 4.0 guide explains the rejection itself; this page is about finding and fixing the causes with Claude Code before a reviewer does.
Reads every page and component against a fixed checklist, takes screenshots at phone and tablet widths, fixes CSS and markup in small commits and leaves you a reusable slash command.
Judge the findings (some are false positives), decide design trade-offs, and set the status bar, bottom bar and zoom options in the WebViewGold projects.
Proves what no screenshot can: the notch, the home indicator, the keyboard and the zoom behavior inside the actual WebView.
| Issue | WebViewGold setting | In your web app |
|---|---|---|
| Status bar area | iOS: statusBarBackgroundColor, statusBarTextColor and their dark mode variants, or transparentStatusBar with autoAdjustSafeAreaInsets false. Android: TRANSPARENT_STATUS_BAR, blackStatusBarText | Only if content draws behind the bar: viewport-fit=cover and env(safe-area-inset-top) |
| Home indicator | iOS: bottombar, iPadBottombar, bottombarBackgroundColor (safe area docs) | env(safe-area-inset-bottom) on fixed bottom bars |
| Zoom | iOS: preventZoom. Android: ENABLE_ZOOM, MAX_TEXT_ZOOM to cap system text scaling | 16 px input font size, no fixed widths |
| Bounce and link previews | iOS: preventoverscroll (keep false if you use pulltorefresh), disablecallout | Nothing |
| Keyboard covering inputs | Android: INPUT_SCROLL_HELPER | Avoid fixed footers over forms; scroll focused fields into view |
| Orientation | iOS: orientationiphone, orientationipad. Android: PHONE_ORIENTATION, TABLET_ORIENTATION | Test every orientation you allow |

With a good optimized version of your web app you can have a stunning mobile app within a couple of minutes. Additionally to that the customer service is very nice and very helpful! I can just recommend WebViewGold :-)
Subagents are Markdown files with a short frontmatter in .claude/agents/; you can also create one interactively with /agents. This one only reads and reports, so it never fights with your main session over edits.
---
name: mobile-ui-auditor
description: Audits pages and components for problems in the native iOS and Android WebView apps (safe areas, tap targets, overflow, input zoom, viewport units). Use after UI changes and before every store submission.
tools: Read, Grep, Glob, Bash
---
You audit a web app that also ships as iOS and Android apps built with WebViewGold
(WKWebView / Android WebView). You report problems; you do not edit files.
Check every page and shared component for:
1. Safe areas: the viewport meta includes viewport-fit=cover if content draws behind
the status bar; fixed or sticky top bars use env(safe-area-inset-top); bottom bars,
tab bars, floating buttons and toasts use env(safe-area-inset-bottom).
2. Tap targets: interactive elements at least 44 x 44 CSS px (icon buttons, close
buttons, checkboxes, links in dense lists) with at least 8 px between them.
3. Overflow: nothing wider than the viewport at 320 px; long words, tables, code
blocks and images are constrained.
4. Inputs: font-size of at least 16 px on input, select and textarea; correct type,
inputmode and autocomplete attributes on login and checkout forms.
5. Viewport units: 100vh on full-height layouts (use 100dvh with a 100vh fallback).
6. Hover-only UI: menus, tooltips or actions that need :hover to be reachable.
7. Desktop leftovers: sidebars without a mobile variant, Download our app banners,
builder badges, cookie walls shown inside the app.
8. Dark mode: contrast of text and backgrounds if the app supports dark mode.
Output a table: file, line, issue, check number, suggested fix. Group by severity:
blocks review, looks broken, polish. End with the three fixes that matter most.One afternoon for a typical app; afterwards a slash command keeps it cheap.
Add the Playwright MCP server with claude mcp add playwright npx @playwright/mcp@latest and check it with /mcp. The agent can then open your preview URL, resize the viewport and take screenshots. It is a desktop browser engine, not the WebView on a phone, and it does not simulate notches, so it finds overflow and sizing problems but not safe-area ones.
Put the file above into .claude/agents/mobile-ui-auditor.md and commit it, so everyone who runs Claude Code in the repository gets the same audit.
Use the prompt below. Read the report before any fix starts; you will spot false positives (a 40 px button inside a larger tap area is fine) faster than the agent.
One commit per severity group. Once the pattern is clear, switch to accept-edits mode with Shift+Tab and review the diff at the end.
Build for TestFlight and internal testing and go through the checklist below. If you have no Mac, the Cloud Builder produces both test builds from the browser.
Replace the route list with your real screens, including the ones behind login. The last step leaves you a slash command for every future change.
Use the mobile-ui-auditor subagent to audit src/app and src/components. Then use the Playwright MCP server to open https://preview.example.com and take full-page screenshots of /, /login, /dashboard, /settings and the paywall at 320, 375, 390, 430, 768 and 1024 px width (sign in with our test account; ask me for the password when you need it). Compare the screenshots with the audit report and add anything only visible on screen: overlapping elements, cut-off text, horizontal scrolling, buttons too close together. Show me the combined report and wait for my go. Then fix in this order: blocks review, looks broken, polish, one commit per group. Rules for the fixes: - Safe areas with env(safe-area-inset-top) and env(safe-area-inset-bottom) through CSS variables in globals.css; viewport-fit=cover in the viewport meta. - Tap targets at least 44 x 44 px; enlarge the hit area with padding rather than making icons bigger. - Inputs, selects and textareas at 16 px font size. - min-height 100dvh with a 100vh fallback for full-height screens. - Hover effects only inside @media (hover: hover). - Do not disable zoom globally and do not touch the WebViewGold configuration. Finally create .claude/commands/mobile-check.md: a slash command that runs the mobile-ui-auditor subagent only on files changed in the current git diff and prints the report.
Pick one owner of the safe area. Either WebViewGold keeps content out of the status bar and home indicator areas (the default plus bottombar), or your CSS does it with transparentStatusBar on and autoAdjustSafeAreaInsets off. Mixing both gives double gaps on some devices and none on others.
/* app/globals.css
Viewport meta: <meta name="viewport" content="width=device-width, initial-scale=1, viewport-fit=cover">
Without viewport-fit=cover, env(safe-area-inset-*) is always 0. */
:root {
--safe-top: env(safe-area-inset-top, 0px);
--safe-bottom: env(safe-area-inset-bottom, 0px);
--tabbar-height: 64px;
}
.app-header { position: sticky; top: 0; padding-top: var(--safe-top); }
.tab-bar {
position: fixed; left: 0; right: 0; bottom: 0;
height: calc(var(--tabbar-height) + var(--safe-bottom));
padding-bottom: var(--safe-bottom);
}
main { padding-bottom: calc(var(--tabbar-height) + var(--safe-bottom) + 16px); }
.screen { min-height: 100vh; min-height: 100dvh; }
input, select, textarea { font-size: 16px; }
.icon-button { min-width: 44px; min-height: 44px; display: inline-grid; place-items: center; }
@media (hover: hover) {
.card:hover { box-shadow: 0 4px 16px rgb(0 0 0 / 0.12); }
}orientationipad allows rotation. See iPad support.MAX_TEXT_ZOOM.darkModeStatusBarTextColor on iOS).disablecallout is on.preventZoom or ENABLE_ZOOM only if your app truly needs it.It is Apple's Human Interface Guidelines recommendation, not a numbered review guideline. Reviewers reject apps that are hard to use, though, and tiny tap targets are the fastest way to get there.
A prompt works once. The subagent keeps the checklist in the repository, runs in its own context so it does not clutter your main session, and the slash command makes it a habit after every UI change.
Because some findings are false positives and some fixes conflict with your design. Reviewing the report first takes minutes and saves you from reverting a large diff.
Support inside an Android WebView depends on the system version and on how the app draws behind the system bars. Test it on a device, and keep a fallback padding for the app if you switch on TRANSPARENT_STATUS_BAR.
Usually yes. Detect the app via the WebViewGoldApp user agent token and hide marketing navigation, cookie walls and app download banners; the custom CSS and JS guide shows the options.
Same result, different amount of work on your side. All three come with the approval guarantee and 24/7 human support.
$109 per platform, one-time
The WebViewGold license: a finished Xcode or Android Studio project. Paste your URL, set name and icon, switch on features, build and submit. Free updates forever.
See plans on the main page$349 per license, one-time add-on
No Mac, no Xcode, no Android Studio: configure in the browser, we build both apps in the cloud and hand them to App Store Connect and the Play Console.
How the Cloud Builder works Try the free demo$698 per platform $798
Send us your URL and icon. Our team configures, builds and delivers your app within 72 hours, white-label, with source projects. Both platforms for $1,158.
Full Service details Powered byWinter Sale prices valid until December 31, 2026.
App Store & Google Play approval guarantee – or your money back within 14 days
Rather hand it over? Full Service: we configure, build and deliver within 72 hours, from $698 per platform. Questions? Chat with us 24/7.
Refunds are granted under the conditions listed in our FAQ: a non-content rejection by Apple and/or Google, claimed within 14 days after purchase.