I'm a staff engineer at @userledio, based in the UK, where I lead AI initiatives across the product. I'm passionate about infrastructure, developer experience, system design and agentic technologies, and about building tools and systems that make engineering more sustainable, safe and fun. In my spare time, I build developer tools such as Zenith and Bracketlint, and work on Hash, a programming language and tooling ecosystem.
-
Zenith: a language-agnostic architecture linter for monorepos, built for humans and agents and written in
. You declare contracts such as layers, forbidden dependencies and public entry points, and
zenith checkpoints at the import, or chain of imports, that breaks one. Read the user guide here! -
Bracketlint: a linter and formatter for Jinja, Nunjucks, Django, Twig and Liquid templates, written in
. Install it with npm, Homebrew or a prebuilt binary.
-
Durachok: an online game for playing Durak, a popular Russian card game. Built with
+
, including some cool libraries:
@tanstack/router,@tanstack/react-query,socket.io. -
Graphika: a toy graphing library written in pure , as an alternative to
Chart.jsand other charting libraries. -
teamsearch: a
CODEOWNERS-aware code search tool, written inon top of ripgrep's search libraries. Search only the code a team owns, find out who owns a file, or list the files nobody owns.
I lead developer experience at @userledio, and I build tools on the side to make engineering faster and safer:
- Zenith: a language-agnostic architecture linter that enforces import boundaries in monorepos
- prbot: a Slack and Discord bot that reacts to GitHub PR links with emoji showing each PR's live status
- teamsearch: a
CODEOWNERS-aware code search tool that finds a team's code, a file's owners and unowned files - bracketlint: a linter and formatter for Jinja, Nunjucks, Django, Twig and Liquid templates
- Agent-native tooling: designing developer tools, CLIs and linters that agents can drive as well as humans
- Training and inference pipelines: the pipelines that train and serve the models behind agents
- Electronics: circuit design and simulation
🔒 PGP Public Key
-----BEGIN PGP PUBLIC KEY BLOCK-----
mDMEZp1C6BYJKwYBBAHaRw8BAQdAbmZl2T8wr8K+FtvXsGgD3+bOBxJf99twYgie
9js1JKa0MkFsZXhhbmRlciBGZWRvdG92IDxhbGV4YW5kZXIuZmVkb3Rvdi51a0Bn
bWFpbC5jb20+iJMEExYKADsWIQSsi4t4Az9AkaW7dFKtGxvm5K2JQAUCZp1C6AIb
AwULCQgHAgIiAgYVCgkICwIEFgIDAQIeBwIXgAAKCRCtGxvm5K2JQDZVAP94bpZC
ffX2e64qqvOyP50GqMWPE0iK5s6Ka8D9P9KqhgEAlJIVCSSX9yEhplx0zfy4sqcX
meu1H6WSE5MWpQXZ2gi4OARmnULoEgorBgEEAZdVAQUBAQdAjA60vQ4kEdaz5s/c
8UQ2qnXQjLdpwahRQKCT7t2McBoDAQgHiHgEGBYKACAWIQSsi4t4Az9AkaW7dFKt
Gxvm5K2JQAUCZp1C6AIbDAAKCRCtGxvm5K2JQDymAPwOS5+7n4I3sL2XK9mj4JT5
HkhIjEj145OpvhXIDk+YwgD8CV4LjAlioR6U930Alf9XZw1nKDLLhUoPB3vD9VT5
RQc=
=rbOz
-----END PGP PUBLIC KEY BLOCK-----





