Author: onetwothreeadmin

  • Substack’s Section feature: when to split your newsletter

    Substack’s Section feature: when to split your newsletter

    Substack's Section feature: when to split your newsletter
    Photo by Markus Winkler on Unsplash

    Substack’s Section feature lets you run multiple newsletters under a single publication. Each Section has its own name, subscription toggle, and archive page—but everything lives under one domain and subscriber dashboard.

    Most operators discover Sections when they want to add a secondary content stream without fragmenting their audience or managing two separate Substacks. The feature works, but only if you understand what it actually controls and what it doesn’t.

    How Sections work

    When you create a Section, you’re adding a category filter to your publication. Subscribers can opt in or out of each Section independently. A reader might subscribe to your main newsletter but skip your weekly link roundup, for example.

    Each post you publish gets assigned to one Section. Your homepage feed shows all posts by default, but readers can filter by Section using the navigation menu. Each Section gets its own RSS feed and archive URL.

    Sections don’t create separate subscriber lists—everyone is still subscribed to your publication. The Section toggle just controls which emails they receive. Your total subscriber count remains unified, and free vs. paid status applies across all Sections.

    This matters for billing. If you have 5,000 subscribers but only 1,000 opted into your premium Section, you’re still paying for 5,000 subscribers. Substack doesn’t prorate based on Section engagement.

    When to use Sections

    Sections make sense when you want to publish different content formats or cadences without forcing every subscriber to receive everything.

    Common use cases: a weekly main newsletter plus a daily news brief; a free newsletter with a paid-only deep-dive Section; a primary topic with a secondary niche that overlaps but doesn’t fully align.

    Sections don’t work well if your content streams target completely different audiences. A marketing newsletter and a cooking newsletter should be separate publications, not Sections. Substack’s discovery and recommendation algorithms treat your publication as a single entity—readers who find you through one Section will see the rest.

    Sections also don’t solve the problem of list fatigue. If subscribers are tuning out, adding more Sections usually makes it worse. You’re better off consolidating or changing your primary content strategy.

    The non-obvious filtering tip

    Substack’s subscriber export includes a sections column that lists which Sections each subscriber has enabled. Most operators ignore this field, but it’s useful for segmentation.

    You can filter your CSV export to find subscribers who opted into one Section but not another. This tells you which content streams resonate and which don’t. If 80% of your subscribers turned off your link roundup Section, that’s a signal to kill it or rework the format.

    The export also shows Section opt-in dates, so you can track adoption over time. If a new Section isn’t attracting opt-ins after 30 days, it’s probably not differentiated enough from your main feed.

    One edge case: Substack doesn’t let you set default Section subscriptions for new subscribers. Everyone who signs up is automatically opted into all Sections. You can’t onboard new readers into just your free Section and gate the premium one—they get everything unless they manually toggle it off.

    This means your welcome email needs to explain what each Section is and how to manage preferences, or you’ll see higher unsubscribe rates from people who didn’t expect the volume.

    Section limitations

    Sections don’t have separate branding. The header, logo, and colour scheme apply to your entire publication. If you want each Section to feel visually distinct, you’re limited to post-level formatting.

    You also can’t schedule posts to different Sections at the same time. Substack’s scheduler works at the publication level, so if you want to send your main newsletter and a bonus Section on the same day, you’ll need to stagger the send times manually.

    Paid subscriptions apply across all Sections—you can’t charge separately for individual Sections. If you want to monetise one Section independently, you’d need a second Substack publication.

    Sections work best when your content streams share a core audience but vary in format, frequency, or depth. If you’re running a single newsletter and considering expansion, Sections are worth testing—but only if you’re prepared to let subscribers self-select out of the extra volume.

    Using Substack or considering it? Subscribe to One Two Three Send for more breakdowns of newsletter platform features that actually matter.

  • AI prompt version control: when edits break what used to work

    AI prompt version control: when edits break what used to work

    AI prompt version control: when edits break what used to work
    Photo by Alexander Sutton on Unsplash

    You’ve spent an hour tuning a prompt that finally generates clean product descriptions. Two weeks later, you tweak one sentence to fix a minor issue—and the entire output degrades. You can’t remember what you changed. You don’t have the old version. You’re starting from scratch.

    This is the hidden tax of working with AI tools as a solo operator: prompt drift. Unlike code, prompts rarely live in version control. Unlike templates, they don’t auto-save revisions. You iterate in a text field, overwrite what worked, and lose the breadcrumb trail back to stable output.

    If you’re using Claude, ChatGPT, or any API-driven AI tool more than once a week, you need a lightweight system to track prompt versions before an accidental edit costs you an afternoon of re-testing.

    Why prompts break when you edit them

    AI models are sensitive to phrasing, order, and context window position. A prompt that works today can fail tomorrow if you:

    • Reorder instructions (models often weight earlier instructions more heavily)
    • Add examples that conflict with existing tone guidance
    • Change a keyword the model latched onto as a formatting anchor
    • Expand context and push key instructions past the model’s effective attention span

    The problem compounds when you’re using the same base prompt across multiple workflows—email subject lines, social captions, outline generation. Edit the shared prompt to fix one use case, and you might break three others without noticing until next week.

    A three-file version control system that takes 90 seconds

    You don’t need Git. You don’t need a database. You need three text files per prompt, stored locally or in a synced folder:

    1. prompt_live.txt — the current production version you’re actively using
    2. prompt_archive.txt — append-only log of past versions with datestamps
    3. prompt_notes.txt — what you changed and why, in plain English

    Every time you edit a prompt that’s working, copy the old version into the archive file with today’s date before you overwrite it. In the notes file, jot down what you’re trying to fix. If the new version fails, you have a rollback path and context for why you deviated.

    This isn’t theoretical. I’ve rolled back four prompts this month after “improvements” tanked output quality. Each rollback took 30 seconds because I had the prior version timestamped and ready to paste.

    When to snapshot a prompt

    Not every edit needs archiving. Snapshot when:

    • The prompt generates output you’d publish without heavy editing
    • You’re about to change structure (adding/removing sections, reordering steps)
    • You’re testing a new model or API endpoint with the same prompt
    • You’ve spent more than 20 minutes tuning it—your time investment is the signal

    If you’re still experimenting and nothing works yet, don’t bother. Once a prompt crosses into “production” territory—meaning you rely on it weekly—start tracking.

    API users: commit prompts to your repo

    If you’re calling Claude or OpenAI via API and storing prompts as variables in scripts, treat them like code. Commit prompt changes separately from logic changes. Write a one-line commit message explaining the edit.

    I’ve seen operators bury prompt tweaks inside feature branches, then lose track of which version shipped. A prompt is configuration, not implementation—version it accordingly.

    For non-coders: a .txt file in Dropbox with date headers works just as well. The tool doesn’t matter. The habit does.

    What this prevents

    Version control won’t make your prompts better. It will stop you from making them worse by accident. It gives you:

    • A rollback option when new phrasing degrades output
    • A diff view (even manual) to spot what changed between working and broken states
    • Confidence to experiment, knowing you can revert in seconds
    • A reference library when you need to adapt an old prompt to a new workflow

    The overnight cost is near zero. Three text files. A two-second copy-paste before you edit. A one-sentence note about intent.

    The upside is measured in hours you don’t spend reconstructing a prompt that worked last month, before you “improved” it into the ground.

    Want more practical systems for solo operators running AI-assisted workflows? Subscribe to One Two Three Send for weekly breakdowns of what actually works—and what quietly breaks.

    Heads up — some links in this article are affiliate links. If you sign up through them, we may earn a small commission at no extra cost to you. We only recommend tools we use ourselves.

  • Stop using spreadsheets as product roadmaps—they hide dependencies

    Stop using spreadsheets as product roadmaps—they hide dependencies

    Stop using spreadsheets as product roadmaps—they hide dependencies
    Photo: Tamara Weißmann via Wikimedia Commons (CC BY-SA 4.0)

    Most solo operators I know run their product roadmap in a spreadsheet. Google Sheets, Airtable if they’re feeling fancy, sometimes just a Notion table. It makes sense at first—quick to set up, easy to sort by priority or launch date, and you already know how to use it.

    But spreadsheets fail at the one thing roadmaps need most: showing you what depends on what.

    When you shift a launch date or reprioritize a feature, a spreadsheet won’t tell you what else breaks. It won’t show you that the email automation you planned for August requires the API integration you just pushed to October. It won’t flag that your affiliate dashboard redesign depends on Stripe webhook changes you haven’t scoped yet.

    You find out when you sit down to build—and by then, you’ve already committed the time.

    Dependencies are invisible in rows and columns

    Spreadsheets organize information in one dimension: down. You can add columns for status, owner, priority, quarter. You can color-code cells. But you can’t see relationships between tasks without either memorizing them or writing them into a notes column that no one reads.

    I learned this the hard way in March when I delayed a course platform integration by three weeks. I’d moved it in my roadmap spreadsheet, updated the target date, marked it yellow for “delayed.” What I didn’t notice until week two: the automated email sequence I’d already drafted referenced features from that integration. The landing page copy assumed it was live. The affiliate program I’d just onboarded partners for was built around it.

    None of that was visible in the spreadsheet. I had to manually scan every other row, check my notes, and reverse-engineer what I’d already forgotten.

    Visual roadmap tools surface what shifts when you move one piece

    Tools like Roadmunk, Craft.io, and ProductPlan aren’t just prettier spreadsheets. They let you draw dependency arrows: this feature blocks that one, this launch requires these three tasks to close first, this campaign can’t start until that integration is live.

    When you drag a card to a new date, the tool shows you—immediately—what else needs to move. Some tools auto-shift dependent tasks. Others flag conflicts and make you decide. Either way, you’re not flying blind.

    I switched to Roadmunk in April. It’s $19/month for solo use, $49 if you want stakeholder sharing (I don’t). The first week felt like overkill—dragging cards, drawing arrows, setting up swimlanes for different product areas. But the second time I moved a feature, the tool lit up four other tasks that depended on it. Two I’d forgotten entirely.

    That paid for six months of subscription in one decision.

    When a spreadsheet still works

    If you’re managing fewer than ten active initiatives and nothing depends on anything else—pure parallel work—a spreadsheet is fine. If your “roadmap” is really just a prioritized backlog with no sequencing, keep the sheet.

    But the moment you have a chain—A before B, B unlocks C—you need a tool that can show you the chain. Otherwise you’re rebuilding the mental model every time you look at the list, and you will miss something.

    Migration takes an afternoon, not a week

    Most roadmap tools import from CSV. Export your spreadsheet, match the columns (title, description, status, date), and you’re 80% there. The remaining 20% is drawing the dependency lines—which forces you to actually think through what depends on what.

    That’s not busywork. That’s the clarity you’ve been missing.

    I spent three hours migrating 22 initiatives from Sheets to Roadmunk. By hour two, I’d found three circular dependencies I didn’t know existed—tasks that each assumed the other would ship first. In a spreadsheet, they just sat there, both marked “Q3,” both impossible.

    If you’re still roadmapping in a spreadsheet, export it this week and try a visual tool for 30 days. Roadmunk, Craft, ProductPlan, even Trello with a Butler automation to enforce dependencies—anything that shows you the graph, not just the list. You’ll catch one missed dependency in the first week, and that’s worth the entire year of subscription.

    What you can’t see, you can’t plan around. And a spreadsheet only shows you rows.

  • Course platform video bandwidth caps: what breaks at 1TB

    Course platform video bandwidth caps: what breaks at 1TB

    Course platform video bandwidth caps: what breaks at 1TB
    Photo by Growtika on Unsplash

    Solo operators launching video courses don’t usually budget for bandwidth. They budget for hosting, maybe email delivery, occasionally CDN fees. But video bandwidth caps on course platforms catch most creators off guard—and the bills or throttling that follow can kill a launch.

    If you’re hosting video on Teachable, Thinkific, Podia, Kajabi, or any other all-in-one course platform, you’re subject to bandwidth limits that aren’t always printed on the pricing page. Some platforms enforce soft caps with overage fees. Others throttle playback speed or pause delivery entirely until the next billing cycle. A few don’t enforce caps at all—until you reach a threshold that triggers a support email asking you to upgrade or migrate.

    Here’s what actually happens when you approach 1TB of monthly bandwidth, which platforms enforce what, and how to structure your video library to stay under the wire.

    What counts as bandwidth

    Bandwidth isn’t storage. Storage is how much disk space your video files occupy. Bandwidth is how much data gets transferred every time someone streams or downloads your content.

    If you upload a 500MB video and 100 students watch it in full, you’ve consumed 50GB of bandwidth that month. If 1,000 students watch it, that’s 500GB. Add multiple videos per course, partial rewatches, and mobile users who retry streams after dropping connections, and usage climbs faster than enrollment.

    Most platforms count both video streams and file downloads. Some count thumbnail previews and adaptive bitrate variants separately. A few platforms pre-encode video at multiple resolutions (360p, 720p, 1080p) and serve whichever the viewer’s connection requests—but every variant streamed counts against your cap.

    Platform-by-platform caps and overages

    Teachable doesn’t publish a bandwidth limit on any plan, but enforces a soft cap around 1TB per month. Go over and you’ll get a support email suggesting you upgrade to a custom Enterprise plan or move large files to external hosting (Vimeo, Wistia, YouTube unlisted). Overage fees aren’t automatic; you negotiate them case-by-case.

    Thinkific caps bandwidth at 2TB/month on the Pro plan ($199/month) and enforces hard throttling if you exceed it mid-cycle. The Growth plan ($399/month) raises the cap to 5TB. If you hit the limit, video playback slows to buffer every few seconds until the calendar month rolls over.

    Podia has no published bandwidth cap and claims unlimited delivery, but community threads report that accounts serving more than 3–4TB/month get flagged for review. Podia’s support typically asks you to compress videos or switch to external hosting rather than charging overages.

    Kajabi enforces a 1TB cap on the Basic plan ($149/month), 2TB on Growth ($199/month), and 5TB on Pro ($399/month). Overages cost $1 per additional gigabyte, billed automatically. A single viral week can add hundreds of dollars to your invoice if you’re near the cap.

    If you’re using WordPress with a membership plugin (MemberPress, Restrict Content Pro, Paid Memberships Pro) and hosting video files directly, your bandwidth is determined by your hosting plan. Shared hosting typically caps monthly transfers at 1TB; managed WordPress hosts like WP Engine and Kinsta allow 2–5TB depending on tier. Exceed it and you’ll either pay overage fees ($0.10–$0.50/GB) or get throttled until you upgrade.

    How to stay under 1TB without compressing quality to death

    The most effective fix is offloading video to a specialist platform and embedding it in your course. Vimeo Pro ($20/month) includes 1TB of bandwidth and charges $0.02/GB over that—far cheaper than most course platform overages. Wistia starts at $24/month for 250GB and scales to custom plans with negotiated bandwidth pools.

    Both platforms let you embed videos with domain-level privacy (only your course site can play them) and disable download buttons to prevent students from hoarding files locally. You lose native course-platform analytics, but both Vimeo and Wistia offer heatmaps, engagement graphs, and completion tracking you can export or pipe into Zapier.

    Another approach: compress videos before upload using Handbrake (free, open-source). A 1080p MP4 encoded at H.264 with a constant rate factor (CRF) of 23 looks nearly identical to CRF 18 but weighs 30–40% less. For talking-head courses with minimal motion, CRF 26 is often imperceptible and cuts file size in half.

    If your course platform supports adaptive bitrate streaming, upload only 720p and 1080p variants. Most students on mobile default to 720p, and forcing a 1080p-only stream wastes bandwidth without improving their experience.

    When to pay for bandwidth vs. when to change architecture

    If you’re spending more than $100/month on bandwidth overages or nearing your cap every cycle, it’s worth splitting video hosting from course delivery. Keep your course platform for enrollment, payment processing, and student dashboards—but serve video from Vimeo, Wistia, or a dedicated video CDN like Bunny Stream ($0.005/GB).

    Bunny Stream is the cheapest option for high-traffic courses. You upload once, and Bunny encodes and delivers video globally for half a cent per gigabyte. A course consuming 2TB/month costs $10 in Bunny bandwidth, compared to $200–$400 in platform overages or plan upgrades.

    The tradeoff: you lose one-click upload workflows and native progress tracking. You’ll need to embed Bunny’s iframe player manually and connect view events to your course platform via webhook or API. For operators comfortable with light custom code, the savings are worth it. For everyone else, Vimeo or Wistia’s embed-and-forget workflow is the better middle ground.

    If you’re launching a video course this year, calculate your expected bandwidth before you pick a platform. Multiply total video file size by estimated student count and average watch rate. Add 20% for retries and partial views. If the result approaches 1TB, either compress harder, plan for external hosting, or budget for overage fees from day one.

    Want more breakdowns like this? Subscribe to One Two Three Send—every week we cover the infrastructure, tools, and pricing details that solo operators actually run into.

  • Why solo operators need fewer analytics dashboards, not better ones

    Why solo operators need fewer analytics dashboards, not better ones

    Why solo operators need fewer analytics dashboards, not better ones
    Photo by path digital on Unsplash

    Open question: how many browser tabs do you have pinned right now for analytics tools?

    Google Analytics 4. Plausible or Fathom. Your newsletter platform’s dashboard. Stripe for revenue. Maybe a social media scheduler with engagement stats. Maybe a WordPress stats plugin.

    You’re swimming in data, but you still can’t answer basic questions without cross-referencing three platforms and doing the math in a spreadsheet.

    The problem isn’t that your analytics tools are bad. It’s that you’re using too many of them.

    The dashboard creep problem

    Every tool you add promises one thing it tracks better than the rest. Fathom gives you clean pageview data. GA4 tracks events and funnels. Your newsletter platform counts opens and clicks. Stripe tells you MRR.

    None of them talk to each other.

    So you end up with this: a reader clicks a link in your newsletter, lands on a blog post, scrolls to a paywall, and converts to a paid subscriber. That’s one journey. But you’re tracking it in four places:

    • Newsletter click-through in MailerLite or Beehiiv
    • Pageview and scroll depth in GA4 or Plausible
    • Conversion event in Stripe
    • Subscriber count in your membership plugin or Substack dashboard

    Want to know your true conversion rate from email to paid? You’re exporting CSVs and building pivot tables.

    Most solo operators don’t have time for that. So they stop looking. They check revenue once a week, glance at traffic when it spikes, and ignore everything else.

    Consolidation is a feature, not a compromise

    The knee-jerk response is to buy a better integration tool. Zapier, Make, or a dedicated analytics warehouse like Segment.

    That works if you’re running a team with a data analyst. For a solo operator, it’s just another dashboard to maintain.

    Here’s the alternative: pick one source of truth per question you actually need to answer, and delete the rest.

    If you run a paid newsletter, your newsletter platform’s dashboard is your primary metric. Revenue, open rates, churn—it’s all there. You don’t need GA4 tracking the same pageviews unless you’re also running a separate blog with ad revenue.

    If you run a content site with affiliate income, your traffic analytics tool (GA4, Plausible, Fathom) is the anchor. Stripe is secondary—you check it when payouts arrive, not daily.

    If you sell a course or productised service, Stripe or your payment processor is the single source of truth. Traffic is context, not the core metric.

    One dashboard per business model. Everything else is noise.

    What to delete right now

    Start with anything that duplicates a metric you already track elsewhere.

    If your newsletter platform shows subscriber count and growth rate, you don’t need a separate spreadsheet updating those numbers weekly. If Stripe shows MRR and churn, you don’t need a SaaS metrics dashboard calculating the same figures with a two-day delay.

    Delete any tool you haven’t logged into in the last 30 days. If you’re not checking it, you’re not using the data. And if you’re not using the data, the tool is just spending CPU cycles and cluttering your mental model.

    Delete any analytics layer that requires manual export to be useful. If you have to download a CSV, open Excel, and join two tables to answer a question, that tool isn’t serving you—it’s creating work.

    The one dashboard you actually need

    Here’s what works for most solo operators:

    One real-time traffic dashboard (Plausible, Fathom, or GA4 if you’re already fluent in it). One revenue dashboard (Stripe, or your newsletter platform if you’re subscription-first). One weekly export of the metric that matters most to your business model—usually traffic sources, conversion rate, or churn.

    That’s it. Three views, not six. You can check all three in under five minutes, and you’ll have enough context to make decisions without second-guessing the data.

    If you can’t make a decision with the data a tool provides, the tool isn’t solving a problem—it’s becoming one.

    Want more operator-to-operator breakdowns like this? Subscribe to One Two Three Send and get one article like this in your inbox every week—no fluff, no filler, just the infrastructure decisions that matter.

    Heads up — some links in this article are affiliate links. If you sign up through them, we may earn a small commission at no extra cost to you. We only recommend tools we use ourselves.

  • SEO keyword cannibalization: when two posts compete and both lose

    SEO keyword cannibalization: when two posts compete and both lose

    SEO keyword cannibalization: when two posts compete and both lose
    Photo by Merakist on Unsplash

    You publish a post on “best email automation tools” in March. It ranks on page two. In June, you write another piece on “email automation platforms for small businesses.” Google now has two targets for the same search intent—and neither breaks page one.

    This is keyword cannibalization: when your own content competes against itself. Search engines don’t know which page to prioritize, so they split the ranking signal between both. You lose traffic, authority, and conversion potential on a topic you should own.

    Most solo operators don’t notice until months later, when a high-effort post underperforms and the analytics show an older piece siphoning impressions.

    How to spot cannibalization in your content

    Open Google Search Console. Navigate to Performance, then filter by query. Pick a target keyword you care about—something with commercial intent or steady volume.

    Click into the query detail. Scroll to Pages. If you see two or more URLs listed with similar impression counts, you have cannibalization. Neither page is dominant; Google is rotating which one appears in results.

    The clearest signal: impression counts split 60/40 or closer. If one page holds 95% of impressions, you don’t have a problem—that’s hierarchical ranking. But when impressions distribute evenly, search engines see both as equally relevant and neither as authoritative.

    Check position data next. Cannibalizing pages often hover between position 8 and 20. They’re indexed, they’re relevant, but they’re not winning because the ranking signal is diluted.

    Which post to keep, which to redirect

    Decide based on three factors: backlinks, traffic history, and content depth.

    In Search Console, compare total clicks over the last 90 days. The page with higher cumulative clicks has momentum. If the margin is tight, check external backlinks using a tool like Ahrefs or your hosting analytics referrer log. The page with more inbound links carries more authority.

    If both posts have similar metrics, pick the one with better content structure—clearer headings, more examples, updated tooling references. That’s your canonical target.

    Once you’ve chosen, you have two options:

    • 301 redirect: Delete or unpublish the weaker post and redirect its URL to the stronger one. This consolidates link equity and tells Google the authoritative page.
    • Canonical tag: Keep both posts live but add a rel="canonical" tag on the weaker page pointing to the stronger one. Use this when the weaker post still serves a secondary audience or internal linking structure.

    Redirects are cleaner. Canonical tags are useful when you want to preserve a slightly different angle but still signal priority to search engines.

    Merge content instead of deleting

    Before you redirect, audit both posts for unique value. The weaker post might have a better example, a clearer how-to section, or updated pricing data.

    Copy those sections into the stronger post. Rewrite transitions so the merge feels intentional, not Frankenstein. Update the publish date if your CMS supports it, or add a note at the top: “Updated July 2026 with new tools and consolidated guidance.”

    This approach gives you one definitive resource instead of two mediocre ones. Readers get more value per click, and Google sees a single, comprehensive answer.

    After merging, set up the 301 redirect from the old URL to the updated post. Traffic will consolidate within two to four weeks as Google recrawls and reassigns ranking signals.

    Prevent future cannibalization with a content map

    Track your target keywords in a spreadsheet. Three columns: Keyword, Primary URL, Publish Date.

    Before drafting a new post, search your own site. Use site:yourdomain.com "keyword phrase" in Google. If a post already covers the topic, update that post instead of creating a new one.

    If you need a new angle—say, a beginner’s guide vs. an advanced deep-dive—make the keyword targeting explicit. Use different modifiers: “how to start” vs. “advanced strategies for.” Give Google clear semantic separation.

    Internal linking also matters. When you mention a keyword in passing, link to your primary post on that topic. This signals hierarchy and reinforces which page you want ranking.

    Cannibalization isn’t a catastrophe, but it’s invisible drag on growth. Fix it once, and your best content starts working harder.

    One Two Three Send covers SEO, hosting, and content tooling for solo operators. Subscribe for weekly breakdowns of what actually moves the needle.

  • WordPress CDN purge delays: when edge caches serve stale content

    WordPress CDN purge delays: when edge caches serve stale content

    WordPress CDN purge delays: when edge caches serve stale content
    Photo by WebFactory Ltd on Unsplash

    You publish a correction to a post, hit update, and reload the page. It looks fine. Two hours later, a reader emails you about the mistake you just fixed—because they’re still seeing the old version.

    CDN edge caches don’t purge instantly. Even when your WordPress hosting provider or CDN plugin claims “automatic purge on publish,” the signal has to propagate across dozens or hundreds of edge nodes. Some refresh in seconds. Others take minutes. A few stragglers can hold stale content for five, ten, even fifteen minutes.

    If you run a content site, newsletter archive, or any business where correctness matters more than speed, you need to understand how purge delays work—and when to bypass the CDN entirely.

    How CDN purge propagation actually works

    When you update a WordPress post, your caching plugin or hosting control panel sends a purge request to the CDN. That request tells the CDN to invalidate the cached copy of a specific URL.

    But CDNs don’t store one copy of your page. They store dozens, distributed across edge nodes in different cities and regions. The purge request has to reach every node that cached that URL. Some CDNs use a hub-and-spoke model, where a central controller tells edge nodes to purge. Others rely on eventual consistency, where nodes check in periodically and sync purge lists.

    The result: purge latency varies by CDN provider, geographic distribution, and how the edge node last synced. Cloudflare’s global purge typically completes in under 30 seconds. StackPath and BunnyCDN clock in around 30–60 seconds. Older or budget CDNs can take two to five minutes. Regional edge nodes in low-traffic zones sometimes lag another five minutes beyond that.

    If your reader hits an edge node in Tokyo thirty seconds after you purge in New York, they might still see the cached version. The purge request is in flight, but hasn’t landed yet.

    When purge delays break your workflow

    For most blog posts, a one-minute delay doesn’t matter. Readers won’t notice. But three scenarios make purge lag painful:

    • Breaking news or time-sensitive corrections. If you publish live updates, product launches, or breaking analysis, stale caches mean early readers see outdated information. You can’t control which edge node they hit.
    • Email newsletter links that drive immediate traffic. You send a newsletter linking to a new post. Subscribers in different regions click within seconds of each other. Some see the post. Others hit a 404 or an older draft, because the edge node nearest them hasn’t purged yet.
    • Affiliate links, pricing, or legal copy. If you update an affiliate disclosure, a product price, or terms of service, you need every reader to see the current version immediately. A five-minute cache lag exposes you to inconsistency or compliance risk.

    Purge delays also compound when you use multiple caching layers. If your host runs Varnish or Nginx caching in front of the origin, and you layer a CDN on top, you have two purge queues. A plugin might purge the CDN instantly but leave the host cache intact for another sixty seconds. The CDN pulls the stale copy from the host, re-caches it, and now you’re waiting for both layers to expire.

    What to do when instant purge matters

    If you need guaranteed fresh content, you have three levers:

    Bypass the CDN for critical URLs. Most CDNs let you set cache rules per path. If you have a /live subdirectory or a specific post slug that needs zero cache lag, exclude it from edge caching entirely. The page will load slightly slower, but every reader sees the current version.

    Use query string cache busting. Append a unique query parameter to the URL when you update the post—something like ?v=1721203487. The CDN treats it as a new URL and skips the cache. This works for newsletter links, social shares, or any scenario where you control the inbound link. It doesn’t help organic search traffic, because Google ignores query strings in most cases.

    Monitor purge lag and escalate if necessary. If you’re on a managed WordPress host like BigScoots, WP Engine, or Kinsta, check whether they expose purge status in the dashboard. Some hosts show per-node purge completion. If you see consistent lag on specific regions, open a support ticket. Misconfigured edge nodes or stale DNS can cause outlier delays that support can fix.

    For most solo operators, the simplest fix is setting shorter cache TTLs on high-stakes pages. If your default CDN cache is set to 24 hours, dial it back to 5 or 10 minutes for posts you update frequently. You lose some performance benefit, but you cut the worst-case purge window from hours to minutes.

    The non-obvious detail: browser cache adds another layer

    Even if your CDN purge completes in ten seconds, readers might still see stale content for minutes or hours—because their browser cached the page. CDN purges don’t touch client-side caches.

    If your WordPress caching plugin or CDN sets Cache-Control: max-age=86400 (24 hours) in HTTP headers, the reader’s browser won’t even ask the CDN for a fresh copy until that timer expires. You can purge the CDN a hundred times; it won’t matter.

    Check your caching plugin’s browser cache setting. For posts you update often, set browser cache TTL to 5 or 10 minutes, not hours. That way, readers who reload the page within a few minutes will fetch the updated version from the CDN, even if their initial pageview hit a stale edge node.

    One more thing: if you’re testing purge behavior yourself, open an incognito window or clear your browser cache before each reload. Otherwise you’re testing your local cache, not the CDN.

    Got a caching or hosting question? Reply to this email—we cover reader questions every Sunday.

  • Canva’s Brand Kit feature: when centralised assets save more time than templates

    Canva’s Brand Kit feature: when centralised assets save more time than templates

    Canva's Brand Kit feature: when centralised assets save more time than templates
    Photo by Swello on Unsplash

    Most solo operators treat Canva like a template library. You find a design you like, swap in your text and images, export, and move on. But once you’re creating social graphics, lead magnets, and course slides every week, the template-first workflow breaks down—you’re re-entering hex codes, re-uploading logos, and hunting for that one font name you used last month.

    Canva’s Brand Kit feature solves this by centralising your visual identity in one place. Every colour, font, and logo you define in the Brand Kit syncs across all your designs. Change your primary colour once, and it updates everywhere. Upload a new logo version, and it’s available in every project without re-uploading.

    It sounds simple, but the time savings compound faster than most operators expect—and there are a few non-obvious quirks worth knowing before you commit your entire visual system to it.

    What Brand Kit actually stores

    Brand Kit isn’t just a folder. It’s a structured data layer that Canva injects into every design canvas you open. Specifically, it holds:

    • Colour palette — up to 12 colours on the free plan, unlimited on Pro. These appear as swatches in every colour picker.
    • Fonts — up to 3 font pairings (headline + body) on free, unlimited on Pro. Canva auto-suggests these when you add text boxes.
    • Logos — up to 3 logo files on free, 50+ on Pro. They appear in a dedicated “Your logos” panel, separate from your generic uploads.

    The key difference: Brand Kit assets are persistent across sessions and devices. Your uploaded images sit in your “Uploads” folder and can get buried. Brand Kit assets are always one click away, in the same spot, every time.

    When Brand Kit beats templates

    Templates are great for one-off designs or exploring new layouts. But if you’re running a content operation—weekly newsletters, daily social posts, monthly lead magnets—Brand Kit becomes the faster option once you cross a threshold:

    You’re creating 5+ designs per week. At that cadence, manually applying your brand colours and fonts wastes 2–3 minutes per design. Over a month, that’s an hour. Over a year, it’s 12+ hours of copy-pasting hex codes.

    You’re repurposing content across formats. If you turn a blog post into a carousel, an email header, and a Pinterest pin, Brand Kit ensures all three use the exact same blue (#2E5BFF, not #2E5CFF). Templates don’t enforce consistency—Brand Kit does.

    You rebrand or iterate your visual identity. Change your primary colour in Brand Kit, and every design you open from that point forward uses the new value. Templates don’t update retroactively—you’d need to manually edit every saved template file.

    The sync quirks nobody mentions

    Brand Kit syncs forward, not backward. If you update a colour in your Brand Kit, it won’t auto-update designs you’ve already published. You’ll need to re-open each old design, click the colour swatch, and re-apply the updated palette. This isn’t automatic.

    Font syncing is even less intuitive. If you remove a font from your Brand Kit, designs that used it will still render—but the font picker will stop suggesting it. If you then open that old design on a device where the font isn’t cached, Canva will substitute a fallback (usually Inter or Roboto). The result: your archived Instagram posts suddenly have the wrong typeface.

    Logo uploads have a resolution ceiling. Canva compresses uploads over 25 MB, and even on Pro, logo files over 100 MB will fail silently. If you’re working with print-quality vector files, export a web-optimised PNG or SVG at 2x your largest canvas size (usually 2000–3000px wide) before uploading.

    One non-obvious tip: use Brand Kit as a design system, not a brand bible

    Most operators set up Brand Kit once and never touch it. Better approach: treat it as a working palette that evolves with your content. If you’re testing a new accent colour for CTA buttons, add it to your Brand Kit temporarily. If it works, keep it. If not, remove it. The kit should reflect what you’re actually using in production, not what you decided in a brand workshop two years ago.

    One useful workflow: create a “seasonal” or “campaign” colour slot in your palette. Rotate it every quarter. This keeps your designs feeling fresh without requiring a full rebrand, and it gives you permission to experiment within a constrained system.

    If you’re creating more than a handful of designs per week, spend 10 minutes setting up your Brand Kit properly. Define your core colours, lock in your fonts, and upload logo variants (horizontal, stacked, icon-only). The upfront setup pays back in saved clicks within a month—and in visual consistency for as long as you keep publishing.

    Want more tool breakdowns like this? Subscribe to One Two Three Send for weekly deep-dives on the software solo operators actually use—no fluff, just the features that matter.

  • Most subscription forms ask for too much data—here’s the cutoff

    Most subscription forms ask for too much data—here’s the cutoff

    Most subscription forms ask for too much data—here's the cutoff

    Every field you add to a subscription form costs you subscribers. The question isn’t whether that’s true—it’s how much it costs, and whether the data you collect is worth it.

    Most operators inherit form designs from platforms or copy what they see elsewhere. They ask for first name, last name, company, role, and sometimes more. Then they wonder why their landing page converts at 2% when competitors hit 8%.

    The math is simple: each additional field drops conversion by 10–25%, depending on placement and perceived friction. A three-field form converts 30–40% worse than a single-field form. If you’re getting 1,000 visitors a month, that’s the difference between 80 subscribers and 40.

    What to collect upfront

    Email address. That’s it for most operators.

    If you run a B2B newsletter where segmentation drives your entire content strategy—industry-specific tips, role-based workflows—then one additional field makes sense. A dropdown for industry or job function. Not both.

    First name feels harmless, but it’s still friction. If you’re using it only for personalization in the welcome email, test a version without it. Many operators find the conversion lift from removing it outweighs the marginal engagement bump from “Hi Sarah” instead of “Hi there.”

    Behavioral segmentation beats form segmentation. You can infer interest from what someone clicks, downloads, or reads. You can’t infer it from a dropdown they picked to get past your gate.

    What to ask later—and when

    Once someone’s subscribed, you have permission to ask more. But timing matters.

    The best window is 7–14 days after signup, once they’ve opened two or three emails and decided your content is worth keeping. Send a one-question survey: “What’s your biggest challenge with [topic]?” or “What type of content do you want more of?”

    Don’t embed the survey in the email. Link to a single-question form—Tally, Typeform, or a plain Google Form. Keep it to one question. Multi-question surveys in this context get 15–20% completion; single-question surveys get 40–60%.

    Use progressive profiling if your platform supports it. Beehiiv, ConvertKit, and Brevo all let you show different questions to subscribers based on what you already know. If someone clicked three AI-tools posts, you don’t need to ask if they’re interested in AI tools.

    The drop-off math that matters

    Run the numbers for your own funnel. If you’re getting 500 visitors a month to your signup page and converting at 4% with a two-field form, that’s 20 subscribers. Cut it to one field and conversion jumps to 6%—that’s 30 subscribers, a 50% lift.

    If you’re running paid traffic, every field costs you real money. A $10 CPM on 10,000 impressions is $100. If your landing page converts at 3%, you’re paying $3.33 per subscriber. Bump that to 5% and it drops to $2. Over a year, that’s hundreds or thousands of dollars depending on scale.

    Most platforms report form abandonment, but not field-level abandonment. If you want to see where people drop off, use Hotjar or Microsoft Clarity and watch session recordings. You’ll see people type an email, pause at the “Company” field, and leave.

    When more fields make sense

    There are exceptions. If you’re running a high-ticket funnel—consulting, enterprise software, $2,000+ courses—you want friction. A five-field form filters out tire-kickers and signals intent. Your goal isn’t volume; it’s quality.

    If you’re offering a lead magnet that’s segmented by use case—”Download the SaaS pricing guide” vs. “Download the agency pricing guide”—you need to know which one they want. But that’s still one extra field, not three.

    If you’re required to collect consent checkboxes for GDPR or sector-specific compliance, you’re stuck with them. But don’t add more optional fields on top of mandatory ones.

    Test it yourself

    Run a 50/50 split test for two weeks. Clone your signup page, remove every field except email, and send half your traffic to each version. Most email platforms let you A/B test signup forms directly—MailerLite and Beehiiv both support it natively.

    Track conversion rate, not just subscriber count. If your traffic fluctuates week to week, raw numbers will mislead you.

    If you don’t have enough traffic to get statistical significance in two weeks—say, under 200 visitors—run it for a month. Don’t flip-flop based on three days of data.

    Want more breakdowns like this? Subscribe to One Two Three Send and get one operator-focused article every day—no fluff, just the technical details that matter.

    Heads up — some links in this article are affiliate links. If you sign up through them, we may earn a small commission at no extra cost to you. We only recommend tools we use ourselves.

  • ConvertKit vs. Brevo vs. MailerLite: free tier caps and billing surprises

    Most solo operators start with a free email platform tier and assume they’ll upgrade when subscriber count crosses the threshold. Reality: you’ll hit a different limit first—and the platform will lock or bill you before you notice.

    Here’s what actually ends the free ride on three popular platforms, and what you need to watch besides subscriber count.

    ConvertKit: 1,000 subscribers, but sends matter more

    ConvertKit’s free tier caps at 1,000 subscribers. Clean enough. But the real constraint is the broadcast limit: you can send to your entire list once per day. Automations don’t count against this, but any manual broadcast does.

    If you publish daily, you’re fine. If you send a Monday newsletter, a Wednesday product launch, and a Friday recap? You’ll hit the send wall mid-week, and ConvertKit will prompt you to upgrade or wait 24 hours.

    The free tier also strips out advanced reporting. You get open rates and click rates, but no link-level breakdowns, no subscriber timezone data, and no A/B test variants. For most operators under 1,000 subscribers, that’s acceptable. For anyone testing subject lines or running cohort experiments, it’s a blocker.

    Paid plans start at $15/month for up to 300 subscribers (previously $9 in 2024, increased January 2025), then jump in $10–$15 increments as you grow. The 1,001–1,500 bracket costs $29/month. Billing is monthly by default; annual saves roughly 15%.

    Upgrade trigger: You’ll outgrow the single daily send limit before you outgrow 1,000 subscribers—especially if you batch content or run launch sequences.

    Brevo: unlimited contacts, but sends cap at 300/day

    Brevo (formerly Sendinblue) flips the model. The free tier allows unlimited stored contacts but caps you at 300 emails per day. Not 300 per broadcast—300 total sends, across all automations, transactional messages, and campaigns combined.

    If your list is 400 people and you send a single broadcast, you’ll burn your daily budget and leave 100 subscribers undelivered until tomorrow. Brevo queues the remainder automatically, but your “send now” broadcast becomes a two-day trickle.

    This structure works if your list is large but inactive, or if you’re using Brevo primarily for transactional email (order confirmations, password resets) and occasional campaigns. It breaks fast for anyone publishing on a schedule.

    The entry paid tier is $9/month for 5,000 sends. After that, Brevo bills by send volume, not subscriber count: 10,000 sends costs $18/month, 20,000 sends costs $27/month. If you send daily to 2,000 subscribers, you’ll pay for 60,000+ sends per month—around $49/month.

    Upgrade trigger: Daily send volume, not list size. A 500-subscriber list publishing five times a week will need paid access within two weeks.

    MailerLite: 1,000 subscribers, 12,000 emails/month

    MailerLite’s free tier combines both caps: up to 1,000 subscribers and up to 12,000 emails sent per month. That’s roughly 12 sends to your full list, or 3 sends per week if you’re at cap.

    The dual limit is easier to predict than Brevo’s daily throttle, but it penalizes frequent senders. If you publish twice a week and run a 4-email welcome automation, you’ll chew through 10,000+ sends monthly even with 800 subscribers.

    MailerLite’s free tier includes A/B testing (subject line only), basic segmentation, and landing page builders—more than ConvertKit offers for free, less than Brevo’s CRM-adjacent features.

    Paid plans start at $9/month for up to 500 subscribers (increased from $10/month for 1,000 in mid-2025), then scale in $5–$10 steps. The 1,001–1,500 bracket costs $18/month. Billing is monthly; annual plans save 30%, one of the steeper discounts in this category.

    Upgrade trigger: Monthly send volume if you publish frequently, subscriber count if you grow fast but send infrequently.

    What actually forces the upgrade

    Across all three platforms, the advertised subscriber cap rarely matches the real constraint:

    • ConvertKit: broadcast frequency
    • Brevo: daily send ceiling
    • MailerLite: monthly send budget

    If you’re starting out, assume you’ll need paid access once you cross 500 active subscribers and publish more than twice a week. The free tier math breaks earlier than the marketing page suggests.

    One more gotcha: all three platforms count failed sends (hard bounces, spam complaints) toward your monthly or daily limit. A stale list will burn through your budget faster than a clean one.

    If you’re already on a free tier and approaching limits, audit your unengaged segment now. Removing inactive subscribers before you hit the cap can buy you another month or two—and lower your first paid bill when you do upgrade.

    Want more operator-focused breakdowns like this? Subscribe to One Two Three Send for tools, tactics, and pricing reality checks—no fluff, no sponsorships, just what works.

    Heads up — some links in this article are affiliate links. If you sign up through them, we may earn a small commission at no extra cost to you. We only recommend tools we use ourselves.