Aidan Gardner - Vancouver

I build systems that run themselves.

One of them has posted every day for months across three brands, decided what to make next from its own results, and paid out $5,943 - with nobody watching it. This is the console I talk to it through.

ReadyListeningHeard youThinkingQueue is clear through October
readmarketing/queue-fortnite.jsonl
runnode scripts/fortnite/pick-next.mjs
ok228 queued, 10/day cap holding

The real interface, running. Same states, same colours, same commands.

What the machine does

Four steps, on a clock, with no human in the loop except the approval gate.

01

Decide

A model picks what to make next from what the last thirty posts actually did.

02

Render

ffmpeg and fal.ai turn that into a finished vertical video, audio checked, frames verified.

03

Publish

Posts to YouTube, Instagram and TikTok on a schedule, with rate limits and retries handled.

04

Learn

Reads view counts back in, writes them to disk, and changes what step one does tomorrow.

What it has actually done

Read off the YouTube API and the Epic Creator portal. Every one of these is checkable by opening the channel.

Bella's Picksstory
Bella's Picksranking
Bella's Picksbefore and after
FortnitequizAI arena

Cut by the pipeline, hooks and captions and all. Silent here on purpose.

22.5M
views
one channel, 559 videos
46,600
subscribers
people who chose to keep watching
$5,943
paid out
$3,043 map, $2,900 YouTube
830
posts shipped
unattended, across three brands

Every video it posted, day by day

One square is one day. The darker it is, the more videos went out.

AprMayJunJulAugSepOct2026-04-07: 0 videos2026-04-08: 0 videos2026-04-09: 0 videos2026-04-10: 0 videos2026-04-11: 0 videos2026-04-12: 0 videos2026-04-13: 0 videos2026-04-14: 0 videos2026-04-15: 0 videos2026-04-16: 0 videos2026-04-17: 0 videos2026-04-18: 0 videos2026-04-19: 0 videos2026-04-20: 0 videos2026-04-21: 0 videos2026-04-22: 0 videos2026-04-23: 0 videos2026-04-24: 0 videos2026-04-25: 0 videos2026-04-26: 0 videos2026-04-27: 0 videos2026-04-28: 0 videos2026-04-29: 0 videos2026-04-30: 0 videos2026-05-01: 0 videos2026-05-02: 0 videos2026-05-03: 0 videos2026-05-04: 0 videos2026-05-05: 0 videos2026-05-06: 0 videos2026-05-07: 0 videos2026-05-08: 0 videos2026-05-09: 0 videos2026-05-10: 0 videos2026-05-11: 0 videos2026-05-12: 0 videos2026-05-13: 0 videos2026-05-14: 0 videos2026-05-15: 1 video2026-05-16: 0 videos2026-05-17: 0 videos2026-05-18: 0 videos2026-05-19: 0 videos2026-05-20: 0 videos2026-05-21: 0 videos2026-05-22: 0 videos2026-05-23: 0 videos2026-05-24: 0 videos2026-05-25: 0 videos2026-05-26: 0 videos2026-05-27: 0 videos2026-05-28: 0 videos2026-05-29: 0 videos2026-05-30: 0 videos2026-05-31: 0 videos2026-06-01: 0 videos2026-06-02: 0 videos2026-06-03: 0 videos2026-06-04: 0 videos2026-06-05: 0 videos2026-06-06: 0 videos2026-06-07: 0 videos2026-06-08: 0 videos2026-06-09: 0 videos2026-06-10: 0 videos2026-06-11: 0 videos2026-06-12: 0 videos2026-06-13: 0 videos2026-06-14: 0 videos2026-06-15: 0 videos2026-06-16: 0 videos2026-06-17: 0 videos2026-06-18: 0 videos2026-06-19: 0 videos2026-06-20: 0 videos2026-06-21: 0 videos2026-06-22: 0 videos2026-06-23: 0 videos2026-06-24: 0 videos2026-06-25: 0 videos2026-06-26: 0 videos2026-06-27: 1 video2026-06-28: 1 video2026-06-29: 2 videos2026-06-30: 1 video2026-07-01: 1 video2026-07-02: 2 videos2026-07-03: 2 videos2026-07-04: 1 video2026-07-05: 1 video2026-07-06: 1 video2026-07-07: 1 video2026-07-08: 2 videos2026-07-09: 2 videos2026-07-10: 4 videos2026-07-11: 0 videos2026-07-12: 2 videos2026-07-13: 2 videos2026-07-14: 3 videos2026-07-15: 3 videos2026-07-16: 2 videos2026-07-17: 1 video2026-07-18: 1 video2026-07-19: 4 videos2026-07-20: 0 videos2026-07-21: 2 videos2026-07-22: 1 video2026-07-23: 2 videos2026-07-24: 1 video2026-07-25: 0 videos2026-07-26: 1 video2026-07-27: 2 videos2026-07-28: 2 videos2026-07-29: 1 video2026-07-30: 0 videos2026-07-31: 0 videos2026-08-01: 1 video2026-08-02: 1 video2026-08-03: 0 videos2026-08-04: 0 videos2026-08-05: 0 videos2026-08-06: 1 video2026-08-07: 0 videos2026-08-08: 0 videos2026-08-09: 0 videos2026-08-10: 0 videos2026-08-11: 0 videos2026-08-12: 0 videos2026-08-13: 0 videos2026-08-14: 0 videos2026-08-15: 0 videos2026-08-16: 1 video2026-08-17: 0 videos2026-08-18: 1 video2026-08-19: 0 videos2026-08-20: 0 videos2026-08-21: 0 videos2026-08-22: 1 video2026-08-23: 0 videos2026-08-24: 0 videos2026-08-25: 0 videos2026-08-26: 0 videos2026-08-27: 0 videos2026-08-28: 2 videos2026-08-29: 1 video2026-08-30: 2 videos2026-08-31: 18 videos2026-09-01: 7 videos2026-09-02: 11 videos2026-09-03: 8 videos2026-09-04: 67 videos2026-09-05: 17 videos2026-09-06: 26 videos2026-09-07: 28 videos2026-09-08: 21 videos2026-09-09: 20 videos2026-09-10: 21 videos2026-09-11: 18 videos2026-09-12: 15 videos2026-09-13: 11 videos2026-09-14: 12 videos2026-09-15: 13 videos2026-09-16: 13 videos2026-09-17: 13 videos2026-09-18: 13 videos2026-09-19: 13 videos2026-09-20: 13 videos2026-09-21: 12 videos2026-09-22: 13 videos2026-09-23: 13 videos2026-09-24: 12 videos2026-09-25: 9 videos2026-09-26: 3 videos2026-09-27: 3 videos2026-09-28: 7 videos2026-09-29: 13 videos2026-09-30: 13 videos2026-10-01: 11 videos2026-10-02: 10 videos2026-10-03: 10 videos2026-10-04: 10 videos2026-10-05: 3 videos
LessMoreLast 182 days · 584 videos

The gaps on the left are from before the system was finished. It has been running properly for the last stretch, and that is the part worth judging: 130 videos in fourteen days, 39 days in a row, with nobody pressing a button.

The day job

I am the primary implementer across the Azure estate at eCapital, a commercial finance company, on a two-person cloud team. Our two senior Azure engineers and our manager left this year and were not replaced, so keeping it running landed on the two of us.

Four Azure Function Apps

Designed, built and owned in production. Ingest vendor files, transform, archive to Blob Storage, bulk load into Salesforce on daily, weekly and monthly schedules. Took a recurring manual process off a colleague's desk entirely.

13 DNS zones into Terraform

Migrated off a vendor console with no change history into reviewed infrastructure-as-code.

Legacy .NET to Azure

Moved on-premises, containerised with Docker, shipped behind GitHub Actions CI/CD.

Application Gateway

Currently going to production.

The bug I only found by measuring

The same web app and scheduled worker that run on Vercel also run on Kubernetes, as a Helm chart on a three node cluster. I did not trust that it worked, so I put a request loop against it and rolled it while it ran.

3 / 502
requests dropped
first rolling update, before the fix
0 / 800
requests dropped
same test, after the fix
3
nodes
replicas kept apart by anti-affinity
12%
CPU against a 70% target
autoscaler reading live metrics

Why it dropped requests

A pod being deleted gets its shutdown signal at the same moment it leaves the Service, and neither waits for the other. The ingress controller finds out a beat later, so for that moment it is still sending traffic to a pod that has started closing. Those requests fail.

The fix

A preStop hook holding the container open for five seconds, so the endpoint removal propagates first while the pod keeps serving normally. Then I ran the same test again rather than assuming.

Why this is the part worth showing

A manifest that applies cleanly is not a service that works. Everything here was measured on the running cluster, and the first measurement found a real defect in my own setup.

Read the full write up

What I am not claiming

That any of this is a business yet.

The payouts are real and the channel is real. The paid product has not had a stranger buy it. I am telling you that because a page that rounds its numbers up is a page you stop trusting halfway down, and because the interesting part here was never the revenue - it was building something that keeps working when I am asleep in another timezone.