Convert

Convert.com developer for hire

I build Convert variation code as a single minified JS and CSS bundle from my own build rig, with single-page-app handling, anti-flicker, and accessibility solved in code before it ever reaches Convert. In Convert itself I set the audience and targeting and drop the bundle into the variation editors, and conversion tracking runs through GA4. The hard parts are handled in code, not left to the tool, so the build ships clean and passes engineering review. Available for direct briefs and as overflow capacity for CRO agencies running Convert programmes.

Why most Convert variation code breaks, and how I avoid it

Most Convert tests that fail in production fail for the same reasons: the variant assumes the DOM is ready when it runs, it never re-applies after a single-page-app route change, it sets a React input in a way the framework ignores, or it shifts layout after first paint and wrecks Core Web Vitals. These are not Convert problems. They are client-side engineering problems that show up on every testing tool, and they are where a marketer-led build or a generalist falls down.

I solve them before Convert is involved. The variant is built and tested as real code, so by the time it goes into Convert it already survives a hostile DOM, re-applies on route changes, sets framework inputs correctly, and ships with the accessibility patterns the brief leaves out. Convert then does the one job it is good at: deciding who sees the test and where.

What I actually touch in Convert

Convert is the most code-friendly of these tools, and I lean on that. My variant bundle drops straight into Convert's Variation JS and Variation CSS editors, and Convert also has project-level JS for anything that needs to load across the experiment. Audience and URL targeting run through Convert's Experiment Locations and saved audiences, and conversion tracking goes through GA4 rather than rebuilding measurement inside the tool. The less bespoke logic lives in Convert's UI, the less there is to break on a publish, and the easier the test is to hand over and reason about.

The engineering baked into every variant

Single-page-app route changes

Convert's snippet evaluates on load. On a React, Vue, or Next.js site, a route change after that happens client-side with no fresh page load, so a naive variant either persists onto pages it should not or breaks because the elements it expected are gone. My bundle watches for URL changes and re-runs the variant logic on each one, with a short settle so the framework's render pass finishes before the variant mounts. I cover the failure mode in why experiments stop firing on SPA route changes.

Anti-flicker without tanking Core Web Vitals

The variant hides only the elements it is about to change, with a timeout failsafe, rather than blanking the whole page. That stops the flash of original content without the page-wide hide that most setups reach for and that wrecks LCP. The full tradeoff is in stopping A/B test flicker without tanking Core Web Vitals.

React and framework-controlled inputs

Setting input.value directly does not fire React's onChange, so form state and visual state drift apart and the test measures nothing useful. The bundle uses the native input descriptor so the framework registers the change. The pattern is below, and explained in full in setting a React controlled input from an A/B test.

// Bypass React's overridden value setter so onChange actually fires
const setReactInputValue = (input, value) => {
  const nativeSetter = Object.getOwnPropertyDescriptor(
    window.HTMLInputElement.prototype,
    "value"
  ).set;

  nativeSetter.call(input, value);
  input.dispatchEvent(new Event("input", { bubbles: true }));
};

Late-rendering elements and accessibility

Targets that mount late (lazy carousels, async recommendations) are handled with an element-wait utility rather than a fixed delay, so the change applies whenever the element appears. See targeting elements that render late. Any new modal or interactive component ships with a focus trap, ARIA roles, and keyboard parity by default, so the variant passes accessibility review instead of failing it on handover. The patterns are in accessible A/B test variants.

Built with my own rig

The reason Convert only ever sees a single clean bundle is that I do not author variants by hand in the tool. I build them in a CRO-specific rig that turns out one minified JS and one CSS per experiment, with a shared helper library for the patterns above, sub-200ms builds, and a stack mode for testing how multiple experiments interact. It is the same output regardless of platform, which is why a Convert build, a VWO build, and an Optimizely build all reach the same engineering bar. The full write-up is in abtestrig, the CRO build tool I built.

How I work on Convert projects

Briefs start with a short intake: scope, hypothesis, audience, expected lift, leading indicator. The variant is built to your engineering conventions where they exist and to pass review where they do not, self-QA'd cross-browser, and run through an accessibility pass before handover. The handover doc covers the Convert segmentation and targeting, the goal and GA4 mapping, and how the bundle is organised.

I work UK and EU business hours, every business day, live on Slack and email through your working day. For North American clients, UK afternoons overlap with morning standups on the East Coast.

Hire a Convert.com developer

For Convert variation builds, overflow capacity for CRO agencies, or to discuss a specific test idea. I respond within one UK business day.