📌 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.