#Product Pages
Each product lives under public/products/[slug]/ and is rendered as static
localized routes.
#Product file structure
Minimum recommended structure:
public/products/[slug]/
config.json
locales/en-US.json
privacy.md
terms.md
icons/icon.png
og-image.png
Optional:
screenshots/[locale]/phone/*.pngscreenshots/[locale]/tablet/*.png
#Routes generated for each product
/{locale}/{product}: product detail page/{defaultLocale}/{product}/privacy-policy: privacy page/{defaultLocale}/{product}/terms-of-use: terms page/{locale}/{product}/contact: contact page (when eligible)
Note:
- Privacy and Terms routes are generated for the default locale only.
- Locale availability for detail pages follows product locale support settings.
#Contact page and email receiving
The contact route is available only when the product has store identifiers:
appStoreAppId, orpackageName, orbundleId
Behavior:
- SMTP configured: form sends email through server action + Nodemailer.
- SMTP missing: contact page shows a mailto fallback button.
For SMTP setup, see Email Contact Setup.
#Setup checklist for a new product
- Add
public/products/[slug]/config.json. - Add at least one locale file in
public/products/[slug]/locales/. - Add legal documents:
privacy.md,terms.md. - Add icon:
icons/icon.pngand optionalog-image.png. - Run
yarn devand verify all routes.