- Deploy the repo to Vercel.
- Set a handful of env vars you generate yourself (secrets + your URL).
- Connect two integrations from the Vercel marketplace — a Postgres database (Supabase or Neon) and Inngest. These inject their own env vars automatically.
- Finish everything else in-app under Integrations (Alchemy, payment providers, email). No more env vars needed.
1. Create your repo and deploy it
-
Generate your own copy of the source: on the private repo you were invited
to (github.com/mycserver/app), click
Use this template → Create a new repository. Create it under your own
account and keep it private.
Use the template button — don’t fork and don’t push a manual copy. The template gives you a clean, independent repo owned entirely by you, which is what lets Vercel deploy it without committer-verification issues, and what lets updates arrive later as pull requests.
- Import your new repo at vercel.com/new.
- Vercel detects everything automatically — leave the build settings exactly as they are and click Deploy.
2. Set the main environment variables
In Vercel → your project → Settings → Environment Variables, add these. These are the only ones you set by hand — everything else is injected by an integration or configured in the dashboard later.Secrets — required
How to generate them
Each of these needs to be a long, random, unguessable string (32+ characters). Generate a different value for each one — never reuse the same secret across variables. If you have a terminal, run this once per variable and paste the output:nvtbziY8taKuQeDVxannyXGm4irTAtxzMj0k5p2Qw1c=. Run it three times to get three
different values.
No terminal? Use a web generator instead — the easiest is the
1Password Password Generator:
set the length to 32+ characters, click the refresh icon for a new value, and
copy it. Generate one for each variable.
Another option is generate-secret.vercel.app/32 — just reload the page for a fresh value each time.
Your URL — required
On your very first deploy you won’t know the final URL yet. Deploy once with a
placeholder, copy the URL Vercel gives you, update both vars, and redeploy.
3. Connect the integrations
Both of these live in Vercel → your project → Integrations → Browse Marketplace. Connecting them provisions the service and injects the env vars automatically — you don’t copy any connection strings by hand.Database: Supabase or Neon
Either works — both are just Postgres. There’s nothing to copy by hand: add the integration, connect it to your project, and the app auto-detects the env vars it injects.- Supabase (great free tier)
- Neon
Add the Supabase integration from the marketplace, create a database,
and connect it to your project. It injects
POSTGRES_URL,
POSTGRES_PRISMA_URL, and POSTGRES_URL_NON_POOLING, which the app maps to
its pooled and direct connections automatically. The free tier is generous
enough to run a real store.Workflows: Inngest
Add the Inngest integration from the marketplace. It injectsINNGEST_EVENT_KEY and INNGEST_SIGNING_KEY. Inngest runs the durable
workflows behind payments — session lifecycle, confirmation waiting, sweeps, and
webhook delivery. Its free tier covers roughly 50k steps/month (~4 steps per
payment).
After your first successful deploy, point Inngest at your app so it discovers
your functions: in the Inngest dashboard, sync the app URL
https://your-app.vercel.app/api/inngest. You should see 5 functions appear
(sessionLifecycle, paymentVerify, webhookDeliver, reconcileAlchemy,
cleanupIdempotency).
4. Redeploy
With the env vars and integrations in place, trigger a fresh deploy (Deployments → ⋯ → Redeploy). Everything else is set up automatically — this deploy should go green.5. Finish setup in the dashboard
Everything else is configured inside the running app — no more env vars.- Visit
/setupand create your owner account (email + password). - Complete the onboarding wizard: seed phrase, networks, payout addresses, and the Security step (enable email-OTP 2FA).
- Go to Integrations → Alchemy, enter your API key + auth token, and enable it. Payment-detection webhooks are created automatically per chain the first time a session needs one — there’s no provisioning step.
- (Optional) Add any payment providers (MoonPay, Mercuryo, NOWPayments, CoinGate, Banxa…) under Integrations → <provider>. Credentials are per-merchant and live in the dashboard, not in env vars.
- (Optional) Enable email under Integrations → Resend: paste your Resend API key and a from-address. This powers 2FA codes, team invites, password resets, and checkout receipts. The key is stored encrypted in the database — there’s no email env var.
Troubleshooting
First deploy fails Expected — the app needs a database first. Connect the Supabase or Neon integration to your project, then redeploy. Deploy still fails after connecting the database Make sure the integration is connected to this project (not just installed on your account), then redeploy so it picks up the connection. Inngest functions not appearing Openhttps://your-app.vercel.app/api/inngest in a browser. If you see a page of
data (not an error), it’s working — then sync the app URL in the Inngest
dashboard.