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 alsoDATABASE_URL_UNPOOLEDfor migrations. - Supabase also gives
SUPABASE_URL,SUPABASE_ANON_KEY,SUPABASE_SERVICE_ROLE_KEYand theirNEXT_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;
providersadds 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 andlocalhost:3000. - Clerk needs no database. Create the application in Clerk, then save
CLERK_SECRET_KEYand the publishable key. Launchpad checks their shape, that both come from the same instance, and warns when they're development keys.
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/webhookand 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
- Environment variables and secrets: what lands in your app, and how to add your own.
- launchpad.json: every setting these switches write.
Something missing or wrong? Edit this page on GitHub or email hello@axonscape.com.