Projects
Personal Portfolio Websiteportfolio
Description: A terminal-themed interactive portfolio showcasing my projects, skills, and blog.
My Role: Solo Developer
Challenge: To create a unique and engaging personal website that reflects my technical skills and personality.
Approach: Designed a retro terminal interface using Next.js for a fast, modern web experience. Implemented features like command-based navigation, dynamic content rendering, and a blog powered by MDX.
Tech Used: Next.js, React, TypeScript, Tailwind CSS, MDX, Vercel.
Outcome: A distinctive and responsive portfolio site that effectively presents my professional profile and coding abilities.
SIWO - Fast Local Community Discoverysiwo
Description: Python implementation of a local community-search algorithm that handles weighted and overlapping networks.
My Role: Current maintainer, and original author of the python implementation that supports large graphs.
Challenge: Researchers needed a fast way to find meaningful clusters in large graphs without expensive global passes.
Approach: I designed a strength-of-links metric, wrote an iterative search that expands from seed nodes, designed a data structure for scalable access to large files, and added optional overlap handling.
Tech Used: Python, NetworkX, NumPy, GitHub Actions for CI.
Outcome: Runs 10x faster than baseline Louvain on mid-size graphs and supports pluggable heuristics. Supports file sizes up to 60GBs+ while using less than 8GBs of RAM. Used in two peer-reviewed papers.
MeerkatProject - Network-Analysis Suitemeerkat
Description: A JavaFX desktop app for visualizing static and dynamic networks.
My Role: Solo maintainer after original team of developers retired.
Challenge: The tool was powerful but dated; large graphs lagged and many functionalities and algorithms were missing.
Approach: Refactored core rendering loop, added modern graph-layout algorithms, and packaged cross-platform installers.
Tech Used: Java 11, JavaFX, Maven, JGraphT.
Outcome: Current release can run on multiple operating systems. The software supports state-of-the-art algorithms. Researchers at U Alberta now use it in network-science workshops.
Sarcasm-Detection-NLPsarcasm
Description: End-to-end pipeline for detecting sarcasm in social-media text.
My Role: Project lead during a grad NLP class.
Challenge: Sarcasm is hard for pure sentiment models; needed context and rich language cues.
Approach: Compared SVM, LSTM, and BERT variants; engineered features like emoji density and punctuation patterns; wrapped everything in a clean training script.
Tech Used: Python, PyTorch, HuggingFace Transformers, scikit-learn, Weights & Biases.
Outcome: Achieved 93% F1 on three public datasets, beating the published baselines we tested against.
paper.io Deep-Q Network AIpaperio
Description: Reinforcement-learning agent that plays the game paper.io using a convolutional DQN.
My Role: Wrote the training environment and reward shaping.
Challenge: Sparse rewards and continuous movement made naïve RL unstable.
Approach: Captured game frames with OpenCV, discretized actions, used experience replay and target networks to stabilize learning.
Tech Used: Python, PyTorch, OpenCV, NumPy.
Outcome: Agent reached human-level performance after ~3 M frames.