Skip to content

An upgrade popup for the moment someone hits a limit

Open your plans at the exact moment someone wants more: a locked feature, a full quota, a premium export. Change the words, the plans or the look any day, without shipping code.

A popup over a reporting app titled PDF export is a Pro feature, listing three benefits and a Pro plan at $9.99 a month with an Unlock export button
Display
Popup
Where
Centered over a dimmed page
When it shows
When your code opens it
Starts from
Feature Gate template

Try it. This is the real thing.

The phone runs the same open-source Web SDK your site would load, with the template exactly as it ships. Tap a button and see what your code would receive. Prices here are examples; your site passes the real ones.

The button below opens it as a popup over this page, the way it appears on a site.

Loading the live demo

Tap anything, and scroll inside the phone for the rest. Your site gets the event.

When to use it

  • Someone taps a feature that is on a paid plan.
  • A free account reaches its limit: projects, exports, seats, credits.
  • You want one upgrade screen that every locked feature can open.

What goes on it

  • A headline that names the feature they just tried to use.
  • Your plans, with prices and a trial length filled in from your own site.
  • One button that starts your checkout.
  • A line of reassurance, like cancel anytime.

Set it up in three steps

  1. Start from the Feature Gate template

    Open the gallery, pick the template and rename it. Change any word, color or font in the editor.

  2. Give it a placement

    A placement is a name your site asks for, like upgrade_button. Point it at your screen. Later you can point it at another screen without touching your code.

  3. Open it from your code

    Call the SDK where the limit is hit. You pass the prices from your store or billing provider, and your checkout runs when someone taps buy. Miniwall never handles payments.

The code on your site

Prices and checkout stay in your product. The screen itself comes from Miniwall, so a new version reaches your site without a release.

Open the popup when a locked feature is tapped
// startCheckout is your own function: it runs your checkout.
document.querySelector("#export").addEventListener("click", async () => {
  await UIKit.presentPaywall({
    paywall: { placement: "upgrade_button" },
    products: {
      monthly: { price: 9.99, currency: "USD", period: "month" },
      annual: { price: 59.99, currency: "USD", period: "year" },
    },
    onPurchase: async ({ packageId }) => startCheckout(packageId),
  });
});

Good to know

Where do the prices come from?
From your website. You pass a price for each plan ID, usually from your billing provider, so the screen always matches what you charge.
Can I test two versions?
Yes. A/B tests are on Indie and up: half of your visitors see one screen, half see the other, and you can see which one led to more purchases.
  • A card in the corner of a learning app titled Two days left of your free trial, with a three-step timeline and a Review my plan button

    Slide-in

    Trial ending reminder

    A card in the corner that reminds people before their trial runs out.

    See how it works
  • A yellow sale banner across the top of an image tool reading Annual plans 40% off, with a See the deal button

    Banner

    Sale banner

    A bar across the top of your site for a sale. Schedule it and it ends on its own.

    See how it works
  • A popup over a learning app titled We saved your spot, with a countdown, a one-year Pro offer at half price and a Come back for 50% off button

    Banner or popup

    Win-back offer

    Welcome back people who cancelled, with an offer for the right visitors.

    See how it works

Stop waiting on a release

Pick a template, publish it, add one tag. Free up to 10,000 views a month, no card needed.

Tue

Live

Thu

ReleaseNo release needed