Projects
PDF Mira
A research PDF reader proof of concept that links AI-generated argument maps to passages in the paper.
- Year: 2026
- Open preview ↗
- Discourse Graphs ↗
- MIRA ↗
- React
- TypeScript
- PDF.js
- React Flow
- LLM
- exe.dev
Drawing on Discourse Graphs, PDF Mira explores whether a map of a paper’s questions, claims and evidence can help readers follow its reasoning. Add an arXiv paper and the prototype generates a map in the MIRA format alongside the PDF. Select a card to jump to its source passage, or click a margin mark in the PDF to find the corresponding card.
The map labels inferred links and estimated passage locations, and keeps AI-written card text visually separate from the author’s words. An outline shows how the argument fits together, and the Sequence view follows the order of the paper, scrolling in sync with the PDF.
Remnant Locator
A mobile web app that helps countertop fabricators find leftover stone at nearby shops.
- Year: 2025
- Role: Product and system design
- For Remfind, through Machine Intent
- PWA
- Preact
- Convex
- Web Push
- Stripe
- AI agents
Fabrication shops often need a small piece of a specific stone for a job, and the nearest source is usually another shop's remnant rack. In Remnant Locator a shop posts what it needs, every shop within 25 miles gets a push notification, and the two shops message directly. Shops can browse the network without an account; posting and replying require a paid membership, which is also how the founder is validating demand.
This was the founder's first software product, so I also acted as product manager. I kept the transaction between shops rather than mediated by the platform, gave each shop one shared account with equal permissions, and designed for use on a phone between jobs, with no feature more than three taps from the navigation bar. The hardest model to get right was shop-wide threads with read state tracked per person.
AI agents wrote the code. I designed the system so they could work in small, bounded modules: app logic sits behind contracts, and the same test assertions run against mocked and real services. The mocked build doubled as the founder's demo. Preview environments run simulated shops that become active when a real user is, so matching and notifications can be tested on a populated network. Production deploys are gated behind a passkey that only I hold.
Pincites
A Microsoft Word add-in that reviews and drafts contracts against a legal team's playbook.
- Year: 2024–25
- Role: Staff engineer
- Legal AI startup, team of four
- Word add-in
- React
- Jotai
- Go
- LLM
Lawyers work with Pincites in a side panel inside Word. It reviews a contract against the team's negotiation playbook, drafts clauses, and applies its suggested edits as tracked changes, so the output stays in the document lawyers already use.
I owned the frontend and architected the AI chat system. Chat originally required picking a workflow (review, drafting, summary) up front. I proposed one chat that moves between modes based on what the user asks, with a lightweight intent step that runs before the full document is loaded into the model's context. Refusals became consistent, tests could target each step, and the design became part of the sales demo.
Word add-ins run inside Word, so the code that edits documents could not be tested from outside. I built a harness that injects a test module into development builds and reports back to a local service, which made tracked changes, comments and table edits testable and exposed several Word API bugs we then worked around. I also moved application state onto Jotai stores with separate commands and queries, and traced a 6 to 7x slowdown in the Go review pipeline to a library's default concurrency cap.
HyperTrack Ops
Operations dashboards and maps for companies tracking field workers in real time.
- Year: 2021–23
- Role: Lead developer
- Location tracking platform
- React
- TypeScript
- GraphQL
- MapLibre
- Recharts
HyperTrack provides live location tracking for field workforces. Its operations apps let customers monitor workers, trips and tracking health across a fleet, and diagnose why a device stopped reporting.
I led product-experience engineering for those apps. With a newly hired product manager I redesigned the main dashboard: one filter state shared and deep-linkable across every view, interactive KPI charts, outage charts that show the cause on hover, and compact spark charts in each table row. Dashboard usage rose about fivefold after the release, and sales began using it in demos. I recorded the launch walkthroughs shown here.
The redesign depended on groundwork. Each page had its own state handling and URL conventions, so I moved shared state into common stores, converted the most depended-on code to TypeScript, and generated typed GraphQL clients for the team. I also built the MapLibre map components the team reused, a geofence editor on Mapbox satellite imagery, and reduced map tile costs by at least 30% through render fixes and per-view tile sources.
DealPoint
A shared deal room where enterprise sellers and buyers plan a purchase together.
- Year: 2019–21
- Role: Lead developer
- Sales startup, acquired by Clari in 2021
- React
- TypeScript
- D3
- Kotlin
- Ant Design
Enterprise deals take months, and they usually stall because the buyer's team gets busy, not because they object. DealPoint gives both sides one mutual action plan: a timeline of the milestones, owners and dates that lead to a signed contract.
The founder's specification described a broad sales platform. I argued for an MVP built around the action plan alone, then ran a design cycle with the CEO and a visual designer centered on one moment: the buyer's champion showing the plan to their boss in a few seconds. The simplified plan format that came out of it stayed in the product. Customers were onboarding about six months after the reset, and Clari later acquired DealPoint and kept the product.
I chose the stack (Kotlin, React, TypeScript, Ant Design), designed the API, and built the frontend. The centerpiece was an interactive timeline in D3 and SVG that lays the seller's relative deal template over the buyer's real calendar, shows which milestones are likely to slip, and lets users drag dates and preview the result before saving.
Chat Stream
Branching AI conversations on a visual canvas.
- Year: 2023
- Role: Author
- Open-source Obsidian plugin
- Obsidian plugin page ↗
- TypeScript
- Obsidian
- LLM
Chat Stream is a plugin for Obsidian’s canvas. Each note is a message, and the notes upstream of the selected message determine what the AI sees. Users can branch at any message to try different prompts or source notes, then merge branches back into a thread. It works with any OpenAI-compatible chat API.
Each branch keeps a visible record of the inputs used for a reply. Users can return to the same starting context, change one input at a time, and compare the results side by side. The canvas makes those experiments reproducible and gives users precise control over what they send to the model without writing code.
It reached roughly 400 installs a month, and the AI agency Move 37 used it to test prompts interactively with customers.







