Software Engineering @ York University · Full-Stack & AI/ML
I build web apps E2E and recently a systems tooling in Rust, oTerm.
I enjoy games (minecraft, tft, geoguessr), sports (soccer, badminton, bouldering), shows (breaking bad, the walking dead, IWGP), and anime (one piece, vinland saga, steins;gate)
Languages
Frameworks & Libraries
DevOps & Tools
A daily competitive puzzle web app built around the classic Einstein riddle. One fresh
4×4 grid every day (plus a 5×5 bonus on Fridays), the same puzzle for every player.
Commit-based input with a hard countdown timer and zero auto-help. Every cell you
change counts against your score. Features an eliminate mode for crossing off candidate
values, a once-per-puzzle "check my work" button, and a stat-forward result card.
Dark engineer-noir aesthetic, monospace throughout.
Play today's puzzle at zebra9.xyz.
Next.js TypeScript Tailwind CSS
Open-source engine that generates zebra-style logic-grid puzzles with provably
unique solutions. Pairs an OR-Tools CP-SAT solver (the uniqueness oracle) with a
custom propagation tracer that mirrors human deduction to grade difficulty across
deduction depth, case-analysis depth, and a composite 0-10 score. Multi-theme,
with a manual-review CLI for curation.
Python OR-Tools Pydantic Click pytest Hypothesis
Native Rust + Tauri v2 terminal that detects whether an AI coding agent is running,
finished, or waiting: it shrinks to a status bar while the agent works and expands
when it needs you. Reads agent state from a vt100 screen model of the pseudoterminal
instead of the raw byte stream, so it works with any CLI tool, and picks up exact
turn events out of Claude Code hooks as OSC markers. One-command install behind a
tag-triggered GitHub Actions release pipeline with a Homebrew cask. 177 tests, MIT
licensed, with outside users filing issues.
Rust Tauri v2 TypeScript xterm.js vt100
A Bundesliga outcome predictor with two deliberately separate layers: a hand-written
Dixon–Coles / Poisson model (weighted MLE, time decay, temperature-scaled calibration)
produces the probabilities, and an LLM agent turns plain-English match context — "their
striker is out and it's storming" — into small, bounded, server-clamped expected-goals
adjustments, re-runs the model, and explains what moved and why. One score matrix drives
every market, so 1X2, over/under, both-teams-to-score, and correct scores can never
disagree. Backtested walk-forward over five seasons (~1,800 out-of-sample predictions,
ECE ≈ 0.01).
Live at bundespredict.egeyesilyurt.ca.
Next.js TypeScript FastAPI Python Anthropic API Postgres
Social platform for Pokémon TCG collectors: a digital binder, a card-recognition
scanner (AWS Rekognition OCR + fuzzy match against the TCG API), and a
listing-scoped marketplace with real-time chat. Largest contributor on a 6-person
team (58 of 109 commits); reviewed 12 teammate PRs with written scores and
follow-up fix PRs.
Live at deximon.ca.
Next.js TypeScript FastAPI Python PostgreSQL Docker Compose WebSockets
Leading a 6-person team building a personalized workout planning platform for fitness
enthusiasts and trainers. Features authentication, fitness profiles, workout scheduling,
an exercise library, and smart recommendations. 40+ unit tests and counting.
Next.js TypeScript Django REST Framework MySQL Docker Jira



