A production-ready backend system inspired by Jira, built to demonstrate real-world backend engineering concepts such as authentication, authorization, pagination, validation, and soft deletion.
- JWT-based user authentication (Register / Login)
- Role-based and resource-based authorization
- Secure password hashing using bcrypt
- Create, view, and delete projects
- Project ownership & member access control
- Soft delete for safe project removal
- Create tasks within projects
- Assign tasks to users
- Update task status (
todo → in-progress → done) - Delete tasks using soft delete
- Filter tasks by status & priority
- RESTful API design
- Pagination & filtering
- Input validation (express-validator)
- Centralized error handling
- Clean, modular ES-module architecture
- Backend: Node.js, Express.js (ES Modules)
- Database: MongoDB (Mongoose)
- Authentication: JWT, bcrypt
- Validation: express-validator
- Tools: Postman, Nodemon
- Architecture: MVC-style modular structure
Client (Postman / Frontend)
|
v
Express API (Auth, Projects, Tasks)
|
v
MongoDB
- Stateless backend using JWT
- Authorization handled via middleware
- Soft deletes to prevent accidental data loss
src/
├── controllers/
├── models/
├── routes/
├── middleware/
├── validators/
├── config/
└── app.js
POST /api/auth/register
POST /api/auth/login
POST /api/projects
GET /api/projects?page=1&limit=5
DELETE /api/projects/:projectId (soft delete)
POST /api/projects/:projectId/tasks
GET /api/projects/:projectId/tasks?page=1&limit=5
PATCH /api/tasks/:taskId/status
DELETE /api/tasks/:taskId (soft delete)
- All APIs tested end-to-end using Postman
- Verified authentication, authorization, pagination, filters, and soft delete behavior
Instead of permanently deleting records:
isDeleted: trueflag is used- Deleted records are excluded from queries
- Prevents accidental data loss
- Supports recovery and auditing
Why soft delete?
To preserve data integrity and meet real-world business requirements.
-
Centralized logging
-
Rate limiting on authentication endpoints
-
Admin-level access control
-
Unit and integration tests
-
Designing secure and scalable REST APIs
-
Implementing authorization beyond basic authentication
-
Handling real-world backend concerns like pagination and soft delete
-
Structuring a maintainable backend codebase