Skip to content
  • Unlock Pro
  • Log in with GitHub
Solution
Submitted about 1 month ago

A Single Product Page | Next.JS Typscript and Shadcn and Framer-motion

framer-motion, next, shadcn, redux
Abdalla emad•140
@abdallemad
A solution to the E-commerce product page challenge
View live sitePreview (opens in new tab)View codeCode (opens in new tab)

Solution retrospective


What are you most proud of, and what would you do differently next time?

I'm really proud of how I combined Next.js App Router, ShadCN UI, Redux Toolkit, and Framer Motion to build a smooth, clean, and interactive single product page. I managed to keep the UI consistent, accessible, and responsive while also adding subtle animations that improved the user experience without overwhelming it.

One thing I would do differently next time is to invest more time in optimizing performance and accessibility. Although the page works well, I believe I can improve Core Web Vitals and semantic HTML structure to make it even more robust. I’d also consider implementing better image optimization and experimenting with server-side state handling using tools like server actions in Next.js (or using Zustand instead of Redux for simpler state needs).

What challenges did you encounter, and how did you overcome them?

One of the main challenges I faced was managing global state efficiently, especially when dealing with UI interactions like quantity updates and adding items to the cart. I initially tried using React Context, but it became messy as the app grew. Switching to Redux Toolkit made state management much more predictable and scalable.

Another challenge was styling and maintaining design consistency using ShadCN UI. Since ShadCN is built on top of Tailwind and Radix UI, I had to carefully customize components without breaking accessibility or responsiveness. I used @/components/ui overrides and followed utility-first practices to keep everything modular and clean.

Finally, integrating Framer Motion for smooth animations was a bit tricky when combined with dynamic routing in Next.js App Router. I solved this by using AnimatePresence and key-based animation triggers to control transitions between different states reliably.

What specific areas of your project would you like help with? 🔵 What specific areas of your project would you like help with?

I'd appreciate feedback on the following areas:

  • Performance Optimization: I’d love tips on improving performance, especially around lazy loading images, minimizing bundle size, and optimizing Redux usage for a small-scale project like this.
  • Accessibility: I tried to keep the UI accessible, but I’m not 100% confident. Any feedback on improving semantic HTML and keyboard navigation would be super helpful.
  • Animations: While I used Framer Motion for transitions and micro-interactions, I'm open to feedback on making the animations feel more natural or improving performance around them.
  • UI/UX Design: I'm using ShadCN UI and customized components with Tailwind CSS. I'd like feedback on spacing, hierarchy, and how to enhance the visual design without overcomplicating the layout.
Code
Loading...

Please log in to post a comment

Log in with GitHub

Community feedback

No feedback yet. Be the first to give feedback on Abdalla emad's solution.

Join our Discord community

Join thousands of Frontend Mentor community members taking the challenges, sharing resources, helping each other, and chatting about all things front-end!

Join our Discord
Frontend Mentor logo

Stay up to datewith new challenges, featured solutions, selected articles, and our latest news

Frontend Mentor

  • Unlock Pro
  • Contact us
  • FAQs
  • Become a partner

Explore

  • Learning paths
  • Challenges
  • Solutions
  • Articles

Community

  • Discord
  • Guidelines

For companies

  • Hire developers
  • Train developers
© Frontend Mentor 2019 - 2025
  • Terms
  • Cookie Policy
  • Privacy Policy
  • License

Oops! 😬

You need to be logged in before you can do that.

Log in with GitHub

Oops! 😬

You need to be logged in before you can do that.

Log in with GitHub

How does the accessibility report work?

When a solution is submitted, we use axe-core to run an automated audit of your code.

This picks out common accessibility issues like not using semantic HTML and not having proper heading hierarchies, among others.

This automated audit is fairly surface level, so we encourage to you review the project and code in more detail with accessibility best practices in mind.

How does the CSS report work?

When a solution is submitted, we use stylelint to run an automated check on the CSS code.

We've added some of our own linting rules based on recommended best practices. These rules are prefixed with frontend-mentor/ which you'll see at the top of each issue in the report.

The report will audit 1st-party linked stylesheets, and styles within <style> tags.

How does the HTML validation report work?

When a solution is submitted, we use html-validate to run an automated check on the HTML code.

The report picks out common HTML issues such as not using headings within section elements and incorrect nesting of elements, among others.

Note that the report can pick up “invalid” attributes, which some frameworks automatically add to the HTML. These attributes are crucial for how the frameworks function, although they’re technically not valid HTML. As such, some projects can show up with many HTML validation errors, which are benign and are a necessary part of the framework.