App page vs. user page
The app page is the tool; the user page is the creator’s public output from that tool (their blog, their gallery, their CV). Most apps render something quite different on each:
Shell vs. browser
A native shell (the cskn mobile, desktop or TV app) attaches a message bridge atwindow.cskn.bridge. A plain browser has none.
getPlatform() / usePlatform() return the host kind and the operating system:
UIProvider, useUI() gives you the same information synchronously, plus isTV and the live safe-area insets. See UIProvider.
What changes per surface
Authentication
Authentication
In a shell the user’s token arrives over the bridge. In a browser the user is signed in with a cookie on the app’s own domain.
useBridgeAuth handles both. See Authentication.Native features
Native features
Some bridge calls have a browser fallback (photo capture falls back to a file picker, notification permission falls back to Web Push), some resolve to
not_available, and a few never resolve without a shell. Check the availability table before calling one from code that also runs in a browser.Header and system chrome
Header and system chrome
Mobile and desktop shells draw a native header above your page. In a browser and on TV there is none, so you draw your own.
NativeHeader from @cskn/ui picks the right one for you.Input
Input
TV has no touch and no pointer, only a remote. @cskn/ui runs a spatial navigator there so arrow keys move focus between controls. See TV navigation.