Full-stack engineer — I build and ship production systems, not demos.
I work across the whole stack — from RTL-first React interfaces down to queue-backed NestJS services, Postgres schemas, and the Docker/Caddy setup they run on. Most of what I build touches real money, real users, or real clinical decisions, so I care a lot about state machines, idempotency, and what happens when a third-party API times out.
Alongside that I do applied machine learning: gradient-boosted and ensemble models for screening and classification problems, with the evaluation work that makes them defensible rather than just accurate.
TravelHub (Safariyat) — Arabic-first flight booking platform, live in production
Search → book → pay → e-ticket, end to end. Live flight inventory through Duffel, real card payments through Paymob, server-rendered bilingual e-ticket PDFs, refunds and cancellations, and a role-gated admin console for operations.
The booking lifecycle is an explicit state machine with queue-backed fulfillment and webhook-driven reconciliation, backed by a double-entry ledger — so a dropped webhook or a half-completed payment resolves to a correct state instead of a support ticket.
Next.js 16React 19NestJS 11TypeORMPostgreSQL 16RedisBullMQDockerCaddyAzure
Lexora — Gamified dyslexia screening for children, no special hardware
33 tasks across seven cognitive domains, producing a risk signal in under 15 minutes — aimed at the gap between when a child starts struggling with reading and when they actually get a clinical evaluation.
Separate Random Forest models per developmental band (7–8, 9–11, 12–17), with decision thresholds tuned via Youden's J to favour sensitivity, since a missed case costs far more than a false alarm. Only anonymous numerical interaction events leave the browser.
Next.js 15FastAPIPython 3.12scikit-learnVercel
Market Pulse — Financial-analytics landing page, zero UI dependencies
Built deliberately without Tailwind or any component library — vanilla CSS Modules, centralised design tokens, and hand-written keyframe animations. An exercise in owning the styling layer instead of renting it.
Next.js 16React 19TypeScriptCSS Modules
Dental Model — LightGBM clinical prediction model with a Streamlit interface
A trained gradient-boosting model served through a small Streamlit app, built so a non-technical clinician can actually use it.
PythonLightGBMStreamlit
Sentiment analysis on Steam review data, PageRank from scratch, quickselect vs. merge sort benchmarking, feature selection and extraction tooling, distributed-systems and networking coursework, and a run of smaller React and Next.js builds. The older repos are where I was learning; the recent ones are where I was shipping.
Languages — TypeScript, JavaScript, Python, SQL, HTML/CSS
Frontend — Next.js (App Router), React, Tailwind CSS, CSS Modules, RTL/i18n
Backend — NestJS, FastAPI, TypeORM, REST APIs, BullMQ, OAuth 2.0 / JWT
Data — PostgreSQL, Redis, pandas, scikit-learn, LightGBM
Infra — Docker & Compose, Caddy, Azure, Vercel, GitHub Actions


