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

  1. Run through Getting Started locally first and confirm /dashboard/setup passes
  2. Apply src/db/schema.sql to your production Supabase project (not just your local/dev one) — it's additive and idempotent (create table if not exists, drop policy if exists before create policy), so it's safe to re-run
  3. Create the uploads storage bucket in your production Supabase project

Deploying to Vercel

  1. Push the repo to a Git provider Vercel can read (GitHub, GitLab, Bitbucket)
  2. Import the project in Vercel
  3. Set every variable from .env.local.example in the Vercel project's environment variables — see Configuration for what each one does
  4. Set NEXT_PUBLIC_APP_URL to your real production URL, not localhost. This is used to build the widget's iframe src and any OAuth redirect_uri — getting it wrong breaks the embed and any connected CRM OAuth flow silently
  5. Deploy

After deploying

  • Visit /dashboard/setup on 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