Skip to content
Share
Explore

Full-Stack Developer Test Task: Issue Tracker with Time Tracking

📌 Task Overview

Create a simple Issue Tracker application that allows users to: ✅ Create new issues ✅ View a list of issues ✅ Filter issues by status (open, in progress, closed) ✅ Start and stop a time tracker when working on an issue ✅ See the total time spent on an issue
The goal is to test backend and frontend development skills, API design, and handling time-tracking logic.

🛠 Backend Requirements

The backend must be built using Node.js + TypeScript, using NestJS or Express.js. ✅ Provide a REST API or GraphQL with the following endpoints:
GET /issues → Retrieve a list of issues
POST /issues → Create a new issue
PATCH /issues/:id → Update issue status
DELETE /issues/:id → Delete an issue
POST /issues/:id/start → Start tracking time on an issue
POST /issues/:id/stop → Stop tracking time on an issue
✅ Use any relational or NoSQL database (PostgreSQL, MySQL, MongoDB, SQLite, etc.). ✅ Use any ORM or query builder (Prisma, TypeORM, Knex, Mongoose, etc.). ✅ Implement Docker Compose to run the API and database. ✅ Write at least two unit tests using Jest (e.g., testing time tracking logic).

🖥 Frontend Requirements

The frontend must be built using React + Next.js: ✅ Display a list of issues with filtering options (open, in progress, closed). ✅ Form to add new issues. ✅ Dropdown to change issue status. ✅ "Start" and "Stop" buttons to track time spent on an issue. ✅ Display the total time spent on each issue. ✅ Styling with Material UI. ✅ Use Axios for API communication.

🧠 Time Tracking Logic

Each issue should have a start time and end time. The backend should store time entries for each work session.

How it works:

When a user starts working on an issue (POST /issues/:id/start), record the start timestamp.
When the user stops (POST /issues/:id/stop), store the end timestamp and calculate the time spent.
An issue can have multiple work sessions, and the API should return the total time spent on each issue.
The GET /issues endpoint should return data like this:
[
{
"id": 1,
"title": "Fix authentication bug",
"status": "in progress",
"totalTimeSpent": "2h 45m"
},
{
"id": 2,
"title": "Implement dashboard",
"status": "open",
"totalTimeSpent": "0h 0m"
}
]

✅ What to Submit

📂 GitHub/GitLab repository with all source code. 📄 README.md with:
Setup instructions (Docker, commands).
Explanation of time tracking implementation. 🧪 At least two unit tests (e.g., verifying time tracking logic). 🎥 (Optional) Short video showcasing functionality.

🔍 Evaluation Criteria

✅ Clean and well-structured code. ✅ Effective database usage and query handling. ✅ Correct and efficient time tracking logic. ✅ Well-implemented unit tests. ✅ Modern frontend approaches using Axios.

🚀 Bonus Points (Optional, but appreciated)

🌟 Extended test coverage – The more test cases, the better! 🌟 Deployment to a cloud platform – Hosting on Amplify, Firebase, Vercel, or another service. 🌟 Extra features – Anything beyond the basic requirements, such as:
Real-time updates using WebSockets.
Authentication (JWT or OAuth).
Persistent session tracking even after page reload.
Want to print your doc?
This is not the way.
Try clicking the ··· in the right corner or using a keyboard shortcut (
CtrlP
) instead.