todoos

A cute and simple to-do list web app developed in JavaScript, HTML, and CSS

With the goal of improving my front-end development skills, I took on a small project to create a to-do list web app. Its features include: adding tasks, filtering them by status, editing them, and deleting them. I aimed to differentiate todoos from other similar projects by expressing character through the UI. It's a cute and colourful app, so that checking off those tasks feels a bit more fun.

tl;dr

Summary

Design and development of a to-do list web app

Skills

UX and UI, design systems, front-end development

Software & Tools

Figma, CSS, HTML, JavaScript, WCAG

The design process

Discovery and research

I kicked off my project by defining its core features. As part of this first step, I looked at a variety of existing apps and took note of repeating UX patterns.

todoos - Inspiration gathering

In its most basic form, my app needed a way to input tasks and a way to mark them as completed. However, I quickly noticed several features that seemed to be present in many of the projects I explored.

  • Edit and remove tasks
  • Filter tasks by status
  • Remove all completed tasks at once
  • Track overall completion

I wanted to keep my app straightforward, so I only implemented the first three in this list. Tracking overall completion loses meaning when users are able to add and remove tasks as they wish, so I did not consider it to be essential.

Many of the projects I explored used a menu to hide task actions. I felt that it added unnecessary friction, so I went for always-visible buttons instead. Of course, if my app were to include more features, the menu pattern might be necessary.

todoos - Action menus in other projects

Layout

I translated these features into simple digital wireframes and created an interactive prototype with Figma. While I opted for a mobile-first approach, I wanted to get a sense of the layout and how it would adapt to larger sizes.

Design system and styles

Once I was happy with the layout, I created a simple design system in Figma. Although basic, it helped refresh my understanding of tokens and components. During this process, I followed the WCAG 2 for colour contrast and target size. You can see a sneak peek below.

todoos - Design system

I then used these components and styles to put together my final design, which you can try for yourself here.

The development process

I was already familiar with plain HTML and CSS, so they were the obvious choice. I also used JavaScript for more complex areas such as handling the display of tasks, filtering, and so on. The main challenge here was learning JavaScript as I went, and there was definitely a lot of trial and error involved!

During the development process, I repeatedly tested the layout in the most common desktop and mobile screen sizes, as reported by Statcounter. I also made sure that all elements were keyboard focusable for increased accessibility.

You can play around with the final version here or take a look at the source code here.

Limitations

While working on todoos, I decided to give myself a time limit. I had not used JavaScript extensively before, which meant I would have to learn many new concepts as I went, and I did not want that learning to be hindered by a lack of focus.

That said, there is always room for improvement. If time allows, I would like to tackle the following issues that arose during a moderated user testing session with a few friends.

  • Improve accessibility by increasing the contrast of the caret, making hover and focus states more obvious, and allowing users to mark tasks as completed via keyboard.
  • Retain the active style of the filter buttons to always indicate what filter is active.
  • Do not allow users to add empty tasks by disabling the ‘Add task’ button and ‘Enter’ key until there is a string of text present.
  • Instantly remove tasks from filtered views if a change occurs to their status.

Takeaways

The main goal of this project was to test and improve the front-end development skills that I had abandoned some years before, and I was pleasantly surprised with how much my brain was able to recall. I also find that I learn more efficiently with practice, so it was a great way to ease myself into becoming more comfortable with JavaScript.

That said, I would like to improve the accessibility of the app in the future as I believe this to be a non-negotiable aspect of user-centred design.