Technical audit/ Aug 5, 2026/ Stack: React + Vite (Lovable) · Typeform · Meta Pixel

What's holding conversions back on mikeradoorcoaching.com

The copy and the social proof are well built. The problems are in delivery: the page is far too heavy for the channel the traffic comes from, and the conversions that do happen never reach Meta. Eight findings, measured against the live site.

26.8MB Images 26 uncompressed PNGs. Most sit in a carousel with no lazy.
0 Conversion events The Pixel only fires PageView. No application ever reaches Meta.
4× Typeform script Every CTA injects its own copy of embed.js into the body.

Findings

Critical01

26.8 MB of images on a page people reach from an Instagram link in bio

The 20 testimonials are full-resolution PNG screenshots, between 800 KB and 1.7 MB each. Only 3 of the 6 <img> tags in the bundle carry loading="lazy", and the testimonials live in an infinite carousel, so in practice nearly all of them download.

The traffic arrives from Instagram: mobile, 4G, with the patience of a scroll. That's 20 to 40 seconds before the full page is there. A good share of people leave before they ever reach Robin Sharma.

Fix

Convert to WebP or AVIF, resize to the actual display width (not 3000px to be shown at 400px), and add loading="lazy" to everything below the hero. 26.8 MB becomes roughly 1.5 MB. This is the highest-impact change on the list and it doesn't touch a single line of copy.

Critical02

The Meta Pixel isn't recording a single conversion

Pixel 1300172078727416 is installed and fires PageView in the <head>. I searched the entire application bundle: there is not one additional fbq('track', …) call anywhere. When someone completes the Typeform, Meta never finds out.

The consequence is direct. The algorithm can't optimize for applications because it doesn't know which ones they are, so it optimizes for the only thing it can see, which is clicks. Budget is buying cheap traffic instead of people who apply, and there's no way to calculate cost per application.

Fix

Hook the Typeform embed callback and fire Lead on submit, plus InitiateCheckout when the form opens. Ideally mirror it through the Conversions API with a shared event_id so it dedupes and survives ad blockers.

High03

Every time someone shares the link on X, it's credited to @Lovable

The default value from the tool the site was built with is still sitting in the meta tags. For an offer aimed at seven- and eight-figure founders, this is exactly the kind of detail that gets noticed.

<meta name="twitter:site" content="@Lovable" />
Fix

Swap in Mike's real handle, or drop the tag. One minute of work.

High04

The Typeform script is injected four times

Each CTA component mounts its own copy of the script in a useEffect and removes it on unmount. There are at least four instances doing the same thing to the same document.body.

useEffect(() => { const e = document.createElement("script"); e.src = "//embed.typeform.com/next/embed.js"; document.body.appendChild(e); return () => { document.body.removeChild(e) }; }, []) // × 4 separate components

Beyond the duplicate requests, this is the classic cause of a form that opens from the first button but not the second or the third: one component removes the script another one is still using.

Fix

Load embed.js once at the app level, or use the official @typeform/embed-react package. Worth testing all five CTAs one by one on mobile, before and after.

Medium05

The testimonials are screenshots, not text

Twenty PNGs with an empty alt attribute. Not indexable, not accessible, and on a phone a WhatsApp conversation scaled down to 350px wide is simply unreadable. The reader gets the texture of "there are a lot of testimonials" without the content of any of them.

Fix

Transcribe them to real text with a small photo and a name. A hundred times lighter, readable on mobile, indexable — and visually it stops looking like an infoproduct deck.

Medium06

The HTML being served is empty

It's an SPA with no prerender: what comes off the server is the <head> and a bare <div id="root"></div>. Google does render JavaScript, so it's not fatal, but it indexes worse and every preview on WhatsApp or LinkedIn depends entirely on og:image. On top of that, sitemap.xml is missing (returns 404), there's no canonical, and no og:url.

Fix

Prerender the home page at build time (one route is enough), plus sitemap, canonical and og:url.

Opportunity07

One way out: apply or leave

Every CTA leads to the same Typeform. For a high-ticket offer it's right that the application is the goal, but there's no intermediate step: the MAN UP book is mentioned and captures no email, and there's no lead magnet. Everyone who isn't ready to apply today — the large majority of cold Instagram traffic — is lost for good and has to be paid for again.

Fix

A secondary opt-in: the first chapter of the book, or a self-sabotage scorecard that returns a result. It captures the 90% who don't apply today and feeds custom and lookalike audiences for the ads.

Opportunity08

The strongest asset is in the weakest format

Joe Foster (founder of Reebok), Klarna's CMO, Robin Sharma, Vusi Thembekwayo. Eight names almost nobody in this space can show, sitting there as static text quotes. Twenty seconds of video from any one of them, above the fold, carries more weight than all the copy around them.

Along the same lines: "$300M Built / 5,000+ Men Coached / 15+ Years" with no context reads as a generic claim — $300M built by whom, him or his clients? And there's no answer to the obvious objection: what exactly happens across the 90 days, what guarantee exists, and who does not qualify. Disqualifying explicitly raises the quality of the applications that come through the Typeform.

The weight, file by file

scott-clary2,155 KB
mike-stage1,725 KB
testimonial-mystory1,725 KB
testimonial-milad1,649 KB
testimonial-sanaz1,559 KB
testimonial-father1,539 KB
testimonial-nina1,532 KB
testimonial-frederik1,379 KB
testimonial-before1,244 KB
testimonial-elite1,214 KB
+ 16 more images · 11,106 KB Total: 26,827 KB
The ten heaviest files, measured with curl against the live site on August 5, 2026. None of them needs to be a PNG.

The missing event

// Typeform posts a message when someone submits the form.
// Once, at the app level:
window.addEventListener("message", (e) => {
  if (!/typeform/.test(e.origin)) return;

  if (e.data?.type === "form-submit") {
    // event_id shared with the Conversions API so it dedupes
    const eventID = crypto.randomUUID();
    fbq("track", "Lead", { content_name: "RESET Application" }, { eventID });
  }

  if (e.data?.type === "form-ready") {
    fbq("track", "InitiateCheckout");
  }
});

With Lead recording, the campaign can move from optimizing for traffic to optimizing for conversions — and only then can anyone know what an application actually costs. Verify with the Meta Pixel Helper before calling it done.

Suggested order

  1. 01Compress the imagesWebP + resize + lazy on everything below the hero~2 h
  2. 02Fire the Lead eventAnd verify it in Pixel Helper with a test application~1 h
  3. 03Unify the Typeform script and test all five CTAs on mobileAny broken CTA is costing applications right now~1 h
  4. 04Remove @Lovable, add canonical, og:url and sitemapHousekeeping, but visible~30 min
  5. 05Transcribe the testimonials to textCan be done in batches; start with the ones seen first~3 h
  6. 06Prerender the home page and add a secondary opt-inAlready a separate iteration