Shipkit
DocsFeaturesPricing
DocsFeaturesPricing

Command Palette

Search for a command to run...

Shipkit DocumentationBuild memory optimizationDevelopment GuideEnvironment VariablesError HandlingFile StructureMiddlewareRebranding Guide

Vercel Deployment Checks

Development GuideCLIDependency UpdatesDevToolsFeature FlagsAI PromptsSetup RequirementsSupply chaintRPCWeb Workers

FeaturesAIAnalytics IntegrationAuthenticationCMSDatabaseEmailHapticsPaymentsComponent RegistryStorageUIVisual BuilderWaitlist Feature

Quick StartDeploymentEnvironment VariablesFile StructureSetup Wizard

Caching & Rate LimitingContent ManagementError HandlingMarkdown and MDXMiddlewareProxy-Safe Server ActionsRebranding GuideWebhook Security Implementation GuideMulti-Zone ArchitectureVercel Deployment

IntegrationsPayload CMSDataFast Analytics IntegrationGoogle Analytics IntegrationGoogle Tag Manager IntegrationPostHogStatSig IntegrationUmami Analytics IntegrationAuth.js IntegrationBetter AuthClerkStack Auth IntegrationSupabase Authentication IntegrationBuilder.io IntegrationPayload CMS IntegrationAWS S3 IntegrationResend Email IntegrationUpstash Redis IntegrationVercel Blob IntegrationLemon SqueezyPolarStripe

API RoutesComponentsAPI Route SnippetsAuthentication SnippetsComponent SnippetsForm Handling SnippetsSnippets Introduction

Rebranding Guide

After creating a new project with shipkit create, run the rebrand script to replace all ShipKit branding with your own.

Quick Start

bunx tsx scripts/rebrand.ts --name "MyApp" --slug "my-app" --domain "myapp.com" --creator-name "Jane Smith"

That's it. The script updates src/config/site-config.ts, .env.example, and package.json, then formats the config with ESLint.

Options

FlagDescriptionDefault
--nameDisplay name (e.g. "My App")Prompted
--slugURL/package slug (e.g. "my-app")Derived from name
--domainProduction domain (e.g. "myapp.com"){slug}.com
--creator-nameYour full name (optional)Empty
--dry-runPreview changes without writing filesOff

If you omit --name, --slug, or --domain, the script prompts for them interactively.

Dry Run

Preview what will change before committing:

bunx tsx scripts/rebrand.ts --name "MyApp" --domain "myapp.com" --dry-run

Output shows old vs. new values for every field without touching any files.

What Gets Updated

src/config/site-config.ts

The script replaces these sections in siteConfig:

SectionFields updated
Top-levelname, title, url, ogImage
brandingprojectName, projectSlug, domain, protocol, githubOrg, githubRepo, vercelProjectName, databaseName, productNames.main
repoowner, name, url, format.clone(), format.ssh()
emailsupport, team, noreply, domain, legal, privacy, format()
creatorname, email, url, twitter, domain, fullName, avatar
socialgithub, x (other social fields reset to empty)
linkstwitter, x, github URLs
storeid, product keys (variant IDs reset to empty for you to fill in)
metadata.keywordsReplaces "Shipkit" with your project name

.env.example

Updates the DATABASE_URL database name from shipkit to your slug.

package.json

Updates the "name" field to your slug.

Derived Values

When you provide --creator-name "Jane Smith", the script derives:

  • Username: janesmith (lowercased, spaces removed)
  • Creator domain: janesmith.com
  • Twitter handle: @janesmith
  • Avatar: https://github.com/janesmith.png
  • GitHub org: {slug}-org

Without --creator-name, the creator fields default to your project name/domain.

After Rebranding

  1. Copy .env.example to .env if you haven't already
  2. Update DATABASE_URL in .env with the new database name
  3. Fill in your LemonSqueezy variant IDs in the store.products section
  4. Add your social links in the social section (Discord, LinkedIn, etc.)
  5. Replace public/favicon.ico and public/og.png with your own assets
  6. Restart your dev server

Manual Changes

The rebrand script handles config values. You'll still want to update:

  • Logo/favicon: Replace files in public/
  • Colors/theme: Edit the CSS variables in src/styles/theme.css (--color-1 through --color-5 for accent colors). The page loader derives its gradient from these automatically. Clear or replace src/styles/overrides.css to remove Shipkit-specific brand overrides
  • Content: Update landing page copy, footer text, etc.
  • Social links: Fill in the empty fields in siteConfig.social
  • Store products: Add your LemonSqueezy variant IDs

Feature Configuration

Features are controlled entirely by environment variables — do not manually set FEATURE_*_ENABLED variables. The features config (src/config/features-config.ts) auto-detects which features are available based on whether their required env vars are set:

  • Set AUTH_GITHUB_ID + AUTH_GITHUB_SECRET → GitHub OAuth auto-enables
  • Set STRIPE_SECRET_KEY + STRIPE_PUBLISHABLE_KEY → Stripe payments auto-enables
  • Remove an env var → the feature disables cleanly

See src/config/features-config.ts for the full list of feature detection rules.

Troubleshooting

ESLint formatting fails: The script runs bunx eslint --fix on the config file after writing. If it fails, the rebrand still completes. Run bunx eslint --fix src/config/site-config.ts manually to debug.

Script hangs: Make sure you're passing all three required args (--name, --slug, --domain) if running non-interactively. Without them, the script opens a prompt that may not display in some environments.

Template literal errors: The script uses String.fromCharCode(96) for backticks in output to avoid esbuild/tsx parse conflicts. If you see TransformError, make sure you're running with bunx tsx or npx tsx, not ts-node.