Skip to content

feat(web): design system overhaul, motion layer, and UI refinements#1

Merged
azizbekdevuz merged 12 commits intomainfrom
redesign-WIP
Mar 25, 2026
Merged

feat(web): design system overhaul, motion layer, and UI refinements#1
azizbekdevuz merged 12 commits intomainfrom
redesign-WIP

Conversation

@azizbekdevuz
Copy link
Copy Markdown
Owner

@azizbekdevuz azizbekdevuz commented Mar 25, 2026

Summary

Delivers a token-based presentation layer for apps/web: glass/frosted surfaces, consistent light/dark styling, portal-based overlays, motion helpers, and an interactive background. Also includes targeted UX fixes (reviews, account session sync, admin/cart), repo config tweaks, and documentation aligned with the new UI architecture.

Scope: ~171 files, mostly apps/web UI/CSS/components; no intentional API or route contract changes.

Design system & styling

  • New stylesheet layers: styles/glass.css, components.css, admin.css; large expansion of app/globals.css (tokens, modals, motion, cursor blob).
  • Home/marketing refresh: Hero removed in favor of HeroBento + HomeHeroSection; related product card and layout updates.
  • New UI pieces: components/ui/glass/*, MetricCard, broad primitive and email template token alignment.

Motion & background

  • ScrollReveal and KineticHeadings mounted from root layout.tsx.
  • InteractiveBackground rework with cursor-following blob (Framer Motion; reduced-motion aware).

Overlays & structure

  • Dialogs, Form, bottom sheet, dropdown menu, and several review modals use createPortal + consistent backdrops to fix stacking/clipping.
  • Bottom sheet: swipe-to-dismiss behavior on mobile.

UX & product fixes

  • Reviews: delete confirmation, undo flow + review:created sync, i18n for refresh / undoPending.
  • Account: updateSession() after profile/avatar changes.
  • Admin: mobile bulk-delete bar on products table; admin/auth layout height tweaks (min-h-screen → layout-friendly heights).
  • Cart: thumbnails via SmartImage.
  • Errors: error.tsx / not-found.tsx use glass cards and token buttons.

Config & housekeeping

  • .eslintrc.json: root + Next rootDir / no-html-link-for-pages alignment.
  • GitHub issue templates: descriptionabout in frontmatter.
  • Removed obsolete design-token helper scripts (chore).

Documentation

  • architecture.md: UI design system section (stylesheets, motion, portals, components/ui layout).
  • README.md / CONTRIBUTING.md: presentation layer and file layout hints.

Suggested checks before merge

  • pnpm lint / pnpm typecheck (root or web as you usually run)
  • pnpm --filter @apps/web test
  • Smoke: home, product page, reviews (edit/delete/undo), account profile + avatar, admin products (mobile width), cart, sign-in/sign-up

@coderabbitai
Copy link
Copy Markdown

coderabbitai bot commented Mar 25, 2026

Important

Review skipped

Too many files!

This PR contains 171 files, which is 21 over the limit of 150.

⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: 278fed76-2ece-4988-9945-ea5b4cdb4f06

📥 Commits

Reviewing files that changed from the base of the PR and between 26cd671 and d515fa4.

📒 Files selected for processing (171)
  • .eslintrc.json
  • .github/ISSUE_TEMPLATE/1-bug_report.md
  • .github/ISSUE_TEMPLATE/2-feature_request.md
  • .github/ISSUE_TEMPLATE/3-documentation.md
  • CONTRIBUTING.md
  • README.md
  • apps/web/src/app/about/page.tsx
  • apps/web/src/app/account/AccountClient.tsx
  • apps/web/src/app/account/notifications/page.tsx
  • apps/web/src/app/account/orders/[id]/page.tsx
  • apps/web/src/app/admin/analytics-seo/page.tsx
  • apps/web/src/app/admin/analytics/page.tsx
  • apps/web/src/app/admin/auth/login/page.tsx
  • apps/web/src/app/admin/auth/signup/page.tsx
  • apps/web/src/app/admin/customers/[id]/page.tsx
  • apps/web/src/app/admin/customers/page.tsx
  • apps/web/src/app/admin/faq/page.tsx
  • apps/web/src/app/admin/notifications/page.tsx
  • apps/web/src/app/admin/orders/[id]/page.tsx
  • apps/web/src/app/admin/orders/page.tsx
  • apps/web/src/app/admin/page.tsx
  • apps/web/src/app/admin/products/[id]/edit/page.tsx
  • apps/web/src/app/admin/products/new/page.tsx
  • apps/web/src/app/admin/products/page.tsx
  • apps/web/src/app/auth/signin/page.tsx
  • apps/web/src/app/auth/signup/page.tsx
  • apps/web/src/app/cart/page.tsx
  • apps/web/src/app/checkout/CheckoutClient.tsx
  • apps/web/src/app/checkout/success/page.tsx
  • apps/web/src/app/contact/page.tsx
  • apps/web/src/app/contact/sections/ContactForm.tsx
  • apps/web/src/app/contact/sections/FaqSection.tsx
  • apps/web/src/app/error.tsx
  • apps/web/src/app/favourites/page.tsx
  • apps/web/src/app/globals.css
  • apps/web/src/app/layout.tsx
  • apps/web/src/app/not-found.tsx
  • apps/web/src/app/page.tsx
  • apps/web/src/app/products/MerchandisingZones.tsx
  • apps/web/src/app/products/ProductFilters.tsx
  • apps/web/src/app/products/ProductPagination.tsx
  • apps/web/src/app/products/[slug]/page.tsx
  • apps/web/src/app/products/page.tsx
  • apps/web/src/app/special-bargain/page.tsx
  • apps/web/src/app/track/[trackingNumber]/page.tsx
  • apps/web/src/app/track/page.tsx
  • apps/web/src/components/account/AccountProfileEditor.tsx
  • apps/web/src/components/account/FavouritesClient.tsx
  • apps/web/src/components/account/NotificationClient.tsx
  • apps/web/src/components/account/notifications/ConnectionStatus.tsx
  • apps/web/src/components/account/notifications/NotificationActionsBar.tsx
  • apps/web/src/components/account/notifications/NotificationItem.tsx
  • apps/web/src/components/account/notifications/utils.tsx
  • apps/web/src/components/admin/AdminNav.tsx
  • apps/web/src/components/admin/AnalyticsClient.tsx
  • apps/web/src/components/admin/CategoryCard.tsx
  • apps/web/src/components/admin/CategoryCreationForm.tsx
  • apps/web/src/components/admin/CategoryForm.tsx
  • apps/web/src/components/admin/CustomerRoleEditor.tsx
  • apps/web/src/components/admin/CustomersTable.tsx
  • apps/web/src/components/admin/DashboardStatsCards.tsx
  • apps/web/src/components/admin/FaqForm.tsx
  • apps/web/src/components/admin/FaqManagementClient.tsx
  • apps/web/src/components/admin/LookerStudioEmbed.tsx
  • apps/web/src/components/admin/NotificationClient.tsx
  • apps/web/src/components/admin/OrdersTable.tsx
  • apps/web/src/components/admin/ProductEditClient.tsx
  • apps/web/src/components/admin/ProductFormClient.tsx
  • apps/web/src/components/admin/ProductImage.tsx
  • apps/web/src/components/admin/ProductsTable.tsx
  • apps/web/src/components/admin/QuickActionsPanel.tsx
  • apps/web/src/components/admin/RecentOrdersPreview.tsx
  • apps/web/src/components/admin/RecentProductsPreview.tsx
  • apps/web/src/components/admin/UserAvatar.tsx
  • apps/web/src/components/admin/faq/EmptyState.tsx
  • apps/web/src/components/admin/orders/CustomerSection.tsx
  • apps/web/src/components/admin/orders/OrderItemsSection.tsx
  • apps/web/src/components/admin/orders/PaymentSection.tsx
  • apps/web/src/components/admin/orders/ShippingSection.tsx
  • apps/web/src/components/admin/orders/StatusSection.tsx
  • apps/web/src/components/admin/product-edit/CoreDetailsForm.tsx
  • apps/web/src/components/admin/product-edit/ImageUploadForm.tsx
  • apps/web/src/components/admin/product-edit/InventoryForm.tsx
  • apps/web/src/components/admin/product-edit/VariantsSection.tsx
  • apps/web/src/components/auth/AuthForm.tsx
  • apps/web/src/components/auth/SocialAuthButtons.tsx
  • apps/web/src/components/background/InteractiveBackground.tsx
  • apps/web/src/components/cart/CartQtyUpdate.tsx
  • apps/web/src/components/checkout/OrderSummary.tsx
  • apps/web/src/components/checkout/PaymentMethodSelector.tsx
  • apps/web/src/components/checkout/ShippingAddressForm.tsx
  • apps/web/src/components/checkout/StripePaymentBox.tsx
  • apps/web/src/components/checkout/StripeUzbekHelper.tsx
  • apps/web/src/components/checkout/TossPaymentWidget.tsx
  • apps/web/src/components/checkout/hooks/useStripeAppearance.ts
  • apps/web/src/components/home/Badges.tsx
  • apps/web/src/components/home/BestSellers.tsx
  • apps/web/src/components/home/CategoryTiles.tsx
  • apps/web/src/components/home/Guarantees.tsx
  • apps/web/src/components/home/Hero.tsx
  • apps/web/src/components/home/HeroBento.tsx
  • apps/web/src/components/home/HomeHeroSection.tsx
  • apps/web/src/components/home/Marquee.tsx
  • apps/web/src/components/home/ParallaxGallery.tsx
  • apps/web/src/components/home/SocialProof.tsx
  • apps/web/src/components/home/StatsBand.tsx
  • apps/web/src/components/home/StickyFeatures.tsx
  • apps/web/src/components/home/TechPillars.tsx
  • apps/web/src/components/layout/Footer.tsx
  • apps/web/src/components/motion/KineticHeadings.tsx
  • apps/web/src/components/motion/ScrollReveal.tsx
  • apps/web/src/components/nav/AuthLinks.tsx
  • apps/web/src/components/nav/LanguageSwitcher.tsx
  • apps/web/src/components/nav/MiniCart.tsx
  • apps/web/src/components/nav/MobileMenu.tsx
  • apps/web/src/components/nav/NotificationBell.tsx
  • apps/web/src/components/nav/ResponsiveNavigation.tsx
  • apps/web/src/components/nav/ThemeToggle.tsx
  • apps/web/src/components/nav/notifications/NotificationPanel.tsx
  • apps/web/src/components/order/OrderTimeline.tsx
  • apps/web/src/components/order/OrderTrackingTimeline.tsx
  • apps/web/src/components/product/FavoriteButton.tsx
  • apps/web/src/components/product/LikeButton.tsx
  • apps/web/src/components/product/ProductCard.tsx
  • apps/web/src/components/product/QtyAndAdd.tsx
  • apps/web/src/components/product/ReviewForm.tsx
  • apps/web/src/components/product/ReviewsSection.tsx
  • apps/web/src/components/product/reviews/AddUpdateButton.tsx
  • apps/web/src/components/product/reviews/EditReviewButton.tsx
  • apps/web/src/components/product/reviews/RepliesThread.tsx
  • apps/web/src/components/product/reviews/ReplyButtonInline.tsx
  • apps/web/src/components/product/reviews/ReviewItem.tsx
  • apps/web/src/components/product/reviews/ReviewLikeButtonInline.tsx
  • apps/web/src/components/product/reviews/UndoButton.tsx
  • apps/web/src/components/shipping/TrackingForm.tsx
  • apps/web/src/components/shipping/TrackingResults.tsx
  • apps/web/src/components/shipping/TrackingTimeline.tsx
  • apps/web/src/components/ui/feedback/ComingSoonModel.tsx
  • apps/web/src/components/ui/feedback/confirmation-dialog.tsx
  • apps/web/src/components/ui/forms/Form.tsx
  • apps/web/src/components/ui/forms/MultiSelect.tsx
  • apps/web/src/components/ui/forms/SearchableMultiSelect.tsx
  • apps/web/src/components/ui/glass/GlassCard.tsx
  • apps/web/src/components/ui/glass/GlassPanel.tsx
  • apps/web/src/components/ui/media/FileUpload.tsx
  • apps/web/src/components/ui/media/FitnessCharacterIcons.tsx
  • apps/web/src/components/ui/navigation/CursorPagination.tsx
  • apps/web/src/components/ui/navigation/Pagination.tsx
  • apps/web/src/components/ui/navigation/bottom-sheet.tsx
  • apps/web/src/components/ui/primitives/MetricCard.tsx
  • apps/web/src/components/ui/primitives/alert.tsx
  • apps/web/src/components/ui/primitives/button.tsx
  • apps/web/src/components/ui/primitives/card.tsx
  • apps/web/src/components/ui/primitives/dialog.tsx
  • apps/web/src/components/ui/primitives/dropdown-menu.tsx
  • apps/web/src/components/ui/primitives/input.tsx
  • apps/web/src/components/ui/primitives/label.tsx
  • apps/web/src/components/ui/primitives/select.tsx
  • apps/web/src/components/ui/primitives/switch.tsx
  • apps/web/src/components/ui/primitives/textarea.tsx
  • apps/web/src/emails/ContactFormEmail.tsx
  • apps/web/src/emails/OrderConfirmation.tsx
  • apps/web/src/emails/OrderStatusUpdate.tsx
  • apps/web/src/lib/ui/toast.tsx
  • apps/web/src/locales/en.json
  • apps/web/src/locales/ko.json
  • apps/web/src/locales/uz.json
  • apps/web/src/styles/admin.css
  • apps/web/src/styles/components.css
  • apps/web/src/styles/glass.css
  • architecture.md

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • ✅ Review completed - (🔄 Check again to review again)
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch redesign-WIP

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@gemini-code-assist
Copy link
Copy Markdown

Summary of Changes

Hello, I'm Gemini Code Assist1! I'm currently reviewing this pull request and will post my feedback shortly. In the meantime, here's a summary to help you and other reviewers quickly get up to speed!

This pull request significantly modernizes the apps/web application's user interface by introducing a robust, token-based design system. It focuses on creating a more cohesive and dynamic visual experience through glass-morphism, interactive motion elements, and consistent overlay behaviors. The changes aim to improve both the aesthetic appeal and the functional fluidity of the application across various user flows, from general browsing to administrative tasks.

Highlights

  • Design System Overhaul: Implemented a comprehensive token-based design system across the apps/web application, utilizing CSS variables for consistent styling of surfaces, borders, text, and accent colors, with full light/dark theme support. This includes new semantic UI tokens for backgrounds, borders, and text colors, replacing many hardcoded Tailwind classes.
  • Motion Layer Integration: Introduced a new motion layer with Framer Motion-driven interactive backgrounds featuring a cursor-following blob, scroll-reveal animations for main sections, and kinetic headings that subtly shift with scroll position. Reduced-motion preferences are respected for accessibility.
  • UI Refinements & UX Fixes: Enhanced user experience through portal-based overlays for dialogs, forms, and modals to improve stacking and clipping. Implemented a swipe-to-dismiss bottom sheet for mobile, added review delete confirmation and an undo flow, improved account session synchronization after profile updates, and integrated SmartImage for cart thumbnails.
  • New UI Components & Layouts: Introduced new UI components such as HeroBento and MetricCard, along with dedicated stylesheets for glass-morphism effects (glass.css), shared components (components.css), and admin-specific styles (admin.css). The homepage hero section was refactored to a bento-style layout.
  • Repository Configuration & Documentation Updates: Updated .eslintrc.json for root and Next.js rootDir alignment, adjusted GitHub issue templates, and removed obsolete design-token helper scripts. Documentation (architecture.md, README.md, CONTRIBUTING.md) was updated to reflect the new UI architecture and file organization.
Using Gemini Code Assist

The full guide for Gemini Code Assist can be found on our documentation page, here are some quick tips.

Invoking Gemini

You can request assistance from Gemini at any point by creating a comment using either /gemini <command> or @gemini-code-assist <command>. Below is a summary of the supported commands on the current page.

Feature Command Description
Code Review /gemini review Performs a code review for the current pull request in its current state.
Pull Request Summary /gemini summary Provides a summary of the current pull request in its current state.
Comment @gemini-code-assist Responds in comments when explicitly tagged, both in pull request comments and review comments.
Help /gemini help Displays a list of available commands.

Customization

To customize Gemini Code Assist for GitHub experience, repository maintainers can create a configuration file and/or provide a custom code review style guide (such as PEP-8 for Python) by creating and adding files to a .gemini/ folder in the base of the repository. Detailed instructions can be found here.

Limitations & Feedback

Gemini Code Assist may make mistakes. Please leave feedback on any instances where its feedback is incorrect or counter productive. You can react with 👍 and 👎 on @gemini-code-assist comments. If you're interested in giving your feedback about your experience with Gemini Code Assist for GitHub and other Google products, sign up here.

Footnotes

  1. Review the Privacy Notices, Generative AI Prohibited Use Policy, Terms of Service, and learn how to configure Gemini Code Assist in GitHub here. Gemini can make mistakes, so double check it and use code with caution.

Copy link
Copy Markdown

@gemini-code-assist gemini-code-assist bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review

This pull request introduces a comprehensive UI design system overhaul, migrating many hardcoded Tailwind CSS classes to a new token-based system for improved theming and maintainability. This includes refactoring global CSS, updating numerous components to use new semantic tokens for colors, backgrounds, and borders, and integrating new motion effects like scroll reveals and kinetic headings. The globals.css file contains duplicated CSS rules and variable definitions that should be addressed for better maintainability. Additionally, the any type is used in some map functions, which could be improved for type safety.

Comment on lines +247 to 294
:root {
color-scheme: light;
}

@media (prefers-color-scheme: dark) {
html:not(.dark) { color-scheme: light !important; }
html:not(.dark) {
color-scheme: light !important;
}
}

/* Dark theme tokens */
.dark {
--color-bg: 2 6 23; /* slate-950 */
--color-fg: 241 245 249; /* slate-100 */
--color-card: 15 23 42; /* slate-900 */
--color-muted: 3 7 18;
--color-border: 30 41 59; /* slate-700 */

--color-primary: 34 211 238; /* cyan-400 */
--color-primary-ink: 6 182 212; /* cyan-500 */
--color-glow: 14 165 233; /* cyan-500 */

/* Dark semantic soft surfaces:
These replace all your "bg-*-50 in dark mode becomes random slate".
Use them to keep status pills readable and still distinct. */
--surface-info-soft: 30 41 59; /* slate-700-ish w/ cyan hint */
--surface-success-soft: 22 27 34; /* near-slate w/ green hint */
--surface-warn-soft: 41 37 16; /* warm deep amber/olive */
--surface-danger-soft: 45 13 13; /* deep red */
--surface-neutral-soft: 30 41 59; /* generic pill */
@theme {
--font-sans: var(--font-dm-sans), system-ui, sans-serif;
--font-display: var(--font-sora), system-ui, sans-serif;
--font-mono: var(--font-dm-mono), monospace;

--color-bg: 240 244 248;
--color-fg: 12 18 32;
--color-card: 255 255 255;
--color-muted: 241 245 249;
--color-border: 226 232 240;
--color-primary: 14 165 233;
--color-primary-ink: 8 145 178;
--color-glow: 34 211 238;

color-scheme: dark;
--radius-lg: 1.25rem;

--surface-info-soft: 240 249 255;
--surface-success-soft: 240 253 244;
--surface-warn-soft: 254 252 232;
--surface-danger-soft: 254 242 242;

/* shadcn / Radix semantic aliases → design tokens (theme-aware via :root / .dark vars) */
--color-background: var(--bg-base);
--color-foreground: var(--text-primary);
--color-card-foreground: var(--text-primary);
--color-popover: var(--bg-elevated);
--color-popover-foreground: var(--text-primary);
--color-primary-foreground: #020c16;
--color-secondary: var(--bg-inset);
--color-secondary-foreground: var(--text-primary);
--color-muted-foreground: var(--text-muted);
--color-accent: var(--accent-glow);
--color-accent-foreground: var(--text-primary);
--color-destructive: #ef4444;
--color-destructive-foreground: #fafafa;
--color-input: var(--border-default);
--color-ring: var(--accent);
}
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

This section contains duplicated CSS rules and variable definitions, which can lead to maintenance issues and confusion.

Specifically:

  • The :root { color-scheme: light; } and the @media (prefers-color-scheme: dark) block (lines 247-255) are duplicates of rules that already exist in the file.
  • The design tokens defined in the @theme block (lines 262-276) are also duplicates of the same variables defined in the :root block (lines 126-133).

To keep the stylesheet clean and maintainable, please remove these redundant blocks.


{/* Mission */}
<section className="grid md:grid-cols-3 gap-4">
{dict.pages.about.mission.map((c: any) => (
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

Using any for the type of c in the map function is not type-safe and goes against TypeScript best practices. It's better to define a specific type for the objects in the mission array to improve code clarity and maintainability.

Suggested change
{dict.pages.about.mission.map((c: any) => (
{dict.pages.about.mission.map((c: { title: string; desc: string }) => (

@azizbekdevuz azizbekdevuz self-assigned this Mar 25, 2026
@azizbekdevuz azizbekdevuz added bug Something isn't working documentation Improvements or additions to documentation enhancement New feature or request labels Mar 25, 2026
@azizbekdevuz azizbekdevuz merged commit c128ab3 into main Mar 25, 2026
2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

bug Something isn't working documentation Improvements or additions to documentation enhancement New feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant