Docs
Installation guide
Deploy the self-hosted Sendvelo stack after purchase, configure your environment, and activate your license on one production installation.
What you get
A successful $149 purchase gives you a perpetual license to use the purchased software version on one production installation, plus 12 months of software updates and standard support.
You download a compiled Docker deployment package (frontend + backend images, Compose, scripts, and docs)—not source code. After purchase you receive a license key and a secure download page link. Packages are never published as permanent public URLs.
Requirements
- Docker Engine and Docker Compose on the host
- A production domain you will set as
LICENSE_DOMAIN(must match the domain used for activation) - Outbound HTTPS from your backend to the Sendvelo license server
- Your license key from the purchase email or confirmation page
Get the package
- Open your purchase confirmation page (from checkout or email), or sign in and go to Account → Licenses.
- Download an entitled release. The backend authorizes the request and issues a short-lived signed download URL. Optionally verify the SHA-256 checksum shown on the page.
- Extract the ZIP on your server (
sendvelo-vX.Y.Z/). Keep your license key private.
If the confirmation page still says the license is being prepared, wait a moment and refresh.
Configure
At the package root:
cp .env.example .envSet at least:
- Secrets — replace all
replace-with-long-random-*JWT and tracking secrets FRONTEND_APP_URL,API_PUBLIC_URL, andNEXT_PUBLIC_API_BASE_URLto your public HTTPS URLsDEPLOYMENT_MODE=self_hosted(already set in the example)- Licensing:
LICENSE_SERVER_URL,LICENSE_PUBLIC_KEY, andLICENSE_DOMAIN(your production app domain, e.g.app.example.com)
MongoDB and Redis run inside Compose with persistent volumes. Hosts must be the service names mongo and redis—not 127.0.0.1.
Do not put Paddle secrets or the license-server private key in this file—they are not used by customer deployments.
Start the stack
From the package root:
./install.shThe script checks Docker, loads images/frontend.tar and images/backend.tar, runs docker compose up -d, and waits for health checks. No private Docker registry is required.
The vendor license-server is not included—your installation talks to Sendvelo's hosted license service over HTTPS.
Default local ports are frontend 3000 and API 4000. Put TLS and your real domain in front of these in production.
Activate your license
- Confirm
LICENSE_DOMAINmatches the production domain for this install. - Open the app and create / sign in as an organization owner or admin.
- Go to Dashboard → License (
/dashboard/license). - Paste your license key and click Activate license.
Activation registers this installation with the license server, verifies the signed license locally, and binds it to your configured domain. One production installation seat is included. Installation scripts never activate the license automatically.
Verify
- Open the UI on your configured production domain
- Confirm license status shows as active on the License page
GET /system/versionon the API reports the package version- Campaign / journey sending is available only while the license is valid (or within the temporary grace period if the license server is briefly unreachable)
Updates
While your updates & support window is active, download newer entitled releases from the confirmation page or Account → Licenses, then run ./update.sh from the new package (preserves Mongo/Redis volumes).
After the window expires, the software keeps running. You can still download your originally purchased version. Newer versions shipped after expiry require renewing updates & support ($49/year).
Migrate or deactivate
To move to a new server, deactivate the old installation first (License page → Deactivate, or the deactivate API). That frees the single installation seat so you can activate on the new host.
The new host gets its own installation ID in its MongoDB—that is expected. Do not share one license across two active installations.
Troubleshooting
- Domain mismatch —
LICENSE_DOMAINmust match the domain used at activation; browser Host/Origin alone is not trusted. - Missing public key — set
LICENSE_PUBLIC_KEYfrom the materials provided with your package / vendor docs. - Compose cannot reach Mongo/Redis — use hosts
mongoandredisinside Compose, not localhost. - Payment done, no key yet — wait for webhook fulfillment, then refresh the confirmation page or check email.
- Download denied for a newer version — renew updates & support, or download your purchased version instead.
More product context: Documentation.