A developer first bug ticketing and collaboration tool. Deployable anywhere via Docker with fully OpenShift-ready.
Tech Stack: OpenShift | Docker | React | Kubernetes | Nginx | GitHub | oc CLI
- Ticket management — Create, edit, delete tickets with status, priority, type
- Collaboration — Comments with code snippet support per ticket
- Filtering & Search — Filter by status, priority, type, assignee; full-text search
- Stats bar — Live overview of open / in-progress / resolved counts
- Code snippets — Attach code blocks directly to tickets and comments
- Label system — Tag tickets for easy filtering
- Dark terminal UI — Built for developer eyes
- OpenShift Deployment
- BuildConfig & ImageStreams
- Containerization with Docker
- Kubernetes Services & Routes
- Application Scaling
- Pod Monitoring
- Troubleshooting
- CI/CD Fundamentals
- Scaled deployment to 2 replica pods using
oc scale deployment bugtracker --replicas=2 - Performed rollout restarts
- Investigated pod startup issues
- Analyzed application logs using oc logs
- Verified pod health and deployment status
- Validated route accessibilit
- Node.js 18+
- npm 9+
# 1. Install dependencies
npm install --legacy-peer-deps
# 2. Start dev server (http://localhost:3000)
npm startDemo users (no password required — just click to log in):
| Name | Role | |
|---|---|---|
| Ravi More | ravi@dev.io | Senior Dev |
| Radha Thakrey | radha@dev.io | Backend Dev |
| Mahesh Gauda | mahesh@dev.io | Frontend Dev |
| Sam Patric | sam@dev.io | DevOps Engin |
# Build image
docker build -t bug-tracker-app:latest .
# Run container (port 8080)
docker run -p 8080:8080 bug-tracker-app:latest
# Visit http://localhost:8080# Production (port 8080)
docker-compose up --build
# Development with hot reload (port 3000)
docker-compose --profile dev up bug-tracker-app-devThis is the approach used for the live deployment of this project.
Step 1: Update BuildConfig
Edit openshift-buildconfig.yaml:
git:
uri: https://github.com/THENOID-404/Bug-Tracker-App.gitAlso update the image reference in openshift-deployment.yaml:
image: image-registry.openshift-image-registry.svc:5000/YOUR-PROJECT-NAME/bug-tracker-app:latestStep 2: Login to OpenShift
oc login --token=<your-token> --server=https://your-cluster.example.comStep 3: Apply all resources
oc apply -f openshift-buildconfig.yaml
oc apply -f openshift-deployment.yamlStep 4: Trigger a build
oc start-build bug-tracker-app --followStep 5: Restart deployment & verify
oc rollout restart deployment/bug-tracker-app
oc get pods
oc get routeStep 1: Build and push image to a registry
# Build
docker build -t bug-tracker-app:latest .
# Tag for your registry (Quay, Docker Hub, etc.)
docker tag bug-tracker-app:latest quay.io/YOUR_ORG/bug-tracker-app:latest
# Push
docker push quay.io/YOUR_ORG/bug-tracker-app:latestStep 2: Update the image reference
Edit openshift-deployment.yaml:
image: quay.io/YOUR_ORG/bug-tracker-app:latestStep 3: Apply manifests
oc login --token=<your-token> --server=https://your-cluster.example.com
oc project your-existing-project
oc apply -f openshift-deployment.yaml
oc get pods
oc get route# From Git repo (OpenShift auto-detects Dockerfile)
oc new-app https://github.com/THENOID-404/Bug-Tracker-App.git --name=bug-tracker-app
# Expose route
oc expose svc/bug-tracker-app --port=8080
# Get URL
oc get route bug-tracker-appoc scale deployment bug-tracker-app --replicas=2oc get pods
oc logs -f <pod-name>
oc describe pod <pod-name>oc logs <pod-name> --previousoc delete pods --field-selector=status.phase=FailedBug-Tracker-App/
├── public/
│ └── index.html # HTML entry point
├── src/
│ ├── context/
│ │ ├── AuthContext.js # User auth state
│ │ └── TicketContext.js # Ticket CRUD state
│ ├── components/
│ │ ├── Navbar.js / .css # Top navigation
│ │ ├── StatsBar.js / .css # Stats overview bar
│ │ └── TicketCard.js / .css # Ticket list item
│ ├── pages/
│ │ ├── Login.js / .css # Login screen
│ │ ├── Dashboard.js / .css # Ticket list + filters
│ │ ├── TicketDetail.js / .css # Ticket view/edit + comments
│ │ └── NewTicket.js / .css # Create ticket form
│ ├── App.js # Root + routing
│ ├── App.css # Global styles + design tokens
│ └── index.js # React entry point
├── Dockerfile # Multi-stage Docker build
├── docker-compose.yml # Local dev + prod compose
├── nginx.conf # Nginx config (SPA + port 8080)
├── openshift-deployment.yaml # Deployment + Service + Route
├── openshift-buildconfig.yaml # BuildConfig + ImageStream
├── .dockerignore
├── .gitignore
└── package.json
- Container runs on port 8080 (required — OpenShift blocks port 80)
- Nginx is configured as a non-root user (OpenShift security policy)
- The Route is configured with TLS edge termination (HTTPS)
- Resources: requests 50m CPU / 64Mi RAM, limits 200m CPU / 256Mi RAM
- Runs 2 replicas by default for high availability
This app uses in-memory state (React Context). To add persistence:
- Backend API — Add an Express/FastAPI backend, swap
TicketContext.jsfetches - Database — PostgreSQL or MongoDB for ticket storage
- Auth — Replace demo users with OAuth2 / LDAP / Keycloak
- Notifications — Add WebSocket or email alerts for ticket updates