Principles
- Start with mobile — design the smallest screen, then enhance.
- Optimise for touch — 48px minimum targets, actions within thumb reach.
- Minimise data — lazy-load images, compress assets, do not make requests you can avoid.
- Work offline — core features function without a connection.
- Paint fast — show skeleton content immediately, load data progressively.
Bottom navigation
Put app-level navigation in the thumb zone on mobile, and in a sidebar on desktop:Sheet rather than dialog
On mobile a bottom sheet is easier to reach and dismiss than a centred modal:Touch targets
Every interactive element is at least 48px in the touch dimension.item component already provides the right target:
Progressive loading
Sequential mounting
Images
loading="lazy"below the fold.- Explicit
widthandheightto prevent layout shift. - A thumbnail or placeholder first.
Memory
Network awareness
navigator.onLine tells you the device has a connection, not that your server is reachable —
treat a true as weak evidence and let the request failing be the real signal.
Text input
type="email" puts the @ on the keyboard; type="tel" gives a number pad; inputMode="numeric"
gives digits without the telephone semantics. autoComplete removes typing altogether, which on
a phone on a slow network is the largest single saving available.