Inspiration:

The inspiration for this implementation stems from a desire to create a more user-friendly and efficient to-do list application. The use of client-side routing allows for easy navigation and the ability to display different views for completed and non-completed tasks. Controlled forms and form validation using React hooks provide a better user experience when creating new to-do items. Real-time data updates using WebSockets make the application more responsive and up-to-date. Reusable components and the use of the Redux library help to keep the code organized and easy to maintain. This improves the overall performance and scalability of the application. Additionally, it is inspired also from the best practices, common patterns and industry standards for building web applications.

What it does:

The routing system is used to handle navigation and display different views for completed and non-completed tasks. This allows the user to easily switch between different views of their to-do items and see which tasks have been completed and which are still pending.

The application also utilizes controlled forms for creating new to-do items. Controlled forms allow for better control over the form's behaviour and state, making it easier to handle input validation and user interactions. Additionally, React hooks were used to add form validation, ensuring that the user enters valid data when creating a new to-do item.

Real-time data updates were implemented using WebSockets, which allow for real-time communication between the client and server. This allows the application to update the user's to-do list in real time as changes are made, without the need for a page refresh.

The application was also developed using reusable components, which can be used across different parts of the application, making the code more organized and easier to maintain. Additionally, the application's state is managed using the Redux library, which makes it easier to handle and update the application's state in a consistent and predictable way.

How we built it:

Implemented client-side routing using React Router for easy navigation and displaying different views for completed and non-completed tasks.

Utilized controlled forms for creating new to-do items.

Added form validation using React hooks to ensure valid data input.

Executed real-time data updates using WebSockets.

Developed reusable components.

Managed application state using the Redux library.

Challenges we ran into:

As a developer, some potential challenges I ran into when building this implementation include:

Understanding and implementing client-side routing using React Router. This was a complex task, especially for me, as I was new to React or client-side routing.

Implementing controlled forms and form validation using React hooks. This was tricky and required a good understanding of React's state and props from my end.

Executing real-time data updates using WebSockets. This was a complex task that required a good understanding of WebSockets and their implementation in React.

Developing reusable components and making sure they are properly integrated into the application. This required a good understanding of component design and architecture.

Managing the application's state using the Redux library. This required a good understanding of the Redux architecture and its principles.

Maintaining the application and making sure it works correctly under different conditions, became difficult as the application grew and became more complex.

Accomplishments that we're proud of:

I am proud of having accomplished the following:

Successfully implementing a client-side routing system using React Router.

Utilizing controlled forms for creating new to-do items and adding form validation using React hooks. This provides a better user experience when creating new to-do items.

Executing real-time data updates using WebSockets. This makes the application more responsive and up-to-date.

Developing reusable components that can be used across different parts of the application. This helps to keep the code organized and easy to maintain.

Managing the application's state using the Redux library. This makes it easier to handle and update the application's state in a consistent and predictable way.

Building an application that is scalable, reliable and can handle a large number of requests.

Building an application that is user-friendly and easy to use.

Building an application that works well across different devices and platforms.

What we learned:

More than learning novel technologies, I learnt the following:

How to implement client-side routing using React Router and how to handle navigation and display different views for completed and non-completed tasks.

How to use controlled forms and form validation using React hooks to improve the user experience when creating new to-do items.

How to execute real-time data updates using WebSockets and how to create a real-time connection between the client and server.

The importance of developing reusable components and how it can help to keep the code organized and easy to maintain.

How to manage the application's state using the Redux library and the benefits of using this library for state management.

How to handle and debug errors and unexpected behaviour in a complex application.

How to optimize and improve the performance of the application.

How to design and implement a secure and reliable web application that can handle a large number of requests.

What's next for Client Side Routing System:

There are a number of potential next steps for the client-side routing system, depending on the requirements and goals of the project. Some possibilities include:

Enhancing the user experience by adding more features such as the ability to edit or delete to-do items, or the ability to sort or filter the list of to-do items.

Improving the scalability and performance of the application by implementing server-side rendering or optimizing the database.

Adding user authentication and authorization to the application, to allow multiple users to access and edit their own to-do lists.

Implementing more advanced real-time data updates using WebSockets, such as broadcasting updates to multiple clients at once.

Adding more security measures to the application to protect against potential vulnerabilities and attacks. Improving the mobile responsiveness of the application, so that it can be easily used on different devices and platforms.

Integrating with other services or APIs to enhance the functionality of the application.

How the project runs:

Node.js and npm (or yarn) can be installed on the computer. This can be checked by running the command node -v and npm -v (or yarn -v) in the command line.


Navigate to the root directory of the project in the command line.


If npm is used, run the command npm install to install all the necessary dependencies listed in the package.json file. If yarn is used, then run the command yarn install.


Once the dependencies are installed, run the command npm start or yarn start to start the development server.


A new browser window should automatically open, post which navigation to http://localhost:3000, can depict the application running.


If react-router-dom is used, then navigate to the specific route or link where the component that renders the todos is being rendered.


Share this project:

Updates