Projects

Notekettle

I built this as a more intuitive, cloud-based alternative to MuseScore Studio: a music notation editor that runs in the browser. You can enter notes, import and export MusicXML, play back the score and export it to PDF.

How it works

  • Every edit is a reversible operation on a score model, which is what gives undo and redo.
  • MusicXML features the editor does not support are kept and reported instead of being dropped on import.
  • Scores are drawn with Verovio and saved in the browser, and they can be downloaded as files.

TypeScript, Vite, Verovio

Open full page

OC Transpo tracker

A map of Ottawa transit with live vehicle positions, departure boards with real-time delays and route shapes, built on the public schedule data.

How it works

  • Schedule data is read and indexed in the browser, then cached so repeat visits skip the download.
  • The interface works in English and French, and keeps the transit agency’s own stop and route names as published.
  • Route lines are matched onto OpenStreetMap roads, and each bus shows its model, worked out from its fleet number.

React, Vite, Mapbox GL

Open full page

Legistatus

I built this as a bilingual alternative to election-atlas.ca for Canadian federal politics. It has an interactive riding map, a live seat tracker, MP and Senate directories, voting records, polls and historical election results.

How it works

  • It runs on official open data from the House of Commons, the Senate and Elections Canada.
  • The interface works in English and French.
  • It is a static site: nothing is scraped when a visitor opens a page.

React, Vite, Mapbox GL