Esetech - Coding Test

Hello there! đź‘‹

This describes a short coding test you’ll need to complete in order for us to assess your technical skills for the Full-stack Developer position at Esetech. You have been provided with the bare-bone files/folders to start with. The repo contains a nodejs/firebase installed server folder and ReactJS installed client folder. Clone this repository to start.

Project Overview:

You are to produce a React JS SPA that accurately represents the provided details below. Create a collaborative Note-Taking application. The application should allow authenticated users to create, edit, and delete their notes. Use React.js for the frontend, Node.js for the backend, and Firebase for data storage.

Task Breakdown:

Deadline:

You are required to use a maximum of 3 hours 30 minutes for the attempt/completion of this task. Any submission made after the deadline WILL NOT be considered. We have a suggested time allocation below, however, you can allot your time as you wish.

  • 15 minutes to read through these instructions and set up your project.
  • 3 hours to code the task.
  • 15 minutes to deploy code to GitHub Repo and submit the task.

Frontend (React.js):

  • Develop a responsive web application using React.js/Next.js
  • Use React for routing if necessary.
  • Apply Tailwind CSS for styling.

Backend (Node.js):

  • Set up a Node.js server to handle backend functionality.
  • Create endpoints for notes, users, and collaborative features.
  • Connect the backend to Firebase.
  • Integrate Firebase for user authentication and data storage.

Functionality:

  • Users should be able to register, log in, and log out.
  • Authenticated users can create, edit, and delete their notes.
  • Implement real-time collaboration on notes, allowing multiple users to edit the same note simultaneously.
  • Add a version history feature, allowing users to review and revert to previous versions of a note.
  • Include user permissions for sharing notes with specific users or making them public.

Styling:

  • You may use any existing styling libraries (e.g. TailwindCSS, Material UI, Ant Design, etc) OR utilize vanilla CSS. The choice is yours!
  • Responsiveness: UI elements should scale appropriately in larger viewports. However, any attempt to make the UI elements responsive in medium and smaller viewports is not a hard requirement. It should only be considered if you have extra time to work on this feature.

Submission

Upon submission of the task, you are required to do the following;

  • If you feel you don't need the full time to complete the task, please do submit it earlier. On the other hand, if you are running short of time simply submit what you have before the deadline.
  • To submit your work, kindly fill out this form and provide answers to the questions as correctly as you can. Click here to fill form

Evaluation Criteria:

  • Code structure and organization.
  • Proper use of React.js and its features.
  • Effective state management.
  • Backend API design and implementation.
  • Data storage and retrieval using Firebase.
  • Responsive and well-styled UI.
  • Error handling and validation.