Skip to content

Youssef Elshafei

Software Engineering & Business Management Student

I'm a Software Engineering and Business Management student who likes pairing technical problem-solving with strategic thinking. I'm looking to connect with peers, mentors and industry professionals, and I'm actively seeking internships where I can apply my skills, keep learning, and contribute to projects that matter.

Hamilton, ON · McMaster University

01

About

Youssef Elshafei

Software Engineering & Business Management Student

McMaster University, Hamilton, ON

Software Engineering and Business Management (B.Eng.Mgt) student at McMaster University, blending technical problem-solving with strategic thinking.

Focused on building scalable, real-world systems that align engineering execution with business impact.

Education
  • Bachelor of Software Engineering and Business Management (B.Eng.Mgt)
GPA
4.0 / 4.0
Recognition
02

Projects

Five projects, each with a short account of what it does and what made it interesting to build. Nodes in the diagram link to the entry below.

01

TradeWatch

In progressPhase 3 of 12 complete

Market Intelligence & Paper-Trading Platform

providerkafkaraw tradespostgresaggregator1m + rollups
Two independent consumer groups read the same trade topic.
TradeWatch · live demowindow 30 · |z| > 2.5
TW-SIM96.43
price
96.43
mean
98.20
σ
1.94
z
-0.91

t+0066 Flagged: 3.0 standard deviations below the rolling mean.

A simplified live demo of the same statistical check TradeWatch runs against real market data. The prices are synthetic, generated in your browser from a fixed seed. The shaded band is the normal range: the rolling average of the last 30 points, plus or minus 2.5 standard deviations. A point outside it is flagged as unusual for this series, which is not the same as fraud or manipulation. The detector never knows in advance where the jumps are.

TradeWatch watches live market data and tries to notice when something is behaving strangely compared to how it normally does. Prices and trades stream in continuously, so the system has to keep up in real time rather than analyzing things after the fact.

Under the hood, market data flows through Kafka to two separate processes that both read the same stream: one stores every trade exactly as it came in, and the other builds it into one minute, five minute, hourly, and daily candles. Kafka only guarantees a message will arrive at least once, so both processes are written so that receiving the same trade twice never corrupts the data.

Rather than jumping straight into building trading strategies, most of the work so far has gone into making sure the plumbing underneath is actually trustworthy: the pipeline, the database writes, the CI checks. Right now the project is on phase 3 of 12, and there is no strategy engine or machine learning yet, on purpose. A trading strategy built on top of a shaky pipeline is worse than no strategy at all. The anomaly detector, once it's live, will only ever flag activity that looks unusual for that specific stock compared to its own history. It is not trying to catch fraud or market manipulation, and the project is careful not to claim that it does.

Implementation detail09
  • Real-time pipeline: a market data provider feeds Kafka, which fans out to two independent consumer groups — one storing raw trades in PostgreSQL, one aggregating into 1-minute bars with 5m/1h/1d rollups.
  • At-least-once delivery with idempotent writes; offsets are only committed after data is durably stored.
  • Over 30 days of real historical backfill, aggregated into multi-timeframe bars.
  • Statistical anomaly detection flags market activity that is unusual relative to a symbol's own recent behaviour — explicitly not a claim of fraud or manipulation detection.
  • Simulates trading only: no brokerage connectivity, no real money moves.
  • Layered architecture (domain / application / infrastructure) enforced by import-linter in CI.
  • Typed settings that fail startup with every missing config variable named at once.
  • Five independent CI jobs: lint and type-check, unit and API tests, integration tests against real Postgres, a startup check, and the frontend.
  • No performance number appears anywhere in the project unless a benchmark produced it.
  • Python
  • FastAPI
  • Kafka
  • PostgreSQL
  • Redis
  • Alembic
  • React
  • TypeScript
  • Vite
  • Docker
  • GitHub Actions
02

Triage Flow

AI-Assisted Triage & Live Queue System

Triage Flow is a tool for hospital style intake that tries to get people seen faster without cutting corners on safety. When someone comes in, an AI assistant listens to their description of what's wrong and turns it into a structured summary: symptoms, urgency, and any red flags a nurse should know about right away.

The tricky part is that language models don't always get things right, and a queue deciding who gets seen next is not a place to guess. So the AI's output is never used directly. It gets validated on the server first, and a staff member always reviews and finalizes the actual urgency level before a patient's spot in the queue is set. The AI proposes, a person decides. Patients can watch their position and estimated wait update live as the queue moves, which was the part everyone actually wanted in the first place: less mystery about how long the wait really is.

Implementation detail03
  • LLM output is extracted into server-validated structured JSON (symptoms, urgency level, red flags, clinical summary) — the AI never makes the final call; staff review and finalize every case.
  • Real-time queue updates via Server-Sent Events, with dynamic wait-time estimation.
  • Deployed on Vercel with managed PostgreSQL; Docker for local development.
  • Next.js
  • React
  • PostgreSQL
  • Docker
  • LLM API
  • Server-Sent Events
03

BridgeAid

Full-Stack Disaster Response Platform

Loading map
A small working demo of BridgeAid's core idea, running entirely in your browser. The red pins are illustrative sample incidents, not real reports. Pins you add are blue, exist only for this visit, and vanish on reload: nothing is sent anywhere, and this is not connected to BridgeAid's own backend, which is not deployed.

BridgeAid started from a simple frustration: during a wildfire, flood, or storm, the hardest part often isn't the disaster itself, it's not knowing what's actually happening nearby versus what's just a rumor. The platform lets people report incidents, request help, and see a live map of what's been verified in their area.

Because anyone can submit a report, the reports themselves get cross checked against other nearby reports and public datasets before they're allowed onto the map, so a single bad or panicked report can't spread. Volunteers can sign up by category (food, shelter, general disaster relief) and mark themselves active or on standby. There's also a recovery dashboard that shows incident counts locally and globally, though it's worth being upfront that the recovery numbers there are a simulated visualization, not a live feed of real recovery data.

The scope stays to things that could realistically be built and verified: reporting, requests, and volunteer coordination. It stops short of handling actual aid transactions or payments, since that's a different, much higher stakes problem than the one this project set out to solve.

Implementation detail07
  • Live map, built on Leaflet, that updates dynamically from verified user incident reports — unverified reports don't appear.
  • Report verification includes AI-assisted cross-checking against other reports and official datasets, aimed at reducing false or panic-driven reports.
  • Education Hub with interactive quizzes, downloadable resources and embedded learning content.
  • Recovery Dashboard: incident count and people-affected figures with a local/global toggle. This is a simulated recovery-progress visualisation, not live real-world recovery data.
  • Aid requests capture location, urgency level, household size and aid type (food, shelter, medical, supplies).
  • Volunteer registration with category selection (food bank, shelter, disaster relief) and active/standby status.
  • Security: JWT authentication, server-side input validation and API request throttling.

Team of 4: Youssef Elshafei, Adib El Dada, Ahmed Elmanufi, Youssef Elsayyad.

  • React
  • Flask
  • Python
  • JavaScript
  • Tailwind CSS
  • Vite
  • Leaflet
  • PostgreSQL
  • JWT
04

WireFish

Network Diagnostics & Monitoring Toolkit

wirefishsample output
$ wirefish --scan --subnet 192.168.1.0/24
192.168.1.1     up   rtt  1.84 ms   3/3
192.168.1.23    up   rtt  4.12 ms   3/3
192.168.1.57    up   rtt 11.06 ms   2/3
3 hosts up, 254 scanned

$ wirefish --trace host.example
 1  192.168.1.1    gateway        1.92 ms
 2  10.24.0.1      unresolved     8.47 ms
 3  198.51.100.14  unresolved    14.30 ms
 4  203.0.113.10   host.example  21.65 ms

$ wirefish --monitor --iface eth0 --interval 100
eth0  rx 1.84 Mbps  tx 212.4 kbps
eth0  rx 2.10 Mbps  tx 198.7 kbps
eth0  rx 1.97 Mbps  tx 205.6 kbps
^C
avg   rx 1.97 Mbps  tx 205.6 kbps  (3 samples)
An illustrative session. The commands are the tool's real, documented interface; the output is sample data written for this page, in the format the README describes, using reserved example addresses. Nothing here is connected to a running scanner.

Most of the time, figuring out what's wrong with a network means switching between three or four different tools, each with its own output format and no shared context between them. WireFish puts the basics (host scanning, traceroute, and bandwidth monitoring) into one command line tool that speaks a consistent language.

Getting traceroute and host scanning to work properly meant building raw ICMP packets by hand, including the checksum, and reading responses straight off a raw socket, since there's no friendly library standing in between to hide that complexity. It was built that way on purpose, in C, alongside three teammates, because the point of the project was actually understanding what happens at the network layer, not just calling a function that already does it.

Implementation detail06
  • Raw-socket ICMP scanning and traceroute, manually constructing ICMP packets including headers and the 16-bit internet checksum.
  • Real-time bandwidth monitor: polls Linux's /proc/net/dev and computes instantaneous and rolling RX/TX bitrate as rate_bps = (Δbytes × 8) / Δt_sec.
  • Single unified CLI binary with text, JSON and CSV output modes.
  • Modular file layout (app/, cli/, scanner/, tracer/, monitor/, fmt/, net/, log/) with a dedicated logging subsystem (debug/info/warn/error) instead of scattered printf calls.
  • Linux requires elevated privileges to open a raw socket at all.
  • MIT licensed.

Built collaboratively in a Git-based team workflow with 3 teammates.

  • C
  • Linux
  • Raw Sockets
  • ICMP
  • POSIX
  • Make
05

Catan Simulator

Rule-Based AI Agent for Settlers of Catan

This one was a McMaster course assignment worked on with three teammates: take an existing Java based Catan simulator and add undo and redo, plus a simple AI opponent that could actually make reasonable decisions on its own.

The catch was that the assignment wasn't really graded on whether the AI won games, it was graded on whether these features could be added cleanly, using proper design patterns, without tearing apart code that already worked. So undo and redo went in through the Command pattern, and the AI's decision making replaced a single messy function with a clear structure: a Template Method for the turn sequence and a Visitor for scoring possible moves. None of the original game logic classes had to be touched.

Implementation detail05
  • Rule-based AI scores candidate moves each turn — earning a victory point scores highest at 1.0, building without a VP scores 0.8, spending down a hand scores 0.5 — and resolves hard constraints (hand size over 7, blocked road segments, contesting longest road) before picking a move.
  • Every game action can be undone and redone within a turn via the Command pattern.
  • A CommandManager owns the undo and redo stacks. The existing Board, Player, RuleValidator, Tile and Vertex classes were left completely untouched.
  • SOLID principles (single responsibility, open/closed, Liskov substitution, dependency inversion) are named explicitly in the project docs.
  • McMaster SFWRENG 2AA4, Assignment 3.

Team of 4: Adib El Dada, Youssef Elshafei, Youssef Khafagy, Riken Allen. The repository is hosted under a teammate's account.

  • Java
  • Design Patterns
  • Python (visualizer)
03

Skills

PROBEHover or focus a skill to see which projects use it.

U1Languages & frameworks

U2Tools & OS

U3Concepts

U4Also in the projects

04

Involvement

  1. 2025—Present

    Academic Tutor & Peer Mentor

    ROLE

    Local community, volunteer & paid

    Taught the fundamentals of coding and logical thinking to children in the local community. Designed simple Python and Scratch projects to build curiosity and confidence, and encouraged teamwork, creativity and persistence in problem-solving.

  2. Active member

    SOCIETY

    McMaster Software Engineering Society & Engineering and Management Society

    Technical workshops, peer learning and industry events.

  3. Top 5 finish

    COMPETITION

    McMaster Engineering Software Competition

    Placed top 5 of all contestants.

  4. Team member

    COMPETITION

    United Nations Sustainable Development Goals Competition

    Multidisciplinary team building a tech-driven solution aligned with UN SDGs.

  5. Member

    CLUB

    Google Developer Group on Campus, McMaster University

    Participates in workshops and community events centered on Google's developer tools and cloud technologies.

Certifications

  • DELF B1 — French Language Diploma

    Jul 2024

    Ministère de l'Éducation nationale

    Certified independent user, CEFR B1 level.

  • Exploring Cybersecurity

    Sep 2026

    IBM SkillsBuild

05

Contact

The quickest way to reach me is email. I read everything that arrives.

yelshafe2006@gmail.com