Skip to content

~/projects

Projects

Selected work, written up the way I'd want to read it: the problem, what I did, and what happened.

Engineering assistant for Slack

LLM · internal tool · 2024–

Ask questions about a large codebase in Slack and get answers grounded in the actual code.

Problem
Engineers kept asking where something lives, how a feature works, why a decision was made. The answers were in the code, but grep has a ceiling.
Approach
  • Chunked the codebase along function and class boundaries with tree-sitter, falling back to overlapping token windows.
  • Embedded the chunks for similarity search; each question retrieves the top-k chunks as context.
  • Answers stream back into the Slack thread, so debugging help shows up where the conversation already is.
Outcome
Fewer questions queued behind senior engineers, and a faster ramp for people new to the codebase.
  • Python
  • Slack API
  • Embeddings
  • RAG

Report-filing browser extension

Chrome extension · 2024

Kept a revenue-critical workflow alive when the API it depended on was suspended.

Problem
Customer report filing ran through an API that was suddenly suspended, and the business couldn't wait for it to return.
Approach
  • Automated the report-filing process end to end in the browser, without the suspended API.
Outcome
Onboarding and retention kept going through the outage; revenue grew by more than $1M that month.
  • JavaScript
  • Chrome Extensions
  • DOM automation

A frontend people can find their way around

Refactor · team · 2024

Restructured a growing frontend codebase, then wrote down the why so it would stick.

Problem
The codebase had grown faster than its conventions. Finding things took longer than changing them.
Approach
  • Introduced one file structure and naming convention, applied across the codebase.
  • Documented the decisions, not just the rules, and walked the other frontend engineers through them.
Outcome
Code that reads predictably, and features that ship faster because less time goes to searching.
  • React
  • TypeScript
  • Documentation

Pickriders

Mobile platform · 2023–2024

A logistics platform built from zero: rider and customer apps, admin and business portals, one backend.

Problem
Deliveries have to work on the phones riders actually carry — older Android devices on patchy networks — and the money has to add up.
Approach
  • Rider and customer apps in React Native, tuned for lower-end Android, with Reanimated for motion that stays smooth there.
  • React Query caching so the apps stay usable when the network isn't.
  • Led the backend move from GraphQL to a NestJS REST API, and worked on the ledger: transactions, fees, discounts and revenue across every flow.
  • Owned CI/CD for five codebases (customer, rider, admin, business, backend) and ran sprints in GitHub Projects.
  • Smaller pieces that mattered: referral rewards, scheduling, push notifications over FCM.
  • React Native
  • NestJS
  • React Query
  • Reanimated
  • Firebase
  • CI/CD

A meditation app, made dependable

Mobile · testing · releases · 2021–2023

End-to-end tests on every build, sessions that pick up where you left off, and calmer releases.

Problem
Releases depended on long manual QA passes, and an interrupted meditation session simply lost its progress.
Approach
  • Wrote a Detox end-to-end suite for the critical flows and ran it in Bitrise on every build, with Fastlane handling builds and delivery.
  • Made session timing resumable, with completion alerts and scheduled reminders through push notifications.
  • Fixed critical bugs in the course video player and made course progress save reliably.
  • Coordinated QA during release cycles, reviewed code, and helped assess candidates during hiring.
Outcome
Manual testing time fell by more than 70%, across several stable releases.
  • React Native
  • Detox
  • Bitrise
  • Fastlane
  • FCM

Private peer-to-peer calls in a mobile app

Mobile · real-time · 2019–2020

In-app audio and video calls over WebRTC, with the media and signalling encrypted.

Problem
Users needed to talk to each other inside the app, with low latency and without the conversation being readable in transit.
Approach
  • Peer-to-peer audio and video over WebRTC, inside React Native.
  • Encrypted both the media streams and the signalling data.
  • AWS Cognito for authentication, Redux Toolkit for predictable state, Fastlane for beta builds.
  • React Native
  • WebRTC
  • AWS Cognito
  • Redux Toolkit
  • Fastlane

KeScript

Open source · 2026

This site, kescript.com. GitHub issues as the CMS and the comment store, rendered with Next.js.

Problem
I wanted to write in markdown without a database, a CMS bill, or a third-party comment widget.
Approach
  • Posts are labelled GitHub issues; frontmatter optional.
  • Comments and reactions are written to the same issue via GitHub's GraphQL API, as the reader.
  • A unified/shiki pipeline renders everything from footnotes to Mermaid diagrams.
  • Next.js
  • TypeScript
  • GitHub GraphQL
  • Shiki
Source