Brand Configuration
Replace the name, logo, homepage copy, and app settings with your product's identity.
Make the running app feel like your product. Start with the name and logo, then edit the homepage copy and choose the features you want to expose.
Before You Start
Finish Quick Start and keep the local server running. Prepare your product name, a short description, logo, and support address. File paths are relative to your selected application's root.
1. Set Your Product Name
Open packages/config/src/i18n.ts. In both locale entries, replace:
| Field | Where your users see it |
|---|---|
appName | Logo label and product identity |
summary, description, keywords | Public metadata and product descriptions |
docsAlias | Documentation title |
Keep the existing locale keys and surrounding structure. Give English and Chinese their own descriptions rather than changing only one language.
2. Replace the Images
Replace these files in your selected app's public/ directory:
| File | Purpose |
|---|---|
icon.png | Header logo and default email logo |
favicon.ico, favicon.svg, favicons/* | Browser and installed-app icons; favicons/og.png is the social preview |
images/hero-light.png, images/hero-dark.png | Homepage product screenshots |
Keep filenames if you want to reuse existing references. Check both light and dark mode screenshots.
3. Write Your Homepage Copy
Put your product copy in both packages/i18n/src/translations/en/mvp.json and zh/mvp.json. Keep default.json unchanged so template updates remain easier to merge.
This example uses the actual homepage keys. Merge it into your existing mvp.json, rather than replacing other copy:
{
"home": {
"hero": {
"mainTitle1": "Acme",
"mainTitle2": "Turn ideas into finished work",
"mainDescription": "A workspace for your next product."
}
}
}Use the same keys with Chinese copy in the Chinese file. The same overlay approach works for navigation, FAQ, and mail subjects. See Languages and Translations.
4. Set Your Language and Support Address
Edit your app's .env.local:
NEXT_PUBLIC_SITE_URL="http://localhost:3000"
NEXT_PUBLIC_DEFAULT_LOCALE="en"
NEXT_PUBLIC_EMAIL_SUPPORT="[email protected]"
CONTACT_FORM_TO="[email protected]"Use zh for a Chinese-first product. Keep the local origin during development; replace it with your HTTPS domain on deployment. Keep .env.local and .dev.vars aligned. Restart the dev server after environment changes.
CONTACT_FORM_TO is the receiving inbox. To actually send contact messages, configure Email.
5. Choose Your App Features
Edit the existing config in packages/config/src/index.ts; do not replace the entire object with a partial example.
| What you want to change | Setting |
|---|---|
| Hide pricing until you are ready to charge | payments.enableBilling = false |
| Show free or enterprise plans | payments.enableFree, payments.enableEnterprise |
| Require first-login onboarding | users.enableSetup |
| Show password/social/2FA controls | auth.gates.allowPasswordSignIn, allowSocialSignIn, allowTwoFactorAuth |
| Default to dark mode | ui.defaultTheme = "dark", with dark in ui.enabledThemes |
| Show account deletion | users.showDeleteAccount |
Auth display controls are not a substitute for backend permission checks. For prices, use app src/config/saas/pricing-desc.ts and pricing-desc-usage.ts, then connect your gateway.
Remove unneeded homepage sections and navigation links in their components; see Customize Your Landing Page. Setting billing off hides homepage pricing and redirects /pricing home.
Check Your Result
- Refresh the homepage and confirm the logo, name, and hero copy changed.
- Switch languages and inspect browser metadata, header, footer, and support address.
- Test light and dark mode.
- If billing is off, confirm homepage pricing is hidden and
/pricingreturns home.
Common Problems
| Problem | Fix |
|---|---|
| Header name changed but hero still says MuseMVP | Edit home.hero.* in both mvp.json files as well as locale metadata |
| Environment changes do not appear | Restart dev; rebuild deployed apps after changing NEXT_PUBLIC_* |
| Old favicon remains | Hard-refresh or check in a fresh browser session; confirm all referenced icon files |
| A page is still reachable after hiding its link | Removing navigation does not remove the route; remove the owning route only if the URL must disappear |
Continue with Landing Page, Theme, or App Layout.