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 tailwind.config.ts or your CSS variables
  • 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

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.