Back to Talent PoolTake-home exercise

Full-Stack To-Do App

Deliver a complete task-management product where a responsive interface and a persistent API work together as one coherent system.

Self-paced
No countdown timer
Public link
Repository submission
Practical
Explain your decisions
Challenge briefFull Stack Developer

Objective

Build a full-stack To-Do List application with frontend and backend components. Users should be able to add, view, update, and delete tasks, with data stored persistently in a database.

Core requirements

  • Frontend
    • Build an interface for adding, viewing, completing, and deleting tasks.
    • Show a title and creation timestamp for each task.
    • Use a modern frontend technology such as React, Vue, or Angular.
    • Perform CRUD operations through requests to the backend API.
  • Backend
    • Build a RESTful API for task CRUD operations.
    • Use a backend framework such as Express, Django, or Flask.
    • Persist data with MySQL, PostgreSQL, MongoDB, or a comparable database.
    • Validate incoming data and return useful errors for invalid input.
  • Data model
    • Each task needs a unique ID, title, timestamp, and status such as Pending or Completed.
  • Frontend and backend integration
    • Keep the interface synchronized with data returned by the API.
    • Handle loading, success, and error outcomes appropriately.
  • Responsive design
    • Support desktop and mobile layouts.
  • Security
    • Validate and sanitize input to mitigate SQL injection, XSS, and related attacks.
  • Authentication (optional)
    • Use JWT or session-based authentication so users can manage their own tasks.

Stretch goals

  • Paginate longer task collections.
  • Filter tasks by status, date, or title.
  • Write unit and integration tests for frontend and backend behavior.
  • Deploy the application to a cloud provider.
Final step

Prepare your submission

  1. Publish your solution in a public GitHub repository.
  2. Include a README with setup and run instructions.
  3. Explain your approach and the decisions you made.
  4. Check that the shared link opens without requesting access.