Deployment Guide
Deskly deploys the same way as the base template: zero-config on Vercel, with Supabase as the only required external service.
Before you deploy
- Run through Getting Started locally first and confirm
/dashboard/setuppasses - Apply
src/db/schema.sqlto your production Supabase project (not just your local/dev one) — it's additive and idempotent (create table if not exists,drop policy if existsbeforecreate policy), so it's safe to re-run - Create the
uploadsstorage bucket in your production Supabase project
Deploying to Vercel
- Push the repo to a Git provider Vercel can read (GitHub, GitLab, Bitbucket)
- Import the project in Vercel
- Set every variable from
.env.local.examplein the Vercel project's environment variables — see Configuration for what each one does - Set
NEXT_PUBLIC_APP_URLto your real production URL, notlocalhost. This is used to build the widget's iframesrcand any OAuthredirect_uri— getting it wrong breaks the embed and any connected CRM OAuth flow silently - Deploy
After deploying
- Visit
/dashboard/setupon the production URL to re-run the environment/database checklist against production - Create a bot, add your real customer domain(s) to its allowed-domains list, and test the embed snippet on an actual page at that domain
- If you're using Stripe, point your Stripe webhook endpoint at
https://your-domain.com/api/webhooks/stripe(or wherever the base template's webhook route lives) and confirm a test event delivers successfully
Updating the widget script URL
The embed snippet customers use (<script src="https://your-deploy-url.com/widget.js" ...>) must point at your actual production domain. If you rebrand or move domains later, every customer's embedded snippet needs updating — there's no indirection layer for this in v1.
Related
- Configuration for the full environment variable list
- Troubleshooting for what to check if the widget doesn't load after deploying