Skip to content

feat(web): UI polish across header / hero / pipeline / stats#68

Merged
frapercan merged 4 commits intodevelopfrom
feat/web-ui-polish
May 8, 2026
Merged

feat(web): UI polish across header / hero / pipeline / stats#68
frapercan merged 4 commits intodevelopfrom
feat/web-ui-polish

Conversation

@frapercan
Copy link
Copy Markdown
Owner

Summary

Visual polish across the Next.js platform shell. No logic, behaviour or i18n changes — only Tailwind classes, CSS tokens and JSX layout. 9 files, +464/-195.

Most visible deltas

  • Header: sticky h-16 with backdrop-blur; logo monogram "P" in blue→indigo→violet gradient tile + status dot + "Functional Annotation" sub-tagline; pipe separators removed; nav rebuilt as pills with active underline bar; dropdown popovers gain section headers + bullet indicators.
  • Hero: gradient text 5xl-7xl, ambient blur blobs, pill badge with the PROTEA acronym expansion and a pulsing dot.
  • Best-overall spotlight: Fmax 6xl in gradient (was 4xl plain black); MFO / BPO / CCO tiles in blue / violet / emerald (were uniform gray).
  • Pipeline cards: w-32 h-28 with squared icon badge + SVG arrow connectors (were w-28 h-20 with bare letters).
  • Stats: colored gradient halos behind 4xl numbers.
  • FloatingJobsWidget: gradient pill, lift on hover, gradient progress bar.
  • Breadcrumbs: text-sm + chevrons + bold active label (were near-invisible text-xs gray-400).
  • LanguageSwitcher / ResetDbButton / SupportButton: harmonised h-9 and tighter typography.

globals.css

  • Bug fix: body font-family no longer forces Arial over the Geist next/font variable.
  • Design tokens (background / surface / border / primary / shadows / ring).
  • Subtle scrollbar, focus ring, prefers-reduced-motion.
  • Helper utilities: protea-card, protea-gradient-text, protea-grid-bg.

Test plan

  • npm run build clean (verified locally — 18 routes compile, no TS errors)
  • poetry run ruff check protea apps/web clean (verified locally)
  • Visual smoke: / (hero, spotlight, pipeline, stats) — desktop ≥ lg
  • Visual smoke: / mobile — hamburger menu opens, dropdowns fold per-group
  • Sticky header behaves on scroll (backdrop-blur kicks in)
  • Active nav pill shows underline bar on the matching route
  • FloatingJobsWidget appears when there is at least one running job
  • Breadcrumbs render on a sub-route (e.g. /jobs/<id> or /proteins/<acc>)
  • LanguageSwitcher cycles locales, route prefix updated correctly
  • ResetDbButton confirm modal still wires to /admin/reset-db
  • No regressions on /benchmark, /proteins, /jobs (those pages were untouched but live under the new layout)

…, halo stats

Visual polish across the platform shell. No logic, behaviour or i18n
changes — only Tailwind classes, CSS tokens and JSX layout.

Header
- Sticky with backdrop-blur, h-16 (was thin py-3)
- Logo: monogram "P" in blue→indigo→violet gradient tile + status dot
  + "Functional Annotation" sub-tagline
- Removed pipe separators between nav groups; rebuilt as pills with
  active underline bar; dropdown popovers add a section header and
  bullet indicators

Home / showcase
- Hero: gradient text 5xl-7xl, ambient blur blobs, pill badge with
  the PROTEA acronym expansion and a pulsing dot
- Best-overall spotlight: Fmax 6xl in gradient, MFO/BPO/CCO tiles in
  blue / violet / emerald (was uniform gray)
- Pipeline cards w-32 h-28 with squared icon badge + SVG arrow
  connectors (was w-28 h-20 with bare letters)
- Stats: colored gradient halos behind 4xl numbers
- CTAs: rounded-xl py-3 px-7 font-semibold

Other components
- FloatingJobsWidget: gradient pill, lift on hover, gradient progress bar
- Breadcrumbs: text-sm, slate chevrons, bold active label
  (was nearly-invisible text-xs gray-400)
- LanguageSwitcher: 🌐 icon, h-9 height aligned with header siblings
- ResetDbButton / SupportButton: harmonised h-9 + tighter typography

globals.css
- Bug fix: body font-family no longer forces Arial over Geist
- Design tokens (background, surface, border, primary, shadows)
- Subtle scrollbar, focus ring, prefers-reduced-motion
- Helpers: protea-card, protea-gradient-text, protea-grid-bg
@github-actions github-actions Bot enabled auto-merge (squash) May 8, 2026 14:42
@frapercan frapercan disabled auto-merge May 8, 2026 15:08
@frapercan frapercan merged commit 610d418 into develop May 8, 2026
13 checks passed
github-actions Bot pushed a commit that referenced this pull request May 8, 2026
…adoption (#79)

## Why

The platform shell polish (#68) introduced **slate-** on the header /
home / nav, but every other page kept **gray-**. Same session, two
neutral palettes side by side. This PR retires that drift in one sweep,
plus two adjacent density / loading-state cleanups identified in the UX
audit.

## What

### 1. Palette unification — gray → slate
- Single sed sweep across **24 page and component files** (641
occurrences of `gray-{50…900}` → `slate-{50…900}`).
- Semantic colors (red / blue / emerald / amber / violet) untouched.
- No tone shift in the visible result; uniform now across the whole app.

### 2. Density bump in body cells
- `text-xs` (12px) is hostile for tabular numbers in the data-heavy
pages. Selective bump to `text-[13px]` inside `<td>` cells and body
paragraphs in `/scoring`, `/annotations`, `/reranker`, `/evaluation`,
`/jobs/[id]`, `/proteins/[accession]`.
- Labels, chips, badges, and `tracking-*` uppercase section headers stay
at `text-xs` — intentional hierarchy.

### 3. Skeleton adoption
- The repo ships `components/Skeleton.tsx` but pages were rolling their
own `bg-gray-100 rounded animate-pulse`.
- Migrated the most visible loading screen (`/benchmark`) to use
`<Skeleton />`.
- Other ad-hoc pulse patterns inside card grids are wrapper-level
pulses, not inner skeletons — left intact for a follow-up that designs
proper skeleton card variants.

## Test plan
- [x] `next build` green; 18 routes
- [x] Backend untouched — no changes outside `apps/web/`
- [ ] Visual: open a previously-gray page (e.g. `/jobs`, `/embeddings`,
`/scoring`) — color rhymes with the polished header now
- [ ] Body text in `/scoring`, `/annotations`, `/reranker` reads
cleaner; chip/label sizes unchanged
- [ ] `/benchmark` loading state uses the canonical `<Skeleton/>` look
(compare to fast initial paint)

## Notes
- Worktree `protea-coherencia-visual`, fully isolated. Sister PR (#TBA)
for benchmark heatmap small-multiples is in flight from
`protea-benchmark-heatmap`, no overlap.
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