James Frewin

ultrapolish

Two skills for AI coding agents that take an interface from competent to considered, inside the style it already has.

Then ask for it by name: /ultrapolish-ios or /ultrapolish-web

GitHubClaude Code, Cursor, Codex, ZedMIT
What’s in it

The ten laws

Seven of them hold on both platforms, and are numbered here as they’re numbered there. The three gaps are below: they’re exactly where the two part, which is most of what separates an iOS app from a web app once the taste is the same.

  1. 1One datum, one curve.Everything driven by the same value moves together, on the same curve.
  2. 2Out is faster than in.Exits run about 0.65× the entrance, accelerating, and never bounce.
  3. 3The 100× rule.Seen a hundred times a day, it doesn’t animate at all.
  4. 5The spinner travels.Progress appears where the result will appear, not only on the control that was pressed.
  5. 6Every state gets equal care.Empty, loading, error, offline, first run, overflow, reduced motion, dark.
  6. 8A disabled control says why.And a destructive action names its noun. Never a grey button and never “Are you sure?”
  7. 9One accent per view.The primary action carries the colour on its background, not on its label.

Where they part

4
iOSWhat follows a finger is linear.Springs begin only when the finger lets go, carrying its velocity.
WebOpacity never springs; transforms may.And never transition: all. Name the property.
7
iOSPersistent elements never leave and come back.If it exists on both sides of a transition, it’s rendered by a parent that survives it.
WebNo layout shift, ever.Reserve every box, and every state either fills it or centres in it.
10
iOSNumbers that change are monospaced.With a content transition, so the layout holds as 99 becomes 100.
WebEveryone can reach it.A real button or link, a visible focus ring, a name a screen reader can say.

What each one covers

Fifty-six reference files behind the two, each with its rules, its numbers, the code, and how to check you got it right. Twenty-six for iOS and thirty for web, grouped here into topics.

In both20

The craft that doesn’t care what it’s running on.

  • Motion and transitions
  • Gestures and physics
  • Finding a style, when there isn’t one yet
  • Colour, and how to choose a palette
  • Typography, down to ligatures and figures
  • Layout, spacing and hierarchy
  • Buttons and controls
  • Forms and text input
  • Lists, tables and search
  • Icons
  • The app icon, and designing it at 16px
  • Haptics
  • Sound
  • Video and audio playback
  • Copy and naming
  • Empty, loading and error states
  • Onboarding
  • Accessibility as polish
  • Anti-patterns and AI tells
  • A printable audit checklist

Only in ultrapolish-ios5

Where the platform has its own answers.

  • Sheets, detents and navigation
  • Notifications and badges
  • Widgets, Live Activities and the Dynamic Island
  • Liquid Glass
  • Paywalls and StoreKit

Only in ultrapolish-web10

Where the browser has its own problems.

  • Overlays and dialogs
  • Files, uploads and downloads
  • Surfaces and depth
  • Theming and dark mode
  • Scroll
  • Performance as a design property
  • Touch and mobile web
  • Canvas and media
  • Marketing pages
  • Native feel on the web

What’s not here is the substance: the numbers, the cheat sheets, the code and the checks. That’s the part you install.

Then ask for it by name: /ultrapolish-ios or /ultrapolish-web

Back to top