# Assignment: Create a note-taking application ##### Duration: 2 weeks ### Requirements: - Notes - Create notes - Edit notes - Delete notes - View list of notes - View a single note - Categories - Add multiple categories to a note. - Filter notes based on category. - Authentication/Authorization - Signup - Login ### Tech stack needed: - FE: React - BE: Node - Database: MySQL (Or any relational database) > NOTE: > You may use any frameworks or libraries to help your work, but using 3rd party apps should be avoided. The assignee is expected to understand and justify the engineering decisions taken. ## Expectations ##### Core expectations The final product should be usable, with a functional implementation of the following features: - Feature implementation - CRUD operation for notes - Authentication system with login and signup - On the engineering side of things: - The UI should be clean and responsive - The validations should be implemented to ensure data integrity both in FE and BE - Users should be able to view proper errors. This includes any validation errors or any errors received from the backend. - The application should be able to gracefully handle any errors. - A secure authentication mechanism should be implemented. - The authorization should be able to protect/restrict pages and APIs. - The protected pages/API should be secure. - The APIs should follow RESTful conventions - The pagination and filters used should be done on the server side. - Database design should be kept in mind including normalization, but documentation is optional. ##### Preferred expectations These are the nice to have in the application: - FE components created are reusable (eg: buttons, tables, navbars, dialogs,...) - Include unit tests, but any other tests are also preferred. - Implementation of logging in the BE - Implementation of API documentation with tools like Swagger. - Utilize tools to keep track of changes in the database, such as migrations scripts. - Additional features in authentication are preferred but not limited to 2FA, account verification(via email/phone), etc. ### Additional Features to Consider: - Search Functionality: - Allow users to search notes by title or content. - Sorting Options: - Enable sorting of notes (e.g., by creation date, last modified date, or alphabetical order). ### Documentation: Include a README file summarizing: - Engineering decisions. - Setup instructions. - Any assumptions made during the project. ## Final Thoughts: This assignment is designed to expose you to real-world engineering challenges while focusing on best practices and scalable design. Prioritize core expectations, and if time permits, explore the preferred and additional features to make your implementation stand out.