Home / Projects

Projects

crisp September 2023
CLanguagesLispCompilers
A toy lisp interpreter written in C.

crisp is a lisp written in C with a web playground compiled using WebAssembly. I wrote it initially to get more familiar with C using the book Build Your Own Lisp by Daniel Holden as a rough guide to follow.

Links: GitHub, Website

mem1p July 2023
ReactTypeScriptML
Memorize your passphrases with ease.

mem1p is a tool that let’s you memorize new or existing passphrases easily.

It leverages Web-LLM and Stable Diffusion running on chromes recently shipped WebGPU to generate memorable sentences and images that help you better contextualize your passphrase.

This project was built during an internal hackathon with a few colleagues at 1Password during my Summer 2023 internship.

Links: Website

edmv June 2023
RustCLIToolsProductivity
Bulk rename files with your favorite editor.

edmv provides a quick way to rename a bunch of files using any editor of your choosing.

It works by letting you provide valid paths on disk, having them opened up and editable in a temporary file on separate lines, and then performing any rename operations for modified lines upon exit.

The tool behaves as if you were running mv, and has a few integration tests that might be useful to check out as documentation.

Links: GitHub, Crates.io

pdfathom April 2023
PythonCLILangChainGPT
Query PDFs in natural language from the command-line.

pdfathom is a command-line utility that lets you query PDF documents with natural language.

It lets you easily spawn a conversational repl environment with PDF documents on disk or in the cloud - building an in-memory question-answering agent with OpenAI embeddings and LangChain as the orchestrator.

Links: GitHub, PyPI

textmap April 2023
PythonSpacyNLP
A heatmap-like visualization for text-based content.

This project was an experiment to see what it would be like to introduce similarity-based highlighting to text interfaces.

It works by chunking the input text into sentence vectors using Spacy and then ranking them based on their cosine similarity to other sentence vectors within the same body of text - giving them a score that falls within a range which can easily be mapped to a color.

Links: GitHub, Website

stream March 2023
ReactRustTypeScriptMongoDB
A stream of thoughts.

I wrote stream as a way to post short snippets of text to a feed that isn’t crowded by noise and ads (cough Twitter).

It offers a few other niceties:

  • Authentication with GitHub
  • Post creation form with live markdown preview
  • Custom markdown renderer with syntax highlighting and math typesetting with KaTeX
  • Fast full-text search through the entire feed
  • Tag support with exact tag search - simply prefix queries with #

And it’s easily self-hostable with docker.

Links: GitHub, Website

mcgill.courses March 2023
ReactRustMongoDB
A course search and review platform for McGill University.

A few friends and I decided to build this after noticing there was no real McGill-focused course discoverability and review site out there.

We support fast course/instructor search and exploration, alongside functionality for creating and interacting with course reviews.

Links: GitHub, Website

chatgpt.nvim December 2022
PythonNeovimGPT
Query ChatGPT in Neovim.

This project is a simple wrapper around the ChatGPT API to allow for fast queries within the Neovim text editor.

I wrote this soon after an unofficial API wrapper came out for ChatGPT mostly as a way to explore writing Neovim plugins in Python.

Links: GitHub

mcgill.wtf September 2022
RustRedisFTSWeb Scraping
A low-latency full-text search engine for McGill's course catalog.

mcgill.wtf is a fast full-text search of McGill’s entire course catalog with a server implemented in Rust and an intuitive front-end built using React.

I was inspired to build this after seeing classes.wtf, a super fast course search engine for Harvard’s course catalog implemented by Eric Zhang - in addition to noticing a need for this considering McGill’s lack of full-text course search infrastructure.

Links: GitHub, Website

fx June 2022
JavaScriptCanvasWebGLLanguages
Render art with commands.

fx is a simple command-based language for producing art based on texture input/output chaining.

This was a side experiment done before implementing GPU acceleration for degenerate, mostly as a way to fledge out the chaining technique with WebGL textures.

Links: GitHub

present February 2022
RustMarkdownCLIToolsProductivity
A script interpolation engine for markdown documents.

present is a tool that lets you interpolate the standard output of arbitrary scripts that get interpreted by the shell into your markdown documents.

It offers a nice way to automatically update sections of your markdown documents that might be the standard output of a command, such as command-line utility help outputs or benchmarks.

Simply add a suffix to the initial tag of markdown code-blocks using the format present <command>. When you execute the present binary on your document, it will run the specified <command>, and insert the resulting standard output within the same code-block.

Links: GitHub, Crates.io

ord January 2022
RustBitcoin
Rare and exotic sats.

I was an early contributor to ord, the index, block explorer, and command-line wallet for ordinals - the brain-child of Casey Rodarmor.

Ordinals are a numbering scheme for satoshis that allows tracking and transferring individual sats.

The work I did on ord was primarily focused on the block explorer and building out an initial wallet prototype to facilitate ordinal-aware transactions.

Links: GitHub, Manual, Website

degenerate December 2021
RustWASMWebGLGraphics
A generative art computer.

degenerate is a programmable generative art engine that runs in the browser that can be programmed with Rust or JavaScript.

Internally, it operates as a chain of image filters. The output of each filter is used as the input of the next filter. Programs configure the state of the current image filter and call render() to apply it.

Programs that are written in JavaScript are sent to a Web Worker for execution. The program then sends back a series of Filter objects from the worker, which are used to configure the renderer that runs in the main thread. The renderer renders to a full-page <canvas> element using WebGL.

I worked on this primarily in collaboration with Casey Rodarmor.

Links: GitHub, Manual, Website

tetris November 2021
JavaScriptCanvasGames
A tetris clone written in vanilla JavaScript.

This was my first foray into ‘real’ game programming, among other things the project includes:

I wrote this as a final project for a game programming course I took at John Abbott College taught by Vikram Singh in my 5th semester.

Links: GitHub, Website

vim-profiler June 2021
RustVimToolsProfiling
A vim plugin profiler and data plotter.

vim-profiler is a light wrapper around the (n)vim --startuptime command that helps you visualize the bottlenecks in your (neo)vim startup time.

It operates by simply parsing the output of (n)vim --startuptime and giving options to view, export, or plot its parsed representation.

Links: GitHub, Crates.io

paragon April 2021
PythonBenchmarking
A lightweight command-line benchmarking utility for Python code.

paragon provides a simple way to benchmark arbitrary Python code.

It can be invoked directly from the command-line or called from within Python, and has support for rendering statistics, progress bars, and allowing users to export results to various file formats.

Links: GitHub, PyPI

zk February 2021
RustCLIZettelkasten
A note-taking tool based on the famous Zettelkasten method.

zk is a note-taking tool based on the famous Zettelkasten method with support for fuzzy searching, tags, and link exploration.

Fuzzy search is powered by skim with custom keybindings for recursive note exploration based on their links.

Links: GitHub, Crates.io

quwue February 2021
RustPostgresBot
Meet new people on discord.

quwue is a discord bot for meeting new people.

All interaction with the bot is done via direct message, simply add it to your server and let the bot facilitate spontaneous user matchmaking and interactions.

This project was initially started by Casey, I joined development shortly after and we eventually got a nice MVP done - it even has flaky integration tests!

Links: GitHub

vim-crypto February 2021
RustNeovim
View live cryptocurrency prices without leaving (neo)vim.

vim-crypto is a simple Neovim plugin for querying information about current cryptocurrency prices, populating a buffer with a nicely formatted table.

I grab all up-to-date price information from messari.

Links: GitHub

solve January 2021
ReactTypeScriptExpressMongoDB
A fully featured competitive programming workspace in the cloud.

solve is an interface for spinning up competitive programming workspaces quickly.

It allows for users to solve problems on various contest platforms, testing and submitting code directly from a single environment - in addition to letting you save these environments for later.

Code execution against sample test cases is handled by judge0 cloud.

Links: GitHub, Demo, Website

breakout December 2020
TypeScriptCanvasGames
A simple Atari Breakout clone written in pure TypeScript.

breakout is a simple clone of the popular arcade video game developed and published by Atari - Breakout.

It’s a rudimentary clone that simply keeps track of a score and live count, with some basic sound effects to go along with the gameplay.

I wrote this as a final project for a basic web programming course I took at John Abbott College taught by Helen Katalifos in my 3rd semester.

Links: GitHub