Tools

Small pieces of software I've built out of curiosity. Mostly open source, free to use, made to answer a specific question I had.

These are the things I build at the intersection of birding, the Met's open-access collection, small visual or print tools that don't have a polished commercial alternative, and the occasional game. Mostly open source, all free, all written in mostly-vanilla JavaScript so they keep working without me having to maintain a build pipeline. The first two are the most directly bird-aligned: Opera Glass is an interactive web edition of Florence Merriam Bailey's 1889 field guide, and METBird cross-references the Met's 9,751 open-access bird artworks with eBird taxonomy. The others sit adjacent: NYC tooling, print art, zine layout.

  • Screenshot of the Opera Glass interactive reader showing the title page of Florence Merriam Bailey's 1889 Birds Through an Opera Glass at the top, with the chapter table of contents listing 'I. The Robin,' 'II. The Crow,' 'III. The Bluebird' and onward.

    Opera Glass

    Birds Through an Opera Glass (1889), interactive

    An online reader for Florence Merriam Bailey's Birds Through an Opera Glass, the 1889 field guide written for someone who might see a bird on a walk and want to know what it was. All 70 chapters navigable, all 16 inline illustrations, all 11 of Bailey's transcribed bird songs. Public-domain text, modern reading experience.

    Why it exists: Brings one of the first popular American bird books online as a navigable web edition, keeping the original illustrations and song notations Bailey set inline.

    • Vanilla JS
    • Public domain
    • Internet Archive
  • Screenshot of METBird with 'warbler' typed in the search box, showing Met Museum results: Kitagawa Utamaro's 1798 woodblock 'Preparing Food for the Warbler,' an 18th-century writing box with warbler-and-plum-tree decoration, Hiroshige's 1835 'Warbler on a Plum Branch,' two more Japanese warbler prints, and Audubon warbler plates. 9,751 bird objects indexed, top right.

    METBird

    9,751 Met Museum bird artworks, searchable

    A searchable browser for the Metropolitan Museum of Art's open-access bird collection, cross-referenced with eBird taxonomy. Type a bird name and surface every Met artwork of that species: ukiyo-e warblers, Audubon folios, 18th-century cigarette cards, and a lot that doesn't fit a genre.

    Why it exists: Maps the Met's 9,751 open-access bird artworks to modern eBird taxonomy, so a search for any species surfaces every depiction in the collection.

    • Vanilla JS
    • Met Open Access API
    • eBird taxonomy

    See also: Public Domain Bird Library · Opera Glass reader

  • Screenshot of NYC Off-Leash with a five-borough MapLibre map dotted with 91 dog-run pins. The right sidebar lists individual dog runs by name with borough, ZIP, surface, and seating: Frank Decolvenaere (Brooklyn), Frank S. Hackett Park (Bronx), Kensington (Brooklyn), Triborough Bridge Playground C (Queens), Sirius (Manhattan), and others. Filter row at top by borough, ZIP, surface, and seating; orange 'Report a Dog' button at the map's bottom edge.

    NYC Off-Leash

    A map of NYC dog runs, off-leash hours, and animal incidents

    An interactive MapLibre GL map pulling from NYC Open Data. Shows every dog run and off-leash area across the five boroughs alongside 311 animal-related incident reports. Useful for dog owners planning a walk and for anyone curious about the pattern of urban-wildlife interactions in NYC.

    Why it exists: Combines NYC's dog runs, off-leash hours, and 311 animal-incident reports on a single MapLibre map, so dog owners and the curious can see the whole picture in one place.

    • MapLibre GL
    • NYC Open Data
    • Vanilla JS
  • Hero image for Migration: a bird in flight across a stylized blue-and-green drift-mode landscape, with the green Playfair Display title 'Migration' overlaid.

    Migration

    A music-driven rhythm game where a bird evolves through the music

    A small bird flies across a stylized landscape while geometric cues slide in from the right, generated from the song's spectral flux. Press arrows in time with the cues to build a streak; the bird transforms from egg, to fledgling, to songbird, to phoenix as the run progresses. Drift mode plays the same songs without scoring. Built in vanilla JavaScript with no engine, no framework, and no build step.

    Soundtrack by Shane Curry.

    Why it exists: Vib-Ribbon (1999) generated its levels straight from the music. Migration does the same in the browser, written in vanilla JavaScript and the Web Audio API.

    • Vanilla JS
    • Web Audio
    • Rhythm
  • Screenshot of Riso Preview showing a photograph of tangled bare tree branches with green foliage and a partial bright orange flower loaded into the simulator. Three Layer toggles (Layer 1, Layer 2, Layer 3) sit unchecked above the image. Header reads 'Preview artwork in risograph ink colors and simulate overprint.'

    Riso Preview

    Risograph print simulator with 3-layer overprint

    Simulate how artwork will print on a risograph before committing ink. Load any image, assign up to three Riso Kagaku inks per layer, and preview how they'll blend in overprint. Saves a lot of test prints when you're working from home without a studio.

    Why it exists: Previews how Riso Kagaku inks will composite in 1-, 2-, or 3-layer overprint, so you can commit color decisions before you commit ink and paper.

    • Canvas API
    • Vanilla JS
    • Color theory
  • Screenshot of One-Page Zine with all 8 panels populated with warbler photographs in the correct one-cut-one-fold orientation: Page 6, Page 5, Page 4, Page 3 across the top row; Back Cover, Front Cover, Page 1, Page 2 across the bottom. Each panel has a labeled drop zone with a small close button. Tagline: 'Upload 8 pages to generate your zine.'

    One-Page Zine

    Eight-page zine from one sheet, exported to PDF

    Arrange an 8-page zine from a single sheet with proper fold orientation baked into the layout. Drop in images and text per page, preview the fold, then export to a print-ready PDF. The output is the standard one-cut-one-fold mini-zine format.

    Why it exists: Drops 8 page images into a single-sheet layout with the fold orientations baked in, then exports a print-ready PDF for the standard one-cut-one-fold mini-zine.

    • jsPDF
    • Canvas API
    • Print layout