The message is recorded before the card is paid for.
The buyer picks a card, records in the same page, pays. No redirect, and no “finish your message later” email.
Integration
Mount the recorder where the moment already happens — a checkout step, an account page — not on a separate site.

Add a video message to your gift.

<!-- Custom Element, own Shadow DOM --><livstick-widget-v2 uid="gift-code" domain="shop.yourbrand.com" api-key="your-widget-key"></livstick-widget-v2>
Also a React component, a script tag or a fullpage iframe.
Where it acts
The usual answer is a hand-over: a link in an email, a page on another domain, another brand. Each one loses people who had already decided to give.
A step of your own funnel, in the page the buyer is on.
Viewing ships as its own component, with a deliberately smaller surface.
The Custom Element renders in its own Shadow DOM; the React component, in your tree.
Bound to the domains you declare, through a public key revocable per platform.
How it works
<livstick-widget-v2 uid="gift-code" domain="shop.yourbrand.com"></livstick-widget-v2>
A tag, a React component, a script or an iframe, in your page.
Language, theme, steps and fields come from your platform.

The buyer records without leaving your page.
Good to know
An embed is judged on what it refuses to do quietly.
A React component, a Custom Element, a script tag or a fullpage iframe. Only the first two take the fine-grained configuration object.
Steps, fields, colours and fonts come from your platform and code group. An embed can override them, within a closed schema.
No native iOS or Android SDK: in a mobile app, it runs in a web view or the fullpage iframe. No face filters or 3D effects.
The four recorder mounts are settled. Whether the viewer comes as a published package or with your integration is not yet.
Settled at scopingThe buyer picks a card, records in the same page, pays. No redirect, and no “finish your message later” email.
Reply to Léa with a video.

The recipient opens the gift on the brand’s own site and records a reply with the same widget, on the same domain.
Example brands and messages, for illustration.























FAQ
The file you add is a small loader that imports the runtime asynchronously. Past 180 KiB of gzipped JavaScript or 25 KiB of gzipped CSS, the widget’s build fails.
No. It boots against the domains declared on your platform, and where the public-key requirement is on, key and domain must resolve to the same platform.
HTTPS for the API, camera and microphone permission for the widget’s origin (the allow attribute, in an iframe), and a content security policy that permits inline style attributes.
On your platform and on the code group behind the code, merged. These options are set through the configuration API, not from named switches in the back office.