Deadline: Sunday, Feb 23th 11:59 pm PST
Create a “Task Management” application with React + TypeScript (frontend), Node.js (or Nest.js) (backend), and PostgreSQL (database). The application should:
- Register (sign up) and Log in (sign in) users.
- After logging in, allow users to:
- View a list of tasks.
- Create a new task.
- Update an existing task (e.g., mark complete, edit).
- Delete a task.
Focus on correctness, functionality, and code clarity rather than visual design.
This challenge is intended to be completed within ~3 hours, so keep solutions minimal yet functional.
- User Model:
id
: Primary keyusername
: Unique stringpassword
: Hashed string
- Endpoints:
POST /auth/register
– Create a new userPOST /auth/login
– Login user, return a token (e.g., JWT)
- Secure the Tasks Routes: Only authenticated users can perform task operations.
- Password Hashing: Use
bcrypt
or another hashing library to store passwords securely. - Token Verification: Verify the token (JWT) on each request to protected routes.
- Password Hashing: Use
- Tasks CRUD:
GET /tasks
– Retrieve a list of tasks (optionally filtered by user).POST /tasks
– Create a new task.PUT /tasks/:id
– Update a task (e.g., mark as complete, edit text).DELETE /tasks/:id
– Delete a task.
- Task Model:
id
: Primary keytitle
: stringdescription
: string (optional)isComplete
: boolean (defaultfalse
)- (Optional)
userId
to link tasks to the user who created them
- Database: PostgreSQL
- Provide instructions/migrations to set up:
users
table (with hashed passwords)tasks
table
- Provide instructions/migrations to set up:
- Setup:
npm install
to install dependenciesnpm run start
(ornpm run dev
) to run the server- Document any environment variables (e.g., database connection string, JWT secret)
- Login / Register:
- Simple forms for Register and Login.
- Store JWT (e.g., in
localStorage
) upon successful login. - If not authenticated, the user should not see the tasks page.
- Tasks Page:
- Fetch tasks from
GET /tasks
(including auth token in headers). - Display the list of tasks.
- Form to create a new task (
POST /tasks
). - Buttons/fields to update a task (
PUT /tasks/:id
). - Button to delete a task (
DELETE /tasks/:id
).
- Fetch tasks from
- Navigation:
- Show
Login
/Register
if not authenticated. - Show
Logout
if authenticated.
- Show
- Setup:
npm install
thennpm start
(ornpm run dev
) to run.- Document how to point the frontend at the backend (e.g.,
.env
file, base URL).
- Fork the Public Repository: Fork this repo into your own GitHub account.
- Implement Your Solution in the forked repository. Make sure you're README file has:
- Steps to set up the database (migrations, environment variables).
- How to run the backend.
- How to run the frontend.
- Any relevant notes on testing.
- Salary Expectations per month (Mandatory)
- Short Video Demo: Provide a link (in a
.md
file in your forked repo) to a brief screen recording showing:- Registering a user
- Logging in
- Creating, updating, and deleting tasks
- Deadline: Submissions are due Sunday, Feb 23th 11:59 pm PST.
Note: Please keep your solution minimal. The entire project is intended to be completed in around 3 hours. Focus on core features (registration, login, tasks CRUD) rather than polished UI or extra features.
-
Functionality
- Does registration and login work correctly (with password hashing)?
- Are tasks protected by authentication?
- Does the tasks CRUD flow work end-to-end?
-
Code Quality
- Is the code structured logically and typed in TypeScript?
- Are variable/function names descriptive?
-
Clarity
- Is the
README.md
(in your fork) clear and detailed about setup steps? - Easy to run and test?
- Is the
-
Maintainability
- Organized logic (controllers/services, etc.)
- Minimal hard-coded values
Good luck, and we look forward to your submission!