A collaborative backend API for software teams to report bugs, suggest features, and manage issue workflows efficiently.
๐ https://devsync-lemon.vercel.app/
๐ https://drive.google.com/file/d/1j7YgWMmDruq_LZZOPlndJjD-jnc0CUHA/view?usp=sharing
- Node.js
- TypeScript
- Express.js
- PostgreSQL (NeonDB)
- Raw SQL (
pool.query) - JWT Authentication
- bcryptjs
- Vercel Deployment
- User Registration
- User Login
- JWT Authentication
- Protected Routes
- Role-Based Authorization
- Create Issue
- Get All Issues
- Get Single Issue
- Update Issue
- Delete Issue
- Filtering
- Sorting
- Password Hashing with bcrypt
- JWT Token Verification
- Protected Endpoints
- Role Validation Middleware
- Global Error Handler
- 404 Route Handler
- Consistent Error Response Structure
- Register & Login
- Create Issues
- View Issues
- Update Own Open Issues
- All Contributor Permissions
- Update Any Issue
- Delete Any Issue
- Change Issue Status
src/
โโโ app.ts
โโโ server.ts
โ
โโโ config/
โ
โโโ db/
โ
โโโ middleware/
โ
โโโ modules/
โ โโโ auth/
โ โโโ issues/
โ
โโโ types/
โ
โโโ utils/
git clone YOUR_GITHUB_REPOSITORY_LINKcd devpulsenpm installCreate a .env file:
CONNECTION_STRING=your_postgresql_connection_string
PORT=3000
SECRET_KEY=your_secret_key
REFRESH_SECRET_KEY=your_refresh_secretnpm run devnpm run buildnpm start| Method | Endpoint | Access |
|---|---|---|
| POST | /api/auth/signup |
Public |
| POST | /api/auth/login |
Public |
| Method | Endpoint | Access |
|---|---|---|
| POST | /api/issues |
Authenticated |
| GET | /api/issues |
Public |
| GET | /api/issues/:id |
Public |
| PATCH | /api/issues/:id |
Contributor / Maintainer |
| DELETE | /api/issues/:id |
Maintainer |
GET /api/issues?type=bugGET /api/issues?status=openGET /api/issues?sort=newestGET /api/issues?sort=oldest| Field | Type |
|---|---|
| id | SERIAL |
| name | VARCHAR |
| VARCHAR | |
| password | TEXT |
| role | VARCHAR |
| created_at | TIMESTAMP |
| updated_at | TIMESTAMP |
| Field | Type |
|---|---|
| id | SERIAL |
| title | VARCHAR |
| description | TEXT |
| type | VARCHAR |
| status | VARCHAR |
| reporter_id | INTEGER |
| created_at | TIMESTAMP |
| updated_at | TIMESTAMP |
- User logs in
- Server validates credentials
- JWT token generated
- Client sends token in Authorization header
- Protected routes verify token
Authorization: YOUR_JWT_TOKEN- Vercel
- Neon PostgreSQL
- Used Raw SQL only (
pool.query) - No ORM used
- No SQL JOIN used
- Reporter data fetched manually from users table
- Modular architecture followed
- Role-based middleware implemented
Computer Science Graduate & MERN Stack Developer