Skip to content

Deployment Workflow

Mehrdad Pajuhaan edited this page Oct 23, 2026 · 1 revision

Deployment Workflow

selldone deploy (or Deploy in the menu) turns the project in the current folder into a new Layout version on Selldone. This page explains every step, the manifest.json rules and the premium requirement, so you know what to fix when a step stops.

The steps

selldone deploy
  │
  ├─ 1. Authenticate ........ saved token → 2FA status check, or browser login
  ├─ 2. Premium check ....... only premium accounts can deploy
  ├─ 3. Manifest check ...... ./manifest.json fields
  ├─ 4. Version check ....... POST /developer/layouts/check-version
  ├─ 5. Confirmation ........ type "yes"
  ├─ 6. Build ............... npm|yarn run build-production
  ├─ 7. ZIP ................. contents of dist/ → dist.zip
  └─ 8. Upload .............. POST /developer/layouts/deploy (file + manifest)

1. Authenticate

If ~/.selldone-dev/.persist holds a token, the CLI prints You are already authenticated. and checks the 2FA status. If no token is saved, it starts the browser login. If the saved token is rejected, the CLI clears it and starts the browser login again. See Authentication.

2. Premium check

The CLI prints the signed-in user and stops unless the account is premium. See Premium requirement.

3. Manifest check

The CLI reads ./manifest.json and stops with an error when a rule is broken. See manifest.json.

4. Version check

The CLI sends package and version to POST https://api.selldone.com/developer/layouts/check-version. If the version is already used, it prints the error and, when the Layout exists, its dashboard URL (https://selldone.com/developer/layouts/<id>). Details: Layout Deployment API.

5. Confirmation

The CLI prints the Layout name, version, package and supported targets (Storefront and/or Backoffice) and asks:

❓  Is the name "My Custom Storefront" and version "1.0.0" correct? (yes/no):

Only yes (any letter case) continues. Any other answer stops the deployment.

6. Build

The CLI runs build-production with npm or yarn (see Package manager detection) and prints the build output. If the build fails, it prints the error and stops.

7. ZIP

The contents of dist/ are compressed with maximum compression into dist.zip in the project root. The dist/ folder itself is not included, so dist/app/shop.js becomes app/shop.js in the ZIP. The required structure is described in Packaging Layouts.

8. Upload

The CLI uploads a multipart/form-data request with two parts, file (dist.zip) and manifest (the text of manifest.json), and shows a progress bar. On success it prints:

  • the server message (for example Layout uploaded successfully!),
  • a Layout table and a Deploy table,
  • DONE! with the management URL https://selldone.com/developer/layouts/<layout_id>.

The server creates or reuses the Layout, creates a new deployment and sets this version as the Layout's beta version (version_beta). Details: Layout Deployment API.

manifest.json

manifest.json lives in the project root, outside dist/. It is uploaded as a separate form field; a manifest inside the ZIP is not used.

{
  "package": "my-custom-storefront",
  "version": "1.0.0",
  "name": "My Custom Storefront",
  "description": null,
  "storefront": true,
  "backoffice": false
}
Field Checked by the CLI Checked by the server
package Required. Must match ^[a-z0-9\-.]+$ (lowercase letters, digits, -, .). 12–64 characters. The unique, permanent identifier of your Layout.
version Required. Must match ^[a-z0-9\-.]+$. 1–64 characters. Must not have been deployed before for this package.
name Required. 8–255 characters.
description — String or null. Include the key.
storefront At least one of storefront and backoffice must be true. Boolean.
backoffice At least one of storefront and backoffice must be true. Boolean.

Recommendations:

  • Use a lowercase slug with letters, digits and single hyphens for package, and keep it the same for every release. The New wizard warns: do not change the package after the first publish.
  • Use lowercase letters, digits, dots and hyphens for version. Underscores are rejected by the version check.
  • Set storefront: true for a storefront Layout.
  • Other keys in your manifest (the Storefront project also has deploy_server and deploy_path) are sent as part of the manifest text; the fields above are the ones the deploy endpoint validates.

Common manifest errors printed by the CLI:

Message Fix
manifest.json does not exist. Run the CLI from the folder that contains manifest.json.
The manifest.json file is missing either the name or the version field. Add name and version.
One of the storefront or backoffice field is required in the manifest.json to be true. Set storefront or backoffice to true.
The package field [...] must be lowercase alphanumeric and can contain dashes, or dots. Remove uppercase letters, spaces and other characters from package.
The version field [...] must be lowercase alphanumeric and can contain dashes, or dots. Fix version the same way.
Version is duplicated! Please change the version in the 'manifest.json' and try again. Increase version.

Premium requirement

Deploying Layouts is a premium feature. For a non-premium account, the CLI prints:

Only premium users can deploy layouts. Please upgrade your account to premium. It costs only $8 per month or $84 per year.

Subscribe at selldone.com/shuttle/wallet/subscriptions. The CLI also says that if you cannot subscribe, you can email Selldone once you have completed your Layout design, and that free premium badges are offered to the most outstanding designers. Premium users see You're a premium user. You can deploy layouts for free.

Next steps

Clone this wiki locally