Two Spouts
The Renaissance Marketer
Chapter 10 of 15

AI

"The best way to predict the future is to invent it." — Alan Kay

This is the big one. If you only read one chapter, read this one. AI is the single biggest reason a solo marketer can now do the work of a whole team — and the reason you can stop paying for half your software. Both, at once.

I'll assume you already use ChatGPT or Claude daily, so we're skipping 'what is AI'. This chapter is about the moves most people haven't made yet: feeding the model your context, building your own software, and deleting subscriptions for good. Three big jumps.

If you're not constantly learning here, you're not going to make it. This is the skill that compounds. Six months of not touching it and you're a junior again.

AI — gif

Context engineering beats prompt engineering

Everyone obsessed over 'prompt engineering' — the magic words. That's mostly over; the models got smart enough that you don't need to bribe them with 'you are a world-class expert' anymore. What moves the needle now is context: everything you put in front of the model before you ask. The prompt is the question; the context is everything the model knows when it answers.

The biggest mistake I see is people typing a one-line question into an empty chat and being disappointed. Of course it's generic — you gave it nothing. It can't see your brand, your data, or your last twelve months of campaigns unless you hand them over.

Give it your stuff

Before you ask for anything real, paste the raw material: brand guide, past winning copy, the actual landing page, the CSV, your tone notes. Over-feed it — tokens are cheap and the upside is huge.

Here is everything you need to do this well:

<brand_voice>
(paste your tone doc — how you write, words you ban, words you love)
</brand_voice>

<best_ads>
(paste your 5 highest-CTR headlines + descriptions)
</best_ads>

<offer>
(the product, price, audience, the one promise)
</offer>

Now write 10 new headlines for a cold-traffic campaign. Match the voice in <brand_voice>. Use <best_ads> as the bar to beat.

My default closing line on real prompts: 'Before you answer, ask me any questions that would help you do this better.' It's amazing what it flags that you forgot to mention. Free QA on your own brief.

Examples are the cheat code

If you take one thing from this section: show, don't tell. Three examples of the output you want beat any pile of adjectives. 'Write punchy copy' is weak; 'match these three' is strong. I keep a running file of my best examples per task and paste it in every time.

Match the tone of these — short, blunt, benefit-first, no fluff:
1. Stop guessing. Start ranking.
2. Your ad budget, finally working.
3. One dashboard. Every channel.

Now give me 10 more in exactly this register for a project management tool.

Build a custom assistant once, reuse it forever

Pasting context every time gets old, so you stop pasting and start storing. In Claude they're Projects; in ChatGPT they're Custom GPTs. Same move: load your context ONCE into a persistent assistant, then every future chat already knows your brand, your client, your process.

  • A 'Copywriter' loaded with your brand voice doc + your 20 best-performing ads.
  • A 'Strategist' loaded with a client's goals, account history, and last quarter's results.
  • An 'Onboarding' assistant that knows your full process so you stop re-explaining it to every contractor.

Build it and every task starts 80% of the way there. That's the leverage. I have one per client and I'd be lost without them.

Treat the context file like a living doc. Every time the assistant gets something wrong, add a line to its instructions fixing it. Six weeks of that and it's scary good.

A marketer can now build real software

This is the part that changes everything. You — a marketer, 'not technical', whatever you tell yourself — can now build actual working software by describing it in plain English. Not toy stuff: real tools you use in production. I build them constantly and I am, on paper, a marketer.

Antigravity + Claude

The way I do it: I code with Claude — the model — inside Antigravity, the IDE I live in. It's an agentic editor: it reads your whole project, makes a plan, writes the code across multiple files, runs it, sees the errors, and fixes them itself while you watch. You describe the outcome in English and review the diff — directing, not typing. Use it to:

  • Build a small internal tool from a one-paragraph description.
  • Edit your own website without bugging a dev.
  • Write the scripts that replace your paid SaaS (see the next section).
  • Learn to code for real by watching it work and asking 'why did you do that?'

Start with something tiny and real. A script that renames your export files. A page that shows one chart from one sheet. Finish it, use it, feel the click. Then you'll never stop.

Tools I replaced with free / custom alternatives

Here's my favourite part — just know that I'm a cheapskate. Once you can build software by talking to an AI, most SaaS subscriptions reveal themselves for what they are: a sheet, a script, or a small app you could own outright. So I started cancelling. Here's my actual list and how I did each one.

QuickBooks → a Google Sheet + a script + Canva invoices

Accounting software wanted a monthly fee to do arithmetic and make PDFs. No thanks. I built a Google Sheet that tracks income and expenses, with an Apps Script that totals everything, flags tax categories, and spits out a month/quarter summary. Invoices are a Canva template I duplicate. Claude wrote the Apps Script — I described the columns and tax buckets and it handed me working code.

// Apps Script: total expenses by category for a given month
function monthlyTotals() {
  const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Expenses');
  const rows = sheet.getDataRange().getValues().slice(1); // drop header
  const totals = {};
  rows.forEach(([date, category, amount]) => {
    const key = category || 'Uncategorised';
    totals[key] = (totals[key] || 0) + Number(amount || 0);
  });
  return totals;
}

Zoom → Jitsi / Google Meet

Zoom's free tier cuts you off at 40 minutes to upsell you. Google Meet is free with a Google account; Jitsi is fully open-source with no account at all — you make up a room URL and send the link. For client calls I use Meet; for zero-account, zero-tracking calls, Jitsi. I haven't paid for video calls in years and nobody's noticed the difference.

A paid LinkedIn scheduler → a custom-coded scheduler on the LinkedIn API

Post schedulers charge a monthly fee per account to do one thing: post later. I had Claude build me a small scheduler that talks directly to the LinkedIn API. Posts live in a sheet with a date column; a script runs on a schedule, finds anything due, and publishes it. It took an afternoon — the AI did the heavy lifting on the OAuth flow, the only fiddly part. Now it costs nothing and does exactly what I want.

// pseudo-flow the scheduler runs on a cron
// 1. read 'queue' sheet rows where status = 'scheduled' AND publishAt <= now
// 2. POST each to https://api.linkedin.com/v2/ugcPosts with the access token
// 3. mark the row status = 'posted', write back the post URL
// ~120 lines total. the AI wrote the OAuth dance; I just registered the app.

Paid AI voiceover / TTS → Kokoro running locally

Voiceover SaaS charges per character or per minute and you never own the output. For my Lineage of Legends project I needed a LOT of narration, so I run Kokoro — the kokoro-onnx model — locally on my own machine. I feed it a script, it writes a WAV file: $0, offline, unlimited, and the voice quality is shockingly close to the paid services.

# kokoro-onnx, running locally — no API, no per-character fee
pip install kokoro-onnx soundfile

from kokoro_onnx import Kokoro
import soundfile as sf

kokoro = Kokoro('kokoro-v0_19.onnx', 'voices.bin')
samples, sample_rate = kokoro.create(
    'Welcome to the lineage of legends.',
    voice='af_sarah', speed=1.0, lang='en-us'
)
sf.write('narration.wav', samples, sample_rate)

I can't stress how useful this is. Running the model on your own hardware means no usage cap, no privacy worry, and no invoice. For any project with volume, local TTS pays for itself instantly.

Paid / SaaS analytics → self-hosted Plausible

Google Analytics is free but it's a privacy nightmare with a UI that makes me want to lie down, and the paid privacy-friendly tools charge per pageview, which punishes you for growing. Plausible is open-source. I self-host it on a cheap server — one Docker command — and now I have clean, lightweight, GDPR-friendly analytics across all my sites for the price of the box, with unlimited pageviews and total ownership of the data.

The pattern under all of these: a sheet, a script, or a small self-hosted app. With AI writing the code, the build cost of rolling your own collapsed. The subscription was never paying for software — it was paying for the fact that you couldn't build it. Now you can.

AI woven into the actual work

Beyond building tools, AI is in every part of my marketing day — the jobs I hand off without thinking about it.

Research

New client industry, a competitor teardown, a niche I've never touched — AI gets me from zero to dangerous in minutes instead of an afternoon of tabs.

Act as a market analyst. I'm onboarding a client in <industry>commercial solar installation</industry>.

Give me:
1. How firms here typically acquire customers (channels, ranked).
2. The 3 most common acquisition mistakes they make.
3. The objections their buyers raise before purchase.
4. 5 angles a competitor probably isn't using.

Be specific. If you're unsure on a point, say so rather than guessing.

First drafts

Ad copy, email sequences, landing-page sections, briefs — I almost never start from a blank page. AI drafts, I edit, and editing is 10x faster than creating.

Analysis

Paste a CSV of search terms or campaign data and ask for the pattern — it clusters wasted spend and surfaces the winners faster than you'll scroll.

Here's 90 days of search-term data (CSV below). Find:
- terms with spend but zero conversions (negative-keyword candidates)
- clusters of intent I should split into their own ad groups
- any term converting cheap that deserves more budget

Return a table, sorted by wasted spend descending.

<csv>
(paste)
</csv>

Don't trust math the model does in its head — LLMs are bad at arithmetic. Make it write the formula, or hand the numbers to a tool that actually computes (a sheet, a script, code mode). Have it show the working, not just the total.

QA

Before anything ships: a tireless second pair of eyes. When you're solo, this is genuinely a lifesaver.

Proofread this for a paying client. Flag, in a list:
- typos and grammar
- anything unclear or ambiguous
- any claim that sounds unverifiable or risky
- any place the tone drifts corporate

Don't rewrite it — just flag, and I'll decide.

Where AI fails — always verify

Real talk. AI is incredible and it will absolutely burn you if you trust it blindly. It hallucinates — it'll invent a statistic, a study, a feature, a quote, and state it with total confidence. It's never 'unsure' when it should be, and it's weak on very recent events and on anything specific to YOUR account it's never seen.

So the rule is simple: AI drafts, you verify. Anything factual — numbers, names, dates, claims, links — gets checked before it leaves your hands. Treat it like a brilliant intern who occasionally makes things up: you'd still check their work.

Never paste a stat or a quote from AI into client-facing work without verifying the source yourself. Your reputation is on the line, not the model's.

Scraping data with Claude + proxies

A lot of paid 'data tools' are just scrapers with a subscription bolted on — you can build your own in an afternoon. Open your IDE, describe the page and exactly what you want off it, let Claude write the scraper, then read it, run it, tweak it. The catch: hammer a site from one IP and you'll get blocked or fed captchas fast. The fix is rotating proxies — your requests go out through a pool of different IPs so no single one looks suspicious. Services like Webshare give you thousands of rotating IPs for a few dollars a month — cheaper than any 'data platform', and it's yours.

// route requests through a rotating proxy pool (Node + undici)
const res = await fetch(url, {
  dispatcher: new ProxyAgent(process.env.PROXY_URL),
  headers: { "User-Agent": "Mozilla/5.0 ..." },
});
  • Go slow — put a delay between requests.
  • Send a real User-Agent header, not the default one.
  • Only burn the proxy when you actually get blocked (403, 429, captcha) — try bare first to save bandwidth.

Paste the exact error you're hitting (403, captcha page, IP-blocked) into Claude and it'll add the retry-through-proxy logic for you. You don't have to know it cold.

Be a good citizen. Respect robots.txt where it matters, don't melt someone's server, and never scrape personal or sensitive data you've no business touching.

Sweet, you’ve completed this section! 🥳 Move on to the next section on design.