Successfully completing an exercise will greatly increase your chances of landing a position with us.

To-Do List App

Objective: Build a full-stack To-Do List application with both frontend and backend components. The app should allow users to add, view, update, and delete tasks, with the data being stored persistently in a database. The app should also include a frontend interface that communicates with the backend API.

Requirements:

  • Frontend:
    • Build a simple user interface that allows users to add, view, and delete tasks.
    • Each task should have a title and a timestamp when it was added.
    • Display a list of tasks with options to mark tasks as completed or delete them.
    • Use modern frontend technologies (e.g., React, Vue, or Angular) to build the user interface.
    • The frontend should make API requests to the backend to perform CRUD operations.
  • Backend:
    • Build a RESTful API to handle CRUD operations for tasks.
    • Create endpoints to add, fetch, update, and delete tasks from the database.
    • Use a backend framework (e.g., Node.js with Express, Django, Flask) to implement the API.
    • Use a database (e.g., MySQL, PostgreSQL, or MongoDB) to persist task data.
    • Ensure proper validation for incoming data and return appropriate error messages for invalid input.
  • Data Model:
    • Each task should have a unique ID, title, timestamp, and a status field (e.g., "Pending" or "Completed").
  • Authentication (Optional):
    • Implement user authentication (e.g., JWT or session-based authentication) to allow users to manage their own tasks.
  • Frontend and Backend Integration:
    • Ensure that the frontend and backend communicate correctly via API calls (e.g., using fetch or Axios).
    • The frontend should update the UI dynamically based on the task data retrieved from the backend.
  • Responsive Design:
    • The frontend should be fully responsive and work well on both desktop and mobile devices.
  • Security:
    • Implement basic security practices (e.g., input validation and sanitization) to prevent attacks like SQL injection or XSS.

Stretch Goals (Optional):

  • Implement pagination for viewing tasks if there are too many tasks to display at once.
  • Allow users to filter tasks (e.g., by status, date, or title).
  • Use a modern JavaScript framework or library for frontend development (e.g., React, Vue.js, or Angular).
  • Write unit and integration tests for both the frontend and backend components.
  • Deploy the app to a cloud service like Heroku, AWS, or DigitalOcean.

Once you've completed the exercise, please fill out the form below.

Create a Public Github Repository and upload your solution there.

Please add a README file to your repository with instructions and requirements to run your exercise.

Also, add a detailed explanation of your solution in your README file.