Navigation
Five tabs. One press to switch.
Every screen in Ordentus belongs to one of five tabs. The tab bar sits at the bottom and stays visible on root and pushed screens — it disappears only when a .large sheet or a full-screen cover is up. Tap a tab to switch root; tap again to scroll its current stack to the top.
Within a tab
How a single tab's stack behaves.
TAP TABSwitch root. Scroll position and stack are preserved per tab.
TAP AGAINScrolls the current screen to the top. From a pushed detail, pops back to root.
TAP ROWPush detail. Slides in from the right; the tab bar stays.
+ / EDITPresent a sheet. .medium for quick edits, .large for full editors. Tab bar hides only at .large.
SWIPE ←Pop to parent. Apple-standard edge-swipe.
LONG-PRESSContext menu on events, todos, goals, links. Haptic .impact(.light) on lift.
SWIPE →Row actions: complete, hide, restore, delete. Per the spec.
PULL ↓Pull-to-refresh on every list and feed surface.
Across the app
When does navigation leave the tab bar behind?
SHEETS.medium = quick-add to-do, wake schedule, share-link create, add-feed.
.large = event editor, share-link inspector, HealthKit intro, import preview. Tab bar hides only here.
FULL COVEROnboarding only. Welcome → Credentials → HealthKit → Sync → Tour. Returns to the tab bar at "Today".
MODAL ALERTReserved for destructive / auth-recovery. Session expired, sign out everywhere, empty trash, rotate token, disable user.
CONTEXT MENULong-press lifts the object onto a blurred backdrop. Same source-of-truth as swipe actions, plus Share.
DEEP LINKA share URL or .ics file opens the matching tab. Health-sync push wakes the app in the background; no UI.
SESSION GONE401 anywhere → modal alert ("Session expired") → back to the Credentials screen. Tab state is preserved.
Where everything lives
Each tab's full nav stack. push slides in, sheet presents up, modal is an alert dialog.
PUSH slides in from right · tab bar visible
SHEET presents up · medium or large detent
MODAL alert dialog · destructive or auth
The tab bar
Frosted glass over content. Active tab in iOS blue. The same component on every screen — never duplicated, never restyled per-tab.
Anatomy
HEIGHT49pt + bottom safe area. Glass material blurs whatever scrolls under.
ICONSSF Symbols geometry, currentColor. Active = filled feel via stroke 2.4; inactive = stroke 2.
LABELS11pt, weight 600. Always shown — no hide-on-scroll. Dynamic Type respected.
BADGESRed disc for unread counts. Settings shows it when Admin has new sessions or logs.