About

Mahmoud Hafez

Usually Mansy.

Computer Engineering at Notre DameSoftware, hardware & human-centered design

I like projects that make a difficult idea useful—or playable.

squeeze the duck.
01

Selected work

CreatorSince 2019

Z Forgotten Games

27 free browser games that open straight to play: strategy games that explain their rules visually, and party games a room plays together from their phones.

I design, illustrate and program all of it, including the Node.js room server behind every multiplayer game, which holds up to 50 players a room.

The Games section of zfgames.org: a curved deck of game cards with Recursive Tic-Tac-Toe in front, a pixel duck on top, and Create room and Join room below
  • Visual rule explanations
  • Shared phone-controlled rooms
  • Browser-based play
Play one move · Nim against the duck

Take any number of tokens from one pile; whoever takes the last token wins. Tap a token to take it and everything above it.

Technical details
  • Games: each game is its own page of HTML, CSS and JavaScript, drawn with SVG or Canvas, with sound from the Web Audio API.
  • Hosting: the pages are static assets served by Cloudflare Workers, so a game loads without a sign-in or an install.
  • Shared rooms: one Node.js WebSocket server on Render runs every online game. A host creates a room, others join with its room code on a phone or laptop, and the server caps each room at 50 players.
  • One system: every page shares the same design tokens, light and dark themes, and sound and music controls.

JavaScript · SVG and Canvas · Web Audio · Node.js and WebSockets · Cloudflare Workers · Render

In developmentTeam of three

NeuroRover

A brain–computer interface for steering a powered wheelchair by looking at on-screen targets. We are developing and testing it on a small rover first.

My part is the software: logging the EEG, presenting the flickering targets, and decoding which one a person is looking at, so that the rover only moves when the decoder is confident.

CAD of the complete NeuroRover headset: the board housing on top, a frame of eight electrode holders beneath it, and an adjustable ratcheting strap

The full headset in CAD: eight electrode holders on a frame, an adjustable strap, and the board housing on top.Headset CAD by Chris Sedlock

Technical details
  • Signal: four targets flicker at 8, 10, 12 and 15 Hz. Looking at one produces a response at that frequency and its harmonics (SSVEP), recorded on eight channels by an ADS1299-based board.
  • Decoding: CCA and filter-bank CCA score each target. A command goes out only when the decoder is confident and the stop latch is clear, and stale data stops the rover.
  • My part: data logging, stimulus software, CCA and FBCCA feature extraction, and calibration with held-out evaluation. So far I have connected our board through BrainFlow and researched ways to handle noise.
  • Semester targets, not results: four targets at 80% or better held-out accuracy, eight channels at 250 samples a second or more, and stopping within 0.5 s.
  • Team: Chris Sedlock designs the headset, harness and board integration; Jorge Moreno builds the rover, motor control, stimulus timing and wireless link.

ADS1299 · BrainFlow · SSVEP · CCA and FBCCA · Python

In progressCreatorCedar Grove

The Hafez Number Atlas

A searchable map that connects Cedar Grove’s old, inconsistent lot references to one identifier per lot, each placed where it belongs.

I designed the numbering and rebuilt the maps and the software that reads, places and searches them. The H in every number stands for Hafez, my surname.

Original map: dark section blocks and old numbers crossing the lot edges Hafez Number map: each number turns with its lot and stays inside its outline OriginalHafez Numbers
Same place, same scale. Drag the handle to compare.
  1. Legacy referenceF 34
  2. Hafez NumberH001914
Technical details
  • Pipeline: it reads the map’s labels directly, traces each lot’s outline, decodes its Hafez Number and checks the placement. Labels follow each lot’s orientation and fit inside its outline.
  • History: the first version recognised characters drawn as vector strokes and aligned separate drawings. When a source with live text and separate line geometry became available, I rebuilt it, and the earlier readings remain an independent cross-check.
  • Status, October 12 report: 2,709 lot placements have corroborated sections and 394 have inferred ones; some outlines and decoder entries are still unresolved. These are lot placements, not burial records.
  • Atlas: search by legacy reference or Hafez Number. Hosted editing, imports and downloads are still being tested.

Python · PyMuPDF · OpenCV · NumPy · SciPy · Shapely · SVG · JavaScript

2026 Hesburgh Hackathon winnerWith Kaza-Zack Kazirukanyo

Voxa

Call a number. Ask in your language. Get an answer—and a text recap.

Kaza-Zack and I built Voxa to make OpenAI accessible through ordinary phones, without an app or internet connection on the caller’s device.

Voxa 0:00 Ready
  1. Listening
  2. Answering
  3. Sending recap

Example callSee one call, from question to text recap.

Show transcript · illustrative
Technical details
  • Languages: Voxa detects the caller’s language automatically, across more than 40 languages.
  • Memory: each caller’s language, context and progress carry over to their next call.
  • Follow-up: the text after a call can be a summary or a short quiz.

TypeScript · JavaScript · Supabase · Twilio · OpenAI Realtime

Team of fourCSE 30342

Digital IC Design & Tapeout

A chip that reads a 32-bit word and reports how many runs of identical bits it holds and how long the longest one is, taken from SystemVerilog to a tapeout-ready layout.

I built it with Gerardo Muniz, Colby Whitehouse and Jack Decker, through logic design, verification and physical layout.

Count the runs · what the chip computes

3 runs · longest run: 3

Technical details
  • Architecture: a wrapper assembles each 32-bit word from four bytes on an 8-bit bus and returns the result the same way, which keeps the chip within its 23-pin limit. Inside, a state machine scans the word one bit at a time; the result packs the longest run in its upper half and the run count in its lower half. It reports run statistics; it doesn’t compress the data.
  • State machine: twelve states, from waiting for a start signal through loading, testing each bit, closing runs and sending the result.
  • Verification: a self-checking testbench compares every result with a software reference model, using directed patterns such as all zeros, all ones, alternating bits and a single 1. Coverage reached 100% of the state machine and about 96% of the code.
  • Physical design: scan insertion, synthesis, floorplanning and the pad ring, placement, routing and signoff in Cadence Innovus, then import into Virtuoso, the seal ring and logo, dummy fill, design-rule, antenna and wire-bond checks, and static power analysis, which showed the chip’s power is dominated by its I/O pads.

SystemVerilog · Cadence Innovus · Cadence Virtuoso · scan insertion · static power analysis

02

Research

EPOCH research group · co-design

Co-designing with students

Students shaped the tool from the start: they described what they needed in interviews, then sketched and weighed ideas in co-design workshops. I worked on those interviews and workshops and evaluated the resulting interface against usability heuristics.

Database validation

Nurturing Our Village

I validated the database behind Nurturing Our Village.

03

Experience

04

Away from the keyboard

A few things you can play with.

Portrait drawing
Table tennis
Go-karting

Let’s make something useful.