Shipkit
DocsFeaturesPricing
DocsFeaturesPricing

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.