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.

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

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-10-19 to 2026-10-23. 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-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: 204 contributions2026-08-28: 128 contributions2026-08-29: 93 contributions2026-08-30: 108 contributions2026-08-31: 110 contributions2026-09-01: 112 contributions2026-09-02: 23 contributions2026-09-03: 118 contributions2026-09-04: 89 contributions2026-09-05: 90 contributions2026-09-06: 211 contributions2026-09-07: 202 contributions2026-09-08: 160 contributions2026-09-09: 168 contributions2026-09-10: 253 contributions2026-09-11: 250 contributions2026-09-12: 50 contributions2026-09-13: 77 contributions2026-09-14: 152 contributions2026-09-15: 156 contributions2026-09-16: 142 contributions2026-09-17: 164 contributions2026-09-18: 256 contributions2026-09-19: 107 contributions2026-09-20: 168 contributions2026-09-21: 184 contributions2026-09-22: 197 contributions2026-09-23: 138 contributions2026-09-24: 255 contributions2026-09-25: 223 contributions2026-09-26: 308 contributions2026-09-27: 63 contributions2026-09-28: 58 contributions2026-09-29: 50 contributions2026-09-30: 70 contributions2026-10-01: 90 contributions2026-10-02: 184 contributions2026-10-03: 39 contributions2026-10-04: 29 contributions2026-10-05: 4 contributions2026-10-06: 116 contributions2026-10-07: 85 contributions2026-10-08: 145 contributions2026-10-09: 193 contributions2026-10-10: 212 contributions2026-10-11: 151 contributions2026-10-12: 84 contributions2026-10-13: 105 contributions2026-10-14: 99 contributions2026-10-15: 148 contributions2026-10-16: 79 contributions2026-10-17: 23 contributions2026-10-18: 29 contributions2026-10-19: 89 contributions2026-10-20: 39 contributions2026-10-21: 95 contributions2026-10-22: 64 contributions2026-10-23: 61 contributions
GitHub contributions over the last 13 weeks2026-07-26 to 2026-10-23. 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-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: 204 contributions2026-08-28: 128 contributions2026-08-29: 93 contributions2026-08-30: 108 contributions2026-08-31: 110 contributions2026-09-01: 112 contributions2026-09-02: 23 contributions2026-09-03: 118 contributions2026-09-04: 89 contributions2026-09-05: 90 contributions2026-09-06: 211 contributions2026-09-07: 202 contributions2026-09-08: 160 contributions2026-09-09: 168 contributions2026-09-10: 253 contributions2026-09-11: 250 contributions2026-09-12: 50 contributions2026-09-13: 77 contributions2026-09-14: 152 contributions2026-09-15: 156 contributions2026-09-16: 142 contributions2026-09-17: 164 contributions2026-09-18: 256 contributions2026-09-19: 107 contributions2026-09-20: 168 contributions2026-09-21: 184 contributions2026-09-22: 197 contributions2026-09-23: 138 contributions2026-09-24: 255 contributions2026-09-25: 223 contributions2026-09-26: 308 contributions2026-09-27: 63 contributions2026-09-28: 58 contributions2026-09-29: 50 contributions2026-09-30: 70 contributions2026-10-01: 90 contributions2026-10-02: 184 contributions2026-10-03: 39 contributions2026-10-04: 29 contributions2026-10-05: 4 contributions2026-10-06: 116 contributions2026-10-07: 85 contributions2026-10-08: 145 contributions2026-10-09: 193 contributions2026-10-10: 212 contributions2026-10-11: 151 contributions2026-10-12: 84 contributions2026-10-13: 105 contributions2026-10-14: 99 contributions2026-10-15: 148 contributions2026-10-16: 79 contributions2026-10-17: 23 contributions2026-10-18: 29 contributions2026-10-19: 89 contributions2026-10-20: 39 contributions2026-10-21: 95 contributions2026-10-22: 64 contributions2026-10-23: 61 contributions
Last yearLast 13 weeks · Less More

19,440 contributions across October 19, 2025 – October 23, 2026. Retrieved October 23, 2026.

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

Monthly contribution totals
MonthContributions
October 2025360
November 20254,243
December 2025754
January 2026322
February 2026620
March 2026564
April 2026547
May 20261,565
June 2026704
July 2026852
August 20262,252
September 20264,494
October 20262,163

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 indicate when changes landed upstream, not ongoing maintainership or release availability.

bqls

Merged

Added type details to completions and richer field and table hovers in this BigQuery language server. Fixed completion panics on unfinished queries and false diagnostics for timestamp parameters in snapshot queries.

Typed completions and query diagnostics

hotreload.nvim

Merged

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

File-watching improvements

focus.nvim

Applied upstream

Added terminal-size thresholds that choose equal-sized Neovim splits on larger terminals and give the focused window more space on smaller ones. The maintainer applied the change directly with my authorship preserved; the pull request was closed rather than merged.

Adaptive split sizing

Original pull request

umya-spreadsheet

Merged

Made the defined-name setter public so dependent Rust crates can create and rename Excel-style named ranges.

Public named-range API

copilot-api

Merged

Preserved Anthropic thinking content as text when translating messages to the OpenAI-compatible API, fixing malformed requests that returned HTTP 400 errors.

Thinking-block translation fix

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.