Projects

Implementing my passions into reality.

Personal Music Player Preview

Personal Music Player

COMPLETED

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.

UI Highlights

  • Animated vinyl disc that spins during playback
  • Audio visualizer with 7 bars that animate while playing
  • Seekable progress bar with elapsed / total time display
  • Volume slider with mute toggle
  • Smooth transitions via Framer Motion and a dark glassmorphism card

How It Works

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.

Kalman Inventory Alpha Diagnostic Preview

Kalman Inventory Alpha Diagnostic

CURRENT

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.

The Kalman Advantage

By treating demand as a latent state in a 1D Random Walk, the system accounts for:

  • Measurement Noise (R): Filtering out random daily fluctuations and measurement errors.
  • Process Uncertainty (Q): Adapting to how fast underlying demand signals actually shift.
  • Dynamic Covariance (P): Driving Z-score based safety stocks directly from real-time signal uncertainty.
PatientAware: Context-Aware AI Platform Preview

PatientAware: Context-Aware AI Platform

COMPLETED

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.

Adaptive RL Ensemble Strategy Preview

Adaptive RL Ensemble Strategy

COMPLETED

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.

Bayesian Clue Solver Preview

Bayesian Clue Solver

COMPLETED

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.

Technical Overview

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)

  • Inference Rules: When no one refutes a suggestion, the specific cards are immediately assigned a probability of 1.0 (certainty).
  • Bayesian Updates: When a player shows a card they previously hid, the system uses a DecreaseFactor to adjust probabilities based on information theory principles.
  • Distribution Normalization: Suspect, weapon, and room probabilities each maintain a normalized sum of 1.0 within their respective categories.
Autonomous Multi-Agent Robotic Firefighting Preview

Autonomous Multi-Agent Robotic Firefighting

COMPLETED

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.

Multi-agent fire containment simulation
Drone agent trajectory plots

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

  • Dynamic Spatial Partitioning: Using Voronoi regions to ensure agents automatically distribute themselves to the most critical "hotspots" without human intervention.
  • Sensor Fusion Logic: Designing an "Observation Set" function that allows agents to weigh environmental density, effectively giving the swarm a collective "vision" of the fire's intensity.
  • Robustness & Scalability: Engineering the system to be decentralized so that the failure of one drone doesn't compromise the mission, as neighboring agents autonomously re-calculate and compensate for the gap.