Rebrand a Next.js (and NestJS) project
Work through the steps in order. Every step ends with a check: run it, fix what it finds, and only then move on. CHECK means this command, from the project root:
node ${CLAUDE_SKILL_DIR}/scripts/rebrand-check.mjs check \
--old "Old Name" --old "Old name in each other script" \
--new "New Name" --new "New name in each other script"
Add --case when the old name is a common word (STORE), and --allow <path> for a
file that keeps the old name on purpose. Never run a blind find-and-replace.
0. Brief, map and baseline
- Write down the old name in every form the project uses (each language, slug, email domain) and the new name in every language, the brand colour, the logo files and the tone. If the request leaves one out, choose a sensible value, keep going, and list the choice in the report.
- Run
node ${CLAUDE_SKILL_DIR}/scripts/rebrand-check.mjs map. - Run each app's build command from the map once, before any edit.
Check: you have the map, a CHECK hit count to work down, and a result for every build. A build that already failed is noted as not caused by the rebrand.
1. Names and wordmark
Brand config files, the logo component, the web app manifest, and any settings row a seed writes (an email sender name often lives there). Leave package names, env variable names, database names, Docker volumes and storage prefixes alone unless asked: renaming them breaks installs and existing data.
Check: CHECK shows 0 hits under "brand config". The infra hits you kept go in the report.
2. Colours
Brand tokens in the theme files the map lists, light and dark, plus the browser theme colour in the manifest or viewport. No colour is written into a component.
Check: CHECK with --old "#oldhex" for each old brand colour shows 0 hits, and text
on the new colour keeps a 4.5:1 contrast in both themes.
3. Logo and icon files
Replace the wordmark, mark, favicon, app icons and share image the map lists. Keep file names and sizes, or update every reference. Open each new file and look at it.
Check: CHECK reports 0 picture paths missing from public/, and no file or folder name with the old name except ones you kept on purpose.
4. Copy in every locale
Rewrite, do not just rename: hero, about, footer, legal, support, SEO, and any sentence that describes the old business. Same keys in every locale, each language written natively.
Check: CHECK shows 0 hits under "messages", and no locale or message file has the new name in one language but not in another.
5. Metadata and SEO
Root and page layouts, generateMetadata, title templates, Open Graph and Twitter
fields, JSON-LD, sitemap, robots, manifest name and short_name.
Check: CHECK shows 0 hits under "metadata and SEO".
6. Emails
Sender name, subjects, header and footer, links, in every language the API sends. The sender address and domain come from env: list them in the report.
Check: CHECK shows 0 hits under "emails".
7. Seed and mock data
Seeders, fixtures and mock catalogues: products, categories, settings rows, demo account email domains, image paths. The API seed and any frontend mock data agree.
Check: CHECK shows 0 hits under "seed data".
8. Build and final check
Run every app's build command again. Fix errors until each passes. Do not start a dev or production server unless asked.
Check: every build exits 0, then CHECK prints Result: PASS.
Report
Files changed per step, the choices made for anything the brief left out, each allowed hit and why, the build results, and what is left for a person: domain, DNS, email sender, legal texts.