πŸ“ˆ Full Stack Challenge

Task Management System Challenge

Context and Motivation

Welcome to the SelectCode Task Management System Challenge! This challenge is designed to simulate the development tasks you might encounter while working on meinGPT (opens in a new tab), our AI platform. By participating, you'll not only showcase your engineering skills but also demonstrate how you approach and solve complex problems. This challenge helps us understand your thought process and determine how well you'd fit into our team and our way of working.

Challenge Description

Your task is to design and implement a task management system similar to Trello. This system should allow users to create projects, add tasks to those projects, assign tasks to users, and monitor task progress.

Technical Requirements

Backend

  • Language: TypeScript
  • Framework: Node.js-based framework of your choice (e.g., Express, Nest.js, ...) with technology of your choice (e.g. tRPC, GraphQL, REST, ...)
    • We use tRPC in meinGPT - so it is also a good opportunity to get your first experience with that πŸ˜‰
  • Database: PostgreSQL
  • API: REST / GraphQL / tRPC (used in our project, recommended but not mandatory)

Frontend

  • Language: TypeScript
  • Framework: React.js, Next.js, Svelte, or a similar modern frontend framework

Deployment

  • The entire system (frontend, backend, and database) should be deployed using docker-compose.

Core Functionality

  1. Project Creation and Management: Users should be able to create and manage projects.
  2. Task Creation and Assignment: Users should be able to create tasks for projects, assign them to other users, and update their status.
  3. Task Overview: Implement an intuitive dashboard or board view that allows users to visualize all tasks at a glance, including their current status, assignees, and any other relevant information.

Regarding the UI/UX: Feel free to be creative! But: While a polished UI is nice, we're more interested in functionality and code quality. Focus on creating a clean, usable interface.

Optional Features

  1. User Authentication: Users should be able to register, log in, and log out of the system.
  2. User Roles and Permissions: Implement a system of user roles and permissions to control access to tasks and projects.
  3. Notification System: Users should receive notifications when a task is assigned to them or when a task's deadline is approaching.
  4. Comments and File Attachments: Let users leave comments on tasks and attach relevant files.

Implementation Guidelines

  • Focus on implementing the core functionality first before adding optional features.
  • Your code should be of production quality. Pay attention to:
    • Clean, readable, and well-structured code organization
    • Appropriate commenting and documentation
    • Implementation of tests (unit tests, integration tests)
    • Error handling and logging
  • Consider best practices for security and data privacy.
  • Keep in mind the scalability and maintainability of your code.

Evaluation Criteria

We will evaluate your work based on the following:

  • Functional quality: How well the functional requirements are fulfilled.
  • Code quality: We're looking for clean, readable, and well-structured code.
  • Test quality: We're looking for well-structured and meaningful tests - so that the relevant cases are covered.
  • Documentation quality: We're looking for a well-structured README.md file that contains all necessary information as well as well-documented code.
  • Problem solving: Remember, we're not just interested in the final product - we want to see how you got there. Commit early and often, with clear and informative commit messages.

Submission

  • Provide your code in a public GitHub / GitLab repository.
  • Include a README file that contains:
    • An overview of your application's architecture
    • Installation instructions
    • Guide on how to start the application using docker-compose
    • Explanation of important design decisions
    • List of implemented features (core and optional)
  • If you've implemented any special or unique features, please highlight them in your README.
  • Send all this information via email to Stephan ([email protected]).

Questions?

If you have any questions or need clarification, please don't hesitate to email Stephan ([email protected]). We're here to help!

Good luck with the challenge! We look forward to seeing your innovative and well-implemented solution.