9.4 KiB
9.4 KiB
Anime UI Overhaul — Frontend Redesign
Date: 2026-06-03
Status: Approved
Author: Claude Code / brainstorm session
Related: docs/specs/2026-06-01-frontend-major-refactor-design.md
Overview
Complete visual overhaul of the GMW frontend (/mnt/code/bete/services/frontend) from dark cyberpunk to light anime aesthetic with white + sky blue (#7EC8E3) as primary colors. Full "kawaii cyber" approach with Three.js particles, GSAP animations, Framer Motion transitions, and anime-style mascot/illustrations.
Mood Board
- Vibe: Fresh, cute, playful, clean — like an anime profile page meets monitoring dashboard
- Primary colors: White
#FFFFFF+ Sky Blue#7EC8E3+ Soft Pink accent#FF8FAB - Typography: Rounded, light, airy — Inter with loose letter-spacing
- Shapes: Extra rounded corners (16-20px), soft shadows with sky-blue tint
- Animations: Bouncy spring transitions, floating particles, page fade/slide
Tech Stack Additions
| Library | Purpose |
|---|---|
three |
3D particle background (sakura, sparkles) |
@react-three/fiber |
React wrapper for Three.js |
@react-three/drei |
Utility helpers for R3F |
gsap |
Page transitions, scroll-triggered effects, complex timelines |
framer-motion |
Component mount/unmount, card stagger, layout animations |
All existing dependencies preserved (React 19, Tailwind 4, TanStack Query, Lucide, Radix).
Color System
:root {
--bg: 0 0% 98%;
--bg-secondary: 210 40% 96%;
--fg: 222 20% 12%;
--fg-muted: 215 20% 45%;
--primary: 199 80% 50%; /* #7EC8E3 sky blue */
--primary-soft: 199 80% 90%;
--primary-glow: 199 80% 70% / 0.25;
--card: 0 0% 100%;
--card-shadow: 0 8px 32px hsl(199 50% 60% / 0.1);
--border: 199 30% 85%;
--accent: 340 80% 65%; /* soft pink */
--accent-glow: 340 80% 70% / 0.2;
--radius: 1rem; /* 16px base */
}
Layout
┌─────────┬─────────────────────────────────────────┐
│ │ Header (transparent, sticky) │
│ Sidebar │ ┌─ tab title ──── [WS] [Voice] ──────┐ │
│ 64px │ │ subtitle │ │
│ icon- │ └─────────────────────────────────────┘ │
│ only │ │
│ │ Main Content Area │
│ [🌟] │ ┌───────────────────┬───────────────┐ │
│ [💬] │ │ Card │ Card │ │
│ [📊] │ │ │ │ │
│ │ └───────────────────┴───────────────┘ │
│ 🐱 │ ┌───────────────────────────────────┐ │
│ chibi │ │ Card (full width) │ │
│ mascot │ └───────────────────────────────────┘ │
└─────────┴─────────────────────────────────────────┘
Background: Three.js particle canvas (z-index: -1)
All content above particles
Component Tree
Sidebar (widgets/Sidebar.tsx)
- Collapsed by default (64px) — icon-only
- Icons: custom anime-style or Lucide icons
- Active tab: sky-blue soft bg + glow ring
- GSAP hover: translateX(2px) + spring scale
- Bottom: chibi mascot avatar (CSS art or SVG)
- Framer Motion layout animation when switching
Header (widgets/Header.tsx)
- Transparent, barely visible border-bottom
- Left: animated tab title + subtitle
- Right: status badges (WS green dot + Voice) — cute style
- Avatar placeholder with anime border
Cards (all shared/ui and feature components)
- White bg, sky-blue border, 16px radius
- Soft shadow with sky-blue tint
- GSAP hover: lift +4px, shadow deepens
- Framer Motion: stagger entrance when tab changes
- Inside: playful headings, pastel accents
Empty States
- Chibi mascot illustration (CSS-drawn character)
- Playful text: "No speakers yet... 🎤✨"
- Subtle bounce animation on the mascot
Three.js Particles
- Layer: z-index: -1, pointer-events: none, fixed position
- Elements: Floaty sakura petals (pink soft) + sparkles (white/sky blue)
- Behavior: Slow drift downward, slight mouse interaction (gentle pull)
- Performance:
useFrameoptimized, max ~50 particles, auto-pause when tab hidden - Implementation:
@react-three/fiberCanvas with customParticlescomponent
Animations (GSAP + Framer Motion)
GSAP
- Page transitions: tab switch → old content fades out (300ms) → new content slides up (400ms)
- Timeline: coordinated header + sidebar + content stagger
- Hover effects: card lift on
onMouseEnter/onMouseLeave
Framer Motion
- Card stagger: each card enters with 80ms delay, spring physics
- Layout animations: sidebar width, list reorder
- AnimatePresence: smooth mount/unmount for sub-panels
- WhileHover: cards, buttons, badges
Features to Modify
1. Auth Page (features/auth/index.tsx)
- Center card with sky-blue gradient border
- Mascot next to lock icon
- Floating sparkle particles in background
- Input: rounded-xl, sky-blue focus ring
- GSAP entrance: card slides up + fade
2. Live Panel (features/live/index.tsx)
- VoiceConnectionCard: anime-styled select inputs, cute buttons with icons
- AudioVisualizer: keep but style with sky-blue/pink gradient bars
- ActiveSpeakers: avatar dengan anime-style border (double ring)
- NowPlaying: spinning record visual + anime equalizer bars
- Music/Screen/Recordings tabs: rounded cards with sky-blue accents
3. Messages Panel (features/messages/index.tsx)
- Search bar: rounded-full, sky-blue focus
- Filter buttons: pill-shaped, anime pastel colors
- MessageCard: avatar with anime border, content with rounded bg
- AI badges: cute tags (clean = green pastel, flagged = pink pastel)
- ImageGrid: masonry-like with sky-blue hover border
4. Analytics Panel (features/analytics/index.tsx)
- Summary cards: large number with sky-blue glow, small anime icon
- Charts: sky-blue + pink pastel gradients
- Tables: rounded rows, alternating pastel bg
- Loading skeletons: sky-blue shimmer animation
Implementation Phases
Phase 1: Foundation
- Install new dependencies (
three,@react-three/fiber,@react-three/drei,gsap,framer-motion) - Update
tailwind.config.jswith new color system - Rewrite
styles.csswith white/sky-blue theme - Create Three.js ParticleBackground component
- Create shared animation hooks (
useGsapTransition,useFramerStagger)
Phase 2: Layout
- Redesign
Sidebar.tsx(collapsed icon-only, anime icons, mascot) - Redesign
Header.tsx(transparent, anime status badges) - Redesign
DashboardLayout.tsx(white bg, particle layer) - Add GSAP page transitions between tabs
Phase 3: Components
- Redesign shared UI:
card.tsx,button.tsx,badge.tsx,input.tsx,select.tsx - Redesign
AuthOverlaywith anime styling - Redesign
VoiceConnectionCard+ActiveSpeakers+NowPlaying - Redesign
MessageFeed+MessageCard+ImageGrid - Redesign Analytics panel components
Phase 4: Polish
- Add Framer Motion stagger animations to all lists
- Add empty states with mascot illustrations
- Add loading animations (skeleton shimmer, pulse)
- Final color/contrast pass for readability
- Responsive check on mobile
Edge Cases & States
Loading States
- Skeletons: sky-blue gradient shimmer, rounded-xl
- Three.js particles: render behind skeleton, visible from second 0
- GSAP entrance: content fades in after skeleton → real content swap
Empty States
- No messages: Chibi mascot waving "No messages yet~ 💬"
- No speakers: Mascot sleeping "Quiet in here... zzz 🌙"
- No analytics data: Mascot thinking "Not enough data, give me moar! 📊"
- Auth locked: Mascot peeking "Password please~ 🔒"
Error States
- Error boundaries: pastel pink/red card with chibi crying mascot
- Network error: toast with cute sad face
- Retry button: bouncy animation on hover
Edge Cases
- Tab not visible: Three.js pauses via
document.hiddenlistener - GSAP/Framer conflict: GSAP for page-level, Framer for component-level — never both on same element
- Reduced motion:
prefers-reduced-motiondisables all animations, static fallback - Low-end devices:
renderer.setPixelRatio(Math.min(window.devicePixelRatio, 2)) - Mobile: Sidebar becomes bottom tab, particles reduced to 20 max
Accessibility
- All colors meet WCAG AA on white backgrounds (sky blue
#7EC8E3on white = 4.8:1 for large text) - Reduced motion media query respected
- Keyboard navigation preserved in all anime-styled components
- Particle layer has
aria-hidden="true"andpointer-events: none
Future Enhancements (Out of Scope)
- Custom anime character illustration as actual image
- Sound effects on tab switch (anime jingle)
- Seasonal themes (cherry blossom, summer, etc.)
- User avatar with anime filter
Design approved by user on 2026-06-03.