One person and a fleet of agents doing the output of a growth team, in one of the strictest ad categories online.
Selected work (4)
I set the strategy, then build the AI systems that carry it out. Agents that research, write, generate, check and ship on a schedule, while people work on the decisions that matter.
Paste a SoundCloud playlist and walk into it. Pull a record, drop the needle, sign the guestbook.
Record Room
View case: Record RoomFairytale parodies, cartoon traders and a dancing doll. Generative video treated as a craft, not a shortcut.
Generative Lab
View case: Generative LabOne orchestrator decides what each site needs today: a new page, a better old one, or nothing at all.
AI Systems
View case: AI SystemsAurelius
AI growth engine
Aurelius sells a $89-a-month microdose GLP-1 program, in a category where the regulator and the ad platform each have their own rulebook. I designed the strategy and built the system that runs it: market intelligence, creative strategy, scripts, generative production, landing pages and measurement, wired together and running on a schedule.
- Role
- Strategy, systems, production
- Constraint
- FDA / FTC + Meta Rx policy
- Stack
- Claude Code, GPT Image 2, Seedance, Kling, ElevenLabs, React, Vercel
- Status
- Live, running daily
The engine · 6 stages
Strategy in,
ads out.
Each stage is an agent or tool with a defined input and output. Open a stage to see how it works.
-
A scheduled agent sweeps the Meta Ads Library for competitor GLP-1 video and image ads, ranks the patterns that are scaling, and writes a top-20 brief with a section on whitespace: the angles nobody in the category is running.
The Discovery campaign came from the one-off teardown that this agent grew out of.
- Input
- Meta Ads Library
- Output
- brief.md · ranked top 20 + whitespace
- Runs
- 30 8 * * *
-
Twenty strategic angles, each with five copy variants: price lock, food noise, the insurance denial, program-not-prescription and more. A style spec distilled from 99 approved ads sets the visual rules.
The archive taught the main lesson: concept staging beats photography. A balance scale outperforms a model gazing off camera.

-
From one angle, the script agent writes the hook, the treatment and a shot-by-shot prompt for the video model. The hook leaves a question open and never names the product. Voiceover goes through a pronunciation check before export, and every cut with a person carries “Model shown.”
-
Statics render on GPT Image 2 with the real vial and logo as reference images, and every word on the ad written into the prompt. Leave a model empty space and it invents a claim. Layout and treatment rotate on separate strides so batches never look templated, and a 14-day ledger blocks repeats.
Every asset passes a compliance gate graded BLOCK, WARN or NOTE. A fix changes only the element that broke the rule.
- Matrix
- 20 angles × 5 copy × 18 layouts × 7 treatment axes
- Output
- 1,620 creatives · 41 batches
- Video
- Seedance · Kling · ElevenLabs
-
The React site, 15 standalone landing and policy pages (microdose, PCOS, confidence, muscle preservation) and the patient evaluation funnel, with OpenLoop’s intake embedded at /start.

-
Server-side funnel events from ViewContent to Purchase, with a first-party identifier issued from edge middleware so attribution survives browser blocking. The event script is identical on every surface, checked by hash. Landing pages once fired nothing at all; that was found and fixed.
Every ad file name encodes campaign, audience, angle, layout and ratio, so Ads Manager reports read as strategy.
- Events
- ViewContent → Lead → AddToCart → InitiateCheckout → AddPaymentInfo → Purchase
- Naming
- Pricing_Women_E-GirlMath_CANDID-E05__4x5
- ↺The ledger and the approved archive feed tomorrow’s 08:30 run.
A playlist is usually a list. This one is a room. Every record on the shelf is a track. Pull one out, put it on the deck, and nothing plays until you set the needle down. Where you drop it sets where the song starts.
Enterrecord-room-rust.vercel.app- Step 1Paste a SoundCloud playlist.
- Step 2Pull a record off the shelf.
- Step 3Drop the needle.
- ✦ 3 roomsPink lacquer, white record wall, curved red. Built from real photographs, outpainted and edited with masked image edits.
- ✦ MomentsEach record triggers its own moment: a disco ball that drops on a spring, lasers, haze, dancers keyed live off green screen.
- ✦ SharedA guestbook and a record cart every visitor sees, stored server-side so the room remembers who came by.
- ✦ ShareableLinks open the same playlist in the same room, with a preview card for each room.
- ✦ ProcessI built a full Blender 3D version first. The photograph with interactive overlays felt more real, so that’s the one that shipped.
Generative Lab
System 01
Creative ads agent
Turns a copy brief into a finished Meta campaign in the brand’s own style. Every ad is scored before it ships, and nothing renders until a person approves the copy. It replaced an outsourced ad agency that underperformed, saving $5K a month.
- Scripts 6
- Knowledge 2
- Image model 1
- Gates 2
- Input / output 2
- Copy brief80 angles, or a 13-ad PDF
- SKILL.md v2.07 hard rules, 5 house styles · reads the recipe in references/
- LEARN · ingest.py → Aurelius style spec100 refs to 4-up sheets, 10-axis rubric · 3 systems, 17 devices
- GENERATE · Copy approval tableid, hook, scene, CTA · nothing renders until you say go
- build_campaign.py10-block prompt per ad, palette + devices from the spec
- gen_batch.py → gpt-image-23 workers, 6 retries, 1 ref per job · 1024×1536, quality low
- Six-axis critiqueevery contact sheet; below 10/12 goes back to gen_batch
- to_meta_sizes.py → export_meta_upload.py1080×1350 + 1080×1920 · Concept_Persona__4x5.jpg
- META_UPLOAD/842 files, 421 ad keys, 2 per ad
How a batch moves
- A copy brief enters SKILL.md, which loads the Aurelius style spec and the prompt recipe.
- Nothing renders until the copy approval table gets a go from a person.
- build_campaign.py writes one 10-block prompt per ad; gen_batch.py renders them on gpt-image-2.
- Every contact sheet gets the six-axis critique. Below 10/12 goes back for a re-render.
- Passing ads are sized to 4:5 and 9:16 and named for Meta upload, two files per ad.
The two stops
- Copy approval · every ad as one row: id, hook, scene, CTA. A person signs off before a single image is made.
- Six-axis critique · palette, type, layout device, negative space, banned defaults and thumb-stop, each scored 0 to 2. 10/12 to pass, every sheet, never a sample.
Rules that came from failures
- A blank label became a health claim → every string is pinned
- The logo landed on a pill bottle → marks only on the real vial
- A bare intro price → always “first month $89, then $199”
- Rewrites dropped the product name → checked after compliance
- The accent colour faded in buttons → button contrast pinned
System 02
SEO / GEO content engine
One orchestrator decides what each of six sites needs today: a new page, a better old one, or nothing.
Six cron jobs, one rule: publish an article a day.
Each site woke up, picked a topic on its own and shipped. It worked, and it shipped about 356 articles by August. But every site worked blind: no shared view of what already existed, no search data, no way to improve an old page instead of adding a new one, and a quota that rewarded filler.
One orchestrator asks what each site actually needs today.
A new page where there’s a real gap. A better version of a page that’s close to ranking. A fix to a title nobody clicks. Or nothing, if nothing clears the bar. New content and improvements run as two separate queues, so one can’t quietly eat the other.
- orchestratorbudgets · kill switches · decision log
- search intelligencecontent inventory built · GSC pending
- opportunity enginepersistent backlog · explainable scores
- growth queueCREATEoptimization queueUPDATE · EXPAND · CTR_FIX · GEO_FIX · LINK · MERGE · REFRESH
- research → brief → question / entity mapsources tracked per claim
- writerlegacy writer via adapter
- 9 quality gatesSEOGEOFACTMEDICALCOMPLIANCESTYLEDUPLICATIONLINKSTECHNICAL
- auto-revisionfixes the failed gate only · ≤ 3 tries, then a human
- deploy + post-publish checkslive-site checker built
- SEO monitorday 1 · 7 · 14 · 30 · 60 · 90AI visibilityunknown stays UNKNOWN
- ↺ feedback loopresults re-score the opportunity engine
Penalties for cannibalization, a strong existing page, weak evidence or compliance risk come off the top. Weights get recalibrated once real outcomes exist.
Before the engine, this was the whole system: six jobs publishing one article per site every day. Nothing told them which topics to pick, and nothing fed back what worked. They were writing blind.
System 03
Funnel loop
Every landing page is measured, reviewed and fed back into the next brief.
Every landing page
makes the next one smarter.
Keep the insight, the page, the measured result and the reviewed lesson connected.
- Brief01Audience, angle, offer, one conversion event: the intake
- Research02Competitor whitespace and session replays
- Build03Landing page + funnel events wired to the intake
- Approved launch04Compliance gate, then human approval before it goes live
- Measure05Observed results: events from view to purchase, replays
- Review06Findings + next hypotheses
Measured drop-offs become findings. Fixes stay hypotheses until the next measurement confirms them.
Example · the /start intake
40 real sessions reached the intake (45 recorded, 5 were bots). 85% came through in-app browsers, and 47% of those left within 20 seconds without a tap.
The price card was the main exit, about five minutes in, right after people had typed a phone number. The Back button opened a “leave?” dialog that ended two sessions.
Hypotheses, ranked: show the price before contact details, move the plan card to about two minutes, fix card entry in in-app browsers. A custom intake built on that order is in progress.
System 04
Video agent
Real GLP-1 objections scraped from Reddit become voiceover scripts, voiced and cut from one shoot into an edit per angle.
One shoot.
Forty objections.
The agent scrapes Reddit for the GLP-1 objections real people raise, writes a short voiceover answering each one, voices it, and cuts the same footage into a separate edit per angle. Footage is drafted on the cheapest generation tier and upscaled afterwards, so testing a new angle costs a voiceover, not a reshoot.
- 01Objection mapScraped from Reddit: the GLP-1 objections real people raise, grouped into 13 angles across two audiences, people considering it and people already on it.Reddit
- 02Scripts40 reads of 10–20 words. The product is named in the first sentence; every read ends on the brand.
- 03Fact checkAny line stating a service fact is flagged [V] and held until it’s confirmed true.
- 04FootageGenerated on Seedance 2.5 at draft 480p, the cheapest tier, then upscaled with Topaz.Seedance 2.5 · Topaz
- 05VoiceOne consistent coach voice, A/B tested, with phonetic spellings so the drug name is said right.ElevenLabs
- 06EditClaude cuts the same footage to each read, times the captions and exports 9:16 at 16–20 seconds.Claude
Angle · needle fear
Angle · stigma
Hover to preview silently · click to watch with the voiceover.
System 05
Aurelius growth dashboard
One page that shows where people drop between the ad and the payment, pulling every source the team used to check separately.
Ad, intake, checkout.
One view.
Meta, Contentsquare, the checkout log and Google each held one piece of the story. The dashboard puts them on one page, so a drop-off can be traced from the ad that sent the visitor to the screen where they left. It also tracks every live experiment, like the checkout A/B test, step by step against the same funnel, so a winner is called on data, not a hunch. Meta data comes through Windsor.ai rather than straight from the ad account, so a dashboard full of queries never puts the account at risk of being flagged or blocked.
Sources
What it answers
Who sees it
System 06
Battle cards
An agent reads the Meta Ads Library every morning, ranks every competitor and names the gaps nobody is running. The findings become battle cards, and the battle cards become the next batch of ads.
Anatomy of a brief
- Access noteWhat it couldn’t read today, and why. Counts are floors; unread copy is marked unverified.
- Ranked findingsRed for act-today, amber for watch.
- The top 20Every tracked advertiser, by impressions.
- What changed since yesterdayThe diff is the signal.
- Five-pattern synthesisPricing, copy, format, UGC vs brand, compliance posture.
- WhitespaceThe opening nobody holds, framed as a brief.
- TLDRFive bullets for whoever has two minutes.
Finding · Competitor F went to ×19 and added a second creative on “microdosing glp-1”
The hero creative is at ×19 copies, the highest in any brief. Its fleet grew from ~210 to ~240 ads, the fourth straight daily rise. It is the only national brand with two cards in that term’s first 20.
Synthesis · UGC vs brand
Scaling has split into two opposite playbooks. One brand compounds: it re-copies evergreens and keeps a ×19 hero. Two others churn whole batches at ×5–×6 and replace them within 24–72 hours. The compounders hold their #1 slots for weeks; the churners don’t hold any term.
Whitespace
“Microdosing glp-1” is still the term to target: Aurelius isn’t in its first 20 and the #1 is a five-second clinic clip. The newest competitor hooks lean on side-effect fear, which opens a calm “gentler, clinician-guided start” position that no one holds. Static and price are uncontested.
Distilled into battle cards · from the 7 Oct brief
Competitor F
- Playbook
- One hero creative copied ×19, ~240 live video ads, backup cuts added weekly.
- Where they win
- Holds top slots for weeks; now on the microdosing term.
- Where they’re exposed
- Video only, no visible price.
- Our counter
- A priced static on the same term: the only visible Rx price in the category.
Competitors H & G
- Playbook
- Whole batches launched at ×5–×6, swapped out within 24–72 hours.
- Where they win
- Fast reach on new creative.
- Where they’re exposed
- Don’t hold any term; no evergreen winner.
- Our counter
- Keep proven cuts running; compete on consistency, not volume.
“Food noise”
- Playbook
- Three funded weight brands plus supplements borrowing the GLP-1 name.
- Where they win
- Phrase recognition.
- Where they’re exposed
- Saturated; supplements spelling around filters.
- Our counter
- Don’t chase it. Own “microdosing” as the house phrase.
Signals the agent tracks
From brief to creative · 7 Oct brief → 9 Oct batch
Two days after the brief, six new ads. Each one answers something the brief found.
- The brief said
Static and price are uncontested.
The ad06 · visible-price - The brief said
A calm, gentler, clinician-guided start that no one holds.
The ads02 · titration-is-universal
04 · lowest-effective-dose - The brief said
Supplements are borrowing the GLP-1 name.
The ad03 · prescription-not-supplement - The brief said
Process-first ads with no outcome claims run longest.
The ads01 · who-chose-the-number
05 · personalised-trajectory






Five of the six were sent back after the first render and regenerated; two needed a third pass. Every final carries the price, the full disclaimer and “Model shown.” where a person appears. Each ships in Feed 4:5 and Story 9:16.
Earlier · July · Discovery, from the one-off teardown this agent grew out of



System 07
Angles brief
Every week an agent reads what real people say about GLP-1s on Reddit and X, and turns it into the angles to focus on: the copy, the CTA, and the idea for a video or image.
What people say,
before what we sell.
The best hooks are sentences people already wrote in a thread at 2am. The agent collects them, groups them into objections and questions, and writes each angle as something the creative team can make on Monday.
- 01ListenReddit threads and X posts about GLP-1s, microdosing and telehealth.Reddit · X
- 02ClusterGroup into objections and questions, keeping the exact words people use.
- 03RankBy how often it comes up, and whether competitors already own it in the battle cards.
- 04BriefPer angle: hook copy, CTA, and a video or image idea, checked against the compliance rules.
- 05Hand offVideo angles go to the video agent, static angles to the creative ads agent.
Example angles · from the Reddit work
“Interested in GLP-1s. Nervous about the needle.”
- CTA
- Ask a clinician
- Format
- Video · voiceover edit on the run-club footage
- Became
- “The hardest part” and “A little nervous”
“Reddit says yes. Reddit says absolutely not.”
- CTA
- Get a clinical assessment
- Format
- Static · type-led, no model
- Became
- The Oct 19 Reddit batch, and the “Let them talk” edit
“27 GLP-1 tabs open. Still no answers.”
- CTA
- Start your assessment
- Format
- Static · browser-tab concept
- Became
- An approved static in the Oct 19 Reddit batch
Across all systems
Ops log
What broke, how it was fixed, and the numbers that run underneath everything above.
unattended runs · stalled mid-taskPermission scope was silently ignored where it had been set, so an article got written and every shell step after it waited forever. Fixed by moving the scope to where the scheduler reads it.publishing · double postIdempotency keyed off the date inside the article. One mis-stamped piece published twice. The check now reads the commit log, which can’t lie about whether today shipped.ads · variant space collapsedTwo rotation strides shared a factor and quietly cut the palette options to two per layout. Every axis now runs off one index with coprime strides.tracking · events inertLanding pages carried the funnel script but not the element it listens to, so they fired nothing. The script moved into the app shell and is checked by hash on all five surfaces.
I spent six years on the engineering side of payments and crypto: keeping systems standing on purpose, testing staking infrastructure, scoping bank integrations, and translating between founders and engineers on token launches.
Now I build the layer between strategy and output. I write down how a job is done, turn it into agents and tools, and make sure the result is something a person can check and the next person can extend.
I like messy problems with real constraints. Regulated categories and broken tracking.
I’m a US citizen based in Germany, open to roles in strategy, operations and growth in Germany and the US.
- Feb 2025 to Present
Aurelius Health GroupAI growth systems, creative strategy, operations
- Own cross-functional operations and project delivery across Legal and Compliance, Finance and Operations, UX/UI, and Marketing; translate ambiguous priorities into ClickUp roadmaps, sprint cadences, owners, dependencies, and clear delivery plans.
- Built AI-enabled operating systems spanning an SEO/GEO content agent, Creative Ad Agent, and video-production agent; established a sequenced daily cadence that prevented workflow collisions and supported delivery of 1,620 ads and video ads, 356 articles, 5 funnels, and 9 landing pages.
- Automated the ad-development process from angle generation and copy variants through briefs, scripts, production, and compliance handoffs, enabling up to 100 structured experiments per day and saving approximately $5,000 per month in outside agency costs.
- Created a daily competitor-intelligence brief that ranked scaling ads, surfaced market gaps, and informed a discovery campaign plus pricing tests across 8 positioning angles and 8 audience segments.
- Diagnosed a 92.9% conversion drop from Product Selected to Payment, then led the OpenLoop and Tellescope funnel and tracking integration and redesigned the intake experience around prioritized trust, payment, navigation, and failure-state fixes.
- Built reusable operating controls, including BLOCK/WARN/NOTE compliance triage, angle-based file naming, and standardized reporting; created segmented landing pages by demographic, pain point, and message angle using SEO, GEO, and AI-search optimization.
- Nov 2023 to Feb 2025
Encrypto · NeobankProject Manager / Product Manager Consultant
- Led migration of project management infrastructure from Notion to ClickUp, building structured sprint boards for Engineering and Marketing that improved cross-team visibility and sprint velocity tracking.
- Established team operations from scratch, including onboarding documentation, PTO calendars and standardized workflows to support a growing distributed team.
- Defined and scoped 8+ product features end to end, writing detailed user stories, acceptance criteria and automated status updates across Frontend, Bug Fixes, QA Testing, Plaid Integration, Point System, Referral System, DevOps, and Platform Health & Maintenance.
Arbera · BerachainOperations / Growth Consultant
- Led cross-functional initiatives between product, marketing and community to drive protocol adoption; developed and executed GTM and content strategies for protocol updates, feature launches and partner integrations using an agile methodology.
- Built and managed Arbera’s digital presence from 0 to 2,900 Discord members and 18,000 X followers, ensuring aligned product messaging and seamless community feedback loops.
- Led partnership communications with external protocols and managed team deliverables via Notion through sprint planning and simultaneous sprint board maintenance.
- Jul 2022 to Nov 2023
DCG · Foundry DigitalSDET II, staking portal
- Built robust, high-quality test automation suites for API and UI regression testing on the staking portal, including reusable scripts for OTP authentication and wallet extension connectivity.
- Collaborated with developers and business stakeholders to define test strategies and automate acceptance criteria, reducing testing effort by 40%.
- Jan 2022 to Jan 2023
Sphere · LaunchpadProject Manager / Partnerships Lead
- Orchestrated end-to-end Agile delivery for mission-critical IDOs. Led client calls and managed 20+ token launches, acting as the primary technical liaison between external project founders and internal engineering teams to align tokenomics, smart contract parameters and UI requirements.
- Created and maintained a scrum board with features and stories on Monday for Staking and Airdrop implementations. Held scrum ceremonies and managed complex backlogs to ensure 100% on-time deployment for protocol updates.
- Jan 2020 to Jan 2022
American ExpressDevOps Engineer / Project Manager, chaos engineering team
- Designed, developed and deployed services using Jenkins and XL Release, implementing REST APIs for the Destructive Testing platform (DART). Created chaos tests like “Blast Radius” for graceful and non-graceful pod deletion.
- Led agile processes including daily stand-ups, sprint grooming and retrospectives. Defined project scope, objectives and timelines while managing a Jira scrum board for a team of chaos developers.
Agile / Scrum · Sprint planning · Backlog management · Stakeholder comms · Roadmapping · User stories & acceptance criteria · Cross-functional delivery · Technical scoping (Plaid, APIs)
Growth & marketingPaid social (Meta Ads) · Creative strategy · Funnel & conversion optimization · A/B testing · Attribution & tracking (GA4, server-side events) · GTM strategy · Community growth · Regulated-category copy (FDA/FTC, Meta health policy)
OperationsProcess design & SOPs · Workflow automation · Team onboarding · Vendor management · Competitive intelligence
EngineeringQA / test automation · REST APIs · CI/CD (Jenkins, XL Release) · Chaos engineering
ToolsJira · Notion · ClickUp · Monday · Klaviyo · Meta Ads Manager · Windsor.ai · Tellescope
AI & build stackClaude Code · scheduled agents · skill & SOP authoring · MCP · Python · TypeScript · React · Vercel · edge middleware · GA4 · server-side events · GPT Image 2 · Seedance · Kling · ElevenLabs · Blender · ffmpeg
EducationB.S. Computer Science · Arizona State University · Tempe, AZ · GPA 3.96