Skip to content

Configuration

AI Web Launcher centralizes brand identity in one file (config.ts) and theme tokens in one place (app/globals.css). Everything else is optional environment variables.

config.ts

config.ts is the single source of truth for your brand. Edit these tokens first:

config.ts
const config = {
  // REQUIRED
  appName: "AI Web Launcher",
  appDescription: "A zero-config Next.js boilerplate for AI-powered websites.",
  // naked domain — no https://, no trailing slash
  domainName: "your-domain.com",

  crisp: { id: "", onlyShowOnRoutes: ["/"] },
  googleAnalytics: { measurementId: "", streamId: "" },

  stripe: { plans: [ /* your plans */ ] },

  resend: {
    fromNoReply: `AI Web Launcher <noreply@your-domain.com>`,
    fromAdmin: `AI Web Launcher <hello@your-domain.com>`,
    supportEmail: "hello@your-domain.com",
  },

  colors: {
    theme: "light",       // default mode (light | dark) — tokens in app/globals.css
    main: "#1F6F73",      // browser tab / loading-bar color (keep in sync with --color-primary)
  },

  auth: { loginUrl: "/signin", callbackUrl: "/dashboard" },
};
Start here
Changing appName, appDescription, and domainName re-brands the SEO tags, OG images, sitemap, and structured data across the whole site.

Theme & palette

Color tokens live in app/globals.css inside the @theme block and the [data-theme="light"] / .dark blocks. They are shadcn/ui OKLCH variables:

app/globals.css
:root {
  /* REPLACEABLE starter palette — Signal Violet + Circuit Cyan */
  --primary: oklch(0.542 0.179 288);   /* violet — CTAs, focus rings */
  --primary-foreground: oklch(0.985 0 0);
  --accent: oklch(0.750 0.120 218);    /* cyan — accent partner */
  --ring: oklch(0.542 0.179 288);
  --background: oklch(1 0 0);          /* page background */
  --foreground: oklch(0.18 0.006 285); /* body text */
  --secondary: oklch(0.967 0.001 286); /* cards, surfaces */
  --border: oklch(0.92 0.004 286);     /* hairlines */
}

To re-skin the whole site, change these values. The [data-theme="light"] and .dark blocks override per theme. Keep config.colors.main in sync with --color-primary so the browser chrome matches.

Docs theme
The /docs route has its own token set (--docs-*) further down in globals.css. Adjust --docs-primary to match your brand if you want docs to share the site palette.

Environment variables

All integrations are optional and env-gated — the app boots without any of them. Copy .env.example to .env.local and fill in only what you need:

Terminal
$
cp.env.example .env.local
VariablePurposeRequired?
NEXT_PUBLIC_SUPABASE_URLSupabase project URLOnly for auth / leads
NEXT_PUBLIC_SUPABASE_ANON_KEYSupabase anon keyOnly for auth / leads
SUPABASE_SERVICE_ROLE_KEYServer-side Supabase writesOnly for lead capture
RESEND_API_KEYTransactional emailOnly for email
NEXT_PUBLIC_CRISP_IDCrisp chat website IDOnly for chat
NEXT_PUBLIC_GA_IDGoogle Analytics 4 IDOnly for analytics
STRIPE_SECRET_KEYStripe paymentsOnly for checkout
NEXT_PUBLIC_DOMAINNaked domain for www→apex redirectOptional

When a key is absent, the related feature is silently disabled (no crash). See Best practices for the fail-soft pattern.