Most of what I build starts with a question I can't let go of: what is this actually doing underneath? That's what pulled me into building MaqOS — an operating system simulation in C++ where I hand-rolled scheduling and process lifecycle myself instead of trusting a library — and it's the same instinct behind SkyNet ATC, where every core data structure (hash table, min-heap, AVL tree, graph routing) is written from scratch instead of pulled from std::. Lately that instinct has pointed at computer vision: real-time hand tracking, gesture recognition, and background segmentation running at 30+ FPS, with a properly tested pipeline behind it rather than a notebook demo.
I'm a Software Engineering undergraduate at FAST-NUCES, and most of my time splits across four layers most people are happy to leave to a framework: systems (schedulers, process lifecycles, precedence graphs), computer vision (temporal modeling, gesture pipelines, real-time compositing), full-stack product work (the kind where a Redis TTL bug at 2am teaches you more about concurrency than a lecture ever will), and applied ML/data (cleaning it, modeling it, being honest about what the R2 actually means). AI is now a first-class part of that stack too — wiring Gemini into a real interview-feedback pipeline, or FLUX diffusion into a gesture-driven AR workspace, not just calling an API and calling it a day.
const abdullah = {
role: "SE Undergraduate @ FAST-NUCES",
focus: ["Computer Vision", "Systems Programming", "Full-Stack Dev", "AI-Integrated Apps", "Applied ML"],
currentlyLearning: "Design & Analysis of Algorithms — CLRS, cover to cover",
philosophy: "Understand the machine before you trust the framework"
};Gesture-driven AR workspace — track hands with MediaPipe, frame a region of your webcam feed with a two-hand gesture, then restyle it instantly with OpenCV or a cloud diffusion model.
Stack: Python · OpenCV · MediaPipe · fal.ai (FLUX.2)
- 1-Euro filter smoothing on hand landmarks to kill high-frequency jitter
- Gesture engine resolves pinch lifecycles, swipes, and holds into discrete intents
- Async architecture keeps 30+ FPS camera throughput while diffusion calls run in the background
- 55 passing tests
Full-stack airline management SaaS — booking, seat locking, payments, boarding passes, end to end.
Stack: React · TypeScript · Node.js · Express · Sequelize · MySQL · Redis · Stripe
- JWT auth held in memory with httpOnly refresh cookies
- Redis-backed seat locking with 15-minute TTL to prevent double-booking
- PDFKit-generated boarding passes on successful payment
Grading and performance-tracking platform for teaching assistants, with separate TA, student, and read-only teacher views.
Stack: HTML5 · CSS3 · Vanilla JS · Supabase (PostgreSQL)
- Class links for self-service student enrollment with a TA approval workflow
- Bulk quiz grading with automated email notifications when marks post
- No-login, token-based read access for teachers monitoring class analytics
- Deployed: Vercel · GitHub Pages
Real-time air traffic control simulator where every core data structure is hand-rolled — no std::unordered_map, no std::priority_queue.
Stack: C++ · Qt
- Hash table (aircraft registry), min-heap (landing priority), AVL tree (flight log), graph + Dijkstra (routing) — all built from scratch
- ×ばつ25 radar grid rendered live in a custom Qt
QWidget - Mid-flight emergency declarations jump an aircraft to the front of the landing queue in real time
AI-powered mock interview platform — role-specific question generation, real-time feedback, and interview analytics.
Stack: Next.js 14 · TypeScript · PostgreSQL · Drizzle ORM · Gemini Pro API · Clerk
- Generates interview questions dynamically from job role, description, and experience level
- Speech-to-text answer capture feeding a Gemini-driven feedback engine (score + improvements)
- Husky-enforced pre-commit checks (ESLint, Prettier, type-check) and a CI pipeline on every push
Regression pipeline predicting UK resale prices for 17,966 Ford listings, shipped with a live prediction site.
Stack: Python · Pandas · NumPy · Scikit-learn · Matplotlib · Seaborn
- Linear Regression + One-Hot Encoding — R2 0.840, RMSE 1,900,ドル 5-fold CV std < 0.01
- 22-visualization EDA pass with residual analysis and learning curves to rule out overfitting
- Auto-extracts the notebook into a 10-page live site with an interactive prediction form → ford-car-price-prediction.vercel.app
Real-time collaborative text editor with CRDT-based conflict-free sync, live cursors, and sub-50ms latency over WebSockets.
Stack: React · TypeScript · Yjs · Django Channels · Redis
- Yjs CRDT sync means concurrent edits merge without a central lock or "last write wins" data loss
- Live user-presence indicators and per-collaborator cursor tracking
- Django Channels + Daphne backend broadcasting over WebSockets
- Deployed: inkflow-teal.vercel.app
A UI/UX and enterprise-feature layer built on top of Flowise's open-source AI-workflow engine.
Stack: React · TypeScript · Material-UI · React Flow · Node.js/Express · PostgreSQL · Redis
- Redesigned dashboard, navigation, and theme-customization system on top of Flowise's existing visual flow builder and multi-LLM node architecture
- Maintains full compatibility with upstream Flowise workflows while focused on UX polish and enterprise auth/RBAC groundwork
- Built as a PNPM/Turbo monorepo with its own Docker Compose setup and load-testing config (Artillery)
| Problem | Difficulty |
|---|---|
| Distinct Subsequences | 🔴 Hard |
| Count Robot Groups | 🟡 Medium |
| Minimum Cost Path With At Most K Turns | 🔴 Hard |
| Count Robot Groups | 🟡 Medium |
| Count Good Cyclic Rotations | 🟡 Medium |
"Every system I build is an argument for how I think the world should work — clean, deliberate, and built to last."
⚙️ One-time setup: profile cards, snake animation & LeetCode auto-updates
GitHub Activity cards (04 section)
- Create a Personal access token (classic) with
reposcope: github.com/settings/tokens. - In this repo, go to Settings → Secrets and variables → Actions, add a new secret named
SUMMARY_GITHUB_TOKENwith that token as the value. - Create
.github/workflows/summary-cards.yml:
name: GitHub-Profile-Summary-Cards on: schedule: - cron: "0 */12 * * *" workflow_dispatch: {} push: branches: [ main ] permissions: contents: write jobs: build: runs-on: ubuntu-latest name: generate-github-profile-summary-cards steps: - uses: actions/checkout@v4 - uses: vn7n24fzkq/github-profile-summary-cards@release env: GITHUB_TOKEN: ${{ secrets.SUMMARY_GITHUB_TOKEN }} with: USERNAME: muhammad-abdullah-nova-dev BRANCH_NAME: "main" UTC_OFFSET: 5 AUTO_PUSH: true
- Commit, then run it once manually from the Actions tab (GitHub-Profile-Summary-Cards → Run workflow). It writes SVGs to a
profile-summary-card-output/folder committed tomain, which the04section reads directly — no more live third-party API calls that can go down or rate-limit. - Swap
github_darkin the three image URLs for any other theme name if you want a different look.
Snake animation (05 section)
- In this repo, go to Settings → Actions → General → Workflow permissions, select Read and write permissions, save.
- Create
.github/workflows/snake.yml:
name: Generate Snake on: schedule: - cron: "0 */12 * * *" workflow_dispatch: {} push: branches: [ main ] permissions: contents: write jobs: generate: runs-on: ubuntu-latest steps: - uses: Platane/snk@v3 id: snake with: github_user_name: muhammad-abdullah-nova-dev outputs: dist/github-snake-dark.svg?palette=github-dark - uses: crazy-max/ghaction-github-pages@v4 with: target_branch: output build_dir: dist env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- Commit, then run it once manually from the Actions tab (Generate Snake → Run workflow) so
outputbranch exists immediately instead of waiting for the next scheduled run.
LeetCode stats card (06 section)
Replaces the leetcode-stats-six.vercel.app live API (unreliable/frequently down) with a card generated by your own workflow — same pattern as the other two.
- Add
generate_leetcode_card.pyto the repo root. - Create
.github/workflows/leetcode-card.yml:
name: LeetCode Stats Card on: schedule: - cron: "0 */12 * * *" workflow_dispatch: {} push: branches: [ main ] permissions: contents: write jobs: generate: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: actions/setup-python@v5 with: python-version: "3.12" - run: pip install requests - run: python generate_leetcode_card.py env: LEETCODE_USERNAME: FZiFbWTBhC - name: Commit if changed run: | git config user.name "github-actions[bot]" git config user.email "github-actions[bot]@users.noreply.github.com" git add leetcode-stats-output/card.svg git diff --staged --quiet || git commit -m "chore: update leetcode stats card" git push
- Commit, then run it once manually from Actions → LeetCode Stats Card → Run workflow. It hits LeetCode's public GraphQL endpoint directly and writes
leetcode-stats-output/card.svg, which the06section reads. - No secret needed — this one only reads public profile data,
GITHUB_TOKEN(already provided by Actions) is enough to push the commit.
LeetCode auto-updates (07 section)
Already set up — .github/workflows/leetcode.yml runs a custom update_leetcode.py script and has been committing updates on schedule. No action needed here.
The snake badge will look broken until its first successful run — that's expected on a new repo, not a sign anything is misconfigured.