Direct client · Florida, USA
Eagle Club Systems
Golf course management platform — booking, membership and operations for clubs across the United States.
100+Golf courses running it
Voice agents that answer real phone lines, tooling that gives coding agents real context, and the full product around them — schema, queues, dashboards, deployment. Built end to end, not prototyped.
Verified track record · Upwork
Top Rated Plus Top 3% of talent on Upwork
Phone agents that book, answer and route in real time — media streams, streaming speech, barge-in, and tool calling into the systems you already run.
Tooling that gives agents context they can act on: structured traces, MCP servers, retrieval, and the evals that keep output trustworthy.
The whole system, not a demo — schema, job queues, auth, dashboards, and the deployment that keeps it running at 3am.
Background
Enterprise delivery alongside Fortune 500 engineering teams, then direct product work for US operators whose businesses run on the software every day.
10+ years in software development — enterprise delivery through to solo, end-to-end product builds
Honeywell · Honda · Aptar — Fortune 500 engineering organisations
Direct client · Florida, USA
Golf course management platform — booking, membership and operations for clubs across the United States.
100+Golf courses running it
Direct client · Florida, USA
Patient management systems handling scheduling and records for medical practices around the country.
Multi-practiceDeployed across US practices
Patterns I deploy
The same building blocks land in most operations the same way: something arrives, it waits for a person, and that person reconstructs context before doing the actual work. I have built these systems. The figures are typical ranges — your own baseline is the first thing we measure.
Hospitality & clubs
The phone competes with the person at the counter, and keeps ringing after closing.
Typical: roughly a third of inbound calls arrive outside staffed hours; at ~80% containment on routine questions the agent pays for itself on recovered bookings alone.
B2B SaaS · support
Most of a first response is reconstruction: who is this, what plan, what broke.
Typical: ~70% of tickets carry enough context to auto-draft. A human still approves every reply — the saving is in the reconstruction, not the judgement.
Distribution & manufacturing
A PDF keyed by hand into a system that already knows what was ordered.
Typical: ~8% break the match and still need a person. The rest post overnight, turning AP from a daily chore into a morning exception list.
B2B services · sales
Contact rates fall off sharply after the first hour. Most inbound forms sit overnight.
Typical: same headcount, same pipeline — the difference is arriving while the lead is still reading your site.
Procurement & legal ops
Auto-renew clauses are only expensive when nobody reads them in time.
Typical: every extracted clause links back to its page and paragraph, so legal checks the source rather than trusting the summary.
Multi-site retail & field service
Four hours of spreadsheet assembly to answer one question: which sites need attention?
Typical: the win is not the four hours — it is that a bad week gets caught on Tuesday instead of the following Monday.
Highlights — designed and built by me
Each of these went from an empty repository to a running system: the architecture, the model pipeline, the database, the interface and the deployment. Where the hard part was not obvious, I have said what it was.
Real-time voice · golf operations
askcaddie.golf — automated phone answering for golf courses, live 24/7.
The hard part On a phone line there is no spinner. Two seconds of silence reads as a dropped call, so the latency budget is the product — and callers talk over the agent, which means handling barge-in without losing the turn. The agent also never guesses at availability: it reads the live tee sheet or it says it does not know, because a confidently wrong booking costs more than a missed call.
Platform · golf operations
AI-native operations platform running the whole course business.
The hard part The AI was never the risk — the schema was. Booking, leagues, events and marketing all describe the same golfer from different angles, and if that identity is not resolved properly at the data layer, every downstream feature quietly disagrees about who the customer is. Getting the model right first is what made the voice agent useful rather than a demo.
Agentic tooling · developer
A screen recorder that produces AI-readable recordings.
The hard part Five event sources — input, console, network, DOM mutations, narration — each with its own clock and its own volume. A click is only useful if you know which node it hit and what the page did in the 200ms after, which means correlating all five onto one timeline and then throwing most of it away. An agent with an unfiltered trace is worse off than one with none.
Marketing automation
Lifecycle email and segmentation over live operating data.
The hard part Segments are queries, not lists — which is the whole point, and also the problem. A segment has to resolve fast enough to send against while the underlying data keeps moving, so the engine had to stay correct under a schema that is being written to during the send. Drizzle over Prisma was a deliberate call for exactly this reason.
Infrastructure · voice
The voice runtime the agents run on.
The hard part A cascade pipeline spends its latency budget three times over — transcribe, think, speak — before the tool call has even fired. Making a live booking mid-sentence means the model has to commit to an action while the caller is still audible, and the pipeline has to keep the line feeling alive while it happens.
Working inventory
Everything here is in something I have shipped, not a list of things I have read about.
Twilio Media Streams · Pipecat · Deepgram STT · Cartesia TTS · Gemini Live API · cascade and realtime pipelines · barge-in handling · mid-call tool calling · PSTN + WebSocket transport
Claude · Gemini · MCP servers · structured context traces · tool/function calling · retrieval · prompt and output evals · transcription and summarisation pipelines
TypeScript · Node · Express · Fastify · Python · PostgreSQL · Drizzle ORM · Drizzle Kit migrations · BullMQ + Redis · Zod · JWT auth · Pino · Vitest · REST
Next.js · React · Vite · Angular · TanStack Query · React Router · Tailwind CSS · shadcn/ui · Radix · Chrome extensions (MV3)
pnpm workspaces · Turborepo monorepos · modular monolith architecture · background workers · Render · Cloudflare R2 · static export · structured logging
How engagements run
I sit with your team, measure the real baseline on two or three workflows, and come back with what to automate first, what it costs and what it returns. You keep the analysis whether or not we build together.
One workflow taken from manual to running in production — integrated with your systems, monitored, handed over with the runbook. Fixed scope, fixed price.
For teams automating continuously. I work as your AI engineering function: new workflows, model and cost tuning, and keeping what is already live healthy.
The best candidates for automation are usually hiding in plain sight — the steps a team repeats so often they have stopped noticing them. Describe one and I will tell you straight whether it is worth building, what it would take, and where the hard part is.