About
I started building in crypto in 2020, and when I had to do my taxes nothing could reconcile activity spread across many wallets and chains, so I built my own software for that (see my project Ledger AI). The FTX collapse in 2022 pushed me into local LLMs to structure unstructured evidence and quantify losses. When Claude 3 launched in 2024 I put a model in the loop and started building budget monitoring tools and guardrails for agents (see my project Fairway). I also do freelance work building software in regulated industries (see Verify My Order).
Open to AI and full-stack engineering roles — remote, or based in Tel Aviv.
Work
Tech Stack
Projects
Extends /insights, /usage, claude agents and hooks
Guardrails and devtools for collaborating agents. Claude Code’s docs tell you what to do when you ask; Fairway tells you what to do when you don’t know what to ask, and gives you hooks to encourage patterns and discourage antipatterns. For example, a concurrency guard that intercepts wide git operations (reset --hard, checkout ., force push) before one autonomous coding agent clobbers another’s uncommitted work — multi-agent-safe by design, no shared state between sessions, pre-run interception at the hook layer.
Nine small tools sharing one Go binary, one WAL-mode SQLite store and one MCP server, so anything one tool writes another can read — each extending commands Claude Code already ships (subset: /insights, /usage). Pick the ones you want: most are read-only pull commands that need nothing installed, and two wire into your setup with explicit install and uninstall verbs. The binary alone creates no files, opens no ports, writes no config. Next: budget management for agents, built on the reconciliation primitives from Ledger AI.
Done-for-you · the messy tail worked by hand
A multi-tenant TypeScript service that books crypto and fiat into a double-entry ledger. On-chain data flows through Inngest-orchestrated Solana pipelines (event listening, transaction parsing); off-chain data arrives via Xero/MYOB sync (durable, retry-safe, per-tenant concurrency) and a local multi-modal agent harness over bank statements, screenshots and CSVs for the messy sources. ~$1M+/year reconciled across multiple on-chain and off-chain venues — hundreds of thousands of events, tens of thousands of fiat transactions. The same substrate also feeds on-chain forensics — wallet-flow reconstruction across chains for compliance and loss-quantification.
Backend: React Router v7 + TypeScript server on GCP Cloud Run with PostgreSQL (Cloud SQL) and Prisma, ~120 Prisma tables across 18 schemas, GnuCash-shaped. Inngest orchestrates a multi-step pipeline that ingests Solana on-chain events (via RPC and Anchor). Multi-tenancy via Postgres RLS as authorization (not just filtering), fed by a Zanzibar access-grant table.
Frontend: React components that feel familiar if you’re used to MS Excel, optimised for information density. SSR via React Router v7; per-report view state (filters, pagination, selection) in an HMAC-signed cookie with Zod schemas; TanStack Table with keyboard navigation; inline mutations with useFetcher; Framer Motion over Radix UI. Built as a headless engine for distribution.
Agent Harness: Python pipeline for ingesting unstructured data from voice, vision and OCR using local models on MLX (Apple Silicon). Model choice per task via evals (vision-language models benchmarked for OCR on legible vs degraded documents). Structured output feeds downstream pipelines like Ledger AI.
Lineage: originated as a Python MVP in 2022 — a REST ingestion client over Postgres, reconciling exchange trades against on-chain transfers, extended with event-driven on-chain services — RPC listeners (web3.py) feeding async handlers, fronted by Flask/gunicorn, containerised and deployed to Kubernetes via Helm. Rebuilt in TypeScript as the schema stabilised and multi-tenant requirements landed.
Writing
See allBuilding in Public
I write about building crypto and financial-data tools — and what I learn using AI to ship faster.