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 ⋯ next to your doc name or using a keyboard shortcut (
CtrlP
) instead.