Skip to content

feat(nav): PROG-79 replace overflowing mobile top nav with a bottom tab bar#44

Merged
bryankennedy merged 2 commits into
mainfrom
iss/PROG-79
Jun 30, 2026
Merged

feat(nav): PROG-79 replace overflowing mobile top nav with a bottom tab bar#44
bryankennedy merged 2 commits into
mainfrom
iss/PROG-79

Conversation

@exe-dev-github-integration

@exe-dev-github-integration exe-dev-github-integration Bot commented Jun 30, 2026

Copy link
Copy Markdown
Contributor

PROG-79 — Improve mobile top nav

On a phone (incl. the installed PWA), the top nav packed the Progress logo + six text links + the New menu + the avatar into one row, which overflowed and scrolled horizontally. This swaps the navigation pattern on small screens rather than dropping destinations.

What changed

  • Mobile: a fixed bottom tab bar (MobileTabBar.tsx, sm:hidden) — Board · Outline · Agenda · Search as tabs, plus a More tab whose sheet holds Structure · Archive (the iOS-standard 5-slot pattern). The mobile header is now just logo + New + avatar, so it can't overflow.
  • Desktop unchanged: at sm+ the bar is hidden and the original inline nav (all six) returns.
  • Clear active state (the issue's explicit ask): the current tab's icon + label light in the adobe accent; More lights when its sheet's page is current (e.g. on /structure), so you always know where you are.
  • Shared source of truth: nav destinations moved to nav.tsx (adds a per-item icon + a primary flag), imported by both the desktop header and the tab bar so they can't drift.
  • Safe-area + overlays: the bar uses the existing pwa-safe-bottom inset (clears the iOS home indicator); main gains mobile bottom padding and the toast stack + PWA install card float above the bar on phones.

Verification

Phone-viewport (390×844) browser pass:

  • Header width = viewport width (390px) — no horizontal scroll.
  • Bottom bar shows Board/Outline/Agenda/Search/More (icon + label); active highlight follows navigation.
  • More opens a sheet with Structure + Archive; navigating to Structure lights the More tab (aria-current).
  • Desktop (1280px): bottom bar hidden, inline nav intact.

tsc -b clean; bun run test → 84 pass.

Docs

  • docs/REFERENCE.md — App-header section (desktop/mobile split).
  • docs/DECISIONS.md### PROG-79 entry (bottom bar vs hamburger, the 5-slot split, shared nav, safe-area handling).

…ab bar

On a phone the header packed the logo, six text nav links, the New menu, and the
avatar into one row, which overflowed and scrolled sideways. Swap the navigation
pattern on small screens rather than dropping destinations.

- Below `sm`, hide the header's inline nav and show a fixed bottom tab bar
  (MobileTabBar): Board · Outline · Agenda · Search as tabs, with a More tab
  whose sheet holds Structure · Archive (the iOS 5-slot pattern). At `sm`+ the
  bar is hidden and the inline nav returns unchanged. The mobile header is now
  just logo + New + avatar, so it can't overflow.
- Keep the active page obvious: the current tab's icon + label light in the
  adobe accent, and More lights when its sheet's page is current.
- Extract the nav destinations into a shared nav.tsx (adds an icon per item and
  a `primary` flag) imported by both the desktop header and the tab bar, so the
  two can't drift.
- The tab bar uses the existing pwa-safe-bottom inset to clear the iOS home
  indicator; main gains mobile bottom padding (pb-24) and the toast stack +
  PWA install card float above the bar on phones.

Verified in a phone-viewport browser pass: header width equals the 390px
viewport (no horizontal scroll), the active tab follows navigation, the More
sheet lists Structure/Archive and lights More on those pages, and the desktop
inline nav is unchanged.
REFERENCE App-header section now describes the desktop/mobile split; DECISIONS
gains the PROG-79 entry (why a bottom tab bar over a hamburger, the 5-slot
split, shared nav source, and the safe-area/overlay handling).
@bryankennedy bryankennedy merged commit fd8761b into main Jun 30, 2026
2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant