The customer experience
A customer chooses an organization and either a new website or an eligible empty Go website before paying. After verified payment, SWC5 installs the exact reviewed release automatically as draft pages. The customer checks the content and publishes it from the editor.
- 01Choose the destination
- 02Pay for the template
- 03Edit and publish
The one-off template price and VAT are shown at checkout. A template purchase does not change hosting or subscription limits. Website, page, language, form, collection and storage capacity are checked before payment and installation. Existing website content is never replaced. If installation needs attention, the purchase page keeps the order available for retry.
Test checkouts are explicitly labeled. A test payment is never proof of a real payment; test installation must be enabled by the platform for testing.
Package structure
Upload a ZIP with the manifest at its root. Include only declared HTML pages and assets. SWC5 checks each asset’s SHA-256, validates the HTML and records an immutable digest for the reviewed release. The example download is a small integration sample, separate from the paid templates.
swc5-template.json
pages/
home.html
assets/
styles.css
LICENSE.txtRequired manifest identity: schema_version: 1, id: publisher/template, a semantic version, render_mode: go, engine: html, locale, pages and license. Exactly one page uses the slug home. Optional arrays declare assets, collections, forms and navigation. Unknown properties are rejected; do not add secrets, API keys, customer responses or executable build scripts.
Pages, assets and editable text
| Reference | What SWC5 resolves |
|---|---|
| swc5://page/contact | A declared page key → its installed route. |
| swc5://asset/assets/styles.css | A declared local asset → the installed resource. |
| data-swc5-text="headline" | A declared page.editable key → escaped text editable in Pages. |
| data-swc5-form="contact" | A declared form key → a site-specific submission endpoint. |
<h1 data-swc5-text="headline">Your next chapter.</h1>
"editable": [
{ "key": "headline", "type": "text", "text": "Your next chapter." }
]Text slots contain plain text and appear exactly once per page. Keep child markup outside the marked element. Preserve descriptive HTML classes and IDs in the package; preview scrambling belongs to the preview pipeline. Bind references explicitly instead of hardcoding a seller website ID or domain. Local fonts and their licenses belong in assets. No Go/Jet directives, remote scripts, external CSS imports, iframe embeds or server build steps are accepted by v1.
Forms and private responses
Declare a private response collection and map destination field names to HTML input names. Installation creates fresh collection and form IDs for the customer’s website, then binds the platform’s form adapter. There is no separate form-backend setup for the buyer.
<form data-swc5-form="contact">
<label>Email
<input name="email" type="email" required maxlength="180">
</label>
<label>Message
<textarea name="message" required maxlength="2500"></textarea>
</label>
<button type="submit">Send message</button>
</form>{
"key": "contact",
"slug": "contact",
"name": "Contact",
"collection": "responses",
"fields": [
{ "name": "email", "label": "Email", "type": "email",
"required": true, "max_length": 180 },
{ "name": "message", "label": "Message", "type": "textarea",
"required": true, "max_length": 2500 }
],
"field_map": { "email": "email", "message": "message" },
"success_message": "Thank you. Your message has been received."
}The collection referenced by collection must have public: false and a matching schema. field_map runs from collection destination to form source. Required collection fields must be mapped. Form types: text, email, tel, number, date, url, textarea, select and checkbox. Collection types also support longtext, datetime and boolean. A select’s declared options are enforced; required checkboxes must be checked.
Responses are stored atomically in the form inbox and in Data → the response collection. Anonymous visitors cannot read private collections or inboxes. The runtime uses the bound central endpoint without account credentials, checks errors and keeps the visitor’s input after failure. Rate limiting and an empty honeypot field add basic spam protection.
The public endpoint is POST /s/{siteId}/forms/{formSlug}. Send JSON string values or URL-encoded form fields. Success: 201 {ok:true}; invalid values: 422; unavailable configuration: 409; rate limit: 429. Browser requests from verified website origins are supported. Keep _swc5_website reserved. The platform sets data-swc5-installed on installed pages; previews must omit it and must not send visitor data. Email notifications and other integrations can be configured later in the form builder; packages do not carry seller credentials or notification recipients.
Publish and version
- Create a template listing and upload its package in My shop. The listing needs an explicit price, VAT treatment, license and a working preview.
- Submit the listing for review. The reviewed listing and package version must match before direct purchase becomes available.
- Use a new semantic version when changing the package. A purchase stays pinned to its exact release and digest; an updated upload does not silently replace a purchased version.
- Test responsive layouts, keyboard navigation, editable slots and real submission behavior in an isolated test website. Keep fictional preview data separate from installed customer data.
Contract limits
32 MiB
Maximum ZIP size
64 MiB
Maximum expanded package
256
Files, including the manifest
8 MiB
Per asset; source HTML up to 4 MiB
100 / 200
Pages / assets
20 / 20
Forms / collections, up to 60 fields each
These are package limits, separate from a customer’s subscription. The API is authoritative: it also checks duplicate names, safe paths, symlinks, cross-references, file hashes, compiled page size and supported content. The JSON Schema helps authoring but does not replace upload validation or review.
Start with the working contract example.
Open My shop