#Programming Blog

Projects

A curated list of things I’ve built or written that live outside the regular blog post stream.

Developer tools

  • vecgrep — Semantic grep: like ripgrep, but searches by meaning instead of substring. Local-first (the embedding model ships inside the binary, no API keys, code stays on your machine), with an interactive TUI, an HTTP server for IDE plugins, and optional hybrid lexical+semantic ranking. The one I reach for daily.

  • carddown — A CLI flashcard system with spaced repetition (SM2/SM5/Simple8) that lives in your markdown notes. Cards are identified by content hash so they survive edits and file moves; per-vault SQLite state, no cloud, no sync.

  • klik — A typing-speed TUI that adapts to you — analyzes per-character miss rate and timing, then targets your weakest letters with practice words. Detailed analytics, session deltas, and historical comparison. Fork of thokr.

Neovim plugins

A small family of plugins that bring vim-fugitive’s “the workflow is the UI” ergonomics to non-git VCSes, plus a shared review engine.

  • jj-fugitive — A fugitive-style plugin for Jujutsu. Log view as the primary hub, bookmark management, rebase/squash from the log, side-by-side diffs, annotate/blame, divergence protection — the full surface, native to jj’s model.

  • sl-fugitive — Same idea, but for Sapling. Smartlog as the hub, stack-aware mutations (rebase, split, fold, absorb, restack), interactive rebase, amend-to.

  • redline.nvim — The shared review-capture engine behind both plugins above. Press cR in any diff buffer to capture lines into a structured markdown packet, then paste the whole thing into the AI agent of your choice for review. Works with mini.git, vim-fugitive, and Neovim 0.12+ :DiffTool.

Voice & writing helpers

Hotkey-triggered Rust tools for Linux (Wayland) and macOS that sit between your keyboard and whatever you’re typing into.

  • parakeet-writer — Push-to-talk transcription using NVIDIA’s Parakeet v3 model. Hold the hotkey, speak, release — the transcription gets typed (or copied) into whatever window has focus. Local model, no API.

  • improve-writing — Select text, press a hotkey, and a local Ollama model rewrites it in-place. Separate hotkeys for “improve text” and “generate shell command from natural language description.”

Tutorials

  • Sway School — A tree-first tutorial for beginners learning the sway Wayland compositor. Explains the i3/sway layout tree from the ground up with worked examples.

Older projects

  • frinj — A unit-of-measure calculator DSL for Clojure/ClojureScript, inspired by the Frink project. Tracks units through every calculation, ships with a large unit database, supports live feeds for currency conversion. Circa 2013, but still does what it says on the tin. Browser demo lives here.