Skip to content

feat: add fixed mobile bottom navigation bar - #868

Merged
Chucks1093 merged 3 commits into
accesslayerorg:devfrom
Moh-dakai:feat/mobile-bottom-nav
Sep 5, 2026
Merged

feat: add fixed mobile bottom navigation bar#868
Chucks1093 merged 3 commits into
accesslayerorg:devfrom
Moh-dakai:feat/mobile-bottom-nav

Conversation

@Moh-dakai

Copy link
Copy Markdown
Contributor

Summary

Adds a fixed bottom navigation bar for mobile viewports (< 768px) to improve tap target accessibility and primary navigation on small screens.

Changes

  • MobileBottomNav.tsx — New component with four tabs: Marketplace (grid icon), Portfolio (chart icon), Watchlist (bookmark icon), Notifications (bell icon).
    Hidden on md+ viewports via md:hidden. Active tab is highlighted per current route with a top-edge indicator bar and aria-current. Notification badge on the
    Notifications tab reads unreadCount from useNotifications, capped at 99+.
  • RootLayout.tsx — New thin layout wrapper using that mounts MobileBottomNav once globally inside the router context (required for useLocation),
    avoiding per-page changes.
  • routes.tsx — All routes nested under RootLayout as children so every page gets the bottom bar automatically.
  • Header.tsx — Added a comment documenting that hidden md:flex on the nav element intentionally hides top navbar links on mobile because MobileBottomNav
    handles navigation there.

Tested

  • pnpm lint — passes
  • tsc -b — passes, zero type errors
  • Vite build is blocked by a pre-existing @tailwindcss/oxide native binding issue in the devcontainer environment (confirmed failing on unmodified dev branch
    before these changes)

Acceptance criteria

  • Bottom bar visible on viewports below 768px
  • Bottom bar hidden on viewports 768px and above
  • Active tab highlighted correctly per route
  • Notification badge count matches unread count
  • Top navbar links hidden on mobile when bottom bar is present

closes #860

- Add MobileBottomNav component with four tabs (Marketplace, Portfolio,
  Watchlist, Notifications), visible only on viewports below 768px via
  md:hidden
- Active tab highlighted per current route with top-edge indicator bar
- Notification badge on the Notifications tab reads unreadCount from
  useNotifications, capped at 99+
- Add RootLayout wrapper using <Outlet> so MobileBottomNav is mounted
  globally inside the router context without per-page changes
- Nest all routes under RootLayout in routes.tsx
- Document the hidden md:flex intent on Header nav links to make it
  explicit that MobileBottomNav covers mobile navigation
@drips-wave

drips-wave Bot commented Aug 30, 2026

Copy link
Copy Markdown

@Moh-dakai Great news! 🎉 Based on an automated assessment of this PR, the linked Wave issue(s) no longer count against your application limits.

You can now already apply to more issues while waiting for a review of this PR. Keep up the great work! 🚀

Learn more about application limits

@Chucks1093

Copy link
Copy Markdown
Member

Fix the CI

@Chucks1093

Copy link
Copy Markdown
Member

The verify check is failing on the mobile bottom nav PR. This is most likely a TypeScript type error or a missing import in the new navigation component. Run npm run build locally to see the compiler errors and npm run lint to catch any ESLint violations, then push the fixes.

RootLayout was imported but never used, causing an ESLint
@typescript-eslint/no-unused-vars error in CI. Restructured the routes
array to use RootLayout as the top-level layout route with all existing
routes as children, so MobileBottomNav is rendered on every page via
the Outlet pattern.
@Chucks1093
Chucks1093 merged commit 4b7a11a into accesslayerorg:dev Sep 5, 2026
1 check 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.

Add a mobile bottom navigation bar for the four main app sections

3 participants