Professional Projects


Rudaux is a Python module which provides automated administration for a course taught with JupyterHub (a multi-user Jupyter notebook server) and the Canvas Learning Management System.

The motivation for Rudaux is to reduce the setup burden on students and instructors so that both parties can focus on the course material. Rudaux orchestrates a system wherein students can click an assignment in the Canvas LMS which will authenticate them and send them straight to a Jupyter notebook in the browser. Their progress is saved on the course server as they go. Additionally, autograding (with nbgrader) is initiated for each assignment at its due date, sending the students' grades back to Canvas.

Concepts demonstrated

  • Object-oriented programming with Python classes
  • Writing modular, testable code
  • Data management and transfer through multiple systems:
    • JupyterHub (ZFS fileserver)
    • nbgrader (SQLite database)
    • Canvas (REST API)
  • Evaluation of client needs
  • Learning quickly while staying on a project schedule


A systems biology-based integrative analysis platform for integration of metabolomics data. Built in Shiny, this application allows users to upload a list of metabolites and get back a list of directly interacting enzymes and the genes that encode for those enzymes. Currently the only supported species is Homo sapiens. Some planned features include:

  • R package of MetaBridge, implementing all of the methods used here for use in scripted analyses.

NOTE: MetaBridge is hosted on Canadian soil at The University of British Columbia. No data uploaded to the server is saved.

MetaBridge 2.0 (In Development)

MetaBridge 2.0 is a ground-up rewrite of MetaBridge. Written in React with Next.js, MetaBridge 2.0 will a scalable, performant version of the proof-of-concept application MetaBridge. As I write MetaBridge 2.0, you are welcome to follow its development! I am working as quickly as possible to reach feature parity with MetaBridge. From there, some planned features include:

  • User session management. Save your current analysis, and reupload it at any time to pick up where you left off! This is intended to help users share their work, and remove some of the downsides of working with web tools.
  • Public API for use in scripted analyses.

NOTE: MetaBridge 2.0 is hosted on Canadian soil at The University of British Columbia. No uploaded data is retained on the server, and users can purge their uploaded data manually.

Concepts demonstrated

  • Client-side rendering with React
  • Server-side rendering and code-splitting with Next.js
  • Server routing with Node.js
  • PostgreSQL for data storage (not yet implemented)
  • GraphQL server & querying with Apollo (not yet implemented)

Personal Projects

Get Fit

Get Fit is a fitness-tracking app to help with the difficulty of delayed gratification! We all know it's hard to stick to a workout schedule or a diet, but why? Humans are terrible at reasoning when it comes to delayed gratification, we always want everything now!! That's why I built this web app--to help tie long-term fitness goals to near-term rewards! Keep track of your diet and exercise and earn points towards short-term goals! It might take you a while to reach your ultimate goal, but you'll have fun along the way, and hopefully Get Fit will make it just a bit easier to not eat that tempting donut!

Concepts demonstrated

  • Node.js server with and server routing Express
  • Data visualization with D3.js
  • Local user authentication with passport.js
  • Secure password storage with bcryptjs
  • Session management with cookies
  • Email registration and validation with nodemailer
  • User data storage and retrieval with MongoDB and Mongoose ODM
  • Server-side logging in Node.js with Winston
  • Client-side logging with Rollbar
  • Client side DOM manipulation with vanilla JS and JQuery
  • Webpack for client-side dependency management and code bundling
  • Babel transpiling on client and server to enable ESNext features
  • Asynchronous programming and routing with async/await and Promises
  • Security-conscious sever with Snyk
  • Deployment pipeline and server management with PM2
  • Sass styling with Bulma
  • View templating with Pug
  • JavaScript-Python integration with PythonShell and PyMongo
  • Server-side datetime handling with Moment.js
  • Lightweight client-side datetime handling with date-fns
  • Client-server timezone synchronization
  • Code linting enforcement with ESLint
  • Code style enforcement with Prettier
  • Bruteforce prevention
  • User input sanitization and validation
  • Self-hosted webserver with Nginx on Vultr (a Virtual Private Server provider)

This Website!

This website is a static site generated with reptar!

Concepts demonstrated

  • Webpage templating with EJS
  • Flexbox CSS with Bulma
  • Client side DOM manipulation with vanilla JS and JQuery
  • Self-hosted webserver with Nginx on Vultr (a Virtual Private Server provider)

Open-Source Contributions


An open API for MyFitnessPal written in Python. I have contributed:

  • The ability to pull exercise data from public and authenticated MyFitnessPal profiles.
  • The ability to determine when a diary entry has been marked as completed.
  • Tests to validate API stability.


A tool that converts JupyterHub into a LTI Tool Provider, which can be then easily used with various Tool Consumers, such as Canvas, EdX, Moodle, Blackboard, etc. I have contributed:

  • The capability to receive Canvas user ID parameters from Canvas LTI launch requests.
  • Instructions documenting setting up LTI authentication for JupyterHub with the Canvas Learning Management System.


A Browser extension that simplifies the Twitter interface and adds useful features. I have contributed:

  • Syntax highlighting in code snippets for the R programming language.