Status: Not yet implemented. This document captures the intended UI/UX work so it becomes part of the project backlog and agent context.
- File:
login/auth-complete.js - Problem: Undefined variables (
emailInput,setLoading,supabaseClient,SITE_URL) crash the email/phone OTP flow. - Fix: Define or import these symbols. Drop duplicate tab-switching logic already handled by another file.
- Files:
components/chat/ChatView.js,components/SkeletonLoader.js,js/ui/app.js - Replace plain-text
innerHTMLplaceholders with shimmer skeletons. - Add retry CTA for failed thread loads and backend errors.
- Files: All
css/*.css,index.html,build.js - Use a mini CSS bundler (or Vite/LightningCSS) that concatenates CSS, removes unused rules, and hashes filenames.
- Update
index.htmlto load the single bundle.
- File:
components/chat/ChatView.js - Current two-column layout is unusable on phones.
- Below
768px, switch to a stacked layout with swipeable tabs: "Model A" / "Model B" / "Diff".
- Files:
components/CustomModal.js,js/ui/app.js - Add a toast queue for: vote confirmation, share copied, backend offline/online, file upload success/failure.
- Add a persistent connection status dot near the header avatar.
- File:
components/Sidebar.js - Add a search box at the top of the thread list.
- Group threads by date (Today / Yesterday / Last 7 days / Older).
- Add pin, rename, delete actions via an accessible context menu.
- File:
js/ui/app.js+ landing page - Let visitors run 3–5 anonymous battles before gating further use behind sign-up.
- Add an engaging hero on
index.htmlexplaining the value prop.
- Files:
components/chat/ChatView.js,css/voting-ui.css - Make the post-vote model reveal satisfying: animated identity card, model avatar, confidence badge ("72% preferred this reply").
- File:
components/chat/ChatView.js - Apply a subtle fade-in / typewriter easing to chunks instead of raw append.
- Keep typing indicators visible during model latency.
- File:
leaderboard/index.html,js/leaderboardPage.js - Filters: time range, provider, model family.
- Sparkline of Elo change over time.
- Clicking a model opens its detailed stats drawer.
- Files:
components/CustomModal.js,components/ShareModal.js - Ensure
role="dialog",aria-modal="true", focus trap, and return focus to trigger on close.
- File:
components/ChatInput.js - All 16px icon-only buttons must become at least 40×40px touch targets on mobile.
- File:
css/tokens.css - Verify
--color-terra(#CB9275) on dark surfaces passes WCAG AA for small text. - Add focus-visible rings to all interactive elements.
- File:
js/ui/app.js 1= vote left2= vote rightn= new chatl= open leaderboard modalr= regenerate response
- Do not import React/Vue into the current vanilla app unless a full framework migration is explicitly planned.
- Keep using the
CustomEventbus; do not introduce Redux/Zustand for isolated UI polish. - All new CSS variables must live in
css/tokens.css. - Each improvement must include a Playwright regression test once the test runner is installed.
Owner: core maintainers
Next action: Tackle P0 auth crash, then P1 stylesheet consolidation + responsive battle view.