feat(ui): unify landing, welcome, and upload-route card layouts with il…#222
Conversation
|
Nice cleanup on the visual consistency front — the shared card panel and icon swap read well. Found one functional bug and a few accessibility regressions worth fixing before merge; everything else is minor.
The CTA changed from a decorative
The button is icon-only (no visible text), so without the label it's inaccessible to screen readers. Worth noting the PR description says this was added — it's actually the opposite.
The diff appends a second Nothing else stood out — the One small aside: the PR description credits this PR with removing |
Session export was passing an OptimizeRequest into downloadSessionSave (expects SessionSaveData), failing Zod validation on every click. Landing/welcome cards nested a role="button" div around a real button, double-exposing the control to screen readers and dropping the focus indicator. upload-route lost its remove-file aria-label, filename truncation, and small-screen layout in the redesign, and upload-save-point carried a duplicate spinner/error CSS block.
…eryoptimizer into landing-redesign
Summary
Redesigned the landing, welcome, and upload-route pages to share one consistent two-panel card layout with illustrated PNG icons (replacing inline SVGs and ad-hoc per-page styling), and removed an orphaned CSV import modal component.
Motivation
The landing, welcome, and route-upload screens had drifted apart in card styling (different borders, paddings, hover states, icon treatments), so the three entry points into the app didn't read as one product. This redesign gives them a shared visual language so users see a consistent, polished flow from landing through welcome through upload.
Changes
Frontend
app/ui/src/app/page.tsx: Rebuilt the landing cards as a single bordered/shadowed panel split by a divider (was two separate boxes with a gap), added illustrated route-manager/driver icons vianext/image, retuned title/subtitle typography and background gradient.app/ui/src/app/welcome/page.tsx: Matched the welcome page's card panel to the landing page exactly (same 640px width, same 301px height, same on-screen position — verified with Playwright), added resume-session/new-session icons vianext/image, and moved the "Back" button out of the centered flex column (now absolutely positioned) so it no longer shifts the card position.app/ui/src/app/upload-route/page.tsx: Renamedur-*CSS classes toupload-*for consistency with the other flow pages, madehandleContinueasync-safe with loading/error state and a spinner, swapped the drop-zone icon, added a checkmark icon for the file-selected state, addedaria-labelto the remove-file button.app/ui/public: Addedicon-driver.png,icon-new-session.png,icon-resume-session.png,icon-route-manager.png.Validation
Frontend
npm run lint— clean, no warningsnpm run format:check— all files match Prettier stylenpm run testBackend
Not run — no backend files touched.
Risk
Low. Changes are frontend-only, confined to three page components, one deleted dead-code file, and new static icon assets. No routing, API, or state-management contract changes.
edit/page.tsxtypecheck failure blocksbuildandtypecheckon this branch already (verified present on HEAD before this diff) — it should be tracked/fixed separately, not introduced by this PR.x:320, width:640, height:301.4), not just visual inspection.Rollout and Recovery
No feature flags or migrations needed.
page.tsx,welcome/page.tsx, andupload-route/page.tsxindividually — each page's styling is self-contained in its own<style>block.CSVImportModal.tsx:git checkout <prior-commit> -- src/app/edit/components/CSVImportModal.tsx(safe to leave removed since nothing imports it).High-Signal PR Checklist