For agencies & freelancers
Build a booking widget once. Ship it to every client site.
Mid-tier agencies and freelancers already pay for plugins to save dev time. DSGo Apps gives you a smaller unit than a full plugin: ship a single bundle to N clients with one CLI command, and update them all the same way. This page describes the Agency plan ($399/yr), multi-site deploys and white-label live there.
The agency loop
One bundle. N client sites.
Build the app once with the typed bridge (minimal by default; Astro is available with --astro for multi-page apps; any static bundle works). Each deploy targets a single site by hostname. Repeat the deploy across every client; each install reads that client’s WordPress data.
Scaffold the app once.
dsgo-app.json, the typed bridge, and a CLAUDE.md Claude reads on the first prompt. The starter is minimal by default, with Astro available through apps init --astro for multi-page apps (booking flows, member portals, intake wizards); single-file HTML works for one-off widgets. Reusable across the whole client roster.
npx @designsetgo/cli apps init booking-pack Per-site WP App Passwords.
Each client site issues a scoped, revocable Application Password. Stored in your local config with 0600 permissions. No new token system to manage.
npx @designsetgo/cli apps login --site=client-1.com Atomic update per site.
Same app id across sites means each redeploy is a clean replacement. No downtime, no drift between client installs unless you want it.
npx @designsetgo/cli apps deploy --site=client-1.com Ship to many sites
A small bash loop is the “multi-site deploy.”
No bespoke fleet manager. The CLI takes a single --site= per call; agencies stitch that into whatever orchestration they already have, a shell loop, a CI matrix, an Ansible task.
shell # Build once.
npm run build
# Ship the same dist/ to every client.
for site in client-1.com client-2.com client-3.com; do
npx @designsetgo/cli apps deploy --site="$site" --no-build
done In CI, the same loop becomes a matrix step in GitHub Actions, with secrets per site. There’s a starter deploy-action that wraps the CLI.
Why agencies adopt this
Smaller unit, steeper margin.
Faster than a custom plugin.
A DSGo app is a static bundle and a manifest. No PHP boilerplate. No plugin scaffold. No update channel to write yourself.
Safer than a snippet.
A bug in a snippet plugin breaks the site. A bug in a DSGo app breaks the app. The sandbox makes “ship to all clients on Friday” an okay idea.
Bills as a recurring service.
“The booking suite” or “the client portal” is now a SKU. One bundle, N clients, monthly fee. You maintain it once, not N times.
White-label
Replace our branding with yours.
The wp-admin DSGo Apps page, the install screen, the empty states, all of it can carry your agency name and logo instead of ours. Clients see your brand running their site tools, not a third-party plugin you resell.
Your name, your logo.
Set plugin_name and logo_url in the white-label settings. Every admin surface picks them up, menu item, install screen, app cards.
Your support links.
Replace our docs and support links with yours. Clients ask you when something needs a question answered, not the open-source forum.
Pre-bundled with your apps.
Ship a single zip that installs the plugin, applies your branding, and pre-installs your portal or booking pack. New client onboarding goes from a setup checklist to one upload.
White-label is included on the Agency plan ($399/yr). Lower tiers can run multi-site by hand but ship under the DesignSetGo Apps name.
Private template registry
Your starter library, separate from the public one.
Host your own bundles at any HTTPS URL you control. Your team scaffolds new client projects from your library, not the public starter.
One config per dev machine.
Run npx designsetgo apps registry add acme https://acme.example/registry.json --token xxx once. After that, every apps init can pull from your library by alias.
Versioned starters.
Pin a specific template version (--template booking-widget@1.4.0) or take the latest. SHA-256 integrity check on every download, so a tampered tarball refuses to install.
Surfaces in Riff too.
Once configured on a site, the in-admin Riff builder lists your private templates alongside the public ones, with a one-click "Copy CLI command" affordance for your devs.
npx designsetgo apps registry add acme https://acme.example/registry.json --token xxx
npx designsetgo apps init clients/new-site --template booking-widget --registry acme You bring the bytes (GitHub Pages, S3, your own WP site, internal CDN); DSGo provides the spec and the CLI plumbing. Available on the Agency plan ($399/yr).
Trust model
Pick the rendering mode by who wrote the code.
Most agency apps are reviewed in-house. Inline mode is the right default, real WP pages, native SEO, root-mount-able. Iframe mode is the right call for client-supplied bundles you didn’t write yourself.
Inline mode
App renders as a real WordPress page. Crawlable, indexable, theme-wrappable, SEO-clean. CSP and HTML sanitization run on every request. The bundle is your own code, so the trust model is “trusted plugin you ship.”
"isolation": "inline" Iframe mode
Browser-enforced sandbox with an opaque origin. Use it when a client hands you an HTML bundle from their freelancer or a saved Claude artifact. The bridge still works; the page doesn’t share origin with the rest of the site.
"isolation": "iframe" See the CLI reference.
Every command, every flag, in one page. Including --site=, --from-artifact, and the deploy-action for CI.