Brands worked with20-brand portfolio · 30+ campaigns a year
Selected work
Dog Food LaunchHartfelt · Kevin HartCreative Development Specialist · 1st AD
Morning RestoreTerra Mare · Marisa TomeiProducer
30-Second SpotDebtClear USA · Robert HerjavecCreative Development Specialist
Rodeo CoupleDebtClear USA · Robert HerjavecCreative Development Specialist · producer
Grandpa's Day OutAMC × Coca‑ColaProducer · story & concept development
AI integration
I build my own tools. A lot of producing is not producing: the
same documents assembled by hand, the same numbers chased, six systems checked against
each other. I built agents to take that part, so the hours go back to the creative work.
Decks
Concept and visual research, designed start to finish
Numbskull™
Co-founder & creative directorCover only · 24-page book not shown
About
I grew up between Ethiopia, the Dominican Republic, and Laos, and the thing that traveled was emotion. Content was how it moved. That is why I went to film school and it is still why I do this.
Placeholder paragraph. Two or three sentences on the path from a BFA in Producing to indie features to commercial work, and what you are looking for next. Keep it short enough that a hiring manager reads all of it.
Placeholder paragraph on how you work: the bridge between the creative brief and what actually happens on the day, and why building your own tools is part of that rather than a hobby.
4:5 · portrait
Credits
Feature and short film work alongside the commercial slate
Features
Haunted Hookers — Unit Production Manager
Local Haunts — Line Producer
Shorts
Everythingeater — Producer
Bigger / Better / Harder — Producer
The Final Cut — 2nd AD
Summer's End — 2nd 2nd AD
Good Boy — 2nd 2nd AD
Range
$0 – $10M budgets
Movie Magic, Adobe CC
Spanish, Swiss German, Lao
Building a shoot used to mean assembling the same five documents by hand from six different places. It now runs from one command, and the time it takes went from about four hours to about six minutes.
Trigger
/build-call-sheet [Shoot Name] on [Date] once talent is confirmed, scripts are locked, the location is set, and the lunch form exists. The agent checks that readiness before it starts rather than producing a half-built sheet.
The pipeline
Gather from chat, the production schedule, issue tracking, mail, calendar, and the prep and script docs
Confirm the shooting address against the source of record
Ask clarifying questions only where something is genuinely missing, front-loaded in one message
Calculate cast call times backward from the schedule
Apply smart defaults for the fields that are the same every time
Build the call sheet, including weather, nearest hospital, and the ticket link
Build the schedule tab with the correct colour coding
Export the sheet as a PDF
Draft the crew email and every talent email individually
Write talent and hair-and-makeup rows into the freelancer payment record
Source priority
Six systems disagree constantly. The workflow declares an explicit priority order, so when two of them contradict each other the agent resolves it the same way every time instead of guessing.
Delegation
A casting-researcher subagent reads Gmail casting threads end to end and returns a clean table of confirmed talent with roles, scenes, and reps. It never passes raw email bodies back. That keeps the main context small enough to finish the build, and it means far less personal data moves around than if the whole thread were pulled in.
Integrations
Google SheetsGoogle DocsDriveGmailCalendarIssue trackingSlackWeb searchPDF export
Templates
Crew and talent emails render from HTML templates with named variables. The template headers carry the formatting rules, so the tone stays consistent whoever runs it.
Most ad scripts get written from taste. This one is only allowed to build from creatives with real evidence behind them, and it is explicitly forbidden from treating a subjective rating as proof that an ad worked.
The pipeline
Pick the production path, polished spokesperson or clean user-generated
Pick the target offer
Harvest internal winners from the reporting available to me
Harvest external winners from competitors
Name the mechanism, the actual reason the winning ads persuade
Add a recency layer so the script is anchored to now
Write the script as a two-column script and visual table
Secure a production slot and log the outcome
Research subagent
An ad-performance-researcher subagent reads the internal reporting end to end and returns a compact brief instead of a raw dump: which creatives are worth learning from, the angle each one uses, and what is queued for testing.
Finding competitor winners without a paid tool
A written playbook using the public ad library and a longevity heuristic. An ad still running after months is being paid for because it works, and that is a signal available to anyone willing to look properly.
The guardrail I am proudest of
Every source gets audited before the agent is allowed to lean on it. Where a signal cannot actually support the conclusion someone wants to draw from it, the agent is instructed to say so rather than imply otherwise. A tool that quietly launders a weak signal into a confident claim is worse than no tool.
Post-wrap paperwork arrives in the inbox in no particular order, from people who invoice differently every time. This closes the loop without ever being the thing that sends money.
How it runs
/billing [talent] handles one person
/invoice-sweep scans the last three weeks of inbox against every outstanding row and surfaces matches for confirmation before ingesting anything
/invoice-status is read-only, just a list of what is still outstanding
The sequence
Layered mail search, a pre-flight check for which documents are actually missing, download into the forms folder, then update only the document-tracking columns.
Where it stops
The agent gathers and files documents. It never drafts the email that forwards them to accounts payable, and it never touches the release, status, or approval columns. I write that email and mark those columns myself. Anything that moves money keeps a person in it.
I wanted to know whether I could take a product idea the whole distance on my own, so I built it. Point a phone camera at a barcode and it returns a score, the reasoning behind it, and something better to buy instead.
The idea
Scan, score, swap. Dr. Gundry's audience already reads labels and mostly cannot tell which products actually fit the philosophy they follow. The app rates any scanned product from 0 to 100 with a plain red, yellow, or green verdict, explains which ingredients were flagged and why, and recommends an alternative. Every poor score is a place a customer can be helped and a product can be sold, which is the same moment.
Built, not mocked up
React and TypeScript on Vite, styled with Tailwind, routed across five screens: onboarding, scanner, result, food guide, and history. Barcode decoding runs in the browser through the ZXing library, so it works from a phone browser with no app store in the way. The dev server runs over HTTPS because camera access requires a secure context, which is the sort of thing you only learn by actually shipping it.
ReactTypeScriptViteTailwindReact RouterZXing
The scoring rubric is a document, not buried in the code
I wrote the rubric as a separate reviewable spec so someone qualified on the nutrition side can check the logic without reading a codebase. I am confident about the build. I am not the right person to be the final word on what counts as a good ingredient, and the architecture says so.
Educational, not alarmist
The tone rule is written into the product spec: explain why something is flagged in Dr. Gundry's voice, and never manufacture a concern to land a sale. A scanner that scares people into buying works once. One that teaches them something is the one they keep on their phone.
Why it is on this page
Not because a producer needs to write React. Because taking something from an idea to a spec, a rubric, a working build, and a pitch is the same job as taking a brief to a finished spot, and the second one is easier to believe once you have seen the first.
These agents touch casting emails, talent contact details, vendor paperwork, and company performance data. That earns a set of rules, not a disclaimer.
Local first
Everything runs on my machine. The workspaces are plain folders of Markdown and configuration files kept locally, with the state and memory sitting in version-controlled text rather than in a third-party service. No production data is uploaded to an outside platform to make any of this work.
Read-only against company systems
The shared trackers are marked read-only in the agent's own instructions. It can read the production schedule and the performance sheets; it cannot write to them. The only sheets it writes to are ones I own.
Least privilege
Each subagent declares an explicit list of the tools it is allowed to call, and nothing outside that list is available to it. The casting researcher can read mail threads; it has no access to spreadsheets or write tools. Scope is set at the agent, not left to chance at runtime.
Data minimisation
Subagents return structured summaries rather than raw source material. A casting question comes back as a table of confirmed talent, not the contents of the mailbox. Less personal information moves through the system, and less of it lingers in context.
A human on every consequential step
Emails are created as drafts. Nothing sends itself
Bookings and payments require explicit approval before anything happens
The billing agent is barred from the final accounts-payable handoff
Status and approval columns are mine to change
Honest about the data
Where a source is unreliable, that is written into the agent's instructions rather than left for someone to discover later, so the tool cannot quietly turn a weak signal into a confident claim.