HotFix is a collaborative, internal workspace application engineered for software development teams to report infrastructure bugs, log feature requests, and coordinate pipeline updates. Powered by a rigorous Role-Based Access Control (RBAC) security matrix, it streamlines tech workflow transparency across administrative lines.
🌐 Production Deployment Live Link: https://hot-fix-lovat.vercel.app/
- Strict Identity Constraints (RBAC): Middleware checks handle user access. Contributors manage their own workflow lifecycle, while Maintainers keep total global authority.
- Advanced Dynamic Multi-Query Aggregations: Evaluates query filters (
type,status) and temporal configurations (newest,oldest) without processing high-overhead multi-row JOIN statements. - Military-Grade Data Safety: Features cryptographic salt routines (between 8 and 12 rounds) using
bcryptand signed verification tokens using statelessjsonwebtokenmodels. - Fail-Safe Pipeline Catching: Employs an Express routing handler that safely intercepts both runtime synchronous exceptions and asynchronous Promise rejections under a single umbrella.
| Technology | Implementation Specification |
|---|---|
| Node.js (v24.x LTS) | Core runtime layer powering Vercel Serverless environments |
| TypeScript (Latest) | Strict static code typing and type-safe schema modeling |
| Express.js | Decoupled modular controller-service routing framework |
| PostgreSQL | High-performance relational database engine |
Node-pg Client (pg) |
Low-level pooling client executing explicit raw SQL syntax |
| jsonwebtoken (JWT) | Signed payload tokenization for stateless request authorization |
| bcrypt | Secure cryptographic key derivation for user password hashing |
The relational database layer isolates data tracking arrays into two clean structures, leaving referential integrity checking to application layer services.
CREATE TABLE IF NOT EXISTS users (
id SERIAL PRIMARY KEY,
name VARCHAR(30) NOT NULL,
email VARCHAR(35) UNIQUE NOT NULL ,
password TEXT NOT NULL,
role VARCHAR(15) DEFAULT 'contributor' CHECK (role IN ('contributor', 'maintainer')),
created_at TIMESTAMP DEFAULT NOW(),
updated_at TIMESTAMP DEFAULT NOW()
);
CREATE TABLE IF NOT EXISTS issues(
id SERIAL PRIMARY KEY,
title VARCHAR(150) NOT NULL ,
description TEXT NOT NULL CHECK (char_length(description) >= 20),
type VARCHAR(17) NOT NULL CHECK (type IN ('bug' , 'feature_request')),
status VARCHAR(15) DEFAULT 'open' CHECK (status IN ('open' , 'in_progress' , 'resolved')),
reporter_id INT NOT NULL,
created_at TIMESTAMP DEFAULT NOW(),
updated_at TIMESTAMP DEFAULT NOW()
);
- Access Context: Public Shared Entrypoint
- Payload Shape: { "name": "John Doe", "email": "john.doe@devpulse.com", "password": "securePassword123", "role": "contributor" or "maintainer" }
- Success Sequence (201 Created): Parses input, strips passwords out of active stack loops, and issues clean metadata responses.
- Access Context: Public Shared Entrypoint
- Payload Shape: { "email": "john.doe@devpulse.com", "password": "securePassword123" }
- Success Sequence (200 OK): Generates signed access context headers packed with
id,name, and operational systemrole.
- Access Context: Authenticated Operator Space (
contributor,maintainer) - Headers Required:
Authorization: <JWT_TOKEN> - Payload Shape: { "title": "Database connection timeout under load", "description": "Pool exhausts after 50+ concurrent queries, causing 500 errors", "type": "bug" }
- Access Context: Public Read Access
- Supported Query Filters:
?sort=newest|oldest&type=bug|feature_request&status=open|in_progress|resolved - Process Routine: Fetches targets dynamically, then uses an asynchronous array map query loop to attach reporter objects without building heavy relational SQL joins.
- Access Context: Public Read Access
- Return Value: Individual target issue with matching profile reporter object metadata mapped underneath.
- Access Context: Conditional Authorization Gate
- Protected Rule Matrix: Execution is granted exclusively to global
maintainerprofiles, OR local resource ownercontributoraccounts only if the issuestatusis currently marked asopen.
- Access Context: Administrative Level Gate (
maintaineronly) - Result (200 OK): Permanently removes the target issue tracking array from the workspace database pool.
Follow these manual configuration routines to deploy the service locally:
git clone (clone url)
cd hot-fix
npm install
Initialize a .env deployment profile at the project root folder layout:
PORT=5000 or 3000 or your choice
CONNECTION_STRING= your postgresql with neon connection string
JWT_SECRET=production_level_cryptographic_secret_string_key
JWT_EXPIRES_IN=1d or your choice
npm run dev
npm run build
npm start