AI can write the code now. Shipping it is still
the hard part.
I’m Demitre Mender. I build software that reaches actual people —
native Windows applications, Cloudflare backends, licensing that holds, and
update channels that check their own work and roll back when they are wrong.
Five products in production. Real installers, real payments, and real users
telling me when I got it wrong. Every drawing on this page assembles as you scroll,
because that is the whole argument.
Scroll to assemble
Sheet 02SpecificationGeneral arrangement
Three things, and they are all the same thing.
Getting a model to answer is free now. Getting it into something a stranger can install,
pay for, trust and update — that is the job, and that is where projects die.
01
AI-native delivery
I run coding agents as a real part of the pipeline — specify, build, audit,
verify, release. The generation is not the valuable part. The harness around it is:
audits that fail the build before a wrong name reaches a user, tests that run with
no window open, and a standing rule that nothing ships on a green test alone.
Agentic workflows
Spec to ship
Automated audits
Release gates
02
AI inside the product
On-device inference where privacy and latency matter: screen text read aloud by local
voice models, one-press dictation, and metadata chains that fail over between three
providers and always name which one answered. A feature that silently degrades is a
bug wearing a hat.
Local models
Failover chains
Streaming UX
Privacy-first
03
The unglamorous half
Licensing on Cloudflare Workers and D1. Stripe checkout that does not lock out a
paying customer at two in the morning. Update feeds with size and hash checks, a
health check after activation, and automatic rollback. Per-user installers that need
no administrator. This is the part that decides whether a product survives.
Workers + D1
Stripe
Verified updates
Rollback
Sheets 03–07The workAssemblies
Five products. Every one of them installs.
The source repositories are private — some of this is commercial, and some of it
holds other people’s data. The products themselves are public. I will walk you
through any of the code on a call.
Sheet 03 — Assembly A
VRChat Auto Invite
Commercial Windows product · solo · design, application, backend, billing, releases
The problem
Community managers were inviting hundreds of players by hand. The tools that
existed were black boxes: they either got you rate-limited, or they did nothing
and never said why.
What I built
A native control centre in C++20 and Qt 6. It reads the game’s own output log
rather than scraping credentials, runs group invites and friend-instance invites as
two independent queues, and puts every decision on screen in plain English —
queued, sent, skipped, failed, rate-limited, already handled. Overlays stay locked
inside the game window while it moves and resizes. Licensing and entitlements run
on Cloudflare Workers with D1 and Stripe checkout.
The hard part
Living inside somebody else’s rate limits without becoming the reason a user
gets banned. It honours Retry-After, keeps sender cooldowns separate so
one workflow cannot starve the other, and holds queued work through an official
outage instead of dropping it. When the game changed engine, I diffed real logs from
both branches rather than guessing, and could say with evidence that nothing broke.
Shipping at V2.2.44, self-updating from a checksum-verified feed
Privacy
Credentials, cookies and activity logs never touch the licensing service
Sheet 04 — Assembly B
Anime Solution
Native desktop client · solo · C++20, Qt 6, libtorrent
What I built
A Windows client that finds a show, checks it out of your own library and plays it
— discovery shelves, account sign-in with two-way progress sync, strict season,
episode, audio and quality matching, an embedded player, and rich presence. Metadata
falls over across three providers, and the interface always names which one answered,
because a silent downgrade is how you lose trust.
The hard part — and the honest version
Five releases in a row failed to fix one paging bug. Every one of them passed its
tests. The tests were exercising a component; the bug lived in the assembled
application. The fix that finally worked moved the guarantee out of the view layer
into a place that can be proven with no window open at all — and I now read the
program’s own log before I tell anybody something is fixed.
Then I rewrote the application from the ground up around that rule. Same stack,
same release pipeline, new core: no decisions in the view, nothing that cannot be
tested headlessly, and no silent early returns. Full feature parity is the release
gate.
Tokens held in the operating system vault; the update feed lives in its own repository so publishing source cannot overwrite trust metadata
Kept
A green harness test is not evidence the shipped application works
Sheet 05 — Assembly C
Auto Overseer
An autonomous agent inside a shipped game · C# · no mod loader
What I built
Twenty independent jobs that play the game the way a careful person would, with
their own button inside the game’s real interface and every action explained in a
log. No framework required: one library, registered through two plain configuration
files the engine already reads at startup.
The hard part — six deciders is fifteen arguments
Six of those jobs could move the same character, each deciding alone. That is
fifteen pairs which can disagree, and they did — five characters spent a night
walking between two rooms while every job’s log line looked correct. Patching
pairs is a losing game; a seventh mover makes it twenty-one.
So every move now comes from one plan, rebuilt each tick as a priority
list, and a character can be claimed at most once per plan. Two jobs cannot
contradict each other when only one job decides. If you are building multi-agent
anything, this is the failure you are going to meet.
The method that made it possible
I stopped guessing. I wrote a small console tool that loads the game’s compiled
assembly offline and prints real signatures, field names and decompiled method
bodies. It answered in one minute what fifteen restart-and-hope cycles could not,
and it caught four bugs where a name existed, looked right, and meant something else.
Stack
C#, .NET Framework, offline reflection and IL decoding, PowerShell audits
Discipline
Two audit scripts run before every release; they exist because every bug was the same bug
Published
Public release, with none of my own data in the repository
Sheet 06 — Assembly D
Project Zomboid Complete Server Project
Live service · website, backend, desktop control plane, game mod
What I built
Everything a small game community actually needs, in one place: a public website on
Cloudflare Pages with a live status Worker and an owner panel, a native .NET Windows
service and desktop dashboard for safe server control, and a published Workshop mod
written in Lua. Continuous integration verifies the site build and the mod package
layout on every change.
The hard part
Making a repository that is safe to share while still being able to restore a live
server. Owner keys, remote-console passwords, player databases, world saves and logs
are all excluded from history by design; the checked-in configuration carries
placeholders instead of secrets. The recoverable state lives in a private, encrypted
snapshot that a local watcher refreshes. I check what is actually in the tree after
every commit rather than trusting the ignore file.
Public site, owner panel, 16-player server, Workshop item
Sheet 07 — Assembly E
Obsidian UI Starter
Internal design system · C++20, Qt 6, QML
What it is
The interface layer from my desktop products, stripped of every piece of product
logic and kept as a clean foundation: a polished application shell, reusable themed
controls, and a visual theme editor with a seven-role semantic palette, live preview
and contrast feedback against accessibility guidance.
Why a client should care
I do not rebuild the shell for every project, and I do not hand over an interface
that only looks right on my own monitor. Colour is semantic rather than hard-coded,
so a rebrand is a palette change instead of a rewrite — and the contrast is
checked rather than assumed.
Ships a screenshot mode so documentation images can never go stale
Also on the bench — smaller builds, same discipline
P·01
Local screen-reader pipeline
Anything on screen read aloud with nothing leaving the machine: on-screen character
recognition feeding local neural voice models. No cloud key, no upload, no per-minute bill.
Python · OCR · local speech synthesis
P·02
One-press dictation
Hold a key, talk, and the text lands in whatever field has focus. Local speech
recognition wired into the desktop as a single shortcut, because a feature you have to
go and find does not get used.
Python · local speech recognition · desktop integration
P·03
A four-million-tile map
A community map site went offline for good. I rendered the game’s own world data
into deep-zoom tiles — every cell, every floor — and served it from object
storage, because a static host with a twenty-thousand-file limit was never going to hold it.
Python · tile rendering · Cloudflare R2
Sheet 08Field notesRevisions
Six rules. All of them cost me something.
These are not opinions I picked up from a blog post. Each one is the scar from a specific
week that went badly, and each one changed how I build.
R·01
Read the source. Never guess a name.
I once burned roughly fifteen close-install-launch cycles guessing what a system’s
internals were called. Now I read the compiled assembly offline and print the real
signatures and method bodies. The same instinct applies to an API, a log format or
somebody else’s service: look at what it actually does before writing code that
assumes.
R·02
A green test is not a shipped feature.
Five releases passed their tests and fixed nothing, because the tests exercised a
component and the bug lived in the assembled application. I verify against the running
program’s own log before I say something works, and I move guarantees to where they
can be proven without a user interface.
R·03
No silent early returns.
Three jobs ran for hours doing absolutely nothing and looked healthy the whole time,
because the place they gave up said nothing at all. Every give-up point now states its
reason, once. Counting lines in a log is the fastest audit there is.
R·04
One decider, not seven.
Independent rules that touch the same resource will contradict each other, and the logs
will look fine while they do it. Six movers is fifteen pairs that can disagree. Collapse
them into a single plan, priority-ordered, each resource claimed once.
R·05
Ship it, or nobody has it.
A fix that exists only on the main branch is a fix nobody has. Any user-visible change
means bump the version, package it, publish it, and confirm the update channel actually
serves it. Half the value of software is the delivery.
R·06
Your data stays yours.
Credentials in the operating system’s own vault, never in a source tree. No customer
files in a repository, checked after every commit rather than assumed. Local-first
wherever it is possible. I would rather do more work than hold data I do not need.
It’s still not working.Said by a user, correct three times running, while every one of my tests was
green. That sentence is worth more than a passing build, and it is why the rules above
exist at all.
Sheet 09The operatorNotes on the maker
I got here because something I used every day was broken.
No computer science degree. I started because a thing I relied on stopped working and
it was obvious nobody was coming to fix it.
That is still mostly how it goes. A community map site went offline, so I rendered the
whole map myself — every cell, every floor, no shortcuts. An automation tool I
liked needed a whole framework installed, did three things and told you nothing, so I
read the program’s own assembly and wrote one that does twenty and shows its work.
A desktop application I wanted did not exist, so I learned Qt, built it, and sold it.
I am not precious about being right. Three separate times a user told me something was
still broken while every test I had was green, and three separate times they were
right. That gap — between it passed and it works — is the
thing I actually think about. Most of what I know is scar tissue from closing it.
What I am good at is the half nobody puts in a demo. Anybody can get something
impressive running on their own machine now; that became free. The hard part is still
the update channel with checksums and a rollback, the licence check that does not lock
out a paying customer at two in the morning, the audit that fails the build before a
wrong name ever reaches a user. I would rather ship something small that holds than
something large that impresses once and then quietly rots.
I work in the open with whoever hired me. I say what I did, whether it worked, and
what I skipped. If a week went badly I would rather tell you on Tuesday than surprise
you on Friday.
If that is the kind of person you need, we are going to get along fine.
Native Windows · C++20 · Qt 6 · QML
C# · .NET · WPF
Cloudflare Workers · D1 · Pages · R2
Python · PowerShell · Lua
Stripe · licensing · entitlements
Local model pipelines · on-device inference
Agentic development · evaluation harnesses
Reverse engineering · release engineering
Sheet 10Scope of workSchedule
Four ways in. Pick whichever is closest.
If none of these fit, describe the problem anyway. I will tell you honestly whether I am the
right person, including when I am not.
Ref
Engagement
What it covers
Good fit when
A
Build it
End to end, from a rough idea to something a stranger can install. Desktop
application, web backend, or both. You get the interface, the backend, the installer, the
update channel and the documentation — not a prototype with a to-do list attached.
You have a product idea and no engineering team.
B
Rescue it
Something works on one machine and nowhere else, or an AI feature demos
beautifully and falls over with real users. I find where the truth diverges from the tests,
make the failure visible, then fix it and leave the harness behind so it cannot come back
silently.
It is eighty per cent done, and has been for months.
C
Put AI in it
Add a model to a product you already have, without a rewrite. Hosted or
fully local, depending on what your data allows. Includes the parts people skip: failover
when the provider is down, a visible answer to “why did it do that”, cost
control, and an evaluation you can actually run.
The demo works and production scares you.
D
Set up the pipeline
A shorter engagement. I set up the delivery half: automated audits,
headless tests, versioning, packaging, signed and verified updates with rollback, and a
release checklist your team can run without me. Then I hand it over.
You can build, but shipping is the bottleneck.
Sheet 11Sign-offIssue for construction
Got something that needs to actually ship?
One email is enough to start. I read all of them, and I
answer within a day.