.agents/skills/vercel-react-view-transitions/SKILL.md
React View Transitions and Next.js App Router route continuity. Use for page or route transitions, shared element morphs, React ViewTransition usage, list-to-detail navigation polish, and navigation motion across admin, donor, or missionary surfaces — without fighting motion/react.
npx skillsauth add asymmetric-al/core vercel-react-view-transitionsInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Browser-native View Transitions coordinated by React’s <ViewTransition> (see React docs). In this repo they complement — do not replace — motion/react (@asym/lib/motion, docs/ai/skills/motion, docs/ai/skills/anim).
Use this skill when:
MCShell, missionary AppShell, donor public/dashboard layouts).name on source + destination).motion entrance on the same block).Do not use this skill when:
/web-studio — keep that path free of extra client boundaries (admin already bypasses MCShell there).motion + anim instead.| Concern | Location |
| ------------------------------- | ------------------------------------------------------------------------------------ |
| Next flag | experimental.viewTransition: true in each app next.config.ts |
| Rollout flag | NEXT_PUBLIC_VIEW_TRANSITIONS_ENABLED in @asym/env + .env.example |
| Capability + naming helpers | @asym/lib/view-transitions |
| Route boundary + shared wrapper | @asym/ui/components/view-transitions |
| Global VT animation classes | packages/ui/styles/globals.css (asym-vt-*) |
| Shell insertion | Admin apps/admin/app/mc-shell.tsx <main> |
| | Missionary apps/missionary/components/app-shell.tsx |
| | Donor apps/donor/app/(public)/layout.tsx + donor-dashboard layout |
| Page header vs VT | PageShell quiets motion when inside route VT (useWithinViewTransitionRouteLayer) |
View Transitions run only when all are true:
NEXT_PUBLIC_VIEW_TRANSITIONS_ENABLED=true (validated via @asym/env).document.startViewTransition (see clientDocumentSupportsViewTransitions()).useReducedMotion() from @asym/lib/motion).Otherwise render plain children — no broken navigation, no hydration tricks.
<ViewTransition> from react (Next 16 bundles the compatible React channel). Load types via import {} from "react/experimental" in client files that need canary typings.default, enter, exit, share, update, and optional name for shared morphs — see @types/react/canary.d.ts in this repo.default="none" and opt into specific triggers to avoid noisy cross-fades on every Suspense tick (upstream skill guidance).addTransitionType exists for typed animations; Next.js-specific automatic transition typing is still evolving — read bundled .next-docs/.../viewTransition.mdx before relying on framework wiring.<main> / content column only, not <html> or full provider trees.<ViewTransition> must be the first DOM wrapper for enter/exit on that subtree (no extra parent div above it for those triggers — our RouteMainViewTransitionBoundary puts the optional className on an inner div inside <ViewTransition>).name at a time. Use deterministic builders in @asym/lib/view-transitions (e.g. worker-hero:${id})./web-studio content with the route boundary (already excluded in MCShell).AnimatePresence, dialogs, staggered cards, feed reactions.PageShell already disables its header motion when useWithinViewTransitionRouteLayer() is true. Apply the same pattern elsewhere (context lives in @asym/lib/view-transitions/context).prefers-reduced-motion (wrappers return plain children; CSS @media (prefers-reduced-motion: reduce) zeroes VT animations in globals.css).ViewTransition, Next.js App Router view-transition work, list/detail navigation polish across apps/admin, apps/donor, apps/missionary.experimental.viewTransition is enabled for the target app.NEXT_PUBLIC_VIEW_TRANSITIONS_ENABLED=true).RouteMainViewTransitionBoundary./web-studio, auth redirects, and reduced motion.@asym/ui boundaries instead of one-off per-app VT wrappersname is deterministic and matches on both endsmotion entrance on the same node as route VTbun run skills:sync && bun run skills:verifyreferences/upstream.md.next-docs/01-app/03-api-reference/05-config/01-next-config-js/viewTransition.mdxdocs/ai/skills/motion/SKILL.md, docs/ai/skills/anim/SKILL.mddevelopment
Use when working with Payload CMS projects (payload.config.ts, collections, fields, hooks, access control, Payload API). Use when debugging validation errors, security issues, relationship queries, transactions, or hook behavior.
testing
Use when CI tests fail on main branch after PR merge, or when investigating flaky test failures in CI environments
tools
Use when new translation keys are added to packages to generate new translations strings
data-ai
Pointer to the canonical agent instruction and skill system for this monorepo