Polaris UI with embedded Admin
Consistent spacing and typography; iframe-ready layouts.
Build, test, and publish a review-ready Shopify app: Polaris UI, OAuth and billing, webhooks, GDPR, and App Store submission with reviewer notes.
Consistent spacing and typography; iframe-ready layouts.
Scoped permissions, live privacy/support pages, clear data usage.
Koa server with health endpoint, Admin API sample, GA4/GTM hooks.
Sync a collection to personalize recommendations.
Welcome! Install this app on your store, then open the embedded admin page.
Follow each step. Collapsible, clean, and review-friendly.
0 of 19 steps read
Open the Shopify page that contains this section. The builder UI shows tabs on the left and a phone preview on the right.
Open the Shopify page that contains this section. The builder UI shows tabs on the left and a phone preview on the right.
App title ≤ 25 chars (e.g., Vista Commerce).Purpose ≤ 2 lines.CTA text (e.g., Connect store).Brand hex: #0D384D; Accent hex: six-digit format.Optional: Blueprint preset (Commerce / Content / Loyalty).
Name tabs to fit your product (e.g., Home, Catalog/Library, Schedule, Insights, Settings).Enable the blocks you plan to ship in v1 (Tips, Product Grid, Scheduler, KPI Tiles, Empty card).
Paste Client ID from Shopify Partners (required).Select ≥ 1 scope (min: read_products; add write_products if you mutate).Note: Application URL and Redirects are locked to vistabylara.com.
Company: Vista by Lara.Support email: support@vistabylara.com.Privacy URL: https://vistabylara.com/privacy.Support URL: https://vistabylara.com/support.Toggle Embedded and GDPR if needed.
Open the Preview modal and review each file.Select Generate files to download.Optional: Create ZIP (server) to receive a zip link.
Blueprint presets for Commerce/Content/Loyalty.Validation: title ≤ 25, short purpose, CTA required, hex colors.Profile: Starter (minimal Koa) or Production (OAuth-ready stubs).Live preview mapping ...
The builder composes files from <template> tags and replaces placeholders based on your inputs.[[APP_NAME]] → Design → App title (e.g., Vista Commerce)[[APP_HANDLE]] → Auto from title (kebab)...
The builder composes files from <template> tags and replaces placeholders based on your inputs.
shopify.app.toml (with [auth], redirect_urls, access_scopes, optional [embedded], optional GDPR).env.examplepackage.json (Koa starter)server.js (Koa baseline + CSP + /health + sample /api/products ...
Extra when Profile = Production: shopify.js (API placeholders), auth.js (OAuth route placeholders), session.js (session store placeholders).
Title empty or longer than 25 charactersClient ID emptyScopes list emptyBrand/Accent not 6-digit hex (e.g., #0D384D)Support email present but invalid formatPrivacy/Support URL present but not HTTPS...
If any fail, Preview/Generate/ZIP will refuse. Fix, then retry.
Every input change writes JSON to localStorage under a key for this section.To factory reset, open console and run:localStorage.removeItem('vbl-app-builder-<YOUR_SECTION_ID>')location.reload()
Every input change writes JSON to localStorage under a key for this section.
To factory reset, open console and run:
localStorage.removeItem('vbl-app-builder-<YOUR_SECTION_ID>')
location.reload()
From your app foldernpm i$env:SHOPIFY_FLAG_STORE="your-store.myshopify.com"npm run devWhat this does: installs deps from package.json, starts server.js (Koa) on port 3000, health at http://localhos...
From your app folder
npm i
$env:SHOPIFY_FLAG_STORE="your-store.myshopify.com"
npm run dev
What this does: installs deps from package.json, starts server.js (Koa) on port 3000, health at http://localhost:3000/health
From your app foldernpm iexport SHOPIFY_FLAG_STORE="your-store.myshopify.com"npm run devWhat this does: installs deps, starts Koa (default 3000). Health: http://localhost:3000/health
From your app folder
npm i
export SHOPIFY_FLAG_STORE="your-store.myshopify.com"
npm run dev
What this does: installs deps, starts Koa (default 3000). Health: http://localhost:3000/health
Generate → Create ZIP (server) sends a POST and returns a zip link on success.Payload includes: app_name, handle, client_id, app_url (https://vistabylara.com/), redirects (https://vistabylara.com/a...
Generate → Create ZIP (server) sends a POST and returns a zip link on success.
Payload includes: app_name, handle, client_id, app_url (https://vistabylara.com/), redirects (https://vistabylara.com/auth/callback and https://vistabylara.com/api/auth), scopes (read_products, write_products), template (koa-minimal | koa-prod), source (vbl-app-builder-pro-ultra).
On non-200, a clear error is shown in the blue box; check Network and server logs.
Design: Title ≤ 25, CTA set, Purpose ≤ 2 lines, Highlights 3–6 items; hex valid; preview contrast good in Light/Dark.IA: Tabs match product; only necessary blocks enabled.Shopify: Client ID present...
“App title must be ≤ 25 characters.” → Shorten.“Client ID is required.” → Paste from Partners.“Select at least one scope.” → Choose read_products at minimum.“Brand/Accent color must be a 6-digit he...
Keep shopify.js, auth.js, session.js in repo.Wire OAuth in auth.js; store sessions in session.js.Replace /api/products demo with real Admin API using shopify.js.Add rate-limit, input sanitization; ...
Power-User Tips: Presets are idempotent; arrow keys cycle tabs; theme toggle switches preview Light/Dark.
Scopes: read_products only (expand later).Embedded: enabled.GDPR: enable stubs early.Listing copy: 45–60 char title; <160 char short description.Ensure live Support and Privacy pages on vistabyl...
Title ≤ 25; Purpose/CTA/Highlights present.Brand & Accent hex valid; readable in Light/Dark.IA tabs clear; only necessary blocks enabled.Client ID set; ≥ 1 scope chosen.Company, support email, priv...
AED 9,500–18,000
AED 18,000–38,000
Custom
Typical first approval is 7 to 21 days if permissions, privacy, and uninstall or webhooks are correct.
Yes. We follow Polaris spacing and typography and validate in the Admin iframe with correct CSP and allowed origins.
Yes. We wire OAuth, trial or billing flows, GDPR endpoints, and document uninstall hygiene for reviewers.