Skip to content

Loyalty · Promotions · Gamification

Ship screens, not releases.

Your product team builds a screen in a visual editor and publishes it. The app shows the new screen right away — no build, no store review.

Request a walkthroughWatch how it works

From an edit in the editor to a new screen in the app

  • No store release
  • Your users’ data never passes through us
  • SDKs for React and Flutter

Live screen

App theme
Language
AM
Welcome backAlex
Gold member1,850 pts150 pts to Platinum
78%
This month+420
4-day streak3 more days for a +50 bonus
M
T
W
T
F
S
S
Quests
In progress
+200
Coffee weekFive café payments by card
3 / 5
4 days left
In progress
+350
Round-up saverSave the change from 20 purchases
12 / 20
20 days left
New
+500
Weekend abroadThree payments in another currency
0 / 3
7 days left
Recent activity
Coffee week
Oct 11, 2026
+40
Cinema for two
Oct 9, 2026
−900
Card payments
Oct 7, 2026
+120

Tap the screen — it’s live

What your code receives

Tap a button on the screen. Every action, analytics event and screen change arrives in your code — the document never runs anything by itself.

Not a picture: a published document, drawn by the same React SDK an app would ship.

How it works

Three steps, and none of them is a release.

  1. Compose

    A manager assembles the screen from 28 widgets on a phone-sized canvas, binds them to data your backend already returns, and sets when each part shows.

  2. Publish

    One button, for the people allowed to press it. The document is checked against the contract first; every publication is kept, compared with the draft and can be rolled back.

  3. The app shows it

    The reader inside your app draws the published document in your theme and your user’s language. Nothing is rebuilt, and nothing waits for a store.

Ways to run it

Where the editor runs, and where your screens live.

HotLayout has two parts: the editor, where your team builds and publishes screens, and a reader SDK inside your app that draws them. Here is where the editor can run today.

  • Available now

    HotLayout Cloud

    You sign in to a workspace we host: an organisation, projects, roles, the editor, publishing and history. There is nothing to install.

    Layouts, themes and media are stored in HotLayout Cloud.

  • Available now

    The editor inside your admin

    The same editor, embedded in your own back office as a web component. Sign-in, language and theme come from you, so your team never sees a second login.

    <hotlayout-builder>

    Only the editor moves into your page. Layouts, themes and media are still stored in HotLayout Cloud.

Either way, your app can show screens without our cloud.

Turn on the webhook, and every publication is sent to your backend with a signature. Your app then gets screens from your own servers, together with your users’ data — and none of that data passes through HotLayout.

The editor

Built for the person who owns the screen.

Not a form over JSON. A canvas, a phone and the properties of whatever is selected — the screenshots below are the editor itself, with a rewards screen open.

What a screen can do today

Enough to build the screen your designer drew.

  • 28 widgets

    Layout, text, images, lists, grids, tabs, carousels, progress bars and rings, an app bar and a bottom navigation bar.

  • Data from your backend

    Bind text, images and conditions to fields you already return. One template draws a whole list from a collection.

  • Conditions and states

    Show a block, or restyle it, when a task is locked, in progress or done — without duplicating the screen.

  • Themes and tokens

    Light and dark themes, your own tokens, and a custom value where a token does not fit.

  • Languages and right-to-left

    Translations and plural forms in the document; numbers, dates and currency in the user’s locale; a mirrored layout for right-to-left scripts.

  • Actions and navigation

    Screens, modal layers, deep links and analytics events. What an action does stays in your code.

  • Forms

    Text and number fields, switches, checkboxes and choice groups, with required fields and a button that waits for them.

  • History and rollback

    Every publication is a snapshot. Compare it with the draft in plain words and bring any version back.

  • Roles and access

    Owners, admins, publishers, editors and viewers in an organisation: editors prepare, publishers release.

For developers

One component in your app. The rest is data.

The reader takes a document, a theme and your data. Navigation, analytics and whatever a button does stay in your code — the document only says which action was asked for.

  • A contract, not a canvas

    The editor and the readers follow one versioned JSON Schema. What the schema cannot say does not exist in the editor, so it cannot produce a document your app cannot draw.

  • Flutter and React readers

    The same document is drawn by a Flutter package and a React package, checked against shared tables of cases. Both are available on request while they are being prepared for release.

  • Old apps, newer documents

    Schema, theme and data dictionary are versioned separately. What an installed app does with a document newer than itself is decided by the compatibility policy, not by chance.

  • Documents are untrusted input

    The reader never opens an address by itself, checks every value that becomes a style or an image source, and keeps a broken document from taking your app down.

  • Delivery through your backend

    Each publication can be sent to your server as a signed webhook (HMAC-SHA256). Your app gets screens from you, together with the user’s data — nothing about your users passes through us.

The whole React integrationRewards.tsx
import { HotlayoutScreen } from '@hotlayout/react'
import type { ThemeContract, UiDocument } from '@hotlayout/react'

export function Rewards({ layout, theme }: { layout: UiDocument; theme: ThemeContract }) {
  return (
    <HotlayoutScreen
      document={layout} // the layout document, parsed JSON
      theme={theme} // the project theme, parsed JSON; omit it to use the built-in one
      data={{ 'user.firstName': 'Ada', 'user.points': 1250 }}
      collections={{ items: [{ name: 'Coffee', price: 300 }] }}
      locale="en"
      style={{ minBlockSize: '100dvh' }}
      onAction={(action, source) => {
        console.log('the user asked for', action.type, action.params, 'on', source.nodeId)
      }}
    />
  )
}
What your backend receives on publishHTTP
POST /your-webhook
x-webhook-event: document.published
x-webhook-delivery: <documentId>/<stamp>
x-webhook-signature: t=<seconds>,v1=<hex>

{
  "event": "document.published",
  "documentId": "autumn-rewards",
  "document": { … },
  "dataContract": { … }
}
Ask for SDK access

Where teams use it

Screens that change more often than the app does.

  • Gamification

    Quests, rewards, levels and streaks — the case HotLayout was first built for.

  • Promotions and offers

    A campaign screen that starts on the day marketing planned, and ends when it ends.

  • Surveys and forms

    Questions, choices and inputs that write back to your app, changed without a build.

  • Onboarding

    Steps you can rewrite, reorder and translate while the same app version is in users’ hands.

The embedded editor

Put the editor inside the admin your team already uses.

It is a web component: one tag on a page of your back office. Your sign-in, your language, your light or dark theme — and Shadow DOM keeps your styles and ours apart. What it edits is still stored in HotLayout Cloud: you embed the editor, you do not host it.

  • Access level comes from you: view, edit or publish.
  • The page hears when a document is renamed or published.
  • Your token provider signs the user in; there is no second login.
The editor in your pageadmin.html
<hotlayout-builder
  org-id="acme"
  project-id="loyalty"
  document-id="autumn-rewards"
  locale="en"
  theme="light"
  access="publish"
></hotlayout-builder>

<script type="module">
  const builder = document.querySelector('hotlayout-builder')
  builder.tokenProvider = () => session.token() // your sign-in, not ours
  builder.addEventListener('document-publish', (event) => {
    console.log('published', event.detail.documentId, event.detail.publishedAt)
  })
</script>

What it does not do

Honest limits.

  • It does not ship code.

    A document describes layout, content, conditions and named actions. Logic stays in your app.

  • It does not fetch your data.

    The reader takes data from your app and never calls your backend by itself.

  • It does not describe animation.

    The contract says what to show; how it appears is the reader’s business.

Pricing

One price per app. No per-user fees.

A licence is counted by the apps that read your screens, not by the people who use them. Your users’ data never passes through HotLayout, so we never count it.

  • Pilot

    €3,000

    one-off, up to 3 months

    A real integration into your app: together we build the screen you release most often, wire up the SDK and ship it to production.

    • 1 app, up to 5 screens in production
    • Up to 5 people in the editor
    • Up to 40 hours of our work on the integration
    • Credited in full towards the licence
    Talk about a pilot
  • App licence

    from €6,000

    per year for one app

    Everything your team needs to build, publish and roll back screens of one app — however many people use that app.

    • No limit on the number of screens
    • Up to 10 people in the editor
    • HotLayout Cloud or the editor inside your admin
    • Delivery from our storage or by signed webhook
    • Flutter and React SDKs, version history and rollback
    Talk about a licence
  • For partners

    On request

    model: integration + per client

    For loyalty, gamification and CRM platforms that embed the editor in their own product and offer it to their clients. You pay once for the integration, then a fee for each client of yours.

    • The editor inside your product, with your sign-in, language and theme
    • A separate workspace for each client of yours
    • SDKs and webhooks for your clients’ apps
    Talk about a partnership

Want to try it yourselves first? We set up a workspace with your theme for 14 days.

Several apps in one organisation are quoted separately. Prices exclude taxes.

FAQ

Frequently asked questions.

Short answers about data, availability, security and control.

Does our customers’ data pass through HotLayout?

No. A screen document names data paths such as user.firstName; the values travel from your own backend to your own app at the moment the screen is shown. HotLayout stores layouts, themes, media and the data dictionary, which is a description of fields. One caveat: the dictionary holds sample values that your team types in for the preview, so use made-up ones.

What happens to our app if HotLayout is unavailable?

Your app does not have to ask us for anything when it shows a screen. With the webhook, every published document is sent to your backend and served from your own infrastructure. The readers expect a bad day too: the Flutter reader draws a copy bundled with the app when the network gives nothing usable, and the React loading example keeps the screen it already has. While HotLayout is down you cannot publish a change; what is already published keeps working. The direct address, meant for prototypes and small apps, is the exception: it reads from our storage.

Can a layout run arbitrary code in our app?

No. A document is data: a closed vocabulary of widgets and named actions, checked against a JSON Schema — not a script. The reader treats the document and the theme as untrusted input: every value is checked by its form before it becomes a style or an image address. It never opens a link by itself; addresses and deep links are handed to your code, which decides what is allowed.

What happens to older versions of our app when a layout is updated?

Every document carries the version of the contract it was made for. Within one major version an older app draws a newer document: a minor version only adds optional things, and what a reader does with anything it does not know is written down in the compatibility policy. A document of another major version is not drawn at all — the Flutter reader falls back to the copy bundled with the app — so a breaking change does not reach an app that cannot read it.

How do we know a published document really comes from you?

Every webhook request is signed with HMAC-SHA256 using the secret of your project. The secret is shown once, when the webhook is turned on, and cannot be read back afterwards. Your backend checks the signature over the timestamp and the raw body before it accepts a document.

What about languages, right-to-left scripts and accessibility?

Translations and plural forms live in the document; numbers and dates follow the user’s locale, and the layout mirrors for right-to-left scripts. The web reader draws real buttons, inputs, tabs and dialogs, with keyboard support, a visible focus ring and ARIA roles, and the editor does not publish a button without an accessible name. Colour contrast depends on your theme, and alternative texts on whoever builds the screen.

Can we run HotLayout in our own infrastructure?

Not today: HotLayout runs in our cloud. The editor can be embedded in your own admin, but layouts are still stored with us. Full hosting in your own infrastructure is on request — we discuss it with you.

How much does it cost?

A licence for one app starts at €6,000 per year, however many people use the app. We start with a paid pilot of up to 3 months for €3,000: it is credited in full towards the licence and includes integrating the SDK into your app together with us. Several apps in one organisation are quoted separately.

See it on your own screen.

Tell us which screen you keep releasing for. We will show how it is built in HotLayout and what the integration takes in your app.

Write to us

Tell us briefly what you would like to see or discuss. We reply to the address you give.

or write to contact@hotlayout.com