Hi, I'm Jacob 👋
I’m building infrastructure for agentic workflows: budget monitoring and guardrails for agents.
JS

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

S

Self-employed

2020 - Present
Software Engineer
Ledger AI — apps like Koinly handle the easy 90%; Ledger AI handles the hard 10% — decoding on-chain transactions into statements for traders, accountants and tax purposes. Hundreds of thousands of on-chain multi-chain events parsed, tens of thousands of fiat transactions reconciled for clients to date. Building this I learned how to reconcile mutable and immutable data sources and I intend to leverage that to add features for monitoring agent spending. https://ledgerai.fly.dev Backend: React Router v7 + TypeScript server with PostgreSQL and Prisma, ~60 models shaped to the GnuCash schema. Inngest orchestrates a multi-step pipeline that ingests Xero (OAuth) and Solana on-chain events (via Anchor and the Meteora DLMM SDK), composes journals, and surfaces P&L and position-lifecycle reports. Current use case is P&L reconstruction of Meteora LP positions on Solana. Frontend: React components that feel familiar if you’re used to MS Excel — high information density with spreadsheet input semantics. Server-side rendered (React Router v7), URL-driven search and filter, forms via Conform + Zod, tables via TanStack Table with keyboard navigation, optimistic UI with useFetcher, and animated transitions via Framer Motion over Radix UI primitives. Components take double-entry-shaped props and animate only the transitions the ledger permits — a split visibly conserves its parent total; the component layer composes over a headless engine rather than wrapping a data grid. Extracted as the Ledger UI component library at https://ledgerui.fly.dev. 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. Fairway — agentic workflows: 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. 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 a command Claude Code already ships: /insights, /usage, claude agents and the tool hooks. Includes a concurrency guard that intercepts wide git operations (reset --hard, force push, checkout .) 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. 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. MIT-licensed. Contact for code access. https://github.com/bespy/fairway Verify My Order — contact-lens prescription verification for a US retailer. A companion Shopify app: orders don’t ship until a prescription is verified — a state machine that negotiates between doctors, patients and the retailer over multi-channel communications. Regulated-sector approval engine with legally binding response deadlines, scoped directly with the non-engineers who own the process. https://verifymyorder.com · https://dimplecolor.com
S

STRV

2017 - 2018
Sales Engineer
Pre-sales engineering at a US software-development agency (New York) — scoping custom software builds and translating client requirements into project specs.
A

Atlassian

2014 - 2015
Software Engineer Intern
Software engineering internship in the Jira/Confluence ecosystem, during my UNSW engineering degree.

Education

U

University of New South Wales

2012 - 2016
Bachelor's Degree in Engineering (Electrical)
Electrical engineering — signals, control systems, and embedded design. Where the systems thinking started.

Tech Stack

Agentic AI / LLM tools
RAG / semantic search
Tool calling / function calling
Prompt & context engineering
Evals / structured output
Local LLMs (Llama, MLX)
Multi-modal ML (Whisper, Qwen3-VL, OCR)
Inference optimization (quantization, batching)
MCP
TypeScript
Python
Rust
React
Node.js
Remix / React Router
Next.js
Data viz / charting (D3.js, SVG)
Tailwind
Radix / shadcn
Zod
PostgreSQL
Redis
SQLite / FTS5
ORMs (Prisma, Drizzle)
Solana (Anchor, Helius)
On-chain forensics
Xero & Stripe APIs
Inngest (durable workflows)
Docker
Kubernetes / Helm
CI/CD (GitHub Actions)
Testing (Vitest, Playwright)
Sentry
GCP
AWS
Fly.io

Projects

Extends /insights, /usage, claude agents and hooks

Fairway (MIT): devtools for Claude Code

Agentic workflows: 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. 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 a command Claude Code already ships: /insights, /usage, claude agents and the tool hooks. Includes a concurrency guard that intercepts wide git operations (reset --hard, force push, checkout .) 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. 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. Same idea as the ledger work one level up: derive the verdict from observable state instead of trusting anyone to remember.

Go
Claude Code hooks
MCP
JSON-RPC 2.0 over HTTP + SSE
SQLite (WAL)
Git plumbing

Done-for-you · the messy tail worked by hand

Ledger AI: forensic crypto and DeFi tax bookkeeping

Koinly and CTC handle the easy 90%; Ledger AI handles the hard 10% — the DeFi protocols and decentralised exchanges the automated tools give up on, decoded into statements accountants and tax offices accept. Works that tail by hand, at volume, and quantifies the gap in dollars rather than hiding it. Also includes fiat extensions for Xero and MYOB.

TypeScript
React Router
Postgres
Solana decoders
FIFO cost basis

Accounting components that move correctly

Ledger UI: React components for financial apps

A React component library powering Ledger AI’s front-end. Animated, Excel-literate accounting primitives — journal entries expanding to their debit and credit legs, transaction split and merge, reconciliation matching, P&L, balance-sheet and pivot tables, and entry forms with spreadsheet input semantics. The domain constraint is the product: components take double-entry-shaped props and animate only the transitions the ledger permits, so a split visibly conserves its parent total. It composes over a headless engine rather than wrapping a data grid.

React
TypeScript
Motion
Double-entry
Headless components

Writing

See all
Follow Along

Building in Public

I write about building crypto and financial-data tools — and what I learn using AI to ship faster.

Settings

Theme