Dashboard

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

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.

🏪 Store Address

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

💰 Tax Settings

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 Download Settings

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 Settings

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.

🔄 Subscription Settings

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)

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.

Payment Settings

ℹ️
Payment Configuration

Enable any combination of Stripe, PayPal, and Square to offer those payment options to customers at checkout — all three can be used together.

Alternatively, Homeplate CMS Payments handles payment processing for you — but it cannot be combined with the other payment methods. If Homeplate CMS Payments is active, it replaces the card-payment option at checkout.

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

⭐ Homeplate CMS Payments — Hands-off payment setup, we handle the technical configuration for you

Best for merchants who don't want to manage their own Payment Processor account. A small percentage of each sale covers setup and ongoing maintenance.

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
  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.

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
    • 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) won't be tracked automatically.

Found in your Square Developer Dashboard under your application credentials.
Your Square access token. Use Sandbox credentials for testing.
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
  4. Set the endpoint URL to:
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.

Shipping Settings

📦 General Settings

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

↩️ 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).

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.

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).
Optional — when the promo code becomes active
Optional — when the promo code expires

Google Shopping

Feed Status

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

Default Values

These defaults are used when individual products don't have their own value. Products without a GTIN or MPN automatically use identifier_exists: false, which tells Google the product doesn't have standard identifiers.

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

  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

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...

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 (required for new customers). Leave blank when editing to keep existing password.

Billing Address

Create Order

Order Items

Order Summary

Additional Information

Order Details

Select an order to view details

Subscription Management

Active Subscriptions

-

Paused

-

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...

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

Homeplate Payments

Loading…

Loading…