I build the mobile and web products agencies promise before they’ve staffed them.
Flutter, Firebase, Next.js, Supabase, Postgres, OpenAI. iOS, Android and web.
Pono
An AI operating system for business owners — documents, kanban, task boards and long-term roadmaps, run by an assistant with persistent memory of the business.
The hard part was memory beyond the context window: a knowledge graph over a vector store, with retrieval good enough that small cheap models hold their own against frontier ones. On the client, the voice agent had to tell a real interruption from a listener saying “mhm” — barge-in detection that doesn’t stop mid-sentence for acknowledgements.
A personal finance app that connects to your bank, categorises every transaction, and flags the spending you’d otherwise never notice.
Plaid normalises less than it promises — every bank returns a different shape, and the categoriser had to hold across all of them. Merchant strings arrive as MCD-CHARGE-CHICAGO, so classification runs on inference rather than string matching, and it had to stay cheap enough to run on every transaction rather than on demand.
A parking marketplace built for New York — residents rent out empty driveways by the hour, and drivers find and hold a spot before they arrive.
The interesting problem was the state machine, not the map. A booked space with a driver ten minutes out, a host who wants it back, and a late arrival all have to resolve to one answer about who owns that space right now. Live location tracking on the way to the spot, with cancellation and lateness rules that hold when both sides are moving.
A browser built for AI agents. Any model connects over MCP and drives it like a person would, with the user’s own sign-ins. It runs my sales pipeline overnight.
The hard part was trust, not clicking. An agent using your real accounts has to be safe to leave alone: passwords and one-time codes are typed by the browser itself so the model never sees them, captchas and approvals go to your phone, every site gets its own rate limit, and blocked or walled pages are flagged instead of read as content. Every step is logged, so a different model can pick up a half-finished task where the last one stopped.