TrackGauge (live instance)

View of TrackGauge; multicolored train icons and routes overlaid on a map of the Downtown Los Angeles area
A view of TrackGauge focused on Downtown Los Angeles. Several subway and light rail vehicles are shown, but an A Line train is selected. The rush hour has died down, so it is only minorly delayed. It will continue north along the route marked in blue.

Live tracker of the LA Metro (LACMTA) system, modelled after FlightRadar24. Currently supports light rail and subway, buses WIP. Predicted and actual arrival times are available up to 120 minutes in the past and future.

Existing tools like Google Maps do not show live vehicle locations, nor a top-down view of the system. They also make it quite difficult to track an individual vehicle. TrackGauge was developed to answer one question which FlightRadar24 and other plane trackers already answer very well: "There's a train/bus/plane in front of me. Can I learn more about it?"

Built on TypeScript, webpack, Express, Leaflet, and others. Major thanks to LACMTA for providing this data to the public.

Barnabas Blocks (source, live instance)

Web IDE based on Blockly, with TypeScript and webpack. Compiles resultant C++ using waca and flashes bytecode to Arduino microcontrollers over Web Serial to enable web-only Arduino development. Used for classes at the wonderful Barnabas Blocks.

A Barnabas Blocks workspace with several blocks.

At left, user-written code pulses an LED at 10 Hz. At right, the equivalent C++ code.

Currently working on support for WeMos boards, which extend the Arduino Uno specification with a networking chip and IPv4/TCP.

waca, Web Arduino Compile API (source)

A service to compile Arduino code over HTTP. Built on Express and arduino-cli.

grebe

WIP paired end read sequencing cleanup tool based on Trimmomatic. Supports basic truncations of reads and various ways of handling universal molecular identifiers (UMIs). Built with rust-bio.

I wrote this just to learn Rust and to beat some lazily written Python code, but it expanded into a viable project. rust-bio-tools was made by people who actually know log probabilities well, but I know Rust now so I think writing grebe was worth it.

"from scratch" projects; reimplementing things for learning purposes (i.e. not exactly production-ready)

A view of a hexagonal Minesweeper grid.
A Minesweeper clone I made for a uni project, showing a hexagonal variant added to demonstrate polymorphism.




This website (no link, you're looking at it)

Finally bit the bullet on my decade-long aversion to web development and decided to put this together. Built with Next.js (i.e. React), Tailwind CSS, and TypeScript.

suprkewl-bot

A "transform" command using the pixels of one image to form another.

Every 12-year-old's obligatory first big project: a Discord bot. I started in 2019, back when it was way easier to just spin up a bot. I barely knew Python but I got better and ended up writing around 7100 SLOC. Then, Discord changed the whole bot ecosystem and added new requirements, so I switched to a JavaScript Discord library and wrote another 3400 lines before I lost interest.

I used way too many production-scale technologies which, in hindsight, I didn't need for such a small project, but it was good practice. Here's some of the technologies I learned:

  • Redis
  • PostgreSQL
  • SQLite (got bored of it, moved to Postgres)
  • APIs: GitHub, Travis CI, NPM, PyPi, Steam, Mojang (Minecraft usernames), Hypixel, rTeX, Open Trivia DB, xkcd