From afb3b7c74958c53d63623e548db2789fa24db92d Mon Sep 17 00:00:00 2001 From: William Valentin Date: Wed, 18 Feb 2026 12:43:14 -0800 Subject: [PATCH] docs: add gateway UI responsive redesign design Approved design for modernizing the gateway frontend with Tailwind CSS, responsive mobile-first layout, and swipeable page navigation. Co-Authored-By: Claude Opus 4.6 --- .../2026-02-18-gateway-ui-redesign-design.md | 151 ++++++++++++++++++ 1 file changed, 151 insertions(+) create mode 100644 docs/plans/2026-02-18-gateway-ui-redesign-design.md diff --git a/docs/plans/2026-02-18-gateway-ui-redesign-design.md b/docs/plans/2026-02-18-gateway-ui-redesign-design.md new file mode 100644 index 0000000..bc333e7 --- /dev/null +++ b/docs/plans/2026-02-18-gateway-ui-redesign-design.md @@ -0,0 +1,151 @@ +# Gateway UI Responsive Redesign + +**Date:** 2026-02-18 +**Status:** Approved + +## Goal + +Redesign the Flynn gateway web frontend for a modern, responsive, mobile-friendly experience with monitoring dashboard as the primary mobile use case. + +## Decisions + +- **Visual style:** Modern minimal (Linear/Vercel aesthetic), dark theme +- **CSS framework:** Tailwind CSS via CDN (Play CDN for zero build step) +- **Mobile navigation:** Swipeable pages via CSS scroll-snap with pill indicator +- **Dependencies:** Tailwind CDN only; no JS frameworks or gesture libraries +- **Approach:** Full rewrite of style.css → Tailwind utility classes in JS page renderers + +## Visual Language + +### Typography +- **Body/UI:** Inter (sans-serif) via Google Fonts CDN +- **Code/technical values:** JetBrains Mono (monospace) — session IDs, code blocks, config values only + +### Color Palette (Tailwind zinc scale) +| Role | Token | Value | +|------|-------|-------| +| Background deepest | zinc-950 | #09090b | +| Background card | zinc-900 | #18181b | +| Background elevated | zinc-800 | #27272a | +| Accent | blue-500 | #3b82f6 | +| Success | green-500 | #22c55e | +| Warning | amber-500 | #f59e0b | +| Error | red-500 | #ef4444 | +| Text primary | zinc-50 | #fafafa | +| Text secondary | zinc-400 | #a1a1aa | +| Text muted | zinc-600 | #52525b | + +### Spacing +- Tailwind 4px scale +- Cards: `p-4` (16px) mobile, `p-6` (24px) desktop +- Grid gaps: `gap-4` consistent +- Touch targets: minimum 44px + +### Borders & Depth +- `border-zinc-800` subtle borders +- `ring-1 ring-zinc-800` for cards +- No drop shadows — layered backgrounds create depth + +## Layout & Navigation + +### Desktop (≥1024px) +- Fixed left sidebar: 64px collapsed (icons only), 240px expanded on hover or pin +- Logo at top, 5 nav items with icons + labels, connection status at bottom +- Main content with max-width constraint for readability + +### Tablet (768px–1023px) +- Sidebar: 64px icon-only strip (always collapsed) +- Content fills remaining width +- Grids: 3 → 2 columns + +### Mobile (<768px) +- **No sidebar.** Replaced with: + - Top bar: logo + connection indicator + current page title + - Swipeable horizontal page container (`scroll-snap-type: x mandatory`) + - Pill indicator bar showing page position (tappable to jump) +- Page order: Dashboard → Chat → Sessions → Usage → Settings +- Each page is `100vw` wide, `scroll-snap-align: start` +- JS manages page lifecycle (teardown old page, render new page on snap) + +## Page Designs + +### Dashboard (Primary Mobile Target) +- **Stat cards:** Horizontally scrollable strip on mobile, grid on desktop. Compact: large value, small label, optional trend. +- **Service status:** Colored pill badges in a compact row. Green/amber/red dots + name. +- **Session analytics:** CSS-only bar chart for daily trend. Badge list for top tools/topics. +- **Model performance:** Horizontal-scroll table, sticky first column. +- **Event stream:** Collapsible, 5 most recent visible by default. +- **Active requests:** Only shown when in-flight, with animated indicator. +- **Mobile pattern:** All sections are collapsible accordion-style. Headers + summary visible, tap to expand. + +### Chat +- Full-height message area, bottom-anchored input +- Full-width messages on mobile (no side margins) +- Assistant messages: lighter card background. User messages: accent-tinted. +- Tool events: compact inline chips (expandable on tap) +- Slash command popup: bottom-sheet on mobile, floating on desktop +- File attachment: bottom sheet (mobile), drag-drop zone (desktop) +- Auto-growing textarea with always-visible send button on mobile + +### Sessions +- **Mobile:** Card list (not table). Each card: session ID, channel badge, message count, last activity. Tap to expand history. +- **Desktop:** Table with inline history viewer. + +### Usage +- Summary stat cards in scrollable strip (mobile) or grid (desktop) +- Per-session: stacked cards (mobile), table (desktop) +- Auto-refresh every 30s + +### Settings +- Sectioned form: each group in its own card +- Toggle switches for booleans, full-width inputs for text +- 44px minimum touch targets +- Sections: PA Mode, Push Notifications, Hook Patterns, Tools, Services, Config + +## Technical Approach + +### Tailwind Setup +```html + + +``` + +### Font Loading +```html + + +``` + +### Swipe Navigation (Mobile) +CSS scroll-snap container wrapping all page divs. JS `IntersectionObserver` or `scrollend` event detects which page is visible and updates the pill indicator + triggers page lifecycle. + +### Migration Strategy +1. Replace `style.css` with a minimal base (resets, custom utilities not in Tailwind) +2. Rewrite `index.html` shell with Tailwind classes +3. Rewrite each page renderer (JS) to emit Tailwind-classed HTML +4. Update `app.js` router for scroll-snap container on mobile +5. Test each page at all breakpoints + +### Files Modified +- `src/gateway/ui/index.html` — new shell, Tailwind CDN, fonts +- `src/gateway/ui/style.css` — reduced to minimal base (~100 lines) +- `src/gateway/ui/app.js` — responsive router, swipe container, pill indicator +- `src/gateway/ui/pages/dashboard.js` — Tailwind classes, accordion, scrollable stats +- `src/gateway/ui/pages/chat.js` — Tailwind classes, bottom-sheet slash popup +- `src/gateway/ui/pages/sessions.js` — card list on mobile +- `src/gateway/ui/pages/usage.js` — card layout on mobile +- `src/gateway/ui/pages/settings.js` — form card layout +- `src/gateway/ui/sw.js` — update cache version +- `src/gateway/ui/manifest.webmanifest` — update theme color to zinc-950