Skip to content

Taste skill UI ux update#21

Merged
vagkaratzas merged 20 commits into
v3-fable-autofrom
taste-skill-ui-ux-update
Jul 4, 2026
Merged

Taste skill UI ux update#21
vagkaratzas merged 20 commits into
v3-fable-autofrom
taste-skill-ui-ux-update

Conversation

@vagkaratzas

Copy link
Copy Markdown
Collaborator

Arena3Dweb — Frontend UI/UX Redesign (taste-skill)

Design read: Redesign-preserve of a scientific 3D-network visualization
tool for bioinformatics researchers. Dark "instrument" canvas app built on
Bootstrap 5 + Vite/TypeScript/Three.js. Direction: cohesive dark instrument
panel, single cool-blue accent, restrained motion, strong hierarchy — without
touching any backend contract, route, data flow, or feature.

Approach followed the token-saviour + ponytail path: kept Bootstrap and
retinted its dark tokens instead of ripping the framework out or rewriting to
React. Most changes are CSS + small, surgical markup edits. One feature per
commit, no push.


Summary of improvements

  1. Unified design foundation. Retinted Bootstrap's dark theme to one cool
    palette + accent so every .btn / .form-control / .nav / .table
    inherits the system. Refined navbar (frosted, active-tab pill), buttons
    (accent fill, tactile :active press), inputs (focus ring), :focus-visible
    rings, and a global prefers-reduced-motion guard.

  2. Side-drawer panels (key UX fix). Action panels used to overlay the whole
    3D scene. They now slide in as a right-side drawer (min(440px, 94vw), wider
    for the data table) so the scene stays visible and interactive while you
    operate on it. Only Home and Help remain full-width, per the explicit
    constraint. Drawer has a slide-in animation (reduced-motion aware).

  3. Panel content fits the drawer. Neutralized the now-pointless responsive
    column wrappers inside drawers, and rebuilt the cramped per-layer checkbox
    group into tidy bordered rows with a truncating layer name and aligned
    Hide / Labels toggles.

  4. Home panel redesign. Hero header with tagline, a figure + readable-measure
    intro grid, two quick-start action cards (Upload / Examples), and a
    de-emphasized citation block. Collapses to one column on mobile.

  5. Help panel themed. Replaced the light-on-dark tab strip with accent pill
    tabs; restyled headings, code blocks, images, and links for the dark chrome
    and a comfortable reading measure.

  6. Scene overlays + empty state. The bare "waiting for network" line is now a
    centered empty-state card. Restyled the navigation-controls headings and
    dividers, gave the Recenter button an accent treatment, and replaced the
    raw-red node-description close button with a themed control.

  7. Responsive behavior. The mobile navbar menu now auto-collapses after a tab
    is picked (so the chosen panel isn't left buried under an open menu), and
    drawers pad their bottom to clear the fixed footer. Verified at desktop
    (1440), tablet (820), and mobile (390).

Files changed

File Change
frontend/src/style.css Design tokens, Bootstrap retint, component polish, drawer system, layer rows, Home/Help/overlay/empty-state styling
frontend/index.html Friendlier empty-state copy
frontend/src/ui/home.ts Home panel markup restructured (IDs preserved)
frontend/src/ui/layouts.ts Per-layer selection rebuilt as clean rows (JS wiring unchanged)
frontend/src/event_listeners.ts Auto-collapse mobile navbar on tab select

No backend files, API endpoints, request/response shapes, routes, or auth logic
were touched.

Validation commands run

  • npx tsc --noEmit — clean (after each change)
  • npm run lint (eslint) — clean
  • npx vitest run106 passed (15 files)
  • npx playwright test1 passed (existing network-flow E2E)

Playwright flows tested (baseline + post-change screenshots)

  • Home → File → Load Example → Main View (scene renders)
  • Layer Selection: Select All Layers → choose Circle layout → Run ("Layout
    applied", scene re-renders)
  • Every panel visited (Scene / Layer / Node / Edge / View Data / FPS / Help)
  • Empty state (no network) and loaded-controls state
  • Mobile (390) + tablet (820): navbar collapse, drawer, home stack
  • Console errors: 0 across the full sweep

Known limitations / follow-ups

  • On phones the drawer is ~94vw, so it necessarily covers most of the scene —
    unavoidable at that width; the desktop/tablet constraint (don't cover the
    scene) is fully met.
  • Node/edge attribute content (help tables, node description body) was themed
    but not re-laid-out; a future pass could card-ify the longer help spec tables.
  • The nav-control image sprites (rotation arrows, expand/collapse) are the
    original PNGs — left as-is to avoid asset churn; could become inline SVG later
    for crispness on HiDPI.
  • No new fonts were added (system-ui stack kept) to avoid a dependency/asset add.

vagkaratzas and others added 20 commits July 4, 2026 09:52
Retint Bootstrap's dark tokens to one cool palette + accent, refine
navbar, buttons, forms, focus rings, and honor prefers-reduced-motion.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
All panels except Home/Help now slide in as a right-side drawer so the
3D scene stays visible and interactive while operating on it.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Neutralize responsive column wrappers inside drawers and rebuild the
per-layer selection into tidy rows with aligned Hide/Labels toggles.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Restructure into a hero header, figure + readable intro grid, quick-start
action cards, and a de-emphasized citation block. Fix drawer specificity
so Home/Help render full-width.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Replace the light-on-dark tab strip with accent pill tabs and restyle
headings, code blocks, images, and links to match the dark chrome.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Turn the bare "waiting" hint into a centered empty-state card, restyle the
navigation-controls headings/dividers and Recenter button, and replace the
raw-red node-description close button with a themed control.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Auto-collapse the mobile navbar menu after picking a tab so the chosen
panel isn't buried, and pad drawers to clear the fixed footer bar.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…liders

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
navControlButtonsDiv shared #info's z-index, so #info's top edge
clipped the bottom of the "Navigation Controls" button when both
overlapped by a few px. Give the buttons a higher z-index so they
always render above the panel below them.

#info also carried pointer-events: none unconditionally (meant only
for the pre-load hint state), so its own scrollbar swallowed no
clicks and drags fell through to the canvas, dragging the scene
instead of scrolling. Pointer-events: none now applies only while
#info holds no table (the hint state); once the controls table is
present the panel is fully interactive.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
interLayerEdgesRenderPauseButton's label never actually reflected
ctx.interLayerEdgesRenderPauseFlag (a stub noted in edge.ts). It now
swaps a bars/play icon + label in sync with the flag on every click.

displayCanvasControlsButton gets a chevron that flips between open
and closed state instead of a static label with no visual affordance.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Action-panel drawers (File/Layouts/Scene/.../Data) could only be
dismissed by navigating back to Main View through the navbar tabs.
Add a small chevron handle docked to the drawer's left seam: '>'
collapses the open drawer to the canvas, '<' reopens the last one
that was open.

Derives the active pane from the shown.bs.tab event's own
data-bs-target rather than querying '.tab-pane.show': Bootstrap fires
that event as soon as the (unanimated) nav button activates, before
the pane's own fade transition adds its 'show' class, so a DOM query
at that instant could still match the pane being deactivated.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
getRandomArbitrary drew from Math.random(), so every Load Example or
upload scattered nodes to a different layout. Back it with a seeded
mulberry32 PRNG and re-seed at the start of scrambleNodes with a fixed
seed (123, mirroring the backend's random.seed(123)), so the same
network always produces the same layout.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
After a network upload, Load Example, or session import succeeds, switch
to the empty Main View pane so the drawer closes and the 3D scene is
revealed without a manual tab change. The panelDrawerToggle picks up the
change through its existing shown.bs.tab listener and shows the closed
state. On error the drawer stays open so the message is visible.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Buttons attach top-right on first network load and dispatch
ChangeThemeCommand, so theme switches are undoable.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
applyTheme set layer colors via repaintLayers(theme.floor) but never
updated the #floor_color input, which is the source of truth on the
picker priority path. Hover-exit repaint (repaintLayers() / Layer.getColor())
read the stale input and reverted layers to the dark default. Restore the
v2 behaviour of writing the theme floor into #floor_color.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@vagkaratzas vagkaratzas changed the base branch from main to v3-fable-auto July 4, 2026 14:53
@vagkaratzas vagkaratzas merged commit 94e13cd into v3-fable-auto Jul 4, 2026
2 of 3 checks passed
@vagkaratzas vagkaratzas deleted the taste-skill-ui-ux-update branch July 4, 2026 14:54
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