Implementing my passions into reality.

Outcome: A personal, cloud-backed music player that streams your own library from Firebase Storage and plays tracks randomly — no playlists, no algorithms, just your music on shuffle.
Tech Stack: React 19, Vite, Howler.js, Firebase Storage, Framer Motion, Vanilla CSS, Vercel
Key Constraints: Streaming audio files via signed Firebase URLs, deriving readable song names from raw filenames, and building a polished player UI with visualizer, seek bar, and smooth animations.
Shuffle is a minimal, single-purpose music player. Audio files live in a /music folder in Firebase Storage; the app fetches the full list on load, picks a random track when you hit shuffle, generates a signed download URL, and streams it through Howler.js. When a song ends the next one plays automatically.
Song names are derived from filenames — dashes and underscores are replaced with spaces and the result is title-cased. Progress, volume, and playback state are all managed locally in React. The entire player UI and logic lives in a single MusicPlayer.jsx component.

Outcome: Microeconomic diagnostic platform that identifies 'Phantom Demand' and 'Dead Inventory' using advanced state estimation, enabling radical inventory reduction.
Tech Stack: Python (Streamlit, Polars, NumPy, SciPy), Recursive Kalman Filter, Poetry
Key Constraints: Extracting true demand signals from noisy sales data (M5 dataset), modeling process uncertainty vs. measurement noise, and calculating dynamic safety stock.
Inventory Alpha identifies inefficiencies in retail supply chains by applying a Recursive Kalman Filter to sales data. Unlike static models, it separates random noise from actual trends, allowing for reduction of excess inventory without sacrificing sales.
By treating demand as a latent state in a 1D Random Walk, the system accounts for:

Outcome: Offline-first clinical platform enabling context-aware summaries and care continuity without relying on constant cloud connectivity.
Tech Stack: Backboard.ai, React, OHIP API, Thread-based storage architecture
Key Constraints: Strict data privacy compliance (PHIPA), seamless OHIP integration, persistent clinical context retention despite connectivity loss.
PatientAware addresses critical inefficiencies in Canada's medical system by providing physician-facing summaries that digest longitudinal patient data.
The system features a dashboard for continuous symptom logging and structured clinical insights, ensuring care continuity. Thread-based patient data storage allows for persistent context across appointments.

Outcome: Adaptive trading strategy that reduces portfolio volatility and improves risk-adjusted returns using an ensemble of reinforcement learning agents.
Tech Stack: Python, PyTorch, PPO, A2C, TD3, Git
Key Constraints: Adaptive allocation across varying market regimes, effective diversification to minimize drawdown, rigorous backtesting against SPY benchmark.
Developed at Queen's AI Club (QMIND), this project implemented an ensemble of Reinforcement Learning agents (PPO, A2C, TD3) to manage portfolio allocation adaptively.
The diversification framework significantly reduced volatility compared to standard benchmarks like SPY buy-and-hold, validated through extensive Sharpe ratio and drawdown analysis.

Outcome: A real-time game assistant utilizing Bayesian reasoning and probabilistic inference to win Clue in under 7 turns.
Tech Stack: Python, Streamlit, Pandas, NumPy, Bayesian Inference
Key Constraints: Real-time probability updates for 324 possible envelope combinations, handling imperfect information from player suggestions and refutations.
This game assistant uses Bayesian inference to model and update beliefs about the hidden state of the game. It tracks all player suggestions, responses, and seen cards to continuously calculate the probability distribution of the cards in the murder envelope.
For each card, the system estimates the probability of it being in the envelope given the history of observations:P(Card ∈ Envelope | History) ∝ P(Card) × P(Evidence | Card ∈ Envelope)

Outcome: Optimized autonomous robot deployment system for wildfire containment, achieving a 30% reduction in cluster convergence time.
Tech Stack: MATLAB, Lloyd's Algorithm, K-Means Clustering, GIS Spatial Analysis Tools
Key Constraints: Real-time dynamic fire hotspot data processing, accurate perimeter modeling, efficient multi-agent coordination.
Course project for APSC 200: Engineering Design and Practice. Course Grade: A+ | Role: Primary Technical Contributor
Driven by an interest in mathematical optimization, I developed a decentralized multi-agent system designed to tackle the unpredictable nature of wildfires. Moving away from rigid, centralized control, I implemented Lloyd’s Algorithm (i. e. K-Means Clustering) to allow a fleet of drones to "self-organize" based on real-time environmental data.


I built a custom simulation environment in MATLAB where I experimented with: