Skip to content
Launch Kit logo

Get started

Configuration

One file sets the product name, plan, theme, emails, and auth URLs. Change it first. The rest of the site follows.

Open config.ts. This is the product control file. The landing page, metadata, checkout button, emails, and legal contact all read from it.

Product identity

KeyWhat it changes
appNameHeader, emails, checkout button, metadata
appDescriptionDefault meta description
domainNameHost only, no https://. Used for canonical URLs and legal copy

Plans

stripe.plans is the pricing section. Add objects to show more cards. Each plan needs:

  • priceId — from NEXT_PUBLIC_STRIPE_PRICE_ID (or another public env var if you add a second plan)
  • name, description, price, optional priceAnchor
  • features — bullets on the card
  • isFeatured — orange ring and Popular pill. Set this on one plan

The number on the hero comes from the featured plan.

Theme and layout

KeyWhat it changes
colors.themeDefault DaisyUI theme on <html data-theme>. dark or light
colors.mainBrowser chrome and the top progress bar. HEX, default #FF4F01
layout.columnMarketing column width: 5xl, 6xl, or 7xl

Brand colour in CSS lives in app/globals.css as --color-primary. See Branding.

Email and support

KeyWhat it changes
resend.fromAdminThe address sendEmail() actually uses
resend.fromNoReplyReserved. Not read by the mail helper today
resend.supportEmailFooter support link and legal contact. Leave empty to hide it

Use your verified Resend domain in production. The test sender works locally. See Resend.

Auth URLs

KeyWhat it changes
auth.loginUrlSign-in page. Private routes and apiClient send people here after a 401
auth.callbackUrlWhere a successful login lands. Default /dashboard

Crisp (optional)

Paste a Crisp site ID into crisp.id. onlyShowOnRoutes: ["/"] keeps the widget on the homepage only. ButtonSupport opens chat on other routes. Delete onlyShowOnRoutes to show chat everywhere. Skip Crisp entirely if supportEmail is enough.

Save the file and refresh. Name, plan, and theme should already match.