Work
Pypestream
Conversational AI platform for enterprise customer experience.
- 2025 Staff Frontend Engineer
- 2022 Technical Lead
- 2021 Senior Frontend Developer
- 2020 Frontend Developer
- Set technical direction and own architecture decisions across the frontend, from the customer-facing chat widget to the AI-agent studio.
- Partner with product and design from feasibility to release, and lead the resolution of production issues for enterprise customers.
- Mentor engineers through design and code review; turned team knowledge into written standards and an AI-assisted review workflow the whole team uses.
- Added typecheck and test gates to CI, and moved the team to contract-first, generated API types instead of hand-written ones.
Pype
Pypestream’s new chat widget, which banks, insurers and consumer brands embed on their websites. It serves about 2 million sessions a month. I’m its technical lead.
- Designed the architecture on Lit web components and XState, so the same code runs as a floating widget or a full page instead of two products to maintain.
- Built the embed SDK customers add to their sites, with a strict public API so internal changes don’t break customer pages.
- Created a platform for customers’ CX teams to build their own chat components, with a versioned contract, JSON Schema config and a CLI, so they ship custom experiences without waiting on our releases.
- Brought it to parity with the legacy widget it replaces, including rich messages, surveys, PII masking, video, and 48 locales with right-to-left support.
- Led WCAG 2.x AA accessibility work: focus management, screen-reader announcements and a keyboard model for every component.
- Made it resilient with a three-tier error boundary and reliable reconnect and session restore, so a network blip doesn’t lose a conversation.
- Built a live preview layer for the widget inside our internal builder apps, so customers see styling and content changes as they make them.
AI-agent studio
A platform where teams build AI agents from prompts, voice first and text next. Each agent is a YAML-based specification with its own visual canvas, and can call LLM services as it runs.
- Own the frontend end to end: the prompt-driven agent builder, a visual canvas over each agent’s specification, editors, and voice and chat test flows.
- Worked across services on multi-tenant correctness, debugging issues down to the data layer.
Tech9
Software Engineer
- Set up the initial stack and engineering practices for new applications, and worked with UX and product to shape frontend solutions in React on a Go backend.
GreenOrbit (formerly Effective Digital)
- 2019 Senior Frontend Developer
- 2018 Frontend Developer
- Analyzed requirements, proposed frontend solutions and built them in React for GreenOrbit, a digital workplace product.
- Reviewed the codebase to keep design and implementation consistent and improve usability.
Tudip Technologies
- 2016 JavaScript Developer
- 2015 iOS Developer
- Worked directly with clients on requirements and deadlines, building React, Meteor and TypeScript applications with unit tests.
- Ran internal training sessions on JavaScript and React for other developers.
- Contributed to Form.io’s open-source React renderer, the library that renders Form.io forms in React apps.
- Started with native iOS apps in Swift: responsive portrait and landscape layouts, social sign-up, and TAGKeyboard, an open-source pod that fixes the keyboard covering text fields.
Building
Products I’m building outside work, end to end.
TathastuPre-launch
A digital legacy service. People write messages that reach the people they choose only after a human-verified life-status check. Messages are encrypted in the browser, so the server never sees them.
Nx monorepo, Next.js, Hasura GraphQL, PostgreSQL with row-level security, Web Crypto (PBKDF2, AES-GCM, RSA-OAEP), Firebase Auth, React Native
Side projects
Smaller tools I made because I wanted them, plus open-source fixes.
Stylewright
A browser extension for writing per-site CSS overrides. Fully local, and nothing is applied until you ask.
TypeScript, Manifest V3, CodeMirror
Screen Time Tracker
A macOS menu-bar app that tracks screen time, pausing on lock and surviving restarts. Uses about 30 MB when idle, with hand-drawn SVG reports.
Rust, Tauri 2, TypeScript
Word Improvisation
A random-word improv game for remote teams to play on video calls.
Next.js, React, MUI
Form.io contributions
Contributions to Form.io’s open-source React renderer: tests for most of its form components, a data grid fix and inline layout support.
React, JavaScript
GitButler contributions
A few small fixes to GitButler, an open-source Git client I was excited to contribute to.
Svelte, Tauri
Skills
- Frontend
- TypeScript, React, Lit and web components, XState, MobX, Next.js, Vite, design tokens
- APIs and data
- GraphQL (Hasura, urql, codegen), REST, WebSockets, JSON Schema, PostgreSQL
- Backend
- Node.js, plus Rust with Tauri for desktop apps
- AI
- Claude Code, agent and skill design, prompt design, Anthropic SDK, AI-assisted code review
- Quality
- Vitest, Playwright, Cypress, Percy, SonarQube, WCAG 2.x AA
- Platform
- Nx, Lerna and Yarn workspaces, GitHub Actions, Vercel, Argo CD and Kubernetes
- Earlier
- Swift and iOS, React Native
