Open source is part of my day-to-day work: maintaining my own tools, trying them in practice, and contributing improvements upstream. Early experiments and visualizations live in Labs.

Dotfiles

My everyday development environment · Actively maintained

My largest ongoing personal open-source project is the environment I work in. These dotfiles bring together Neovim, tmux, zsh, terminal tools, and coding-agent configuration across macOS and Linux.

I keep improving the small things that shape a working day: finding information, moving between sessions, carrying configuration between machines, and giving agents consistent instructions. A Makefile installs the configuration and converges the tools toward the setup I use.

This is an opinionated personal environment. Read the installation steps and scripts before applying it to your own machine.

Browse the dotfiles · Setup and documentation

Viewrule

Experimental tool · Used on this website

How do you give a coding agent useful design boundaries—and check whether its UI stays within them?

Viewrule combines written design rules with executable browser checks for layout, density, context, and accessibility. It captures both page overviews and native-scale detail so large screens do not conceal small defects. Agents receive findings tied to the rules; human feedback helps refine the constraints.

It includes a CLI and a Claude Code plugin. This website uses it to check its rendered pages. Passing those checks means the configured constraints passed; it does not establish that a design is good or automate every accessibility judgment.

Source and installation · Releases · Why feedback matters

GitHub activity

GitHub contributions over the last year2025-09-14 to 2026-09-13. Each square is one day, from top to bottom within each week. Brighter squares indicate more contributions as categorized by GitHub. Monthly totals follow.2025-09-14: 0 contributions2025-09-15: 1 contributions2025-09-16: 0 contributions2025-09-17: 0 contributions2025-09-18: 10 contributions2025-09-19: 7 contributions2025-09-20: 0 contributions2025-09-21: 12 contributions2025-09-22: 12 contributions2025-09-23: 5 contributions2025-09-24: 10 contributions2025-09-25: 12 contributions2025-09-26: 0 contributions2025-09-27: 14 contributions2025-09-28: 11 contributions2025-09-29: 17 contributions2025-09-30: 8 contributions2025-10-01: 8 contributions2025-10-02: 1 contributions2025-10-03: 10 contributions2025-10-04: 0 contributions2025-10-05: 5 contributions2025-10-06: 26 contributions2025-10-07: 16 contributions2025-10-08: 12 contributions2025-10-09: 19 contributions2025-10-10: 19 contributions2025-10-11: 0 contributions2025-10-12: 27 contributions2025-10-13: 4 contributions2025-10-14: 1 contributions2025-10-15: 0 contributions2025-10-16: 0 contributions2025-10-17: 11 contributions2025-10-18: 56 contributions2025-10-19: 38 contributions2025-10-20: 16 contributions2025-10-21: 19 contributions2025-10-22: 22 contributions2025-10-23: 36 contributions2025-10-24: 8 contributions2025-10-25: 4 contributions2025-10-26: 54 contributions2025-10-27: 42 contributions2025-10-28: 52 contributions2025-10-29: 16 contributions2025-10-30: 34 contributions2025-10-31: 19 contributions2025-11-01: 77 contributions2025-11-02: 98 contributions2025-11-03: 53 contributions2025-11-04: 73 contributions2025-11-05: 87 contributions2025-11-06: 79 contributions2025-11-07: 142 contributions2025-11-08: 79 contributions2025-11-09: 72 contributions2025-11-10: 79 contributions2025-11-11: 65 contributions2025-11-12: 76 contributions2025-11-13: 98 contributions2025-11-14: 69 contributions2025-11-15: 54 contributions2025-11-16: 126 contributions2025-11-17: 153 contributions2025-11-18: 140 contributions2025-11-19: 158 contributions2025-11-20: 141 contributions2025-11-21: 177 contributions2025-11-22: 214 contributions2025-11-23: 278 contributions2025-11-24: 166 contributions2025-11-25: 245 contributions2025-11-26: 457 contributions2025-11-27: 102 contributions2025-11-28: 193 contributions2025-11-29: 347 contributions2025-11-30: 145 contributions2025-12-01: 117 contributions2025-12-02: 91 contributions2025-12-03: 113 contributions2025-12-04: 80 contributions2025-12-05: 31 contributions2025-12-06: 0 contributions2025-12-07: 32 contributions2025-12-08: 21 contributions2025-12-09: 9 contributions2025-12-10: 31 contributions2025-12-11: 17 contributions2025-12-12: 16 contributions2025-12-13: 15 contributions2025-12-14: 10 contributions2025-12-15: 0 contributions2025-12-16: 5 contributions2025-12-17: 0 contributions2025-12-18: 10 contributions2025-12-19: 23 contributions2025-12-20: 31 contributions2025-12-21: 1 contributions2025-12-22: 23 contributions2025-12-23: 51 contributions2025-12-24: 0 contributions2025-12-25: 0 contributions2025-12-26: 4 contributions2025-12-27: 0 contributions2025-12-28: 15 contributions2025-12-29: 0 contributions2025-12-30: 4 contributions2025-12-31: 4 contributions2026-01-01: 0 contributions2026-01-02: 0 contributions2026-01-03: 10 contributions2026-01-04: 20 contributions2026-01-05: 1 contributions2026-01-06: 3 contributions2026-01-07: 2 contributions2026-01-08: 5 contributions2026-01-09: 12 contributions2026-01-10: 12 contributions2026-01-11: 0 contributions2026-01-12: 2 contributions2026-01-13: 2 contributions2026-01-14: 6 contributions2026-01-15: 8 contributions2026-01-16: 2 contributions2026-01-17: 1 contributions2026-01-18: 12 contributions2026-01-19: 8 contributions2026-01-20: 14 contributions2026-01-21: 27 contributions2026-01-22: 55 contributions2026-01-23: 16 contributions2026-01-24: 7 contributions2026-01-25: 0 contributions2026-01-26: 15 contributions2026-01-27: 29 contributions2026-01-28: 18 contributions2026-01-29: 8 contributions2026-01-30: 17 contributions2026-01-31: 10 contributions2026-02-01: 8 contributions2026-02-02: 35 contributions2026-02-03: 55 contributions2026-02-04: 3 contributions2026-02-05: 3 contributions2026-02-06: 1 contributions2026-02-07: 2 contributions2026-02-08: 9 contributions2026-02-09: 0 contributions2026-02-10: 0 contributions2026-02-11: 8 contributions2026-02-12: 9 contributions2026-02-13: 8 contributions2026-02-14: 56 contributions2026-02-15: 44 contributions2026-02-16: 49 contributions2026-02-17: 33 contributions2026-02-18: 85 contributions2026-02-19: 6 contributions2026-02-20: 16 contributions2026-02-21: 35 contributions2026-02-22: 15 contributions2026-02-23: 23 contributions2026-02-24: 7 contributions2026-02-25: 43 contributions2026-02-26: 51 contributions2026-02-27: 16 contributions2026-02-28: 0 contributions2026-03-01: 38 contributions2026-03-02: 25 contributions2026-03-03: 42 contributions2026-03-04: 53 contributions2026-03-05: 18 contributions2026-03-06: 33 contributions2026-03-07: 23 contributions2026-03-08: 38 contributions2026-03-09: 27 contributions2026-03-10: 36 contributions2026-03-11: 38 contributions2026-03-12: 26 contributions2026-03-13: 15 contributions2026-03-14: 21 contributions2026-03-15: 7 contributions2026-03-16: 10 contributions2026-03-17: 2 contributions2026-03-18: 20 contributions2026-03-19: 4 contributions2026-03-20: 2 contributions2026-03-21: 21 contributions2026-03-22: 6 contributions2026-03-23: 0 contributions2026-03-24: 2 contributions2026-03-25: 4 contributions2026-03-26: 4 contributions2026-03-27: 3 contributions2026-03-28: 26 contributions2026-03-29: 7 contributions2026-03-30: 7 contributions2026-03-31: 6 contributions2026-04-01: 12 contributions2026-04-02: 3 contributions2026-04-03: 6 contributions2026-04-04: 0 contributions2026-04-05: 9 contributions2026-04-06: 11 contributions2026-04-07: 10 contributions2026-04-08: 6 contributions2026-04-09: 10 contributions2026-04-10: 19 contributions2026-04-11: 13 contributions2026-04-12: 19 contributions2026-04-13: 15 contributions2026-04-14: 64 contributions2026-04-15: 65 contributions2026-04-16: 0 contributions2026-04-17: 2 contributions2026-04-18: 1 contributions2026-04-19: 10 contributions2026-04-20: 35 contributions2026-04-21: 25 contributions2026-04-22: 31 contributions2026-04-23: 24 contributions2026-04-24: 42 contributions2026-04-25: 14 contributions2026-04-26: 31 contributions2026-04-27: 25 contributions2026-04-28: 13 contributions2026-04-29: 22 contributions2026-04-30: 10 contributions2026-05-01: 2 contributions2026-05-02: 18 contributions2026-05-03: 49 contributions2026-05-04: 105 contributions2026-05-05: 72 contributions2026-05-06: 104 contributions2026-05-07: 125 contributions2026-05-08: 109 contributions2026-05-09: 58 contributions2026-05-10: 24 contributions2026-05-11: 80 contributions2026-05-12: 112 contributions2026-05-13: 89 contributions2026-05-14: 38 contributions2026-05-15: 84 contributions2026-05-16: 6 contributions2026-05-17: 15 contributions2026-05-18: 47 contributions2026-05-19: 45 contributions2026-05-20: 35 contributions2026-05-21: 21 contributions2026-05-22: 49 contributions2026-05-23: 21 contributions2026-05-24: 59 contributions2026-05-25: 25 contributions2026-05-26: 34 contributions2026-05-27: 31 contributions2026-05-28: 37 contributions2026-05-29: 29 contributions2026-05-30: 25 contributions2026-05-31: 17 contributions2026-06-01: 22 contributions2026-06-02: 19 contributions2026-06-03: 26 contributions2026-06-04: 23 contributions2026-06-05: 41 contributions2026-06-06: 20 contributions2026-06-07: 40 contributions2026-06-08: 28 contributions2026-06-09: 36 contributions2026-06-10: 35 contributions2026-06-11: 34 contributions2026-06-12: 45 contributions2026-06-13: 7 contributions2026-06-14: 46 contributions2026-06-15: 18 contributions2026-06-16: 15 contributions2026-06-17: 7 contributions2026-06-18: 49 contributions2026-06-19: 29 contributions2026-06-20: 17 contributions2026-06-21: 1 contributions2026-06-22: 11 contributions2026-06-23: 8 contributions2026-06-24: 1 contributions2026-06-25: 16 contributions2026-06-26: 18 contributions2026-06-27: 15 contributions2026-06-28: 30 contributions2026-06-29: 28 contributions2026-06-30: 19 contributions2026-07-01: 19 contributions2026-07-02: 9 contributions2026-07-03: 6 contributions2026-07-04: 7 contributions2026-07-05: 5 contributions2026-07-06: 20 contributions2026-07-07: 12 contributions2026-07-08: 61 contributions2026-07-09: 100 contributions2026-07-10: 57 contributions2026-07-11: 13 contributions2026-07-12: 10 contributions2026-07-13: 14 contributions2026-07-14: 12 contributions2026-07-15: 71 contributions2026-07-16: 50 contributions2026-07-17: 80 contributions2026-07-18: 18 contributions2026-07-19: 11 contributions2026-07-20: 22 contributions2026-07-21: 10 contributions2026-07-22: 0 contributions2026-07-23: 0 contributions2026-07-24: 6 contributions2026-07-25: 9 contributions2026-07-26: 0 contributions2026-07-27: 54 contributions2026-07-28: 57 contributions2026-07-29: 33 contributions2026-07-30: 56 contributions2026-07-31: 30 contributions2026-08-01: 1 contributions2026-08-02: 23 contributions2026-08-03: 47 contributions2026-08-04: 21 contributions2026-08-05: 37 contributions2026-08-06: 73 contributions2026-08-07: 93 contributions2026-08-08: 4 contributions2026-08-09: 65 contributions2026-08-10: 18 contributions2026-08-11: 7 contributions2026-08-12: 38 contributions2026-08-13: 93 contributions2026-08-14: 127 contributions2026-08-15: 58 contributions2026-08-16: 149 contributions2026-08-17: 131 contributions2026-08-18: 31 contributions2026-08-19: 117 contributions2026-08-20: 156 contributions2026-08-21: 110 contributions2026-08-22: 0 contributions2026-08-23: 33 contributions2026-08-24: 39 contributions2026-08-25: 38 contributions2026-08-26: 100 contributions2026-08-27: 203 contributions2026-08-28: 128 contributions2026-08-29: 93 contributions2026-08-30: 108 contributions2026-08-31: 110 contributions2026-09-01: 105 contributions2026-09-02: 23 contributions2026-09-03: 116 contributions2026-09-04: 89 contributions2026-09-05: 90 contributions2026-09-06: 211 contributions2026-09-07: 202 contributions2026-09-08: 160 contributions2026-09-09: 156 contributions2026-09-10: 248 contributions2026-09-11: 144 contributions2026-09-12: 50 contributions2026-09-13: 9 contributions
GitHub contributions over the last 13 weeks2026-06-21 to 2026-09-13. Each square is one day, from top to bottom within each week. Brighter squares indicate more contributions as categorized by GitHub. Monthly totals follow.2026-06-21: 1 contributions2026-06-22: 11 contributions2026-06-23: 8 contributions2026-06-24: 1 contributions2026-06-25: 16 contributions2026-06-26: 18 contributions2026-06-27: 15 contributions2026-06-28: 30 contributions2026-06-29: 28 contributions2026-06-30: 19 contributions2026-07-01: 19 contributions2026-07-02: 9 contributions2026-07-03: 6 contributions2026-07-04: 7 contributions2026-07-05: 5 contributions2026-07-06: 20 contributions2026-07-07: 12 contributions2026-07-08: 61 contributions2026-07-09: 100 contributions2026-07-10: 57 contributions2026-07-11: 13 contributions2026-07-12: 10 contributions2026-07-13: 14 contributions2026-07-14: 12 contributions2026-07-15: 71 contributions2026-07-16: 50 contributions2026-07-17: 80 contributions2026-07-18: 18 contributions2026-07-19: 11 contributions2026-07-20: 22 contributions2026-07-21: 10 contributions2026-07-22: 0 contributions2026-07-23: 0 contributions2026-07-24: 6 contributions2026-07-25: 9 contributions2026-07-26: 0 contributions2026-07-27: 54 contributions2026-07-28: 57 contributions2026-07-29: 33 contributions2026-07-30: 56 contributions2026-07-31: 30 contributions2026-08-01: 1 contributions2026-08-02: 23 contributions2026-08-03: 47 contributions2026-08-04: 21 contributions2026-08-05: 37 contributions2026-08-06: 73 contributions2026-08-07: 93 contributions2026-08-08: 4 contributions2026-08-09: 65 contributions2026-08-10: 18 contributions2026-08-11: 7 contributions2026-08-12: 38 contributions2026-08-13: 93 contributions2026-08-14: 127 contributions2026-08-15: 58 contributions2026-08-16: 149 contributions2026-08-17: 131 contributions2026-08-18: 31 contributions2026-08-19: 117 contributions2026-08-20: 156 contributions2026-08-21: 110 contributions2026-08-22: 0 contributions2026-08-23: 33 contributions2026-08-24: 39 contributions2026-08-25: 38 contributions2026-08-26: 100 contributions2026-08-27: 203 contributions2026-08-28: 128 contributions2026-08-29: 93 contributions2026-08-30: 108 contributions2026-08-31: 110 contributions2026-09-01: 105 contributions2026-09-02: 23 contributions2026-09-03: 116 contributions2026-09-04: 89 contributions2026-09-05: 90 contributions2026-09-06: 211 contributions2026-09-07: 202 contributions2026-09-08: 160 contributions2026-09-09: 156 contributions2026-09-10: 248 contributions2026-09-11: 144 contributions2026-09-12: 50 contributions2026-09-13: 9 contributions
Last yearLast 13 weeks · Less More

14,719 contributions across September 14, 2025 – September 13, 2026. Retrieved September 13, 2026.

Publicly visible GitHub profile activity, which can include anonymized private contributions. Counts show activity, not impact.

Monthly contribution totals
MonthContributions
September 2025119
October 2025575
November 20254,243
December 2025754
January 2026322
February 2026620
March 2026564
April 2026547
May 20261,565
June 2026704
July 2026852
August 20262,251
September 20261,603

First and last months may be partial.

View current activity on GitHub · What GitHub counts

Selected open-source contributions

Selected changes to tools I use, alongside earlier foundational work. Dates on merged changes indicate when they landed upstream, not ongoing maintainership.

hotreload.nvim

Merged

Replaced interval polling with filesystem-event watchers and limited watching to visible buffers in this Neovim plugin.

File-watching improvements

jnv

Merged

Added configuration-file support for custom keybindings and styles, using the XDG configuration-directory conventions.

Configuration-file support

Sinatra

Merged

Changed default parameter escaping in the bundled rack-protection integration and added a regression test. Both changes were merged upstream.

Parameter-escaping fix

Regression test

fog-aws

Earlier foundational work

I helped get fog-aws started: a Ruby library for working with Amazon Web Services, usable on its own or through Fog. The project lists me as an author alongside Wesley Beary. My involvement was in its early development; I have contributed little in recent years.

Project authorship

Contribution history

I also support Neovim through recurring donations.