Collaborative Task Manager: Full-Stack
Engineering Assessment
🎯 Objective
Design and build a complete, production-ready, full-stack Task Management application. This
assessment evaluates your ability to implement core application logic, ensure data integrity, and
handle real-time communication using modern JavaScript/TypeScript best practices across the
frontend and backend.
⚙️Technical Specifications (The Stack)
To ensure a consistent and modern development environment, please adhere to the following
technologies:
Layer Technology Requirement
Frontend React (via Vite ) Must use TypeScript and
Tailwind CSS.
Data Fetching React Query Mandatory for managing
server state and caching.
Backend [Link] + Express (with Must implement a clear
TypeScript) service/repository pattern.
Database MongoDB Choose one and justify the
selection in your README.
ORM/ODM Mongoose Use an industry-standard
library for database
interaction.
Real-Time [Link] Mandatory for
collaboration features.
Deployment Vercel/Netlify (FE) + Mandatory live
Render/Railway (BE/DB) deployment.
🧹 Core Requirements (Must Haves)
1. User Authentication & Authorization
● Secure Auth: Implement user registration and login. Passwords must be hashed (e.g., using
bcrypt).
● Session Management: Implement session handling, preferably using JWT (JSON Web Tokens)
stored securely (e.g., HttpOnly cookies).
● User Profiles: Allow users to view and update their name/profile information.
2. Task Management (CRUD)
Implement full CRUD operations for tasks. A task must include the following attributes:
● title (string, max 100 chars)
● description (string, multi-line)
● dueDate (date/time)
● priority (Enum: Low, Medium, High, Urgent)
● status (Enum: To Do, In Progress, Review, Completed)
● creatorId (The ID of the user who created the task)
● assignedToId (The ID of the registered user currently responsible for the task)
3. Real-Time Collaboration (Mandatory)
Implement real-time updates using [Link]:
● Live Updates: When a task's status, priority, or assignee is updated by any user, all other users
currently viewing the task list or dashboard must see the change instantly.
● Assignment Notification: Send an instant, persistent in-app notification to a user when a task is
assigned to them.
4. User Dashboard & Data Exploration
● Personal Views: A dedicated dashboard page showing:
○ Tasks assigned to the current user.
○ Tasks created by the current user.
○ Tasks that are Overdue (based on the dueDate).
● Filtering & Sorting: Implement filtering on the task list based on Status and Priority. Implement
sorting by Due Date.
Engineering & Architecture Quality
The evaluation will heavily weigh how you approach the engineering challenge:
1. Backend Reliability
● Clear Architecture: Use a proper architecture (e.g., MVC-like separation, with dedicated
Controllers, Services, and Repositories/Data Access Layers).
● Data Transfer Objects (DTOs): Implement DTOs (using Zod or Class Validator) for input
validation on all API endpoints (e.g., CreateTaskDto, UpdateTaskDto).
● Error Handling: Implement consistent and meaningful HTTP status codes and error responses
for failed requests (e.g., 401 for unauthorized, 404 for not found, 400 for validation errors).
2. Frontend UX & Data Management
● Responsive UI: The application must be fully responsive and optimized for both desktop and
mobile views (using Tailwind CSS).
● Loading States: Implement visible Skeleton Loading States (or similar smooth transitions)
when fetching data using SWR/React Query.
● Form Management: Use a dedicated library (e.g., React Hook Form, Formik) with validation (e.g.,
Zod, Yup) for task creation/editing forms.
3. Code Quality & Testing
● TypeScript Usage: Utilize strong typing throughout the application (both FE and BE) to enforce
type safety.
● Documentation: Add JSDoc/TSDoc comments for complex functions, data models, and API
endpoints.
● Mandatory Testing: Implement at least 3 unit tests for a critical piece of backend business
logic (e.g., the service function that handles task creation validation, or the WebSocket logic for
assignment). Use Jest or Mocha.
✨ Bonus Challenges (Optional, Highly Valued)
If you have time and want to showcase advanced skills:
1. Optimistic UI: Implement optimistic updates for task status changes using SWR/React Query
features.
2. Audit Logging: Implement a simple logging mechanism (on the backend) to record who updated
a task's status and when.
Important :
● The process of evaluation of assignment can take 4-8 weeks.
● Without a live deployment link the assignment would be rejected.