94% accuracy.I fine-tuned a small AI to sort bank support messages by what the customer needs.93.7% across the full 3,080-message test.
Magnify the cost chart 100,000×
Same prices. Both bars magnified 100,000×.
AI engineer.
I build AI products and help teams put AI to work.
Shipping production AI since 2022.
Previously
Same prices. Both bars magnified 100,000×.
Work I co-led at Caffeine.ai.

Caffeine lets people build an app by describing what they want. At DFINITY, I worked on the AI that turns those requests into working apps, for a product used by 400,000+ people.
Product Engineer, Growth · Dec 2025 to May 2026
Caffeine’s AI bill ran into seven figures each month. We tested less expensive AI for individual tasks and reused repeated instructions. I co-led this work, which cut the monthly bill by 67%. We changed a task only when it still passed our quality tests.
The growth team had to gather information from several places before deciding what to improve. I built an AI assistant the entire team used to ask “What are our users struggling with most?” or “What do they do after joining?” It pulled answers from PostHog, the product analytics tool, and other data sources, so the team could move from looking up information to acting on it.
I built the steps that guide someone through their first use of Caffeine. In a limited rollout, the measured conversion rate increased by 120%+.
I fine-tuned a small classifier to sort bank support messages. It correctly categorized 94.4% of the same 500 messages that Claude Opus scored 95.0% on. Across the full 3,080-message test set, it scored 93.7%.
The task has 77 fixed categories, such as a lost card or a delayed transfer. Training a model for this narrow job brought it close to Claude’s accuracy, with no API fee for each answer.
The classifier processes messages in batches locally. Based on its measured throughput and a 60 W power assumption, electricity costs about $0.000003 per 1,000 messages. Claude’s recorded API cost was about $0.75 for the same volume in batches of 25.
That is roughly a 254,000× difference. The 100,000×+ figure rounds it down. It compares estimated electricity with API fees; it is not a measure of total business savings.
Same prices. Both bars magnified 100,000×.
Sending the least certain 7% of messages to Claude raised the combined accuracy to 96.4%, with 93% handled locally. Estimated API and electricity cost was about $0.05 per 1,000 messages. This was an exploratory test on the same sample, with several confidence thresholds compared.
The 94.4% result above comes from the RoBERTa classifier. I also tried LoRA fine-tuning on a different model, Qwen3.5-4B. Its free-generation accuracy rose from 66.8% to 86.4%. The classifier remained the better tool for this fixed set of categories.
Banking77 contains 77 types of customer-support request. The fine-tuned RoBERTa classifier answered 472 of the shared 500 messages correctly; Claude Opus answered 475. On the full test set, the classifier answered 2,886 of 3,080 correctly. This is one dataset and one training run, not evidence that the small model can replace Claude on open-ended tasks.
The classifier’s throughput was measured in batches of 64. The reported roughly 1 ms per message is amortized throughput, not the latency of a single request. Electricity is estimated from that throughput at 60 W and $0.18/kWh; power was not measured. Claude’s CLI reported $0.3732 for 500 messages in batches of 25, on a list-price basis. The ratio excludes hardware, training, engineering, idle time, and other operating costs.
The 96.4% combined result uses a 0.9 confidence threshold. Several thresholds were compared on the same test sample, so it needs independent validation. Its $0.05 cost is projected from a 7% fallback share at the recorded batch price, not a measured live bill.
Six test messages exactly duplicate training texts, including two in the 500-message sample. Excluding these leaves the rounded accuracy scores unchanged: 94.4% for the classifier, 95.0% for Claude, and 93.7% on the full classifier test.
Ready-made instructions that help an AI assistant research investments using Robinhood. The kits cover setup, stock research, and options, and connect through Robinhood’s official AI integration.
Cloudflare Workers, Stripe, Resend


The inscription, highlighted in your photo.
View full app screen The passage, its meaning, and the source.
View full app screen Point the phone at an ancient Egyptian inscription and Glyphy helps you read it: the signs, their sounds, and the published text they belong to.
Swift, SwiftUI, on-device vision, Cloudflare
Paste a car listing or VIN and AutoCandid gathers the evidence, then returns Buy, Negotiate, Consider or Pass, with sources and a clear account of any missing information.
Next.js, Cloudflare, Supabase


Separate accounts, one shared picture. PartnerBudget helps two people follow their budget, bills, and spending together, while choosing which accounts stay private.
I’m building versions for iPhone, Android, and web. The budget is calculated by ordinary rules, so the numbers stay consistent. An Ask feature is in development to help explain them.
In development. SwiftUI, Kotlin, TypeScript.


Education often asks everyone to learn the same way. Many people never get the chance to discover what helps them understand, remember, and use what they learn.
I’m building Turner to help each person discover that through practice and feedback, then adapt the learning experience with them. The aim is continuous learning, shaped around the person and what they want to understand.
The current prototypes explore lessons people can practice and get feedback on. One teaches programming; the goal is to support learning across many subjects.
In development. TypeScript, Rust, local models.


Talk through a question with a voice guide, sitting down or on a walk.
Not released yet. Swift 6, SwiftUI, voice.


AI coding assistants need the right instructions and a way to check their work. I built a tool that gives Claude Code and Cursor documentation, examples, and checks for apps built on the Internet Computer network. Downloaded 3,400+ times.
I ran an AI language model on a blockchain network: the Internet Computer. The experiment explores a different way to host AI, with encrypted questions and replies whose origin can be checked.
The 8-billion-parameter model runs across multiple network messages, processing one group of layers at a time. It uses vetKeys for encrypted prompts and certified replies for verification. Built on onicai’s llama.cpp canister.
Currency-options brokers need answers they can trace back to a source. I built a pilot AI assistant that searches sample desk data and cites where each answer came from. Built in 2025, then paused.

An independent redesign of the Liokareas olive-oil store, built as a complete, working front end that hands off to the brand's existing Shopify checkout.
Not affiliated with Liokareas. React, TypeScript, Vite, Shopify handoff.


A voice-first assistant for iOS that combined on-device speech recognition with GPT-4, built with a team of iOS engineers.
I managed 18 direct reports and an outside engineering partner, hired 3 people, owned the product budget, and redesigned the token economics, adding $5M to company reserves.
I grew up speaking French, then English and Spanish. I studied philosophy at Southwestern University, with a minor in computer science.
These days I’m building at Swissy Systems: Glyphy for ancient inscriptions, Turner for learning that adapts to each person, and Abdera for thinking things through.
Philosophy still shapes how I work: getting clear on the question is often as useful as finding an answer.
The full work history is in my resume.