Rebrand
Every place the name "CrabStack", the logo, the colours, the page metadata and the email sender live. There is no brand generator: every file below is edited by hand, and two are regenerated afterwards.
Find them yourself with:
git grep -n -i crabstack -- . ':!docs' ':!*.md' ':!*package-lock.json'
Name and metadata (frontend)
frontend/app/layout.tsx: the site-widemetadata(title,description,openGraph.siteName).frontend/app/page.tsx: the landing page'smetadata, the logo text in the nav and the footer, and all the landing copy.- Page titles of the form
'... | CrabStack'and the logo link at the top of each page:app/settings/page.tsx,app/signin/page.tsx,app/signin/SignInForm.tsx,app/pricing/page.tsx,app/billing/success/page.tsx,app/blog/page.tsx,app/blog/[slug]/page.tsx,app/privacy/page.tsx,app/terms/page.tsx. frontend/app/llms.txt/route.ts: the text served at/llms.txt.
Logo and icons
frontend/app/icon.svg: the favicon.frontend/app/apple-icon.tsx: the iOS home-screen icon, drawn in code.frontend/app/opengraph-image.tsx: the social preview card (APP_NAME,TAGLINE,STACK, colours, mark).twitter-image.tsxre-exports it.frontend/public/rocketman.svg: the illustration on the 404 page (app/not-found.tsx).
The three icon files share one placeholder mark; change all three. The
apple icon and the social card are rendered by Next.js at build time, so
there is no image file to replace unless you delete the .tsx and drop in
an apple-icon.png or opengraph-image.png instead.
Colours
frontend/app/styles/_palette.scss: every SASS module reads its colours from here.- These copy palette values by hand and must be changed with it:
frontend/app/globals.css(page background),themeColorinfrontend/app/layout.tsx, the constants at the top offrontend/app/opengraph-image.tsxandfrontend/app/apple-icon.tsx, and thefillinfrontend/app/icon.svg.
Email sender
SMTP_FROM(backend app mail) andEMAIL_FROM(magic-link mail): set them in your deploy's env. The defaults,[email protected], are inbackend/.env.example,frontend/.env.exampleanddocker-compose.yml.frontend/lib/magic-link-email.ts: the sign-in email's markup and button colour.backend/src/scripts/seed.ts: the sample campaigns' subject and body (seed data only).
Backend and API
backend/src/main.tsandbackend/scripts/dump-openapi.ts: the API title and description (setTitle,setDescription). Change both, then regenerateopenapi.jsonand the frontend types (step 8 of recipe 1), or verify fails on drift.backend/src/mcp-admin/mcp-admin.service.ts,mcp-admin-tools.service.tsandmcp-admin.module.ts: the admin MCP server's name, description, instructions and OAuth consent page title.
Leave these alone
LICENSE: the licence you received the template under. The grep above lists it, but it is a legal document, not branding.[email protected]inbackend/migrations/003_*,006_*andsrc/mcp-admin/mcp-admin-user.constants.ts: the identity of a row already in your database. It is never shown to users.- The database name
crabstackand the compose project name indocker-compose.yml,deploy/and.github/workflows/ci.yml: renaming them points a running deploy at a new, empty database and volume. Change them only on a fresh install, and in every file at once. nameinbackend/package.jsonandfrontend/package.json, and the comments indeploy/andverify.sh: harmless to change, never seen by users.
Afterwards
Run npm run format in backend/ and frontend/: a shorter name can let
prettier join a wrapped line, and format:check fails otherwise. Then run
./verify.sh.
What the test run found
Replacing "CrabStack" with "Acme" in every file under "Name and
metadata", "Backend and API" and the email sender defaults, then
regenerating openapi.json and the types, failed verify once at
format:check (src/mcp-admin/mcp-admin.module.ts, where the shorter
title fitted on one line). After npm run format: verify all green. No
spec asserts the brand name.
Related
- Environment Variables -
SMTP_FROMandEMAIL_FROM