Skip to content
Heatmaps are here: see where visitors click
Mockly
NewInline experiments: test one value in one line

The website platform with A/B testing built in.

Build your marketing site, put experiments right in the page, and publish. Every variant is pre-rendered to fast HTML, each visitor sees theirs with no flicker, and the results stay trustworthy however often you check.

Start freeBook a demo

Free to start. No credit card required.

pages/index.tsx
import { Experiment, Page, Variant } from "mockly";import { Nav, Product, Quote, Stats } from "../components/site"; export default function Home() {  return (    <Page title="Duebird">      <Nav />      <Experiment name="headline" goal="signup">        <Variant name="control">          <h1>Invoicing for small studios</h1>        </Variant>        <Variant name="benefit">          <h1>Get paid in days, not weeks</h1>        </Variant>      </Experiment>      <p>Send an invoice in a minute. Stop chasing clients.</p>      <Experiment name="cta" goal="signup"        variants={["control", "trial"]}>        {(v) => (          <a href="/signup" track="signup">            {v === "trial" ? "Start free trial" : "Get started"}          </a>        )}      </Experiment>      <Experiment name="proof" goal="signup">        <Variant name="control"><Stats /></Variant>        <Variant name="quote"><Quote /></Variant>      </Experiment>      <Product />    </Page>  );}
duebird.app
DuebirdLog in

Invoicing for
small studios

Send an invoice in a minute. Stop chasing clients.

Get started
9 daysto get paid3,200studios on Duebird
InvoicesNew invoice
Fernhill CoffeeINV-0142$4,800.00
Marlow & FinchINV-0141$2,150.00
Kiln CeramicsINV-0140$960.00
Harbor DentalINV-0139$3,400.00
Experiments
Variants of headline

benefit converts better than control+24.4% (+4% to +49%)Example

of flicker. Each visitor's variant is chosen on the server.
0 ms
of JavaScript on pages without interactive parts.
< 1.25 KB
false winners, however often you check the results.
< 5%
third-party trackers. Your server counts your visitors.
0

What is Mockly

Build, test, and learn in one place. Not three tools that don't know about each other.

Build

A studio for your site.

Pages and components in TSX, the markup developers already know, with a live preview, type checking as you type, and every version kept.

Learn more

Test

Experiments in the page.

Wrap any part of a page in an experiment, or vary one value inline. The server picks each visitor's variant, so nothing flickers.

Learn more

Learn

Answers you can trust.

Visitors, sources, goals, page speed, and where people click, all first party. Each experiment ends in a plain verdict that holds however often you look.

Learn more

How it works

Write it. Publish it. Let the visitors decide.

  1. 01

    Put the test in the page

    Wrap a section in an <Experiment> with a <Variant> for each version, or vary one value inline. The compiler checks every name, goal, and type as you write, so a typo never reaches visitors.

    pages/index.tsx
    <Experiment name="hero" goal="signup" secondary={["demo"]}>  <Variant name="control" weight={50}>    <Hero title="Ship faster" />  </Variant>  <Variant name="proof" weight={50}>    <Hero title="Launch in an afternoon" />    <CustomerQuotes />  </Variant></Experiment>
  2. 02

    Publish: every variant becomes HTML

    Publishing compiles each variant of each page to static HTML, with small scripts only for the parts that are interactive. When a visitor arrives, the server picks their variant and sends it. Nothing is computed per request.

    publish
    • index.htmlcta: control
    • index.htmlcta: green
    • pricing.htmlno experiment

    Pre-rendered: the server only picks and sends

    Trafficcta
    control 70%green 30%
  3. 03

    Get a verdict you can act on

    Every visitor keeps their variant across pages and visits. Goals are recorded by the server, and the results say in plain words whether a variant wins, loses, or needs more visitors, and how long that will take.

    ctaRunningExample

    green converts better than control

    +18% (+3% to +34%) in conversion rate. The interval stays valid however often you check, so you can decide now.

    VariantVisitorsRateLift
    control9,10010.2%9.6%–10.8%Baseline
    green9,10012.0%11.3%–12.7%+18%+3% to +34%

Why built in

Testing tools bolt on. Mockly is built in.

Most A/B tests run in a script that rewrites the page after it loads. Because Mockly builds the page, it can test without the trade-offs.

How Mockly compares with a script-based testing tool
The usual wayScript-based testing toolMockly
Where the variant is chosenIn the visitor's browser, after the page arrivesOn the server, before the first byte is sent
FlickerThe original shows, then changes, unless an anti-flicker snippet hides the page while the script loadsNone. The page arrives as the visitor's variant
Added JavaScriptA testing script on every page, plus its variant codeUnder 1.25 KB on pages without interactive parts
Where variants liveIn a visual editor, apart from your site's codeIn the page's code, checked by a compiler as you type
Checking results earlyDepends on the tool: fixed-sample statistics mislead if you check before the endResults stay valid however often you check
AnalyticsUsually another tag, sending data to another companyCounted by the server that serves your pages, no IP addresses stored
HeatmapsAnother tool's script on every page, which can also record what visitors typeBuilt in, only on the pages you choose; clicks and scrolling, never what's typed

The product

Everything a growth team needs, in one studio.

Write and preview side by side.

The editor checks your code as you type; the preview shows any variant, on any device size.

Mockly's studio: the file list, a page's code, and a live preview of the site

Typos caught before visitors see them.

Variant names are types, so a misspelled one is an error in the editor.

pages/index.tsx
class={v === "gren" ? "a" : "b"}

TS2367 This comparison appears to be unintentional because the types '"control" | "green"' and '"gren"' have no overlap.

Clicks, forms, and thank-you pages.

Any of them can be a goal, recorded on the server.

goals
  • cta-click/
  • waitlist/
  • signup/thanks

Every publish, one click from live.

Compare versions, see their pages, and restore any of them.

history
  • v42New pricing headline2 min agoLive
  • v41Hero copy experimentYesterdayRestore
  • v40Fresh CMS dataMonRestore

Speed, measured where it counts.

Core Web Vitals from real visitors, and each page's weight.

performance · example
  • LCP0.9 s
  • FCP0.6 s
  • CLS0.01

Good at the 75th percentile, from real visits

Analytics without a tag.

Visitors, sources, pages, devices, and goals, from the server.

analytics · example

Visitors

14,071

+68%

  • google.com30%
  • Direct36%
  • newsletter10%

See where visitors click.

Heatmaps of clicks, rage and dead clicks, and scrolling, for the pages you choose, and for each variant of a test.

heatmap · example
  • LinkStart free412
  • LinkPricing188
  • LinkSee how it works131
  • ImageProduct picturedead64

Statistics

Check results whenever you like. They stay valid.

Classic A/B statistics assume you look once, at the end. Look every day and stop at the first good result, and a change that does nothing can "win" a third of the time. Mockly's intervals hold at every look, so a refresh can't manufacture a winner.

Mockly, checked after every visitor
1–5%
false winners in simulation
A classic test, checked as often
32–60%
false winners in simulation
How Mockly's statistics work

Lift of green over control, with its 95% interval

Example

Green's lift over control by day, with its 95% interval. The interval narrows as visitors arrive and clears zero on day 11, when green can be declared the winner.-40%-20%0%+20%+40%+60%+80%Day 1Day 4Day 7Day 10Day 14Interval clears zero: decide

The interval narrows as visitors arrive. On day 11 it clears zero, and green is the winner: decide then, or keep going. Either way, the call is sound.

For developers

A real language, with a real compiler.

Mockly pages are a strict subset of TSX where experiments are part of the language. The compiler turns them into HTML and small scripts at publish time, and explains every mistake.

  • Diagnostics are an API. Every error has a stable code, the exact place, and a hint. The CLI prints them, or returns them as JSON for CI.

  • Islands, not a framework. Interactive parts compile to small scripts that load when needed. The rest of the page is plain HTML.

  • Nothing is interpreted. No eval and no template engine at request time. The compiler emits real JavaScript once.

Terminal
$ mockly check ./sitepages/index.tsx:7:8  error  MK4005  Experiment "cta" needs exactly one variant named "control".  6 |       <h1>Launch pages that learn</h1>> 7 |       <Experiment name="cta" goal="signup"    |        ^^^^^^^^^^  8 |         variants={["blue", "green"]}>  hint: Name the baseline variant "control". 2 file(s): 1 error(s), 0 warning(s)
Mockly AgentComing soonAn AI agent that proposes tests, writes the variants, reads the results, and ships the winners, using the same compiler and diagnostics you do.

Frequently asked questions

Something else? Ask us.

What is Mockly, in one sentence?

A platform for building and hosting marketing websites where A/B testing is part of the code, so every page can run experiments without a separate testing tool, analytics tag, or flicker.

Do I need to know how to code?

Today, pages are written in TSX, the markup React developers use, in Mockly's studio. If someone on your team can edit a React component, they can build and test with Mockly.

We're building the Mockly Agent for everyone else: describe the change you want to test, and it writes the variant, checks it, and reports back.

How is this different from a testing tool I add to my site?

Script-based tools change the page in the visitor's browser after it loads, which means extra JavaScript and either a flash of the original or a blank page while the script runs. Mockly compiles every variant to HTML when you publish and picks one on the server, so the page arrives as the variant. See the comparison.

Will experiments slow my site down?

No. Pages are pre-rendered when you publish, and serving one means picking a variant and sending HTML that's already built. Pages without interactive parts load less than 1.25 KB of JavaScript, and Mockly measures page speed from real visits so you can check.

Can I check results every day?

Yes, as often as you like. Mockly's intervals are confidence sequences, which stay valid at every look. In our simulations, checking after every single visitor still produced false winners under 5% of the time. A classic test checked that often produced them 32–60% of the time. How it works.

What do you record about visitors?

Pages served, the goals visitors reach, and how fast pages load. Mockly keeps each visitor's variant in a first-party cookie, stores no IP addresses, adds no third-party trackers, and leaves bots out of the counts. More on data.

How do I get started?

Mockly is in early access. Create an account to try it, or book a demo to see it with your own pages.

Run your first experiment this week. Build it, test it, ship the winner.

Start freeBook a demo

Free to start. No credit card required.