Selected work
Scroll — the phone followsBackend · Spring Boot · PostgreSQL · Live on AWS
OpsPulse — real-time incident command for operations teamsLive demo↗Source↗
A multi-tenant platform that catches operational incidents the moment they happen, streams them to a live dashboard, and automatically escalates the ones nobody acknowledges — the same category of tool as PagerDuty, built from scratch to learn production-grade backend engineering and deployed end to end on AWS.
- Multi-tenant by design: the tenant is read from a signed JWT on every request, never from the client, so one organisation can never touch another's data — proven by integration tests
- Real-time board over WebSockets (STOMP): new incidents and status changes push to every open window instantly, broadcast per-tenant as DTOs rather than entities
- A background scheduler auto-escalates unacknowledged incidents and fires a Slack webhook alert
- Exposes its core actions as an MCP server (four tools), so the whole system can be driven by an AI agent as well as the UI
- Dockerized with a multi-stage build and deployed on AWS — Spring Boot on EC2, PostgreSQL on RDS, every secret injected as an environment variable
- Spring Security + JWT auth on Spring Data JPA / Hibernate, built on Java 21 and Spring Boot 4
JavaSpring BootPostgreSQLWebSocketDockerAWSJWTMCP
Full stack · Node.js · PostgreSQL · Live business
A home bakery in Gujranwala needed to take orders online and deliver across the city without a developer on call. Customers order on the site, see the delivery fee before they pay and follow their order live; the kitchen phone gets an alert the moment an order lands.
- Stopped duplicate orders and price tampering — 0 duplicates across 50 simultaneous submissions — with idempotency keys and server-side pricing inside PostgreSQL transactions
- Delivery fee calculated on the server from the customer's map pin, so the total shown before payment is the total charged
- Every status change reaches the customer, kitchen and rider screens instantly: PostgreSQL LISTEN/NOTIFY feeding server-sent events
- Live rider location from a WhatsApp link, no app install — shown on the customer's page and on one kitchen map for all active riders
- Bank transfers confirmed from a kitchen web app with push alerts; JazzCash checkout built with HMAC-signed requests, verified callbacks and a reconciliation job
- 24 end-to-end tests against a real database; self-hosted on Oracle Cloud ARM with Docker Compose, automatic HTTPS and daily backups
Node.jsFastifyPostgreSQLDockerLeafletGSAPWeb Push
Full stack · React · Express · JWT
PulseCheck — API Uptime MonitoringSource↗
A monitoring service that polls your endpoints on a schedule and tells you the moment one stops responding — with the alert arriving in Slack rather than a dashboard you have to remember to check.
- Express backend that runs scheduled health checks and records uptime history per endpoint
- Real Slack webhook delivery on failure, not a simulated notification
- JWT authentication with hashed passwords; secrets kept in environment variables and out of version control
- React + Vite dashboard with Tailwind and Framer Motion
ReactViteExpressJWTTailwindSlack API
Full stack · React · Express · Anthropic API
A wizard that takes a few facts about a business and returns a full plan — nine written sections, computed financials and a PDF export. The interesting part isn't the generation, it's keeping the API key safe and the public demo free.
- Multi-step wizard collects inputs, then the Anthropic API drafts nine plan sections
- Financial projections computed from the inputs, with the whole plan exported to PDF
- Firebase Auth (email/password and Google) with plans stored per user in Firestore
- API calls run through an Express proxy — the key lives in a server environment variable and is never shipped to the browser
- Public deploy runs in demo mode on pre-generated plans, so the live site makes no API calls: nothing to leak, nothing to bill
ReactViteExpressAnthropic APIFirebaseTailwind
Mobile · React Native · Node.js · Firebase
A React Native app that reads a personality assessment and points an applicant at the department they're likely to fit. Scoring runs on a Node service, not in the client.
- Big Five framework implemented server-side to score responses
- Node.js REST API returns ranked department recommendations
- Firebase Auth and result storage per user
- Three-option answer pattern to keep the assessment fast on mobile
React NativeNode.jsRESTFirebase
Machine learning · Python · NumPy from scratch
Heart disease classification benchmarkSource↗
Three classifiers built from their mathematics rather than imported, then run against the same UCI Cleveland heart disease split to see which one earned the recommendation.
- KNN, Logistic Regression and Gaussian Naive Bayes implemented from scratch in NumPy
- 303 patient records, 13 clinical features, Min-Max scaling fitted on the training set only so nothing leaks
- Hyperparameters tuned with 5-fold stratified cross-validation; the test set was touched once
- Naive Bayes won on accuracy (81.97%), precision (0.867) and F1 (0.825)
- All three tied on recall — the accuracy gap came entirely from false positives
PythonNumPyPandasCross-validation
Machine learning · Security · XGBoost
Android malware traffic classifierSource↗
A four-class model that reads network flow statistics off an Android device and separates benign traffic from adware, scareware and SMS malware. I took over a notebook whose headline model was a deep network, and replaced it with something better suited to the data.
- CICAndMal2017 flow data — around 80 numeric features per traffic flow
- Four classes: benign, adware, scareware and SMS malware
- Swapped the notebook's Keras network (256→128→64, 100 epochs) for XGBoost, which suits tabular data and trains on CPU in a fraction of the time
- Rebalanced the classes so the reported accuracy reflects real performance rather than majority-class bias
- Gradient-boosted trees also expose feature importances, so a detection can be explained by which traffic features drove it
PythonXGBoostScikit-learnCICAndMal2017