Next.js disallows cookie writes inside Server Components, so the handoff
exchange had to move to a Route Handler. But a route.ts cannot coexist
with a sibling page.tsx in the same segment, so the handler now lives at
/activate/handoff/[token]/route.ts and the page.tsx at /activate/[token]
becomes a stale-link error page.
Additional fixes:
- Use an explicit relative Location header (Location: /) on the success
redirect instead of NextResponse.redirect(new URL("/", req.url)). In
dev, req.url resolves to the canonical host and can differ from the
host the user came in on (127.0.0.1 vs localhost), causing cookies set
on the response to drop on cross-host follow.
- Same fix for the error redirect to /activate/error.
- New /activate/error/page.tsx renders the failure UI from the ?reason=
query string.
- /activate/[token]/route.ts (the original location) is preserved as
route.ts.disabled so Next does not register it and the prior segment's
page.tsx can take over the error UI for stale links.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Turborepo starter
This Turborepo starter is maintained by the Turborepo core team.
Using this example
Run the following command:
npx create-turbo@latest
What's inside?
This Turborepo includes the following packages/apps:
Apps and Packages
docs: a Next.js appweb: another Next.js app@repo/ui: a stub React component library shared by bothwebanddocsapplications@repo/eslint-config:eslintconfigurations (includeseslint-config-nextandeslint-config-prettier)@repo/typescript-config:tsconfig.jsons used throughout the monorepo
Each package/app is 100% TypeScript.
Utilities
This Turborepo has some additional tools already setup for you:
- TypeScript for static type checking
- ESLint for code linting
- Prettier for code formatting
Build
To build all apps and packages, run the following command:
With global turbo installed (recommended):
cd my-turborepo
turbo build
Without global turbo, use your package manager:
cd my-turborepo
npx turbo build
yarn dlx turbo build
pnpm exec turbo build
You can build a specific package by using a filter:
With global turbo installed:
turbo build --filter=docs
Without global turbo:
npx turbo build --filter=docs
yarn exec turbo build --filter=docs
pnpm exec turbo build --filter=docs
Develop
To develop all apps and packages, run the following command:
With global turbo installed (recommended):
cd my-turborepo
turbo dev
Without global turbo, use your package manager:
cd my-turborepo
npx turbo dev
yarn exec turbo dev
pnpm exec turbo dev
You can develop a specific package by using a filter:
With global turbo installed:
turbo dev --filter=web
Without global turbo:
npx turbo dev --filter=web
yarn exec turbo dev --filter=web
pnpm exec turbo dev --filter=web
Remote Caching
Tip
Vercel Remote Cache is free for all plans. Get started today at vercel.com.
Turborepo can use a technique known as Remote Caching to share cache artifacts across machines, enabling you to share build caches with your team and CI/CD pipelines.
By default, Turborepo will cache locally. To enable Remote Caching you will need an account with Vercel. If you don't have an account you can create one, then enter the following commands:
With global turbo installed (recommended):
cd my-turborepo
turbo login
Without global turbo, use your package manager:
cd my-turborepo
npx turbo login
yarn exec turbo login
pnpm exec turbo login
This will authenticate the Turborepo CLI with your Vercel account.
Next, you can link your Turborepo to your Remote Cache by running the following command from the root of your Turborepo:
With global turbo installed:
turbo link
Without global turbo:
npx turbo link
yarn exec turbo link
pnpm exec turbo link
Useful Links
Learn more about the power of Turborepo: