Skip to content

feat: responsive UI overhaul and HTTPS auth fix#241

Open
MydsiIversen wants to merge 19 commits intobetafrom
feat/responsive-ui
Open

feat: responsive UI overhaul and HTTPS auth fix#241
MydsiIversen wants to merge 19 commits intobetafrom
feat/responsive-ui

Conversation

@MydsiIversen
Copy link
Copy Markdown
Member

@MydsiIversen MydsiIversen commented Apr 11, 2026

Summary

  • Mobile sidebar: collapsible sheet drawer with hamburger menu, hidden on desktop
  • Sites page: mobile drill-down navigation (site list → instances with back button), horizontal tab bar for section switching
  • Responsive grids: 28+ pages and components now use proper breakpoints instead of hardcoded column counts
  • Page padding: reduced from p-6 to p-4 on mobile across 18 feature pages
  • Onboarding wizard: redesigned to match login page glassmorphism style, responsive step indicator with labels, mobile-friendly button layout
  • HTTPS auth fix: API proxy routes now handle __Secure- prefixed cookies used when BETTER_AUTH_SECURE_COOKIES=true

Test plan

  • Desktop: verify sidebar, sites page, and dashboard look unchanged
  • Mobile (< 1024px): hamburger menu opens sidebar as sheet drawer, closes on navigation
  • Mobile sites page: tab bar switches sections, tapping site drills into instances, back button returns to site list
  • Resize browser on feature pages (NAT, firewall, VPN, etc.) - stat grids should reflow
  • Modals on mobile - form fields should stack vertically
  • HTTPS deployment: log in and verify sites/instances load (no "Authentication required" error)
  • Onboarding wizard: complete flow with and without adding an instance

- Hide desktop sidebar on screens below lg breakpoint
- Add mobile top bar with hamburger menu and VyManager branding
- Open sidebar as a slide-out Sheet drawer on mobile
- Close drawer automatically when navigating to a page
- Add mobile header with horizontal section tabs (Sites/Users/Auth)
- Replace 3-pane layout with drill-down pattern on mobile:
  site list → tap site → instance view with back button
- Hide desktop left nav and middle pane on mobile
- Keep desktop 3-pane layout unchanged on lg+ screens
Apply mobile-friendly grid breakpoints across 9 feature pages:
- Dashboard, NAT, Static Routes, PKI, Firewall Groups,
  Firewall Global Options, L2TP, IPsec, WireGuard
- Grids now stack on small screens and expand on larger ones
Apply mobile-friendly grid breakpoints across 19 component files:
- Form grids in modals stack to 1 column on mobile (sm:grid-cols-3)
- Stat grids in content views start at 2 columns (sm:grid-cols-4/5)
- Covers VXLAN, tunnels, OSPF, BGP, HA, bonding, VRF, L2TP,
  failover, NAT64 modals and content pages
When BETTER_AUTH_SECURE_COOKIES=true (HTTPS deployments), better-auth
prefixes cookies with __Secure-. The proxy routes now check for the
prefixed cookie first, falling back to the non-prefixed name. This
fixes "Authentication required" errors on HTTPS deployments.
- Apply glassmorphism card style matching the login page
- Add animated gradient background for visual consistency
- Add step labels below progress indicators (Account/Site/Instance)
- Place password fields side-by-side on desktop, stack on mobile
- Stack step 3 buttons vertically on mobile, horizontal on desktop
- Style inputs consistently with login page (h-11, bg-background/50)
- Remove redundant step headers, let progress indicator speak
- Improve skip button text to "Skip, add later" for clarity
Change p-6 to p-4 sm:p-6 on page-level containers across 18 pages:
NAT, NAT64, NAT66, interfaces, static routes, all policy pages,
IPsec, L2TP, WireGuard, PKI, and firewall policies.
Gives content more breathing room on small screens.
Add mobile tab bars to 4 pages with fixed-width sidebars:
- routing/unicast-protocols (BGP, OSPF, etc.)
- routing/infrastructure (BFD, MPLS, etc.)
- routing/multicast (IGMP, PIM, etc.)
- network/vrf (VRF instances)

Sidebars hidden on mobile, replaced with horizontal scrollable
pill tabs. Desktop layout unchanged.
Policy pages (8): bgp-extended-community, bgp-large-community,
bgp-community, access-list, route-map, bgp-as, prefix-list, route
- Add mobile Select dropdown for item selection

Network pages (3): interfaces, nat, nat64
- Add mobile Select dropdown for section/rule selection

Routing: static-failover layout
- Add mobile Select dropdown for static routes/failover

Also fix monitoring page overflows (command selector, filter bar)
and WireGuard public key truncation on mobile.
@Jarnster Jarnster self-requested a review April 12, 2026 15:45
@Jarnster Jarnster added the beta Report issues about experimental or beta releases label Apr 12, 2026
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Backend currently accepts both.

In: https://github.com/Community-VyProjects/VyManager/blob/feat/responsive-ui/backend/middleware/auth.py
Should we remove "session_token2" in there?

@Jarnster Jarnster added UI/UX Regarding user interface and/or experience security Involves security-related things (only public info) labels Apr 12, 2026
Replace the neutral-only primary color with a blue accent (oklch 258°)
for primary actions and active states. Add success and warning status
color tokens for semantic UI indicators. Update ring and sidebar tokens
to match the new accent.
Add PageHeader, PageContainer, LoadingState, ErrorState, EmptyState,
and StatusBadge components. These standardize page titles, padding,
loading/error/empty states, and semantic status indicators across
all pages.
Sidebar now collapses to a 64px icon-only rail with smooth width
transition animation. Collapsed state is persisted to localStorage
via a new Zustand store. Icons show tooltips on hover when collapsed.
Mobile sheet drawer always renders expanded. Active nav items now
use a primary/10 background tint for clearer visual feedback.
Desktop layout now includes a thin breadcrumb bar above the main
content area. Breadcrumbs are derived from the navigation config
and current pathname. Last segment is highlighted as the active page.
Page content now fades in with a slight upward slide (200ms ease-out)
on mount, replacing the hard-cut feel when navigating between pages.
…rBanner

Replace FirewallReorderBanner, BridgeReorderBanner, NATReorderBanner,
and 9 policy reorder banners with a single ReorderBanner component
supporting inline and floating variants. Delete all 12 old files.
…rrorState

Replace inline h1/subtitle headers with PageHeader across 30+ pages.
Replace inline Loader2 spinners with LoadingState and inline error
blocks with ErrorState. Replace padding wrappers with PageContainer
on applicable pages. Remove unused imports (LoadingSpinner, AlertCircle,
Loader2, etc.) across migrated files. Net reduction of ~300 lines.
@MydsiIversen
Copy link
Copy Markdown
Member Author

UI Componentization & Design System Update

This push adds the component architecture refactor on top of the responsive work. Here's what changed:

New Shared Components (7)

Component Purpose
PageHeader Standardized page title + subtitle + icon + actions slot
PageContainer Consistent page padding wrapper (p-4 sm:p-6 space-y-6)
LoadingState Unified loading spinner with message, supports fullPage variant
ErrorState Unified error display with optional retry button
EmptyState Unified empty state with icon, message, and action slot
StatusBadge Semantic status pills — success/warning/error/info/neutral
ReorderBanner Shared reorder banner with inline + floating variants

Layout Enhancements

  • Collapsible sidebar — collapses to a 64px icon-only rail with smooth width transition. Tooltips on hover. State persisted to localStorage via new Zustand store.
  • Persistent breadcrumb bar — thin desktop-only top bar showing current location derived from the nav config.
  • Page transition — subtle 200ms fade-in + slight upward slide on content mount.

Design System

  • Blue accent color — replaced neutral-only primary with a blue accent (oklch(0.52 0.19 258)) for clear interactive element highlighting. Buttons, focus rings, active nav items, and status indicators now pop.
  • Status color tokens — added --success and --warning CSS variables for semantic UI indicators.
  • Active nav states — sidebar items now use primary/10 background tint instead of plain gray.

Code Consolidation

  • 12 reorder banners → 1 — deleted FirewallReorderBanner, BridgeReorderBanner, NATReorderBanner, and 9 policy-specific banners. Single ReorderBanner component with variant prop. -563 lines.
  • 30+ pages migrated — inline h1 headers, Loader2 spinners, and AlertCircle error blocks replaced with the new shared components. -313 net lines.
  • Unused imports cleaned up across all migrated files.

What's NOT touched

  • No backend logic, API calls, or routing paths changed
  • Modal internals (create/edit/delete forms) untouched — they work, that's a separate scope
  • All existing functionality preserved
  • Zero TypeScript errors

Testing

  • tsc --noEmit passes with zero errors
  • All page routes verified to have correct imports resolving
  • Tested docker build

actions={
<div className="flex items-center gap-2">
<Button variant="outline" size="sm" onClick={() => loadData()} disabled={saving}>
<RefreshCw className={cn("h-4 w-4 mr-1.5", loading && "animate-spin")} />

import { Button } from "@/components/ui/button";
import { RefreshCw, X, Check, AlertCircle } from "lucide-react";
import { cn } from "@/lib/utils";
The sidebar was rendering at w-64 inside the w-72 sheet drawer,
leaving a visible gap. Now uses w-full in mobile mode and drops
the right border since the sheet provides the boundary.
… pages

Firewall policies, bridge, DHCP, and WireGuard pages had inner
sidebars (w-72) visible on all screen sizes, making them unusable
on phones. Now hidden on mobile with horizontal pill selectors
for chain/network/tunnel selection matching the pattern used by
routing and policy pages.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

beta Report issues about experimental or beta releases security Involves security-related things (only public info) UI/UX Regarding user interface and/or experience

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants