More projects are at github.com/osteele, and observablehq.com/@osteele.
Web & Publishing
Web Publishing & Documentation
Liquid Template Engine
A pure Go implementation of Shopify Liquid templates.
Subdomain Router
A Cloudflare Worker for path-based application routing, enabling multiple applications to be served under different paths of a single domain.
Language Learning
Language Learning Tools
Labelingo
Annotate UI screenshots with translations for language learning.
Kana Game
An interactive game for learning Japanese kana characters.
Kana Practice Helper
Interactive tool for practicing Japanese kana writing and recognition.
Add2Anki
A CLI tool to add language learning cards to Anki, with automatic translation and audio generation
Audio2Anki
Convert audio and video files into Anki flashcard decks with translations.
Subburn
Create videos with burnt-in subtitles from audio or video files.
Machine Embroidery
Machine Embroidery Tools
Stitch Sync
Watch and convert embroidery files to machine-compatible formats.
Pyembroidery Convert
CLI tool for converting between embroidery file formats.
Classroom Tools
Teaching & Course Management
Map Explorer
Interactive visualization of the map function in Arduino, Processing, and p5.js.
PWM Explorer
Interactive visualization of Pulse Width Modulation (PWM).
Callgraph
Jupyter notebook extension that adds call graphs to functions.
Multiclone
Fast tool for cloning all forks of a repository or GitHub Classroom assignments.
nbcollate
Combines multiple student Jupyter notebooks into a single organized notebook.
Assignment Dashboard
ArchivedDashboard for tracking student Jupyter notebook submissions on GitHub.
LLM Tools & Libraries
Large Language Model Tools
Claude Chat Viewer
View Claude chat conversations from exported JSON files. Copy the chat as RTF; download a zip of all the artifacts.
Claude Artifact Unpacker
Unpack and organize multi-file projects from Claude's Artifacts.
Travel Photo Explainer
AI-powered tool that explains the cultural and historical significance of travel photos.
Prompt Matrix (JS)
JavaScript library for expanding prompt matrix strings.
Prompt Matrix (Python)
Python package for expanding prompt matrix strings.
p5.js Tools & Libraries
p5.js Development Tools
p5 Server
Command-line tool that runs p5.js sketches with live reload and automatic library inclusion.
P5 Server VSCode Extension
Create and run p5.js sketches within Visual Studio Code with integrated development server and browser.
p5.layers
Simplifies use of createGraphics and p5.js Renders objects for drawing layers.
p5.rotate-about
Adds rotateAbout() and scaleAbout() functions for rotating and scaling around a point.
p5.vector-arguments
Modifies p5.js Shape functions to accept p5.Vector instances as arguments.
Physical Computing
Microcontroller & Sensor Tools
IMU Tools
Tools for sending IMU data from ESP32 and receiving it via MQTT or Bluetooth.
Arduino-BLE-IMU
ESP32 firmware for relaying BNO055 data wirelessly via MQTT and Bluetooth.
IMU Client Examples
Examples using wireless IMU data to animate 3D models and create data visualizations.
Legacy Libraries
Historical JavaScript & Ruby Libraries
Functional JavaScript
ArchivedA library for functional programming in JavaScript that defines standard higher-order functions and utilities for partial function application and function-level programming.
Sequentially
ArchivedA library of temporal and frequency adverbs for JavaScript, providing methods for deferred or periodic execution and function call throttling.
Fluently
ArchivedFluent programming (chained method calls) for JavaScript.
ROpenLaszlo
ArchivedA Ruby interface to the OpenLaszlo compiler for integrating OpenLaszlo development into Rake or Rails applications.
OpenLaszlo Rails Plugin
ArchivedA Rails plugin that makes it easy to use OpenLaszlo client-side applications with Rails.
Collections JS
ArchivedFramework-independent JavaScript collection methods.