Vaktor v0.1

How it renders across platforms

The contract is the same. Only the presentation changes — the server has no say in it.

ComponentiPhoneiPadMac
pagestack + grouped listlist-detail, 2 columnslist-detail, 3 columns
sectionsectionsectionsection
rowrow / navigationsamesame + hover
metricrow with a large valuegrid possiblegrid possible
tablelist + lazy loadingtable: columns, sortingtable + selection + menu
fieldform controlssamegrouped form
buttonbutton with a rolesamesame + keyboard shortcut
chartchartsamesame
toolbaraction baraction barbar + app menu

What to keep in mind when authoring the contract

  • A table on iPhone shows as a list: the first two columns matter, the rest collapse — put the important one on the left.
  • metric tiles — wrap several in a section with columns: 2.
  • Swipes (swipe_actions) exist only on iOS; on Mac they become a context menu — don’t make them the only way to perform an action.
  • More than 5 tabs won’t fit on iPhone — keep it to five.
  • The app opens straight into the active service.
  • The tab bar is shown only if the manifest has tabs: the service’s tabs + a fixed “Settings” tab. Without tabs — a single root_page.
  • Switching and adding services, and tokens, live in the client’s “Settings” screen.
  • Push: the payload carries service_id + page_endpoint → tapping makes the service active and opens the page.