Agent live · 240 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.

240
Postings read
240
Scored by Claude
1
Real matches
24
Companies watched
82

Zack's daily practice of directing, adversarially prompting, and judging outputs across ChatGPT, Claude and Gemini maps almost exactly onto this generalist red teaming role, though he lacks formal trust-and-safety or security-research credentials.

Drafted openerI spend my days directing and judging LLM output across ChatGPT, Claude and Gemini, treating every response as a hypothesis to break rather than trust, which is exactly the adversarial mindset your generalist red teaming role calls for. On projects like Sakura Storm and my job agent I've had to specify against edge cases and push models until their guardrails and reasoning actually held, and I'd bring that same probing instinct to your harm-taxonomy work.
ElevenLabs · Remote

Applied AI Engineer

68

Zack's hands-off direction of LLM agents, including his own job-application agent and the Jarvis assistant, maps well onto ElevenLabs' agents-beyond-the-demo mandate, though his lack of GTM/marketing-systems background and direct coding is a real gap.

Drafted openerI direct AI agents from vague problems to shipped results, my job-application agent sources roles, drafts, and judges fit end to end, and Jarvis handles real daily workflow the same way. The reliability-and-measurement framing of your forward-deployed agents role is exactly how I already operate, specifying and judging rather than leaving things at the demo stage.
62

Zack's agent-first way of shipping products matches ElevenMusic's fast-CI, AI-first team, though the role's insistence on deeply owning and auditing every PR cuts against how he actually works.

Drafted openerYour framing of ElevenMusic as agent-first with fast CI where ideas reach users in a day or two is exactly how I work, I direct AI to spec, judge and ship consumer products end to end, as I did with my job agent and Vault Legacy. Music is also personal to me: Sakura Storm is a music-centered project I shipped, so building for people who listen, create and remix is a space I actually care about.

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