Skip to content

feat(app): public app/[lang] routes — locale migration L1 - #172

Merged
mkayander merged 1 commit into
mainfrom
cursor/locale-migration-l1-8f0a
Aug 22, 2026
Merged

feat(app): public app/[lang] routes — locale migration L1#172
mkayander merged 1 commit into
mainfrom
cursor/locale-migration-l1-8f0a

Conversation

@mkayander

Copy link
Copy Markdown
Owner

Summary

Locale migration L1: add indexable public app/[lang]/* routes mirroring the internal-marketing App Router pilots, while Pages Router + next.config i18n remain canonical for unprefixed URLs until L2.

  • app/[lang]/ — home, privacy, daily, playground, profile (shared views + metadata)
  • locale-app/LocaleAppLayout, publicAppMetadata, publicPageMetadataFromTranslation
  • proxy.ts — locale header for /:locale and /:locale/:path*
  • playgroundRoute.tsappLocalePlaygroundBasePath for /{lang}/playground
  • E2ee2e/app-locale-routes.spec.ts (5 tests: indexable marketing routes + noindex profile)
  • previewSmoke.ts — smoke paths for /en, /en/privacy, /en/daily, /en/playground

Notes

  • Profile pages stay noindex, follow (matches existing Pages SiteSeoHead behavior).
  • Removed generateStaticParams from app/[lang]/layout — combining SSG params with force-dynamic caused a Next 16.3 build failure on /ar/daily while Pages i18n is still enabled.
  • Internal-marketing pilot refactored to use shared LocaleAppLayout (still noindex).
  • Phase 1 (16.3.2) marked complete in Instant-Navigations-TODO.md.

Testing

  • pnpm lint — pass
  • pnpm test — 455 unit tests pass
  • pnpm build — pass
  • pnpm test:e2e — 12/12 pass locally (7 pilot + 5 app-locale)

Next (L2)

Rewrites/redirects from Pages to App for default-locale URLs; then retire duplicate Pages marketing routes (L3).

Open in Web Open in Cursor 

Mirror internal-marketing pilots under indexable app/[lang]/* paths with
shared LocaleAppLayout and publicAppMetadata helpers. Extend proxy locale
header, playground route parsing, preview smoke, and Playwright e2e.

Profile pages stay noindex (matches Pages Router). Skip generateStaticParams
on [lang] layout to avoid Next 16.3 SSG conflict with Pages i18n.
@vercel

vercel Bot commented Aug 22, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
dstruct Ready Ready Preview Aug 22, 2026 8:08pm

@mkayander
mkayander marked this pull request as ready for review August 22, 2026 20:12
@mkayander
mkayander merged commit 5b2c777 into main Aug 22, 2026
7 checks passed
github-actions Bot pushed a commit that referenced this pull request Aug 22, 2026
# [1.384.0](v1.383.0...v1.384.0) (2026-08-22)

### Features

* **app:** add public app/[lang] routes for locale migration L1 ([#172](#172)) ([5b2c777](5b2c777))
@github-actions

Copy link
Copy Markdown

🎉 This PR is included in version 1.384.0 🎉

The release is available on GitHub release

Your semantic-release bot 📦🚀

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants