Skip to content

UI Ascend: Complete visual redesign#5

Closed
vayungodara wants to merge 18 commits into
mainfrom
ui-ascend
Closed

UI Ascend: Complete visual redesign#5
vayungodara wants to merge 18 commits into
mainfrom
ui-ascend

Conversation

@vayungodara

Copy link
Copy Markdown
Owner

Summary

Complete visual/animation redesign across all 22 CSS modules, the animation system, and 6 JS component files. Zero feature changes — pure aesthetic transformation.

  • Color tokens: Luminous light palette (warm off-whites with violet undertone) + Deep Space dark palette (deep blue undertones). 4-stop gradient, celebration gold accent, accent-tinted shadows, status glows
  • Frosted glass: Every card, sidebar, modal, nav, and toast gets surface-glass + backdrop-filter: blur() treatment
  • 3-tier animations: Ambient (background orbs, shimmer, breathing), Responsive (hover lifts, tap scales, spring nav pill), Celebration (confetti on pact complete, streak bounce, XP flash)
  • Typography: Extrabold headings, tighter tracking, tabular-nums for counters
  • Modals: blur(16px) overlay, glass body, spring scale entrance, glow focus rings
  • Activity feed: Gradient timeline connector, Framer Motion stagger (replaces CSS keyframes)
  • Calendar: Hue-shifted activity levels (indigo→purple→violet→magenta), pulsing today ring
  • Accessibility: prefers-reduced-motion kills all animations, focus-visible on all interactive elements
  • Custom confetti: Pure React/Framer Motion particle system (no external deps), respects reduced motion

Files changed: 42 (3,031 additions, 750 deletions)

Category Files
Design tokens globals.css
Animation system animations.js, confetti.js
Component CSS (17) Sidebar, PactCard, TaskCard, DailySummaryCard, FocusTimer, XPBar, MonthlyCalendar, NotificationBell, MobileNav, Navbar, Toast, NudgeButton, all 4 modals, ThemeToggle, GroupStats, ActivityComments, CompactActivityCard
Component JS (6) Sidebar, PactCard, FocusTimer, XPBar, DailySummaryCard, ActivityItem, ActivityFeed, LandingPageClient
Page CSS (8) Dashboard, Focus, Groups, GroupDetail, Pacts, Settings, Stats, Landing

Test plan

  • Run npm run build — passes clean
  • Check light mode on dashboard, pacts, groups, focus, stats, settings
  • Check dark mode on all the same pages
  • Test system theme auto-detection
  • Complete a pact → confetti should fire
  • Complete a focus session → confetti should fire
  • Verify streak ≥ 3 shows bounce animation on DailySummaryCard
  • Test modals (create pact, create group, create task) — blur overlay, glass body
  • Test mobile nav tap feedback and active dot
  • Enable "Reduce motion" in OS accessibility → all animations should stop
  • Tab through interactive elements → focus rings visible
  • Run npm run test:e2e for regression

🤖 Generated with Claude Code

vayungodara and others added 13 commits February 26, 2026 13:40
Complete visual redesign spec covering color evolution, typography,
3-tier animation system, and component-specific treatments.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Comprehensive step-by-step plan covering design tokens, animation
system, every component CSS module, celebration wiring, and
accessibility pass.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…ility

Replace animations.js with a structured 3-tier system:
- Tier 1 (Ambient): float, breathing, glow, gradient shift
- Tier 2 (Responsive): enhanced fades, slides, stagger, interactive feedback
- Tier 3 (Celebration): bounce, glow, streak, XP flash

Replace confetti.js with a React/Framer Motion particle system (useConfetti
hook + ConfettiExplosion component), keeping legacy shims for backwards
compatibility until PactCard and FocusTimer are rewritten.

All previous exports preserved for backwards compatibility.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…t orbs

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…agger

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…, nav pill

- Sidebar: glass background + animated nav pill with layoutId
- Cards: PactCard, TaskCard, DailySummaryCard get glass + hover lift + glow stripes
- FocusTimer: glass container, breathing glow ring, heavier time weight
- XPBar: elastic fill transition, shimmer glint animation
- MonthlyCalendar: glass container, celebration gold streaks, hue-shifted levels, today pulse
- Modals: all 4 modals get blur(16px) overlay, glass body, spring scale animation, glow inputs
- Toast: glass background, status-colored borders, gradient progress bar
- NotificationBell: badge pulse animation
- NudgeButton: hover glow
- MobileNav: glass background, tap scale, active dot indicator
- Navbar: unified surface-glass, removed theme-specific overrides

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…ible styles

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
… XPBar, DailySummaryCard

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
@vercel

vercel Bot commented Feb 26, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
lockin Ready Ready Preview, Comment Feb 26, 2026 1:40pm

- Reverted page.module.css and LandingPageClient.js to original (main)
- Dark mode: brightened surface colors so cards visibly separate from background
  (surface-glass: rgba(24,29,42,0.85) vs bg-secondary: #0E1117)
- Dark mode: increased border opacity (0.08/0.12/0.18) so card edges are visible

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Sidebar: use bg-primary instead of surface-glass, remove footer background
  override that was creating the black box around profile section
- Dark mode borders: dialed back to 0.06/0.09/0.14 — card separation comes
  from surface lift, not harsh borders

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- surface-glass: rgba(18,22,34,0.7) — more transparent, subtle lift
- surface-1/2/3: reduced brightness and opacity for gentler card separation
- Cards now feel like frosted layers, not opaque boxes

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Light mode surface-glass: 0.65 → 0.45 opacity (actually see-through now)
- Dark mode surface-glass: 0.7 → 0.55 opacity (more translucent)
- CreatePactModal: removed overflow:hidden that was clipping backdrop-filter

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…ht mode

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
@vayungodara

Copy link
Copy Markdown
Owner Author

Code Review: UI Ascend — Design Spec vs. Implementation

Thorough comparison of the design spec (docs/plans/2026-02-26-ui-ascend-design.md) against the actual implementation. The token layer and frosted glass foundation are solid, but significant features from the spec are missing or half-wired. This reads as Phase 1, not the complete redesign.


Bugs (must fix before merge)

  1. Dark mode --surface-glass mismatchglobals.css

    • [data-theme="dark"]: rgba(18, 22, 34, 0.35)
    • @media (prefers-color-scheme: dark): rgba(14, 17, 23, 0.75)
    • Users toggling dark mode in-app vs OS-level see completely different glass effects. Same issue for --surface-1 and --surface-2. Likely the media query block wasn't updated after the iterative fixes to [data-theme="dark"].
  2. celebrationBounce replays on every re-renderPactCard.js

    • {...(pact.status === 'completed' ? celebrationBounce : {})} spreads animate props unconditionally, so every completed pact's button bounces again on any parent re-render. Should only fire once at the moment of completion.
  3. Toast progress bar layout thrashingToast.module.css

    • @keyframes toastProgress animates width 100% → 0%, triggering layout recalculation 60x/sec for 4s. Use transform: scaleX() with transform-origin: left instead.
  4. --text-tertiary fails WCAG AAglobals.css

    • #837F96 on #FAFAFF is ~3.4:1 contrast. Fails the 4.5:1 requirement for normal text. The design spec explicitly guarantees AA compliance.

Missing features (per design spec)

Completely missing (4 items):

Feature Spec reference
Landing page overhaul Section 4: gradient hero, floating mockup, scroll-triggered reveals, CTA shimmer, drifting gradient orbs — app/page.js not touched at all
Page transition layoutId Section 3: shared layoutId on page headers for morphing title between routes — variant defined in animations.js but never wired
content-visibility: auto Section 5: performance guardrail — zero instances in code
Tier 2 reduced-motion degradation Section 5: Tier 2 should degrade to opacity-only, currently blanket-killed with Tier 1+3

Partially missing (key gaps):

Feature What's done What's missing
Focus Timer ring Breathing glow, heavier type Gradient stroke (indigo→purple→magenta following progress) — the main visual feature
Notification Bell Badge pulse bellWiggle keyframe defined but never applied to the bell icon; dropdown spring stagger missing
Sidebar Nav pill layoutId, icon hover Dark mode gradient bg, collapsed tooltip spring
Cards Frosted glass, glowing stripes, hover lift Shimmer sweep on completed checkmarks
Calendar Hue-shifted levels, today pulse Hover mini tooltip with activity count
Toast Progress bar Glowing left border per status, spring entrance
Activity Feed Framer stagger, gradient timeline Reaction picker spring pop-in, new item highlighted flash
Mobile Nav Dot indicator, press scale Spring between tabs (layoutId), filled active icons
Modals 16px blur, spring entrance, glow inputs Submit button loading shimmer
prefers-reduced-motion CSS blanket kill works All Framer Motion animations completely ignore reduced motionstaggerContainer, celebrationBounce, streakCelebration, ambientFloat, sidebar nav pill all still play

Performance concerns

  1. Triple-layer blur on modals — Navbar blur(20px) + overlay blur(16px) + modal blur(20px) = three simultaneous compositing passes. Will cause jank on mobile.
  2. 60× transition: all — Forces interpolation of paint-triggering properties (background, box-shadow, border-color) on hover. Should scope to only properties that change.
  3. Infinite animations off-screenshimmerGlint (5s), breathe (4s), ringPulse (2.5s), dotPulse (3s) all run infinitely when scrolled away. The plan mentions content-visibility: auto but it was never implemented.
  4. canvas-confetti still in package.json — All imports replaced with custom implementation, but the dead dependency remains.

Cleanup items

  • useConfetti setTimeout has no cleanup on unmount
  • AnimatePresence wrapping ConfettiExplosion serves no purpose (no exit props)
  • Hardcoded hex colors in ActivityItem.module.css icon classes break the design token system

What's good

  • Token layer (colors, gradients, shadows, keyframes) is comprehensive and well-structured
  • -webkit-backdrop-filter consistently paired everywhere (fixes pre-existing Safari bug)
  • will-change used sparingly
  • GPU-friendly animation targets throughout (transform, opacity)
  • focus-visible added to interactive elements
  • Custom confetti implementation is clean — no external deps, pure React/Framer Motion
  • Well-organized commit history with clear separation per feature

Verdict

~50-60% of the design spec is implemented. The foundation (tokens, surfaces, keyframes, glass effects) is solid and makes up the bulk of the 3,155 additions. But the features that would make users notice the redesign — gradient timer ring, landing page, page transitions, bell wiggle, shimmer effects — are either half-wired or untouched.

Recommend either: (a) completing the missing features before merge, or (b) scoping the PR title/description to match what's actually delivered and tracking the rest as follow-up issues.

🤖 Generated with Claude Code

@vayungodara

Copy link
Copy Markdown
Owner Author

Closing — this branch diverged from main and is superseded by #24 which completes the remaining work from a clean base.

@vayungodara vayungodara deleted the ui-ascend branch March 22, 2026 10:26
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