Strategy, brand, paid media, and the automation that makes a small team perform like a big one.
Most marketers specialize in one lane. I run all of them and wire them together: campaign strategy, brand and creative, in-house paid media, and the marketing operations underneath. The difference is depth of AI and automation — I write the scripts and build the tools that let one person produce what usually takes a team, and I do it in production, not in a pilot deck.
Go-to-market, positioning, and demand generation — organic engines and paid funnels that move revenue, not vanity metrics.
Full brand systems and the creative to match — from identity and messaging to social, video, and large-format print.
Google Ads and paid social managed in-house — structured, tested, and reported in plain language, without agency fees.
CRM, workflow automation, and custom-built tools that remove manual work and compound over every future campaign.
Run end-to-end marketing for a 20-year automotive brand — strategy, brand, paid media, web, and a full in-house print operation. Manage Google Ads across four campaigns on a sub-$1,500/mo budget with no agency, built a master brand system, and wrote custom automation that saves an estimated 50–85 hours a month — just one example of the efficiency this approach delivers.
Led the go-to-market launch of a flagship product and built an organic inbound engine generating hundreds of daily visitors with zero paid spend. Managed a six-figure budget, directed a 5-person sales team, and secured 7 B2B partnerships in a highly regulated category.
Independent practice delivering marketing and growth strategy for 16+ organizations across tech, agriculture, cannabis, and consumer goods — website builds for 9 clients, 8 business launches across 3 states, and $100K+ in investment funding negotiated.
A cross-section of hands-on work — product brands and packaging, logos, social content, product photography, and drone survey work. Full-stack creative, built and shipped.











Most people use AI as a better search box. The gap that matters is between prompting and building — writing the scripts, wiring the tools together, and running them in a live business every day. That is where I work, and the build log below is the evidence, not this paragraph.
Everyone says they use AI now. Here is what I actually built, what it runs on, what it changed, and what breaks.
Problem Every wrap, decal, and sign job needed three hand-built files — print, plotter, master — plus a fiddly 20× scale-up and RGB→CMYK conversion before it could hit the Roland XP-640. Slow, with a standing chance of sending the wrong file to the plotter.
Built DecalPrep_Automate.jsx turns a finished design into _Print.ai, _Plotter.ai, and _Master.ai in one run. AutoSpa_ScaleUp_CMYK_Preflight.jsx scales art and artboards 20×, converts color, runs a preflight report, and saves the full-scale file. Design → script → VersaWorks RIP → print → laminate → Graphtec contour-cut on registration marks.
Result Hand-prep between design and print is gone, and so is the misfiled-plotter-file failure mode.
What breaks Illustrator's canvas limit forces the design-small-scale-up workaround; and the preflight report is there because color conversion fails quietly.
Problem Six in-shop TV display boards needed re-exporting as a batch; tiered proposals were rebuilt by hand per prospect.
Built AppleScript that drives Illustrator externally for batch saves and exports. A Python/ReportLab generator that produces branded, tiered proposal PDFs on demand — the fire-department fleet ceramic proposal shipped this way. Plus browser-based pricing calculators and a referral-code generator with QR output that feeds GoHighLevel workflows.
Result Board exports are a script run. Proposals are generated, not assembled.
What breaks Scripting Illustrator from outside is flaky: you have to bring the app to the front first, and you poll the filesystem for the saved file instead of trusting the save call to return on time.
Problem Producing every size and format of one creative is mechanical work that eats a designer's day.
Built Scripted batch generation against the master brand system — palette (black / #EF5323 / white / grey), the three-font stack, and layout specs applied programmatically, so variants stay on-spec by construction. The pattern is in the code below.
Result Creative iteration stopped being rate-limited by production time.
Problem Leads arrived through five channels and got followed up inconsistently — or not at all.
Built A routing and follow-up layer: inbound from web, calls, and social normalized into one pipeline, with triggered sequences through booking and post-service follow-up, tied to the same brand system as the ads.
Result Follow-up happens whether or not anyone remembers to do it. The transactional message and the ad now read like the same company.
Problem Consistent publishing fails for the ordinary reason — it competes with billable work and loses.
Built A Claude agent on a Tuesday/Thursday schedule. It checks my recent LinkedIn activity so it does not repeat a topic, drafts against a fixed brief and voice guardrails, posts to LinkedIn through browser automation, and logs what it covered for the next run. The essays on this site are AI-drafted and labeled the same way.
Result Runs Tuesdays and Thursdays without me; first scheduled run September 15, 2026. Every AI-written piece is labeled as such.
What breaks No human review before it posts — a deliberate trade, and why the brief is narrow and the label is mandatory. And the site is not in the loop: the agent posts to LinkedIn on its own, but essays reach this site by hand. Closing that gap is next.
Problem Inbound opportunities need research and a fast, specific reply, and the research is the slow part.
Built A scheduled Claude job that reads inbound mail, filters real opportunities from job-board noise, researches the company and role, writes a tailored cover letter and call script into a per-company folder, labels the thread so it is never processed twice, and stages a reply as a Gmail draft — never auto-sent, because that is where a human belongs.
Result Research-to-reply collapsed from hours to minutes, with the judgment call still mine.
What breaks Filtering is the weak point: a false positive wastes a research run, a false negative loses a lead. It is also paused whenever the desktop it depends on is offline — a dependency I would remove in the next version.
// Batch-render one creative across the spec'd size set.
// Layout rules live in the brand system, not in my head.
function renderVariants(doc, specs, outDir) {
for (var i = 0; i < specs.length; i++) {
var s = specs[i];
doc.documentPreferences.pageWidth = s.w;
doc.documentPreferences.pageHeight = s.h;
applyGrid(doc, s.margin, s.columns);
fitType(doc, s.scale); // type ramp, not free-hand resizing
enforcePalette(doc, BRAND.palette);
var out = new File(outDir + "/" + s.name + ".pdf");
doc.exportFile(ExportFormat.PDF_TYPE, out, false);
}
}
Simplified from production — the pattern, not the whole file. The point is that the brand system is executable: specs are data, and the layout rules are enforced by the script rather than by someone remembering them at 6pm.
Practical essays on AI integration, marketing measurement, and building a function that punches above its headcount. The labeling rule: any essay a model drafted is marked "Written by AI", every time. The rest of this site was built with AI assistance under my direction, and I am accountable for every claim on it.
Not "we should use AI." A concrete method: audit where the week actually goes, automate what is repetitive and verifiable, keep a human on judgment, and measure in hours recovered rather than vibes.
Read → All writing →