Hi, I'm Oliver.

I build software, optimize systems, and solve complex problems. My journey started at 12 years old, writing Small Basic code to control Lego robots. Today, I am driven by that same curiosity, applying it to larger datasets and more complex architectures.

I am currently completing my senior computer science coursework at McGill University. Throughout my time here, I have naturally gravitated toward leadership roles, frequently serving as the team lead for our intensive group software projects.

Outside of school and code, I focus my time on a few specific pursuits:

Martial Arts: I serve as the President of McGill's Mixed Martial Arts club. Hiring me essentially means you get built-in physical security for the office alongside my code.

Fitness: I am a disciplined gym goer and love nerding out about the gym and hyper-optimizing my routine.

Cooking: I love experimenting in the kitchen and cooking for friends and family, which inspired my current side project: a smart cooking assistant application.

I enjoy the intersection of discipline, technology, and real-world utility. Let's build something cool.

Portrait of Oliver Bejjani
fun fact (1/7)Ask me about my Claude Code setup.

Projects

Personal Projects
screen-duo/
├── screen_duo/
│   ├── devices/
│   │   ├── screen_capture.py
│   │   ├── phone_capture.py
│   │   ├── webrtc_server.py
│   │   ├── iphone_bridge.py
│   │   ├── wifi_powersave.py
│   │   └── _gnome_screencast_helper.py
│   ├── recording/
│   │   ├── session.py
│   │   ├── sync.py
│   │   ├── compositor.py
│   │   └── clapper.py
│   ├── ui/
│   │   ├── main_window.py
│   │   └── overlay_widget.py
│   └── __main__.py
└── requirements.txt
archived2026

screen-duo

Record your screen and iPhone camera together, auto-synced with a clapper flash.

smartFind/
├── backend/
│   ├── app/
│   │   ├── core/
│   │   │   └── config.py
│   │   ├── db/
│   │   │   ├── crud.py
│   │   │   ├── database.py
│   │   │   └── models.py
│   │   ├── models/
│   │   │   ├── embedder.py
│   │   │   ├── pdf_reader.py
│   │   │   └── text_splitter.py
│   │   ├── routers/
│   │   │   ├── answer_router.py
│   │   │   ├── auth_router.py
│   │   │   ├── chat_router.py
│   │   │   ├── document_router.py
│   │   │   └── upload_router.py
│   │   └── main.py
│   ├── Dockerfile
│   └── requirements.txt
├── frontend/
│   ├── src/
│   │   ├── components/
│   │   │   ├── AuthModal.tsx
│   │   │   ├── ChatSidebar.tsx
│   │   │   ├── DocumentList.tsx
│   │   │   └── UploadForm.tsx
│   │   └── App.tsx
│   ├── Dockerfile
│   ├── package.json
│   └── vite.config.ts
├── docker-compose.yml
└── Makefile
archived2025

SmartFind

Upload PDFs and ask questions about them.

AI-cooking-helper/
├── backend/
│   ├── src/
│   │   ├── controllers/
│   │   │   ├── chat.controller.ts
│   │   │   └── generateRecipe.controller.ts
│   │   ├── routes/
│   │   │   ├── chat.route.ts
│   │   │   └── generateRecipe.route.ts
│   │   ├── services/
│   │   │   └── openaiService.ts
│   │   └── index.ts
│   └── package.json
└── frontend/
    └── mobile/
        ├── app/
        │   ├── (tabs)/
        │   │   ├── index.tsx
        │   │   └── Recipe.tsx
        │   ├── recipe_creating.tsx
        │   └── _layout.tsx
        └── package.json
wip2025

AI Cooking Helper

Hands-free cooking with tweakable, shareable recipes.

trends-dashboard/
├── backend/
│   ├── models/
│   │   └── keyword.js
│   ├── database.js
│   ├── docker-compose.yml
│   ├── Dockerfile
│   ├── queue.js
│   ├── server.js
│   ├── worker.js
│   └── package.json
└── frontend/
    ├── Dockerfile
    ├── index.html
    ├── script.js
    └── styles.css
archived2023

Trends Dashboard

Track Google Trends keywords over time.

TV Automation/
├── remote_local.py
├── remote_app.py
├── pair_wss.py
├── test_wol.py
├── requirements.txt
└── TVMote-iOS/
    ├── TVMote/
    │   ├── TVMoteApp.swift
    │   ├── ContentView.swift
    │   └── SamsungTVClient.swift
    └── README.md
archived2025

TV Automation

Control your Samsung TV from phone or desktop.

Academic & Coursework
comp520-coursework-w2026/
├── src/
│   └── java/
│       ├── lexer/
│       │   ├── Scanner.java
│       │   └── Tokeniser.java
│       ├── ast/
│       ├── sem/
│       ├── gen/
│       │   ├── CodeGen.java
│       │   ├── StmtCodeGen.java
│       │   ├── FunCodeGen.java
│       │   └── ProgramCodeGen.java
│       ├── regalloc/
│       │   ├── NaiveRegAlloc.java
│       │   └── GraphColouringRegAlloc.java
│       └── Main1.java … Main5.java
└── build.xml
archived2026

C Compiler (COMP 520)

C and OOP to MIPS compiler in five passes.

mybookings/
├── Makefile
├── README.md
├── backend/
│   ├── server.js
│   ├── routes/
│   │   ├── authRoutes.js
│   │   ├── bookingRoutes.js
│   │   ├── slotRoutes.js
│   │   ├── OHRoutes.js
│   │   ├── groupMeetingRoutes.js
│   │   ├── meetingRequestRoutes.js
│   │   └── ownerRoutes.js
│   └── db/
│       ├── configureDB.js
│       └── schema.sql
└── frontend/
    ├── src/
    │   ├── App.jsx
    │   ├── context/AuthContext.jsx
    │   ├── view/
    │   │   ├── HomeView.jsx
    │   │   ├── OfficeHoursView.jsx
    │   │   ├── RequestFormView.jsx
    │   │   └── GroupPlanView.jsx
    │   └── components/
    │       └── NavBar.jsx
    └── vite.config.js
shipped2026

MyBookings

Book McGill office hours online.

comp303-tavern/
├── DartsGame.py
├── Inventory.py
├── JukeBox.py
├── PrototypeNPC.py
├── credits.py
├── interactive_plates.py
├── leaderboard.py
├── safe_room.py
├── test/
│   ├── test_credits.py
│   ├── test_darts_game.py
│   └── test_example_map.py
└── UML.jet
archived2025

COMP 303 Tavern Module

MUD tavern room with darts, jukebox, and patterns.

McMetro/
├── src/
│   ├── McMetro.java
│   ├── McMetroTest.java
│   ├── NaiveDisjointSet.java
│   ├── Building.java
│   ├── BuildingID.java
│   ├── Track.java
│   └── TrackID.java
└── README.md
archived2024

McMetro

Max-flow routing on a campus metro graph.

Pathfinding-simulation-250/
├── src/
│   ├── finalproject/
│   │   ├── Graph.java
│   │   ├── GraphTraversal.java
│   │   ├── PathFindingService.java
│   │   ├── ShortestPath.java
│   │   ├── FastestPath.java
│   │   ├── TilePriorityQ.java
│   │   └── MiniTester.java
│   └── tests/
│       ├── Level0Tester.java
│       └── Level1Tester.java
└── resource/
    ├── map_bg.jpg
    ├── hiker.png
    ├── zombie.jpg
    └── BG_music.wav
archived2023

Pathfinding Simulation

BFS and Dijkstra on a tile map with terrain.

Hackathons
topdown-nukedown/
├── src/
│   ├── main.cpp
│   ├── Game.cpp
│   ├── Player.cpp
│   ├── Bullet.cpp
│   ├── Map.cpp
│   └── Menu.cpp
├── include/
│   ├── Game.hpp
│   ├── Player.hpp
│   └── Bullet.hpp
├── assets/
│   ├── background.wav
│   ├── fonts/
│   ├── images/
│   └── soldier/
├── Makefile
└── runmake.sh
archived2025

TopDown-NukeDown

Local two-player top-down shooter in C++.

POFM/
├── main.py
├── mydb.py
├── templates/
│   └── index.html
├── static/
│   ├── JS.js
│   └── style.css
└── waste.db
archived2024

POFM: Waste Score Tracker

Log waste and score your environmental impact.

mchacks11-fork-/
├── backend2/
│   ├── database.py
│   ├── main.py
│   ├── models.py
│   └── requirements.txt
└── frontend/
    ├── index.html
    ├── JS.js
    ├── grocery_icon.png
    └── restaurant_icon.png
archived2024

Expense Keeper

Personal expense tracker from McHacks 11.

Walkthroughs

coming soonscreen recordings with me narrating. unscripted.

Contact