Guides

Choose your app's services

Turn on a database, sign-in, email, storage, Redis, payments or bot protection, and see what each one creates.

Every service is optional. Turn on what your app uses, and Launchpad creates it, injects its keys and keeps them in step on later deploys.

In the console these are switches on the configure screen. In launchpad.json they're entries under services. The two are the same thing: the console writes that file for you.

Database

Postgres, on Neon by default, Supabase, or your own server beside an app hosted there (see Your own server).

  • Your app gets DATABASE_URL, and on Neon also DATABASE_URL_UNPOOLED for migrations.
  • Supabase also gives SUPABASE_URL, SUPABASE_ANON_KEY, SUPABASE_SERVICE_ROLE_KEY and their NEXT_PUBLIC_ versions.
  • On Neon and Supabase, Launchpad never stores the database password; it asks the provider each run. On your own server it sets the password itself and keeps it encrypted with your other secrets, because Coolify won't hand it back to a token without extra permission.

Choose Supabase if you want Supabase's sign-in or file storage, which run on the same project. Supabase's free plan allows two active projects; Neon's allows a hundred, which is why it's the default.

Sign-in

  • Supabase Auth runs on the app's Supabase database. Email sign-in is always on; providers adds GitHub or Google, each needing an OAuth app whose id and secret you save as secrets. Redirect URLs are set for your domain, Vercel previews and localhost:3000.
  • Clerk needs no database. Create the application in Clerk, then save CLERK_SECRET_KEY and the publishable key. Launchpad checks their shape, that both come from the same instance, and warns when they're development keys.

Email

Resend. Launchpad creates a sending domain, creates a send-only key scoped to it, and injects RESEND_API_KEY and EMAIL_FROM. You add the DNS records it prints, or they're added for you when your DNS is on Cloudflare. See Email that reaches the inbox.

File storage

  • Cloudflare R2 (the default) needs no database. Each bucket is named after your app, gets CORS for your app's addresses and localhost:3000, and your app receives S3-style keys that reach only its own buckets.
  • Supabase Storage runs on the Supabase database project, and supports per-bucket size and file type limits.

Launchpad never takes over a bucket it didn't create, and a teardown keeps any bucket that still has files.

Redis

Upstash, for caching, rate limits and queues. Your app gets UPSTASH_REDIS_REST_URL and UPSTASH_REDIS_REST_TOKEN, plus REDIS_URL for ioredis and BullMQ. Turn on eviction for a cache; leave it off for a queue.

Payments

  • Stripe: Launchpad creates your products and prices, injects their ids, creates the webhook to /api/stripe/webhook and injects its signing secret.
  • Razorpay: it creates a subscription plan per recurring price. Razorpay only lets partner accounts create webhooks through its API, so the deploy lists the webhook for you to add, with the URL, the events and the secret to save.

Bot protection

Cloudflare Turnstile. Launchpad creates a widget for your domains and injects NEXT_PUBLIC_TURNSTILE_SITE_KEY and TURNSTILE_SECRET_KEY.

Background workers, APIs and cron

Processes on Render, built from the same repository: a long-running worker, a separate API in another language, or a job on a schedule. A web process can have its own domain, and the web app can be given its URL automatically.

Next

Something missing or wrong? Edit this page on GitHub or email hello@axonscape.com.