Shipping end to end - backend, frontend, infra - with agentic AI in the loop. Ruby at the core, 15+ years in production.
The work below is mostly closed-source, so here's the stuff you can actually click into:
AI & agent tooling
- agent-toolkit - reusable skills and plugins for Claude Code, Cursor, Codex, and Gemini CLI; the agent setup I actually work with day to day.
Ruby gems
- sec_id - validate, parse, normalize and convert securities identifiers (ISIN, CUSIP, SEDOL, FIGI, LEI, IBAN, and more), check-digit math included. My oldest gem.
- candor - turn a block or callable into a real method with an honest signature.
- briefly - a terse, curated facade over your application's most reached-for objects.
- card_dealer - a delightful card-dealing companion for your digital table.
- http_wrapper - a small, ergonomic skin over stdlib
Net::HTTP. - smsru-ruby - dependency-free client for the SMS.ru API: send SMS, phone-call verification, delivery status. Fully RBS-typed, with constant-time webhook signature verification.
Frontend for Rails / Tailwind
- clsx-rails -
clsx/cnview helpers for Rails; a drop-inclass_namesreplacement that benchmarks 2–4× faster. - clsx-ruby - the framework-agnostic core: conditional CSS class strings for ViewComponent, Phlex, or plain templates.
- tailwind-merge-typography - a tailwind-merge plugin that resolves
@tailwindcss/typographyprose-*conflicts correctly.
Browser extensions
- hacker_news_sorted - Chrome extension to re-sort the HN front page by points/time/comments. TypeScript, Manifest V3, zero data collection.
CLI tools & wizards
- oz - config-driven CLI wizard framework in Go: define prompts in YAML, wrap any tool in a discoverable TUI.
- create-rails-app · create-ruby-gem - interactive wizards for
rails newandbundle gem, so you stop looking up flags.
Learning by building
- database-transactions - learn database transactions from verified, runnable examples.
- deck - basic operations on a deck of playing cards, in Elixir.
- A blank repo and broad ownership - schema, infra, deploy pipeline, the lot. Building something from zero is the part that actually energizes me.
- Small teams with a short chain of command. Move fast, but with quality; no long approval chains.
- Designing good interfaces - clean APIs for the people who call them, sharp CLIs and libs for the people who build with them.
- Untangling messy code into something you can reason about. Decomposition is the fun part, not the chore.
- Making slow things fast - finding the real bottleneck and killing it: N+1 queries, missing indexes, counter caches, hot-path denormalization. Measured wins, not guesses.
- Ruby/Rails by default, Go for CLIs and small services, TypeScript on the front end - increasingly AI-augmented across all of it.