Posts
About Me
Hi, I'm Xavier and I live in Boston. I currently work in the e-commerce space, building tools to make stores fast, accessible, and well-tested. In my free time, I like to play board games, try new foods, and fiddle with my dotfiles.
I also help run bostonts.club, a monthly meetup for all things TypeScript and web development.
You can reach me at [email protected], or find me on GitHub and LinkedIn.
Projects
-
scribe
June 2026 – Present
Meeting notes without the notetaker bot. scribe captions your Google Meet and Zoom calls live and names every speaker, running on hardware you already have: any NVIDIA GPU or an Apple silicon Mac. Your audio never leaves your network, every meeting stays searchable, and your AI agents can read and search transcripts over MCP. It doubles as an OpenAI compatible speech to text API and a Home Assistant voice backend.
Technologies: TypeScript, Python, Parakeet, MCP, Nix
-
divvy
October 2026 – Present
Split groceries, utilities, and dinners with the people you live with, and always know who owes whom. Snap a receipt and AI fills in every item, then split each one evenly, by percent, by shares, or to the exact cent. Deploy your own with one click on Cloudflare, where a whole household fits in the free tier: no ads, no subscription, and nobody else holding your data.
Technologies: TypeScript, Astro, Cloudflare Workers, Durable Objects, Workers AI
-
Tetherbug
October 2026 – Present
Apple's Instant Hotspot, for an Android phone and a Mac. When your Mac loses Wi-Fi, it asks your phone over Bluetooth to turn on its hotspot, no root needed, and the hotspot shows up just like an iPhone's: the Personal Hotspot link icon, a metered connection, and the usual auto join rules. Comes with a native Mac app, a CLI, and a SketchyBar widget.
Technologies: Kotlin, Swift, Bluetooth LE, Shizuku, Nix
-
ream
June 2026 – Present
Your everyday PDF chores in one private web app: compress, merge, split, reorder, turn images or Office documents into PDFs, and pages into images. Results chain straight into the next tool, so you can convert a Word file, shrink it, and split it without downloading in between. Deploy your own with one click on Cloudflare or run it anywhere. Your files never leave your machine or your Cloudflare account, and nothing is kept after the response.
Technologies: Go, Astro, TypeScript, Cloudflare Containers, Docker
-
Muscat
July 2026
Every reroll draws a brand new board for the Muscat board game in my own medieval art style: a 12×18 inch poster, generated as SVG right in your browser and exported print ready at 300 DPI. One random seed decides the whole board, and terrain like water, lava, and grass is built from Voronoi regions and rendered live with WebGPU.
Technologies: TypeScript, WebGPU, WGSL, SVG, Canvas
-
himalaya-nvim
February 2026 – Present
Read, search, and write email without leaving Neovim. Threaded inboxes, per field search, drafts that save themselves, and background sync, with telescope, fzf, or native pickers. A heavily reworked fork of pimalaya/himalaya-vim with over 90% test coverage, plus a mock mode so you can try it without an account.
Technologies: Lua, Neovim, Nix
-
virtual-headset
December 2025 – Present
A mute button for any microphone on Linux that Zoom and Google Meet actually respect. It shows up as a real USB telephony headset, so muting from your keyboard, status bar, or browser toolbar stays in sync with the call's own mute button, both ways. It starts muted so you're never live by accident, and ships with NixOS and Home Manager modules.
Technologies: Rust, PipeWire, D-Bus, Nix
-
dots
September 2023 – Present
My NixOS configuration and self-hosted homelab. Runs Traefik, Cloudflare Tunnel, and a half-dozen services via quadlet-nix, plus dozens of small per-machine packages I keep tucked away in here.
Technologies: Nix, NixOS, quadlet-nix, Traefik
-
nuenv
July 2025 – Present
Build your Nix derivations with Nushell instead of Bash. This fork picks up the original after it went unmaintained, keeping it working and adding features like environment binding.
Technologies: Nushell, Nix, Bash
-
browser-session-mcp
April 2026 – Present
Give every AI agent its own long lived browser session in one shared Chrome. Sessions are addressed by an id passed with each call, so they survive reconnects and even MCP server restarts. A separate daemon records every console and network event to disk, and the stack is tuned to drive real sites without tripping bot checks.
Technologies: Rust, CDP, MCP
-
image.nvim
June 2026 – Present
Real images inside Neovim that stay sharp in tmux and over SSH. This fork of 3rd/image.nvim fixes the flicker, tearing, and vanishing images you get upstream when you scroll or switch tmux windows.
Technologies: Lua, Neovim, Kitty Graphics, tmux
-
xnixvim
January 2024 – Present
My Neovim config managed entirely through Nix via nixvim. Reproducible across machines, modular, and shaped around how I actually work in TypeScript, Rust, and Lua.
Technologies: Nix, nixvim, Lua, Neovim
Open-Source Contributions
- FelixKratz/SketchyBar (opens in new tab) Sharpened downscaled app icons with high quality sampling
- sameerasw/essentials (opens in new tab) Made the hotspot automation actually turn on tethering
- graph-kit/graph-kit (opens in new tab) Set up CI checks and a WCAG 2.1 AA audit of every page, and cleaned up the canvas API
- UsefulSoftwareCo/executor (opens in new tab) Fixed leaked SSE requests when remote MCP connections close
- algolia/docsearch (opens in new tab) Added an unmount function and fixed modal sizing and scroll
- atuinsh/atuin (opens in new tab) Brought Nushell support to `atuin hex` and added a `--shell` override to its pty proxy
- agentstation/vhs (opens in new tab) Fixed SVG animation timing and embedded subsetted fonts
- korotovsky/slack-mcp-server (opens in new tab) Integrated the Slack reactions API
- nolanderc/glsl_analyzer (opens in new tab) Created a CLI formatter
- catgoose/nvim-colorizer.lua (opens in new tab) Added oklch color highlighting
- Alexays/Waybar (opens in new tab) Fixed audio visualizer bugs
- lewis6991/gitsigns.nvim (opens in new tab) Fixed blame text overflow
- fzakaria/nix-auto-follow (opens in new tab) Fixed dependency duplication bugs
Art and Doodles
-
Smart Rockets
May 2020
Little rockets 'learn' to hit a target through a genetic algorithm. Each generation is mutated from the fittest rockets of the last. Adapted from a Dan Shiffman tutorial.
Technologies: JavaScript, p5.js
-
Moiré Effect
August 2018
Two sets of horizontal lines rotated against each other. The vertical lines that appear are an optical illusion — the Moiré effect.
Technologies: JavaScript, p5.js
-
Binary Numbers
March 2019
A binary representation of a number, with the decimal in the center. Mouse events shift the bits left and right, or you can type a decimal and watch it convert.
Technologies: JavaScript, p5.js
-
Pong
May 2019
Two-player Pong. WASD for player one, arrow keys for player two.
Technologies: JavaScript, p5.js
-
Raycasting
May 2019
A raycasting demo following Dan Shiffman. Not original work, but a satisfying one to step through.
Technologies: JavaScript, p5.js