Agent live · 164 postings read

I ship software I don't write.

I'm not a programmer. I direct AI coding agents. I decide what gets built, judge whether it's actually right, and drive it until it ships.

How I work

The code isn't mine.
The judgement is.

I can't write most of the code in these projects, and I won't pretend otherwise. What I can do is take something from an idea to a finished, working, audited product. That turns out to be a different skill, and a scarcer one than it used to be.

Where the source is mine to publish, it's on GitHub. You don't have to install anything, or take my word for any of this, to judge whether the output is good.

Decide what gets built

Scope, constraints, and the sequence to build in. Most failed projects die here, long before anyone writes a line.

Judge whether it's right

AI is confidently wrong all the time. Catching that is the job. A payout model that doesn't hold. A filter that quietly matches the wrong thing.

Get it over the line

Certification, DNS, deployment, keys, cron, databases. The unglamorous distance between “it runs” and “it's live.”

Selected work

Shipped, not prototyped.

Game · Live on Stake

Sakura Storm

A 6×5 slot game whose payout model holds a 0.97 return across three bet modes, verified over millions of simulated rounds. Now live and playable on Stake.

Sakura Storm mid free-spin round. A 6 by 5 grid of ramen, mochi, onigiri, ninja, oni mask, fox and dragon symbols inside a red torii gate frame, set against a night sky with cherry blossoms and floating lanterns. The header reads FREE SPINS 4 OF 15 with a tumble win counter and a 1x multiplier.
Free spins round, 4 of 15, showing the tumble win counter and multiplier. Every symbol and background was AI-generated to a brief.

Slot math is a constrained optimization problem. You are given a target return, a hit frequency, a max win cap and a volatility profile, and the reel set and payout table have to satisfy all four at once. Then it has to survive an audit by someone whose job is to find where you got it wrong.

The first thing I did was go to Stake and confirm exactly what the math had to hit, rather than assume it and find out later. It still failed their checks three times before it passed. Each time their RTP output came back and told me what was off, and it went another round.

The front end had its own problem: spins would freeze partway through. That one mattered more than it looked, because a slot that stalls mid-spin loses the player and you do not get their attention back. The note below is how I found it.

Certification is a useful forcing function, because it removes the option of "close enough." A payout distribution is either provably correct across millions of rounds or it does not ship. Getting there meant a lot of runs where the answer was no.

It passed both front end and math certification, cleared final platform review, and is now live and playable on Stake. You can open it and play it yourself, linked above.

My part: Confirmed the math requirements with Stake up front, ran the model back through certification until it passed, and caught and fixed the spin freeze. Art, code and math were all AI-generated under my direction.

Build noteHow I found the spin freeze

Spins would stall partway through the animation and never resolve. When it did not stall outright, symbols would break mid-cascade and the tumble chain would stop early, so a winning sequence just ended instead of paying out the way the model said it should.

Either failure is worse than it sounds. A slot that hangs mid-spin loses the player's attention, and you do not get it back. It reads as broken software at the exact moment the player is waiting to find out whether they won.

Locating it was elimination rather than a guess. The math model had not been touched, so it could not have changed behaviour. Every change in that window was in the front end spin logic, which meant the fault had to be in the code driving the animation and not the model underneath it. The payout numbers were still correct. Only the presentation of them was failing. That reduced the search from somewhere in the game to a specific layer, and from there it was a matter of finding which step in the sequence never fired.

Fixed within an hour of identifying it.

Return to player
0.97 across all 3 bet modes
Max win
25,000×
Bonus trigger
1 in 400 spins
Status
Live on Stake
  • Stake Engine
  • Python
  • TypeScript
  • Svelte
  • PixiJS
Play it on Stake

AI automation · Live

The job agent

A pipeline that reads 4,500 job postings a day, narrows them to a few dozen, scores those against my profile, and drafts outreach. It is running on this site right now.

The most honest thing you can build while job hunting is the thing that solves your own job hunt. So this one runs in public, and you can read its output below.

Each morning it polls the public job-board APIs of a watchlist of companies. Cheap deterministic filters run first, checking title, location, and everything already seen, because there is no reason to spend model tokens learning that a Director of Sales role is a bad fit. About 4,500 postings become about 37.

Those go to Claude with a strict schema: a 0 to 100 fit score, the specific reasons, and a draft opener. Anything above the bar lands in a daily digest.

Two decisions I would defend. It drafts but never sends, because auto-applying at volume is how you become spam, and the goal was never to apply to more jobs. It was to only look at the ones that matter. And it is instructed to be harsh about my gaps. An early version rated every single posting exactly 72 and wrote openers claiming experience I do not have. That version was useless, and worse, dishonest. The current one routinely scores roles in the single digits and says why.

The openers it drafts are published on this page, which creates a problem worth solving properly. A later version was writing "I build AI tooling end-to-end" and naming a model provider I have never used. Instructing it not to got that from constant down to roughly one slip in forty, and one in forty is still a false claim on a public page. So the absolutes are enforced in code rather than in the prompt: an opener that claims I wrote the implementation, or names a tool I do not use, gets dropped instead of published. A missing opener is strictly better than a false one.

My part: Set the pipeline design and the honesty constraints, reviewed the output and rejected the first working version, and drove the prompt rewrite until it scored honestly.

Read per run
~4,500 postings
Survive filtering
~37
Scored by
Claude, structured output
Sends on my behalf
Never. Drafts only.
  • Next.js
  • TypeScript
  • Claude API
  • Postgres
  • Cron
Read the codeSee what it found

AI infrastructure

Jarvis

A home assistant whose identity and memory live in a service rather than in any one model, so swapping the model never changes who it is. It runs on my home PC, reaches my phone from anywhere, and is growing a pair of homemade smart glasses for eyes.

Most assistant projects are a thin wrapper around one model, so the day you swap models you lose the personality, the memory, and everything it knew about your house. The design decision here was to invert that. Identity lives in a service that sits between you and whichever model is answering.

It keeps a file of durable household facts injected into every conversation, plus a searchable store of past ones. Routing is by request type. Anything latency-sensitive stays on the model running locally on the GPU, open-ended questions go to the cloud, and if the cloud call fails it quietly falls back rather than dying.

Vision runs entirely on the local machine. Camera frames never leave the house. That was a requirement, not an optimization.

The whole assistant lives on the home PC and still answers from anywhere. It sits behind a private Tailscale network, so my phone reaches it on the home machine with nothing exposed to the public internet, and Home Assistant points at the same service. A question asked through the house and a question asked from my phone hit one identity and one memory.

The newest set of eyes is a pair of homemade smart glasses. An ESP32-S3 camera board registers itself with Jarvis the moment it powers on, then captures photos and short clips on a spoken command and hands them to that same on-device vision model. The glasses are still a breadboard on the bench rather than something you would wear, but the code path works end to end right now.

My part: Set the architecture constraints, including local-first, model-agnostic identity, private remote access, and no camera data leaving the house, then drove the build against them.

Reach
Phone to home PC over Tailscale
Vision
On-device, never leaves the machine
Wearable
ESP32-S3 glasses, capture working on the bench
Home Assistant
Routes through one identity and memory
Memory
Durable facts plus conversation recall
Model swaps
Identity survives them
  • Python
  • FastAPI
  • Ollama
  • Chroma
  • Claude API
  • Tailscale
  • ESP32-S3
Read the code

Game · Built, unlaunched

Vault Legacy

A 3×3, nine-line slot with a pick-em bonus. Math model and front end are both finished at a 0.965 return and a 10,000× cap. It has not been launched.

A smaller, tighter game than Sakura Storm on purpose. Three reels, three rows, nine fixed paylines, and a Key to Fortune pick-em bonus where the top box is a routed max win rather than a lucky roll.

The constraint I set was that the paytable, symbols and paylines had to be defined once and mirrored exactly between the Python math model and the TypeScript front end. If those two ever drift, the game pays out something different from what it displays, and you will not find out until someone else does.

Everything is built and the numbers hold. I have not put it through certification or launched it, and I am not going to claim otherwise.

My part: Set the game design and the mirroring constraint between math and front end, and verified the model held its targets.

Return to player
0.965
Max win
10,000×
Layout
3×3, nine fixed lines
Status
Complete, not launched
  • Stake Engine
  • Python
  • TypeScript
  • Svelte
  • PixiJS

Also shipped

Hoard

Game · Roblox

A Roblox game about rolling around absorbing junk until you are huge, slow, and a target. My first programming project of any kind.

Websites for local businesses

Simple sites that get the call.

Alongside the software, I build fast, no-nonsense sites for local trades. No frameworks and no contact forms: someone standing in a yard with a problem gets one tap to call, text, or email, and the page loads on one bar of signal. If you run a business and need one, email me.

Homepage of the Freedom Septic LLC website. A navy hero reading 'Reliable Septic Service, Done Right the First Time' sits beside a photo of a septic pump truck in a field.

Freedom Septic

Septic systems, repairs, and storm shelters.

Central Oklahoma

Homepage of the Country Auto Service website. A navy and red hero reading 'All Types of Auto Repair' sits beside a shop-hours panel.

Country Auto Service

A repair shop that does all types of auto work.

McLoud, Oklahoma

Homepage of the R&R Premier Lawn Services website. A green hero reading 'Lawn Care You Can Count On' over a grass background sits beside a photo of a landscaped flower bed in front of a house.

R&R Premier Lawn Services

Mowing, flower beds, and yard cleanup.

Oklahoma City metro

Homepage of the Landworx Construction website. A black and white hero over a jobsite photo reads 'Built on Solid Ground'.

Landworx Construction

Concrete, excavation, and land clearing.

Central Oklahoma

Skills

Measured by what shipped.

Bar length is not a self-rating. It is how much evidence sits behind each one, and every tier is defined against the projects above, so you can check any bar by scrolling back up.

  • Shipped and audited Used in a product that passed independent certification
  • Built with it Used to build something finished that runs
  • Operate it Set it up and keep it running, but have not built on it
Slot math modelling
RTP and volatility tuning
Monte Carlo simulation
Python
TypeScript
Stake Engine
Svelte
PixiJS and WebGL
Claude API and structured output
Prompt design and iteration
Agent pipelines and evals
Next.js and React
Postgres
FastAPI
RAG and vector search
Lua and Roblox
Vercel and Cloudflare
Cron and scheduled jobs
Ollama and local models

Running right now

A job agent, working in public.

It reads every posting across a watchlist of companies each morning, scores the survivors against my profile, and drafts the opener. Below is its actual output.

164
Postings read
164
Scored by Claude
0
Real matches
21
Companies watched

Zack's fluency in directing LLM agents and automation pipelines maps well to Harvey's content-automation mandate, but the posting explicitly wants a hands-on engineer with 5+ years writing production integrations, which isn't how he works.

Handshake · Remote (USA)

AI Policy Generalist - Remote US

58

Zack's daily practice of judging and correcting AI output maps well onto evaluating model responses against policy, though this is individual-contributor annotation work rather than the directing-and-shipping role he actually operates in.

Drafted openerI spend my days directing AI and then judging its output line by line, deciding whether a response actually meets the spec or just looks like it does, which is the same hair-splitting your policy evaluation role describes. On projects like Jarvis and my job agent I've had to write clear, auditable reasoning for why one near-identical output passes and another gets rejected, and I'd bring that same precision to distinguishing closely related policy labels.
Anthropic · Remote-Friendly (Travel-Required) | San Francisco, CA | Seattle, WA

AI Engineer, GTM Claudification

58

Zack's work directing AI to build agentic systems, evals, and a job-search agent maps closely to this GTM Claudification role, but the posting's insistence on strong hands-on Python/TypeScript programming and 8+ years as a software engineer cuts against how he actually works.

Drafted openerYour GTM Claudification role centers on autonomous agents that run inbound and pipeline motions with human approval gates, which is exactly the shape of the job agent I designed and shipped, I specify the motions, define the eval rubrics, and judge the transcripts rather than write the code. I also directed Hoard and Jarvis the same way, setting the conventions and escalation paths and holding the bar on quality before anything ships.

See everything it found

Get in touch

Looking for my next role.

Best fit is a team that wants someone who can take an idea to shipped using AI, and who tells you plainly how it got built.

Download my resume (PDF)GitHub
Zack Haynie · Shawnee, Oklahoma (open to remote)GitHubzack@zackhaynie.com