Skip to content
narrowstacks

Projects

Stenobar macOS menu-bar app interface

Stenobar (opens in new tab)

macOS app, iOS coming soon

A Mac menu-bar recorder for meetings, calls, lectures, and stray ideas.

Stenobar records system audio and your microphone as separate tracks, then turns each take into transcripts, summaries, tags, and searchable notes. It also adds hold-to-dictate and a quick 'Thoughts' capture path for spoken fragments you would otherwise lose.

  • -System audio and mic captured as separate tracks
  • -Per-app capture for Zoom, Safari, or the whole system
  • -Hold-to-dictate and a local 'Thoughts' capture path
  • -Searchable library with transcripts, tags, and summaries

Hold a hotkey, talk, and let go: a live preview tracks what you say, then the cleaned-up text lands wherever you were typing.

Swift · SwiftUI · macOS · WhisperKit · On-device LLM

screenshots

Dorkroom web app homepage

Dorkroom (opens in new tab)

Web app, iOS coming soon · Open Source

Darkroom & photography calculators to speed up photographic work.

1,020 development recipes · 165 film stocks

Dorkroom collects the little tools I kept rebuilding around darkroom work: border and resize calculators, reciprocity and exposure helpers, film notes, and development recipes. Answer the measurement question, get back to the enlarger.

  • -Border, resize, mat-cut, and stops calculators for printing
  • -Reciprocity, exposure, and lens-equivalency tools for shooting
  • -Film database and manufacturer development recipes with a volume mixer
  • -Fast web app tuned for phone use in a working darkroom

React 19 · TypeScript · Tailwind CSS · TanStack Query

screenshots

DarkroomSCAD web customizer showing a 35mm negative carrier in the 2D preview

DarkroomSCAD (opens in new tab)

Web app · Open Source

A browser customizer for parametric, printable darkroom negative carriers.

9 film formats · 4 enlargers · print-ready STL export

Negative carriers hold film flat in an enlarger, and every enlarger and film format needs a slightly different one. DarkroomSCAD generates the right carrier from parameters; the web customizer puts that behind a UI, so you pick your enlarger and film format, watch the part update instantly, and download a print-ready STL — no OpenSCAD install required.

  • -Nine film formats from 35mm to 4×5, plus fully custom openings
  • -Presets for Omega D, LPL/Saunders, and Beseler enlargers, with matching alignment boards
  • -Instant 2D preview (TypeScript geometry) alongside a lazy-loaded 3D STL view
  • -Exports the carrier and boards as print-ready STLs in a single zip

Next.js · React 19 · TypeScript · three.js · OpenSCAD WASM

screenshots

Smaller things, also on GitHub.