Technical writing samples
Instructional
Build a quickstart chat app with XMTP
This tutorial is designed to get a developer to their first working XMTP app as quickly as possible. The user goal is simple: send and receive a real message. To write it, I built the quickstart app myself using Claude Code, determining the architecture, choosing Vite as the framework, and identifying the components needed for a minimal working implementation. I also built the interactive Live Inbox embedded in the docs page using Claude Code, then verified that the quickstart app and Live Inbox could actually communicate with each other over the XMTP network. To give Claude Code the XMTP-specific context it needed, I used the docs MCP server I had built, feeding it accurate protocol knowledge rather than relying on training data alone. I reviewed the final tutorial with engineers and partner support to validate that the use case resonated and the code was sound. I used Plausible Analytics events on the Send button to measure how far developers progressed through the tutorial and iterated based on drop-off data.
Explanatory
XMTP inboxes, identities, and installations
The user goal is to understand how XMTP's identity model works, including the relationships between inboxes, identities, and installations, which have no direct analogy in most messaging systems. To build this understanding myself, I conducted deep-dive interviews with our VP of Engineering, which I also helped her turn into a video series for the developer community. The series was well received by partners for its authentic dev-to-dev communication style, and one of those videos is embedded directly in this doc. I tested the installation and inbox update limits hands-on, as well as working from engineer input, which informed the CRITICAL callouts for production constraints that developers must understand to avoid irreversible mistakes. I created the diagrams throughout to carry conceptual weight that would have required multiple paragraphs of prose; each one required understanding the system deeply enough to represent state changes visually and deciding what to show and what to leave out. The FAQ section was written in direct response to questions from the developer community.
Reference
XMTP error code glossary
The user goal is self-service troubleshooting. Originally, XMTP error codes were generic placeholders that didn't give developers enough signal to diagnose and fix issues themselves, so they reached out to partner support instead. This reference was designed to change that. It covers 327 error codes across 9 crates in LibXMTP, the core library underlying all XMTP SDKs. I used Claude Code to generate the initial draft from code comments in the LibXMTP repository, then worked with engineers to validate accuracy and retryability signals. Each entry follows a consistent structure: error code, short description, plain-language explanation, and retryability, giving developers exactly what they need to unblock themselves without filing a support request.
Tech blog post
Making XMTP docs available where developers work
This post documents the evolution of XMTP's approach to AI-accessible documentation, from llms.txt files to a full docs MCP server, and explains the reasoning behind each step. The user goal is to make XMTP docs available inside the tools where developers already work, so they can get accurate, context-aware answers from AI agents without leaving their IDE. I built the docs MCP server using Claude Code, deliberately scoping it to two tools: search and fetch. I tested it myself in VS Code, then shared it with app developers and partner support to validate that it worked as expected and that the answers it produced were accurate and useful. Their response confirmed both. The post also reflects on what it means for technical writers to use AI to expand their own agency, shipping infrastructure that previously would have required dedicated engineering time.