fix: cross-machine access + center filter bar + floating hints

- api.ts: switch baseURL from http://localhost:8001/api/v1 to relative
  /api/v1. Both nginx (prod) and vite (dev) already proxy /api/ to the
  backend, so requests become same-origin and the app works from any
  host (LAN IP, reverse proxy, another machine) with no CORS dance.
- backend CORS: open to "*" as a fallback for the rare direct-hit case;
  the normal flow is same-origin via the proxy and never touches CORS.
- App layout: move FilterBar and DiscardActionBar inside the main
  content column (right of the left sidebar) so the filter row no
  longer bleeds across the sidebar.
- FilterBar: justify-center the pills so they sit centered above the
  timeline. Clear-all uses ml-2 instead of ml-auto.
- KeyboardHints: convert to a floating, glassy pill pinned bottom-
  center (fixed positioning + backdrop-blur + ring) instead of a flat
  toolbar row. Removed from the column layout — now mounted as an
  overlay sibling.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-04-08 20:28:04 +02:00
parent a5b4054a71
commit ac5b18b60c
5 changed files with 34 additions and 17 deletions

View File

@@ -53,9 +53,6 @@ function App() {
return (
<div className="flex flex-col h-screen bg-bg text-text">
<TopBar />
<FilterBar />
<DiscardActionBar />
<KeyboardHints />
<div className="flex flex-1 overflow-hidden">
{/* Left Sidebar */}
@@ -67,9 +64,15 @@ function App() {
<LeftSidebar />
</div>
{/* Main Content - Timeline */}
<div className="flex-1 overflow-auto">
<Timeline />
{/* Main column — filter bar, discard bar, timeline. Lives to the
* right of the left sidebar so the filter row doesn't bleed
* across the sidebar. */}
<div className="flex min-w-0 flex-1 flex-col">
<FilterBar />
<DiscardActionBar />
<div className="flex-1 overflow-auto">
<Timeline />
</div>
</div>
{/* Right Sidebar */}
@@ -82,6 +85,10 @@ function App() {
</div>
</div>
{/* Floating keyboard hints — pinned bottom-center, glassy. Sits
* above the timeline and below the toast layer. */}
<KeyboardHints />
{/* Scan Progress Indicator */}
<ScanProgress />