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

ToDo App [React - Next.js - Tailwind - TS - Sharon - Framer Motion]

framer-motion, next, react, typescript, tailwind-css
P
DeyanTopalov•430
@DeyanTopalov
A solution to the Todo app 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?

In general, I am happy how the solution turned out. May be the most challenging part was implementing the DnD to reorder without causing unexpected behaviors due to the filtering.

Built with

  • React / Next.js 14 / Typescript
  • useLocalStorage & useIsClient custom hooks
  • Dark & Light mode using next-themes, including system-preferences / manual control / localStorage
  • UI components from Shadcn
  • Reorder component from Framer motion
  • Mobile first approach
  • Tailwind CSS
  • Responsive design with Mobile & Desktop view
  • Line-clamp on the todo items with text reveal on hover
  • Vertical scroll on the todo list with snap-y behaviors for nice UX
  • Minor design changes
What challenges did you encounter, and how did you overcome them?

This definitely was an interesting challenge! As mentioned the reordering feature while having one array filtered 3 times was challenging. The reorder basically takes the original array, applies the new order for each index and then updates the array - this initially resulted in weird behaviors. For example I have Items 1 / 2 / 3 / 4 in my list. Item 2 & Item 3 are marked completed. When I go to the Completed view and reorder those two items, the array get's updated but in the process I lose item 1 & item 4. To tackle this I decided to:

  • Add additional logic to onReorder property
  • Set 3 different states for the same array
  • Use separate tabs for each filter view, instead of using the same list and just change the rendered array based on filtering
What specific areas of your project would you like help with?

Any and all feedbacks are welcome!

I would much appreciate any tips & tricks about:

  • Improving my TypeScript usage;
  • Sharing any "best-practices" that I might have not implemented;
Code
Select a file

Please log in to post a comment

Log in with GitHub

Community feedback

No feedback yet. Be the first to give feedback on DeyanTopalov'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.