Internationalization
Marketing prefix vs docs prefix.
Locales are defined once in packages/i18n/src/config.ts: en, id, default en. Each app applies that list differently.
Marketing — URL prefix
next-intl localePrefix: "always". Every page is /en/... or /id/.... Switching language uses the next-intl router (router.replace(pathname, { locale })).
Docs — URL prefix (Fumadocs)
This app does not use next-intl. Fumadocs defineI18n + createI18nMiddleware prefix every page (/en, /id/setup). MDX files use the dot parser: setup.mdx (English) and setup.id.mdx (Indonesian). Missing Indonesian files fall back to English (fallbackLanguage: "en").
Help Center and marketing Docs links open this site with the locale already in the path:
{NEXT_PUBLIC_DOCS_URL}/id
{NEXT_PUBLIC_DOCS_URL}/en/setupYou do not need ?locale= on docs URLs.
packages/i18n still includes SaaS message catalogs for the leftover kit packages. There is no dashboard app in this repo to consume them.