Dashboard

Welcome

Blog Posts

-

Total Blocks

-

Inbox

-

Active Template

-

Customers

-

System Maintenance

Clear all server-side caches to force fresh data from the database. Useful after making changes to settings, templates, or content.

Blocks

How to Use Blocks

Blocks are reusable content. Add {{block_name}} in your templates where you want the content to appear.

Edit Block

{{block:name}}
Use this code in your templates to display this block

Blog Posts

New Blog Post

This will be automatically generated from the title and must be unique
Title displayed in search engine results and browser tabs. Recommended: 50-60 characters.
This description appears in search engine results. Keep it concise and compelling.
If set, the post will only be visible after this date/time. Time defaults to midnight if not specified.
Press Enter or comma to add a tag. Click × to remove.
Used as thumbnail in blog list, header image on post page, and for social media sharing
Visitors can post comments without an account. Comments are moderated with the same spam settings as forms.

Pages

New Page

This will be automatically generated from the title and must be unique
Title displayed in search engine results and browser tabs.
This description appears in search engine results.
Template file used to render this page
Used for social media sharing

Page Layouts

How it works: Each layout maps to a template HTML file. "Default" uses cms-page.html. To create a custom layout, add an HTML file (e.g. full-width.html) to your template directory, then create a layout here with the matching slug (full-width). Use {{page:content}} and other {{page:*}} shortcodes in the file to output page data.

New Layout

The HTML file (without .html) in your template directory

Templates

Inbox

Form Submission Details

General Settings

Site Configuration

Configure your site's branding and base URL. These settings are used throughout the admin interface.

The name of your website. This will appear in the admin navigation and login screen.
Upload a logo to display in the admin navigation and login screen instead of the default icon. Recommended size: 40x40 pixels or a square aspect ratio.
The full URL of your website (including https://). This is used for email links and other absolute URLs.
Used for the browser address bar color on mobile devices and the web app manifest. Defaults to #3b82f6.
Icon used when the site is added to a device home screen. Recommended: 512x512 PNG. Falls back to the site logo or favicon if not set.
How long to cache public pages (homepage, about, blog, etc.). Set to 0 to disable caching. Changes take effect on the next page load. Default: 5 minutes.

Blog

Default behavior for blog posts and reader comments.

New posts start with this setting. Each post can override it, and existing posts keep their own selection.
Applies to comment lists on published posts and in the admin. Default: Oldest First.

Security

Immediately block requests commonly used by bots and scanners to probe sites for vulnerabilities. These requests never correspond to real content on this site. Off by default.

Spam Protection

Automatically filter spam form submissions. When enabled, submissions detected as spam are blocked and they won't appear in your Inbox or trigger notification emails. The submitter still sees a success message so spam bots don't retry.

How it works: Filters submissions containing 3+ links, HTML link/script injection, known spam patterns, or randomly generated gibberish text. Works alongside the existing captcha and honeypot protection.

Language Filter

Block form submissions written in foreign languages. When enabled, messages detected as non-English are blocked from your Inbox and notification emails.

How it works: Uses statistical language detection to identify the language of message content and block anything that isn't English. This catches foreign languages even when they use the same alphabet as English (German, French, Spanish, etc.), not just accented or non-Latin scripts. Short or ambiguous messages are ignored to avoid false positives.

File Uploads

Configure limits for files customers can upload: files attached to order items (e.g. artwork to print, when a product has a File Upload variant) and files attached to form submissions (when a form has a file input). Up to 5 files per submission.

Largest file a customer can upload (default: 25, hard limit: 100)
Comma-separated list of file extensions customers can upload (no dots). Defaults to common print and document types.

Email Settings (SMTP)

SMTP Configuration

Configure the email server used to send order confirmations, notifications, and other transactional emails.

Sender & Recipient

Configure who emails are sent from and where admin notifications are delivered.

Sales Settings

Store Address

Your store's physical address. Used as the ship-from origin when calculating real-time shipping rates from providers like Shippo.

Tax

Configure tax rate for taxable items. Items marked as "Taxable" in their data block will have this tax rate applied at checkout.

Tax percentage (e.g., 8.5 for 8.5% tax). Set to 0 for no tax.

Digital Downloads

Configure the default limits applied to new digital download links when an order is paid. These apply to tokens created after saving; existing download links keep their original limits.

When checked, new download links are limited by the count and expiry below. When unchecked, downloads are unlimited and never expire.
How many times a single download link can be used (default: 10)
Number of days before a download link expires (default: 90)

Checkout

When checked, logged-in customers see an informational note on cart items they've bought before. This is especially helpful for digital goods. The notice never prevents reordering, it's just a reminder.
When checked, checkout includes an optional notes field so customers can add delivery instructions, gift messages, or other details. Notes appear on the order in the admin and in notification emails.
When checked, customers with an unpaid order receive a one-time reminder email with a link to finish paying. Orders that were never paid are the target — paid, future-dated, and subscription renewal orders are never included.
How long an order can sit unpaid before the recovery email goes out. Each order gets at most one email, and orders older than 7 days are never included.

Return Policy

Link to your return policy page. Used in product structured data for Google Shopping eligibility.

Create a page in the admin with your return policy, then enter its URL here (e.g. /returns).

Subscriptions

Configure default behavior for recurring subscription orders. Individual subscription configurations can override the reminder days.

Days before charge to send reminder email (default: 3)
Number of times to retry failed charges before pausing subscription (default: 3)
Days between retry attempts (default: 2)

Google Shopping

Generate a product feed for Google Merchant Center. When enabled, your published products are available at a URL you can submit to Google.

Used for products that don't have a brand attribute set.
Optional. Helps Google classify your products. See Google's product category taxonomy.
How to connect to Google Merchant Center
  1. Go to Google Merchant Center and create an account
  2. Verify your website domain (Google will ask you to add a meta tag or DNS record)
  3. Go to Products → Feeds → Add primary feed
  4. Select "Scheduled fetch" and paste the Feed URL above
  5. Set the fetch frequency (daily is recommended)
  6. Save. Google will fetch your products automatically

Payment Settings

Payment Configuration

Enable any combination of Stripe, PayPal, Square, and Authorize.net to offer those payment options to customers at checkout. All four can be used together.

If no payment method is enabled, the shopping cart will be disabled and customers will not be able to complete purchases.

Recommended. One click, no keys to copy.
Get yours from the Stripe API Keys page.
Found in your Stripe Dashboard under the webhook endpoint details.
Stripe Webhook Setup Required

For payments and order updates to work correctly, you must register a webhook endpoint in your Stripe Dashboard:

  1. Go to Stripe Dashboard → Developers → Webhooks
  2. Click "Add destination"
  3. Select the following events:
    • payment_intent.succeeded — Finalizes orders after successful payment
    • payment_intent.payment_failed — Tracks declined and failed payments
    • charge.refunded — Updates order status when refunds are issued
    • charge.dispute.created — Alerts you when chargebacks are initiated
    • charge.dispute.closed — Records the chargeback outcome (won/lost)
  4. Set the Webhook endpoint URL to:
  5. Copy the Signing secret (starts with whsec_) and paste it above

Without these webhooks, payments will be collected but orders will stay in "pending" status, and refunds or chargebacks won't be tracked.

Refunds & disputes: issue refunds and respond to chargebacks in the Stripe Dashboard — the CMS tracks the status automatically. Connecting with the button above configures these events for you.

Guided setup with automatic verification
Found in your PayPal Developer Dashboard under Webhooks. Needed to verify webhook signatures for subscription events.
PayPal Webhook Setup

For subscriptions and payment tracking to work correctly, register a webhook endpoint in your PayPal Developer Dashboard:

  1. Go to PayPal Developer Dashboard → My Apps & Credentials → Your App → Webhooks
  2. Add a webhook with the endpoint URL set to:
  3. Select the following events:
    • PAYMENT.SALE.COMPLETED — Recurring payment succeeded
    • PAYMENT.SALE.PENDING — Recurring payment pending (e.g., eCheck/bank-funded)
    • PAYMENT.SALE.DENIED — Payment denied
    • PAYMENT.SALE.REFUNDED — Payment refunded (one-time and subscription orders)
    • CUSTOMER.DISPUTE.CREATED — Chargeback initiated
    • CUSTOMER.DISPUTE.RESOLVED — Chargeback resolved
    • BILLING.SUBSCRIPTION.CANCELLED — Subscription cancelled
    • BILLING.SUBSCRIPTION.SUSPENDED — Subscription suspended
    • BILLING.SUBSCRIPTION.EXPIRED — Subscription expired
    • BILLING.SUBSCRIPTION.REACTIVATED — Subscription reactivated
    • BILLING.SUBSCRIPTION.CREATED — Subscription created
    • BILLING.SUBSCRIPTION.ACTIVATED — Subscription activated
    • BILLING.SUBSCRIPTION.PAYMENT.FAILED — Recurring payment failed
  4. Copy the Webhook ID and paste it above

Without this webhook, PayPal subscription events (cancellations, renewals, failures), refunds, and disputes won't be tracked automatically.

Refunds & disputes: issue refunds from your PayPal activity and respond to chargebacks in the PayPal Resolution Center — the CMS tracks the status automatically. Connecting with the button above registers these events for you.

Recommended. One click, no keys to copy.
Found in your Square Developer Dashboard under your application credentials.
Your Square access token, created under your application's Credentials tab.
Found in your Square Dashboard under Locations. Used for payment processing.
Found in your Square Developer Dashboard under Webhooks. Needed to verify webhook signatures for payment events.
Square Webhook Setup

For payment tracking and refund handling, register a webhook in your Square Developer Dashboard:

  1. Go to Square Developer Dashboard → Your App → Webhooks
  2. Add a webhook endpoint
  3. Select the following events:
    • payment.updated — Tracks payment status changes and refunds
    • dispute.created — Chargeback initiated
    • dispute.state.updated — Chargeback status changed
  4. Set the endpoint URL to:

Refunds & disputes: issue refunds and respond to chargebacks in the Square Dashboard — the CMS tracks the status automatically.

Found in your Authorize.net merchant dashboard under Account → API Credentials & Keys.
Your server-side transaction key. Keep this secret.
Used by Accept.js in the browser to tokenize cards. Found in your Authorize.net dashboard under Account → API Credentials & Keys.
Refunds & Disputes

Authorize.net refunds and chargebacks are managed in the Authorize.net Merchant Dashboard. The CMS does not receive Authorize.net webhook events, so after issuing a refund, set the order status to "Refunded" here manually.

Shipping Settings

Shipping Options

Configure shipping options for physical products. Items marked as "Shippable" in their data block will have shipping costs calculated at checkout.

When disabled, shipping costs will be set to $0 for all orders
Orders over this amount qualify for free standard shipping (e.g., 100 for $100). Leave at 0 to disable free shipping.
Added to every shipping quote (handling fee)
Amount added on top of the carrier or flat rate

Real-Time Carrier Rates via Shippo

One connection covers USPS, UPS, FedEx, and DHL — no separate carrier accounts needed.

Run it for free: a Shippo test key (shippo_test_…) returns rate quotes that are nearly identical to live pricing, at no cost. Move to a live key (shippo_live_…) when you want guaranteed-accurate quotes — that's $0.01 per rate lookup.

Get this from your Shippo dashboard. The key prefix (shippo_test_ vs shippo_live_) determines the mode.
When off, the flat-rate tables below are used instead.
Requires a live key. When off, basic format checks still run.
Leave empty to allow all carriers the provider supports.

Standard Shipping (5-7 business days) — flat rate / fallback

Starting cost
Added per item
Added per pound

Express Shipping (2-3 business days) — flat rate / fallback

Starting cost
Added per item
Added per pound

Overnight Shipping (1 business day) — flat rate / fallback

Starting cost
Added per item
Added per pound

Tracking Codes

Tracking Codes

Add tracking snippets (e.g., Google Analytics, Facebook Pixel) to your site. These are injected into every page of your website template.

Code placed in the <head> of every page. Use this for analytics, pixel trackers, and meta verification tags.
Code placed before </body> on every page. Use this for chat widgets, conversion scripts, and other footer scripts.

SEO Settings

Automatically Generated Files

Your sitemap.xml, robots.txt, and llms.txt files are built and kept up to date automatically as pages, posts, and products change. There is nothing to configure for these.

On-Page SEO

These features are built in and require no template changes. Tags are only added when missing, so a template that already handles SEO is left alone.

Automatically adds a meta description to pages and posts that have one set but whose template does not render it.
Adds structured data identifying your business to search engines, using your site name, logo, and store address from Sales Settings.
Adds structured data to blog posts including publish dates, author, and tags.

Social and AI

Controls how your content appears when shared on social platforms and how AI assistants and crawlers access your site.

Adds Open Graph and Twitter tags so links preview correctly with a title, description, and image on social platforms and chat apps.
AI crawlers and assistants may access your site. Turn this off to block AI training bots; search engines and normal visitors are never affected.

Collections

Collection Internal Name Description Items Actions
Loading collections...

New Data Block

Use lowercase letters, numbers, and underscores only. Auto-generated from the display name.
Define the structure of your data (e.g., title, price, description). Or use the template selector when creating a new collection.

Shopping Configuration

Enable shopping to allow this data block to be sold. Configure which attributes contain pricing, titles, etc.

Form Routing

How it works: Form routing lets you send form submissions to a collection as new records. When a form with a matching form_name is submitted, a record is created in the target collection using your field mapping. Submissions always go to the Inbox as well.

New Form Route

Must match the form_name hidden field in your form HTML.
Maps collection attributes to form field names. Defaults to 1:1 matching (same name) — only override when the form field name differs from the attribute name. Leave blank to pass all fields through as-is.

Select a collection to load its attributes.

Collection Items

Collection Description Items Actions
Loading collections...

New Record

Variant Configuration

Add variants to allow customers to select different options like size, color, or material — or add text input fields for customizations like names or phrases.

Data Views

View Internal Name Collection Type Actions
Loading views...

New Data View

Use {{data:attr:fieldname}} to display attributes. Available: {{data:attr:*}}, {{data:text:*}}
JSON format: {"filters": [{"attribute": "name", "operator": "=", "value": "value"}]}
JSON format: {"sort_by": "fieldname", "sort_order": "ASC or DESC"}
{{data:view:view_name}}
Use this code in your templates to display this view

Product Feeds

Promo Codes

Code Discount Status Usage Expires Actions
Loading promo codes...

New Promo Code

Promo code entered by customers at checkout
For percentage: enter the percent (e.g., 10 for 10%). For fixed: enter the dollar amount (e.g., 10.00 for $10 off).
Total times this code can be used across all customers. Leave blank for unlimited.
How many times each customer can use this code. Enabling this blocks guest checkout: customers must be signed in to use the code. Leave blank for unlimited.
Optional — becomes active at 12:00 AM on this date
Optional — valid through the end of this date (11:59 PM)

New Feed

1. Feed Source

Automatically generated from the display name
Base URL where product images are hosted. Filenames from the feed are appended to this.

Orders

Total Orders

-

Pending

-

Completed

-

Revenue

$-

Order # Date Customer Email Total Order Status Payment Actions

Customers

Email Customer Name Business Name Orders Total Spent Actions
Loading customers...

Analytics

Built-in, privacy-friendly analytics. Tracks page views and unique visitors across your site automatically. Excludes admin, API, checkout, and customer-portal traffic.

Total Page Views
Unique Visitors
Avg Views / Day

Page Views Over Time

No data yet

Top Pages

Path Type Views Visitors % of Total
Loading...

Top Referrers

Source Views
Loading...

Customer Details

Contact Information

Name: -
Business: -
Email: -
Phone: -

Order Summary

Total Orders: 0
Total Spent: $0.00

Billing Address

No address on file

Order History

Order # Date Total Status Payment Actions
No orders found

Edit Customer

Optional - for B2B customers
Minimum 6 characters. Leave blank to auto-generate (or when editing, to keep the existing password).

Billing Address

Create Order

The customer receives an email with the order details and a payment link. Uncheck to skip the email; you can still print an invoice from the order page.

Order Items

Order Summary

Additional Information

Order Details

Select an order to view details

Subscription Management

Active Subscriptions

-

Paused

-

Past Due

-

Cancelled

-

Monthly Recurring Revenue

$-

Due Within 7 Days

-

Order # Customer Started Next Charge Amount Duration Status Actions
Loading subscriptions...

Subscription Details

Users

Username Role Created At Actions
Loading users...

Add New User

Minimum 6 characters. Leave blank when editing to keep existing password.
Editor: Can manage content blocks, pages, and blog posts
Developer: Editor access as well as collection schemas and orders
Admin: Full access to all features

Webhooks

Total Sent

-

Successful

-

Failed

-

Active Webhooks

-

Loading webhooks...

Edit Webhook

The URL where webhook payloads will be sent
Used to sign webhook payloads for verification

Loading events...

Webhook Details

Select a webhook to view details

New Inbound Webhook

Map incoming JSON fields to your blog post fields. If left blank, smart defaults are used (title→name, content→content, excerpt/description→meta description, featured_image→post image). Supports dot notation (e.g., featured_image.url).
Blog Post Field
Incoming JSON Path