Documentation

How to use every bit of it.

Install, design, assign, fulfil. Sixteen sections covering the app from first click to print-ready download.

~ 15 min read
§ 01

Getting started

Get YesPersonalized installed and your first personalised product live in under ten minutes.

Installation

01
Install from the Shopify App Store
Search for YesPersonalized and click Add app. Approve the permissions — required to read products, attach personalisation fees, and register order webhooks.
02
You're in
You land on the YesPersonalized dashboard inside Shopify Admin. No additional configuration is needed to start building templates.
03
Enable the widget in your theme
Go to Online Store → Themes → Customise. Open App embeds (the puzzle icon), toggle on YesPersonalized Personaliser, and save.
Dashboardyourstore.myshopify.com
Templates
3
2 published
Products
128
12 personalised
Orders (30d)
41
all ready
Fig. — The dashboard after install — template count, product coverage, 30-day orders
YesPersonalized runs inside the Shopify Admin iframe. Access it via Shopify Admin rather than by visiting the URL directly.
§ 02

Templates & editor

Templates define what personalisation fields appear on your product page. Build them visually — what you see is what your customer sees.

Creating a template

01
Templates → New template
Enter a name, then set the output format (PNG, JPG, or PDF), DPI, and physical dimensions (mm, cm, or inches). Use a Quick Size preset (A4, mug wrap, t-shirt front, phone case, etc.) or enter your own. These define the print-ready artwork file the app generates per order.
02
Upload a product mock-up — optional
In the Layer Panel, click Set mock image to upload a product photo. This becomes the canvas customers preview their personalisation over. This step is optional: if you skip it, customers see their personalisation rendered against a plain artwork canvas instead of overlaid on a product photo. The print-ready artwork is unaffected either way — the mock is purely for the live preview.
03
Add layers
Add text, image upload, static image, or Free Roam Zone layers. Each is a separate personalisation field or design element.
04
Configure layer properties
Click any layer to open its properties on the right. Fonts, colours, sizes, constraints, conditions.
05
Set personalisation pricing
A fixed price (flat fee per order) or a per-field price (multiplied by filled fields). Leave blank for free personalisation.
06
Publish
Only published templates can be assigned to products. Unpublish or update at any time.
Birthday Mug300 DPI · PNGSavePublish
PagesFrontBack
Personalization
TextImage
Design
TextImage
— canvas —
Properties
Font · DM Sans
Size · 28
Curve · +42°
Color · #E55934
Fig. — The editor — layer panel (left), canvas (centre), properties (right)
Personalisation fees are handled via the Shopify Cart Transform Function. A hidden "Personalisation Fee" product is created in your store on install — do not delete it.
§ 03

Multi-page templates

Front and back? Cover and spine? Build one template with multiple pages and let the customer flip between them.

01
Add a page
Click + Add page at the top of the canvas. Each page has its own mock-up image, layers, and dimensions.
02
Configure each page independently
Switch between pages using the page tabs. Each page has its own width/height, background mock-up, and layer stack.
03
Customer experience
The storefront widget shows a numbered tab per page. Customers personalise each side before adding to cart.
Wedding mug300 DPI · PNGSavePublish
PagesFrontBack
Personalization
TextImage
Design
TextImage
— canvas —
Properties
Font · DM Sans
Size · 28
Curve · +42°
Color · #E55934
Editor — two pages tabbed
● LIVE PREVIEWEmmaAge 30
Storefront — try it: type to update the live preview
Give each page a descriptive name (e.g. "Front", "Back") so customers know which side they're editing.
§ 04

Text & curved text

Text layers are the most common personalisation field. Customers type directly into a live preview on your product image.

Text layer properties

Label
The field label shown to the customer (e.g. "Name", "Line 1").
Font
Choose from your uploaded fonts or the global font library.
Font size
Fixed size, or enable "Auto-size" to scale to fill the layer bounds.
Colour
Locked to a specific colour, or left free for customers to choose.
Alignment
Left, centre, or right within the layer.
Max characters
Optional hard limit on input length.
Required
Mark as required before add-to-cart.
Placeholder
Preview text shown before the customer types.

Curved text

Enable curved text to render the customer's input along an arc — great for circular products like plates, coasters, and coins.

In the text layer properties, toggle Curved text on. Use the Curve radius slider:

  • Positive radius — text arches upward (convex, like a smile)
  • Negative radius — text arches downward (concave, like a frown)
  • Larger absolute values — gentler curve; smaller values tighten the arc
§ 05

Image layers

Let customers upload their own photo — a portrait, pet photo, logo. The image is embedded in the artwork at print resolution.

Add an Image upload layer from the layer panel. Resize and position it on the canvas to define where the customer's photo will be placed on the product.

Customers can upload JPG, PNG, or WebP up to 10 MB. The widget shows a crop/position tool so they can frame the image exactly.

Static image layers

Static images are your design assets — logos, decorative borders, overlays. They appear on every order but aren't editable by the customer. Upload once; baked into the artwork automatically.

§ 06

Free Roam Zone

A fully open canvas within your template. Customers can add, position, and style their own elements — text, shapes, stickers, emojis, photos — anywhere inside the zone.

01
Add a Free Roam Zone layer
Click + Free Roam Zone in the layer panel. Resize and position it on the canvas.
02
Set the zone boundaries
The zone outline shows customers exactly where they can place elements. Anything outside is cropped at print time.
03
Customer experience
When a customer clicks the zone, a full-screen editor opens. They can add text, choose stickers/emojis, upload photos, and drag everything around freely.

What customers can add

Custom text
Any text, with font and colour choice
Photos
Upload and crop their own images
Stickers
From your uploaded sticker library
Emojis
Full emoji picker
Shapes
Rectangles, circles, lines
Positioning
Drag, resize, reorder freely
Upload branded sticker packs to the Media Library first — they'll be available in every Free Roam Zone across all your templates.
§ 07

Conditional layers

Show or hide layers dynamically based on what the customer has typed elsewhere. Build templates that adapt — no extra templates needed.

A classic case: show a "Line 2" field only when "Line 1" is filled. Or show a wedding overlay only when event type equals "Wedding".

01
Select the layer
Click the layer in the editor. In the Properties panel, scroll to Visibility conditions.
02
Add a condition
Pick a source layer, an operator (is filled / is empty / equals / does not equal / contains), and optionally a value.
03
Chain conditions
Add multiple conditions. The layer shows only when all are satisfied (AND logic).
04
Preview it
The layer shows/hides live as you test in the editor — you can verify logic before publishing.
Visibility conditions
if Line 1 is not empty
if Event type equals Wedding
↳ and show this layer
Fig. — Two chained conditions on a single layer
Hidden layers are excluded from the artwork entirely at checkout time — not just visually hidden.
§ 08

Layer groups

Group related layers together to keep complex templates organised. Collapsible in the panel, labelled for your team.

01
Create a group
Click + New group in the Layer Panel, or assign a layer to an existing group via the Properties panel.
02
Drag layers into groups
Drag any layer onto a group header. Groups can collapse to keep the panel tidy.
03
Layer ordering
Within a group, layers are ordered top-to-bottom. Groups themselves can also be reordered.
§ 09

Fonts

Upload your own fonts and give customers font choice within your brand guidelines.

01
Go to Fonts
The Fonts page lists all fonts available to your store — global fonts and your custom uploads.
02
Upload
Supported formats: woff2, woff, ttf, otf. Give it a display name, weight, and style.
03
Use in a text layer
Your fonts appear alongside the global library in the font picker. You can also upload directly from the Properties panel.

Fonts can be reordered — drag in the Fonts page to control their order in the customer-facing font picker.

§ 10

Media library

Sticker and emoji packs — assets customers can pick from inside the Free Roam Zone. Upload once, available everywhere.

01
Go to Media
You'll see any existing sticker packs. Each pack has a name and contains one or more images.
02
Create a pack
Click New pack. Give it a name (e.g. "Flowers", "Sports", "Christmas").
03
Upload stickers
Drag PNG or WebP images into the pack. Transparent PNGs work best. Stored in Cloudflare R2, served via CDN.
04
Reorder packs
Drag pack cards to control the order in the Free Roam Zone sticker picker.
Keep individual sticker files under 500 KB for the best loading performance in the storefront widget.
§ 11

Background removal

Remove the background from static image layers directly in the editor — no external tools.

Pro available on the Pro plan.

01
Select a static image layer
Click a static image layer to open its properties.
02
Click Remove background
The image is sent to remove.bg and the result is uploaded back automatically.
03
Done
The layer updates in place. Save or publish to keep the change.
§ 12

Products

Assign templates to your Shopify products to enable personalisation on the product page.

01
Go to Products
A list of your Shopify products with their current template assignments and active/inactive status.
02
Find the product
Use the search bar to filter by product name.
03
Assign a template
Click Assign template. Pick from your published templates. Optionally restrict to specific variants.
04
Go live
Click Save. The widget appears on your product page within seconds — no theme republish.
§ 13

Storefront widget & themes

The personalisation widget is injected into your product pages via a Shopify Theme App Extension — no theme code edits required for standard themes.

Enabling the widget

01
Open Shopify Theme Editor
Online Store → Themes → Customise.
02
Find App Embeds
Click the puzzle icon in the left panel. Find YesPersonalized Personaliser and toggle it on.
03
Save
The widget is live on any product page with a template assigned.
● LIVE PREVIEWEmmaAge 30
Fig. — The widget — numbered tabs, live preview pane, field-per-layer (try typing in the fields)

Cart preview

A personalisation preview badge is shown in the cart drawer and the /cart page. Enable the same way — look for YesPersonalized Cart Preview in App Embeds.

Widget customisation

In Settings → Widget you can customise the widget's appearance: button label, colours, panel position, and whether to show the live preview thumbnail.

Theme compatibility

The widget is delivered as a Shopify Theme App Extension. It works out of the box with any Online Store 2.0 theme — Dawn, Sense, Studio, Refresh, Crave, Craft, and the vast majority of Shopify Theme Store themes. No theme files are edited, so theme updates and version pins are unaffected.

OS 2.0 themes
Fully supported. Drop-in via App Embeds.
Vintage (pre-OS 2.0) themes
Not supported by App Embeds. Contact support for a manual snippet install.
Custom-built themes
Works as long as the product template renders {{ product }} server-side and includes a standard form <form action="/cart/add"> with a variant ID input.

How the injection works

When App Embeds is enabled, Shopify renders our liquid block (blocks/personaliser.liquid) into theme.liquid. The block:

  • Detects whether the current page is a product page (via {% if template contains 'product' %})
  • Reads product.id, variant.id, shop.permanent_domain
  • Renders an empty mount node (#yp-root) and inlines our widget script
  • Mounts above or below the Add to Cart button depending on theme structure

The widget intercepts the form submit on the product page, attaches the personalisation session ID to cart line attributes (_yp_session_{variantGid}), and lets the form submit normally.

Mount point detection

The widget locates a sensible insertion point by trying selectors in order:

  1. [data-yp-mount] — explicit hook (recommended for custom themes)
  2. form[action*="/cart/add"] — the product form
  3. .product__info-wrapper, .product-form, .product-single__meta — common theme classes

If none match, the widget renders inline at the bottom of main. To pin it to a specific spot in your custom theme, add <div data-yp-mount></div> where you want the widget to appear.

Custom development hooks

For developers extending or integrating with the widget:

Public config endpoint
GET /api/storefront/{shopDomain}/config?productGid={gid}&variantGid={gid} — returns the assigned template, fields, fonts, and widget settings as JSON. CORS-enabled, no auth required.
Session creation
POST /api/storefront/{shopDomain}/session with field inputs returns a sessionId. Attach it to the cart line as _yp_session_{variantGid}.
Asset upload
POST /api/storefront/{shopDomain}/upload-url returns a presigned R2 PUT URL. Browser uploads direct to R2; the returned key goes into the session payload.
Cart attribute key
Always _yp_session_{variantGid} (URL-safe variant GID). Cart Transform Function reads this to apply the personalisation fee.
Custom mount point
<div data-yp-mount data-product-gid="..." data-variant-gid="..."></div> — explicit override of auto-detection.
CSS theming
The widget exposes CSS custom properties on its root: --yp-accent, --yp-bg, --yp-radius, --yp-font, --yp-input-border. Override them in your theme's CSS.
JS lifecycle event
Listen for window.addEventListener('yp:ready', ...) after the widget mounts, or yp:variantChange when the customer switches variants.

Custom theme integration reference

If you're hand-rolling a theme or modifying a custom one, here's the exact contract the widget expects. Send this to your theme developer when handing over a build.

Line-item properties we attach

All underscore-prefixed so Shopify hides them from the customer-facing cart UI by default. Don't strip them.

_yp_session
Required. The session ID linking the cart line to the personalisation artwork. Must survive through to the order or the artwork won't be retrievable.
_yp_preview
URL to the preview thumbnail (used for cart line previews).
_yp_style_{layerId}
Per-layer style overrides (font / colour / size), JSON-encoded.
_yp_fee
Set to "1" on the personalisation-fee line item when a charge applies.

Add-to-cart hijack

The widget intercepts submits on any form[action*="/cart/add"] and on the standard [name="add"] / .product-form__submit selectors, so the customer can't bypass personalisation. If your custom add-to-cart button uses a non-standard selector or a JS-only handler (no form submit), open a support ticket — we may need to add a hook.

Personalisation fees — two line items

If the template has a fee, the widget pushes two line items in a single /cart/add.js call — the actual variant plus a hidden fee variant. The cart needs to render both as normal line items. Don't dedupe or hide line items by variant ID.

Cart refresh

After adding, the widget uses Shopify's Section Rendering API requesting cart-drawer and cart-icon-bubble sections, and dispatches the events cart:refresh, cart:updated, and cart:change. If your theme uses a custom cart drawer with a different section ID or event name, share those and we'll add support.

Cart line previews

The widget injects a small preview thumbnail into each personalised cart line. We look for these selectors in order:

  1. [data-cart-item-key]
  2. cart-remove-button[id$="-{lineIndex}"]
  3. Generic .cart-item__details / .cart-item__info containers

If your custom cart uses different markup, the previews will silently no-op (the cart still works fine). A quick selector tweak gets them showing.

Buy Now / Express checkout

The widget's own Buy Now button bypasses the cart — it generates a Shopify Draft Order checkout URL server-side and redirects the customer there. So as long as the standard add-to-cart form is intercepted, theme-rendered Shop Pay / Apple Pay / Google Pay express buttons aren't a concern: they only fire when the standard form is submitted, which we control.

Common theme integration issues

Widget shows but Add to Cart doesn&apos;t pick up the session
The theme is using AJAX-only cart submission with a custom handler that bypasses our form interceptor. Add data-yp-mount inside the form and contact support with the theme name.
Widget appears in the wrong place
Auto-detection picked a fallback selector. Add <div data-yp-mount></div> to the exact insertion point in your product template.
Widget doesn&apos;t appear at all
Either App Embeds is not enabled, no template is assigned to the product, or the page isn't a product page. Check Online Store → Themes → Customise → App Embeds.
Styling clashes with theme
The widget is scoped under #yp-root with reset styles, but pathological theme CSS can still leak in. Override the CSS variables (above) or open a ticket with a screenshot.
Variant change doesn&apos;t reload the widget
The theme is updating the variant ID without dispatching a variant:change event. Manually call window.YesPersonalized?.reload(newVariantGid) after your variant switcher fires.
Theme developers — open a support ticket if you need an integration example for your specific theme. We can put a worked example together for your setup.
§ 14

Orders & artwork

When a customer places an order, we capture their inputs and generate high-resolution production artwork automatically.

Artwork statuses

QueuedOrder received; artwork generation is in the queue.
GeneratingArtwork is being rendered right now.
ReadyArtwork is ready to download and send to your supplier.
FailedGeneration failed — open the order to retry or contact support.
LockedArtwork has been dispatched and is now locked against changes.

Downloading artwork

Open any order from Orders. Once the status shows Ready, click Download artwork for a high-resolution production file. Multi-page templates generate one file per page.

Generation typically finishes within seconds. If it fails, retry from the order detail page.
§ 15

Plans & billing

YesPersonalized uses Shopify's native billing — charges appear on your existing Shopify invoice.

PlanPriceOrders / moProductsSupport
Bronze£19.99/mo50100Email
Gold£49.99/mo250500Priority
Platinum£99.99/mo5001,000Priority

All plans include every editor feature — multi-page templates, Free Roam Zone, conditional layers, curved text, custom fonts, AI background removal, automatic print-ready artwork generation, and the storefront widget. Plans differ only by the per-month order limit and the maximum number of products you can attach personalisation to.

Upgrade, downgrade, or cancel any time from Billing in the sidebar. Changes take effect immediately. Downgrading doesn't delete data — excess templates or products are simply paused until you upgrade again.
§ 16

Frequently asked

Does the personalisation widget work with any Shopify theme?

Yes — the widget is injected via a Shopify Theme App Extension, which works with all Online Store 2.0 themes. If you are on a legacy (pre-2.0) theme, contact support and we'll help.

Can I use multiple templates on the same product?

One template per product. Each template can have multiple pages, layers, and fields — so a single template can cover complex multi-area personalisation.

Do conditional layers affect the artwork?

Yes. A layer hidden at checkout time (its conditions not met) is excluded from the production artwork entirely — not just hidden visually.

What image formats can customers upload?

JPG, PNG, and WebP. Maximum 10 MB per image. Higher resolution produces better print quality — the widget shows a warning if needed.

Where are customer photos and personalisation data stored?

Securely in our managed, encrypted database and object storage, scoped strictly to your shop. Customer uploads are retained for the lifetime of the order.

What happens if artwork generation fails?

Open the order from the Orders page and click Retry. If it fails repeatedly, contact support with the order ID and we'll investigate within one business day.

Can I restrict personalisation to certain variants?

Yes. When assigning a template to a product, you can optionally select specific variants. Only those variants will show the widget.

What happens when I uninstall the app?

The widget is removed from your storefront immediately. Existing artwork files remain accessible for 30 days. Reinstalling restores your templates and settings.

How do I get help?

Open a support ticket from the Support page in the app sidebar. Attach screenshots and reply by email. We aim to respond within one business day.

Need a hand?

Still missing something?

The manual can't cover everything. Open a ticket — we respond within one business day, in plain English, with the specific answer to your specific question.

Open a ticket