Goal
apps/web-vue: a Vue 3 + Vite SPA mirror of apps/web (Next 16). All 42 routes, same NestJS API (VITE_API_URL → :4000/v1), cookie+CSRF auth as-is. Next app stays untouched and authoritative. See apps/web-vue/CONTEXT.md for Mirror/Mirror page glossary.
Decisions (grilled, settled)
- No SSR/Nuxt — apps/web uses zero server features; SPA with
useHead for meta. SEO parity out of scope until demanded.
- shadcn-vue (reka-ui) port of
src/components/ui; Tailwind v4 globals.css tokens copied verbatim; @tailwindcss/vite.
- Library map: react-query→
@tanstack/vue-query; react-hook-form→vee-validate+@vee-validate/zod (zod v4 schemas reused); lucide-react→lucide-vue-next; tiptap→@tiptap/vue-3; react-big-calendar→FullCalendar (restyled; ~90% visual parity accepted); magicui animated-beam/number-ticker→motion-v; react-markdown/MDX→marked; next/image→plain <img>; axios api-client + csrf + api modules copied verbatim (framework-agnostic).
- git-utils dates dropped — API timestamps instead; no build-time git plugin.
- Turbo scripts only — no docker/nginx/CI wiring until deploy.
- Stub-first: the shell ticket registers ALL 42 routes with stub
.vue pages so page tickets never touch shared files (router/package.json) → conflict-free parallel merges.
Ticket graph
T1 scaffold → T2 ui-port → T3 shell+router-stubs → parallel: T4 marketing+legal, T5 shop+cart+checkout, T6 auth, T8 blog, T9 calendar; then T7 orders+account (after T6), T10 admin (after T6); then T11 payments (after T7).
Done when
bun run build green in apps/web-vue, all 42 routes render with mirrored structure/behavior against the api, PR single-branch merged.
Goal
apps/web-vue: a Vue 3 + Vite SPA mirror ofapps/web(Next 16). All 42 routes, same NestJS API (VITE_API_URL→ :4000/v1), cookie+CSRF auth as-is. Next app stays untouched and authoritative. Seeapps/web-vue/CONTEXT.mdfor Mirror/Mirror page glossary.Decisions (grilled, settled)
useHeadfor meta. SEO parity out of scope until demanded.src/components/ui; Tailwind v4globals.csstokens copied verbatim;@tailwindcss/vite.@tanstack/vue-query; react-hook-form→vee-validate+@vee-validate/zod (zod v4 schemas reused); lucide-react→lucide-vue-next; tiptap→@tiptap/vue-3; react-big-calendar→FullCalendar (restyled; ~90% visual parity accepted); magicui animated-beam/number-ticker→motion-v; react-markdown/MDX→marked; next/image→plain<img>; axios api-client + csrf + api modules copied verbatim (framework-agnostic)..vuepages so page tickets never touch shared files (router/package.json) → conflict-free parallel merges.Ticket graph
T1 scaffold → T2 ui-port → T3 shell+router-stubs → parallel: T4 marketing+legal, T5 shop+cart+checkout, T6 auth, T8 blog, T9 calendar; then T7 orders+account (after T6), T10 admin (after T6); then T11 payments (after T7).
Done when
bun run buildgreen in apps/web-vue, all 42 routes render with mirrored structure/behavior against the api, PR single-branch merged.