Migration of Vietnam Wedding Guide (weddinginvietnam.com) from Notion-based legacy Next.js setup to Schema UI (Next.js 15+ App Router & Sanity CMS v3).
weddinginvietnam.comstudio.weddinginvietnam.comvietnamweddingguide.com (redirects to primary domain)#FAF8F5 (--color-brand-ivory)#F3EFEA (--color-brand-sand)#C5A880 (--color-brand-gold)#B0936C (--color-brand-gold-hover)#1C1917 (--color-brand-dark)#78716C (--color-brand-muted)#FFFFFF (--color-brand-surface)#E7E2DB (--color-brand-border)Philosopher, serif (--font-title)Be Vietnam Pro, sans-serif (--font-body)::selection { background-color: #C5A880; color: #FFFFFF; }.card-luxury hover lift translateY(-3px) with smooth shadowARCHITECTURE.md.tailwind.config.ts. Toàn bộ brand tokens, CSS variables, và utility classes được định nghĩa tại @theme và @utility trong frontend/app/globals.css.frontend/sanity/queries/, các helper fetch đặt tại frontend/sanity/lib/fetch.ts. Hỗ trợ đầy đủ post, service, page, settings, navigation, venue, faq, testimonial.docs/content-backup/.frontend + studio), cài đặt toàn bộ dependencies (1466 packages), cấu hình typography Google Fonts (Philosopher + Be Vietnam Pro), thiết lập bảng màu luxury brand tokens Tailwind v4 trong frontend/app/globals.css, đồng bộ assets logo & favicon. Đạt 0 lỗi TypeScript tsc --noEmit.post.ts có publishedAt, service.ts cho dịch vụ tư vấn destination wedding, callout.ts viền gold, gallery.ts 2-3 cột cho editorial, settings.ts mở rộng WhatsApp & Social, navigation.ts liên kết Page/Post/Service). Build thành công bản phân phối tĩnh Studio tại studio/dist/ (4.19s) cho domain studio.weddinginvietnam.com. TypeScript type-check đạt 0 lỗi.Header, Footer, WhatsAppButton, PostCard, ServiceCard, TableOfContents, CalloutBox).footerText vào schema settings.ts.tagline, footerText, contactEmail, whatsapp, socialLinks vào SETTINGS_QUERY.publishedAt vào POST_QUERY và POSTS_QUERY (sắp xếp bài viết mới nhất theo ngày phát hành).frontend/sanity/queries/service.ts (SERVICE_QUERY, SERVICES_QUERY, SERVICES_SLUGS_QUERY) và tích hợp helper fetchSanityServiceBySlug, fetchSanityServices vào fetch.ts.Logo.tsx: dọn dẹp useTheme / useEffect dư thừa, tránh rủi ro hydration mismatch.footer.tsx (FooterFallback), mobile-nav.tsx (AlignRight), và chuẩn hóa code block trong portable-text-renderer.tsx sang brand tokens luxury.frontend/public/images/og-image.jpg chuẩn kích thước 1200x630 mang đậm nhận diện thương hiệu VWG.CHANGELOG.md, APP_CONTEXT.md, PROJECT_STATUS.md.Philosopher trên mọi tiêu đề (h1..h6, .font-title) qua @layer base và Google Fonts preconnect trong head./whatsapp (HTTP 307), thay thế toàn bộ liên kết WhatsApp trực tiếp trên UI, loại bỏ triệt để số điện thoại thô +84 908 372 168 khỏi client DOM/HTML nhằm chống web scraping và bot thu thập dữ liệu.weddinginvietnam.com): InterContinental Phu Quoc, InterContinental Danang, Regent Phu Quoc, JW Marriott Saigon, An Lam Retreats Saigon River, Thiskyhall, dựng đúng wireframe gốc với tiêu chuẩn năng lực tổ chức quốc tế và nút so sánh venue qua Advisor./about và link ngoại https://nhivo.io.--webpack cho cả script dev và build trong frontend/package.json để tránh lỗi Turbopack macOS IPC sandbox. next build hoàn thành 100% không lỗi (15/15 pages).@Projects/nhi-nhi-vo-blog (/images/nhi-vo-profile.webp).DESIGN_GUIDELINES.md tại thư mục gốc dự án làm kim chỉ nam thiết kế cho toàn bộ các phase tiếp theo./services/[slug] & /services):ServiceDetailView: Hero với badge đối tượng (For Couples / For Professionals & Venues), tiêu đề font Philosopher, tagline, mô tả ngắn, khung định hướng chi phí, CTA button WhatsApp an toàn và gửi form inquiry.private-consultant, b2b...) và trang /services tổng quan./blog):BlogIndexView: Hero editorial với thanh tìm kiếm bài viết tức thì (instant search).PostCard bo tròn góc rounded-3xl, viền gold hover lift translateY(-3px), tích hợp 9+ bài viết hướng dẫn thực tế từ backup Notion khi CMS chưa nhập liệu.tsc --noEmit đạt 0 lỗi.next build --webpack xuất bản thành công toàn bộ 24/24 static pages.Services trong ServiceDetailView trỏ về đúng trang tổng quan /services (thay vì trỏ về chính nó).text-brand-muted hover:text-brand-gold uppercase text-xs, dấu phân cách subtle, cấp hiện tại dùng text-brand-dark font-semibold.Wedding Guides xuyên suốt Header (desktop-nav, mobile-nav), Footer, Blog Index breadcrumbs, và Blog Article breadcrumbs./blog?tag=venue), Budget Guides (/blog?tag=budget), Destination Guides (/blog?tag=destination), Planning Guides (/blog?tag=planning); bổ sung logic bắt useSearchParams tự động kích hoạt category tab tương ứng trên trang Blog Index./services.components/404.tsx): Tái thiết kế toàn diện với nền Ivory, họa tiết hero-pattern, tiêu đề Philosopher, badge lỗi trang nhã, điều hướng quay về Homepage (/), khám phá Wedding Guides (/blog) và hỗ trợ tức thì qua WhatsApp.ModeToggle dư thừa trong header/index.tsx, typecheck 0 lỗi, production build thành công 24/24 static pages./blog/[slug]):BlogArticleView: Hero bài viết chuẩn luxury editorial với tiêu đề Philosopher, badge tag, thời lượng đọc, ngày xuất bản, thông tin tác giả Nhi Võ, và bộ nút chia sẻ (WhatsApp / Copy Link).vietnam-wedding-guide-part-1 và 8 bài viết backup khác (bao gồm CalloutBox, Advice của VWG, so sánh kịch bản chi phí couple/family/guests, phân tích 8+ hạng mục ngân sách).PostCard), và banner CTA tư vấn WhatsApp sang trọng.generateStaticParams và generateMetadata, loại bỏ hoàn toàn lỗi 404 khi duyệt bài./contact):ContactView và route /contact: Hero sang trọng, bố cục 2 cột.info@weddinginvietnam.com, địa điểm Da Nang/Phu Quoc/Saigon, hỗ trợ linh hoạt theo múi giờ quốc tế, cam kết bảo mật & 100% không hoa hồng ngầm./about):/about với triết lý thương hiệu "From Made in Vietnam to Made by Vietnam", sứ mệnh kép (Cho cặp đôi & Cho ngành cưới), câu chuyện của Founder Nhi Võ và các cột mốc nghề nghiệp (IHG & Je t'aime Art).tsc --noEmit đạt 0 lỗi.next build --webpack xuất bản thành công toàn bộ 31/31 static pages. Chấm dứt triệt để mọi lỗi 404 trên toàn bộ hệ sinh thái menu và thẻ bài viết.nhivo2504@gmail.com (Footer, Contact Page, Studio Settings Schema default).nhivo.io sang https://nhivo.io.vn (Homepage, Services, Blog Article, About, Design Guidelines).frontend/lib/whatsapp.ts chuẩn hóa link https://wa.me/84908372168 với prefilled text ngữ cảnh riêng cho từng trang và CTA (Header, Mobile Nav, Homepage Hero & Venues & Bottom, Services Detail, Blog Article, Floating Concierge qua usePathname()). Thay thế thẻ <Link> bằng thẻ <a> ngoại vi chuẩn HTML để tránh lỗi router interception và CORS của Next.js App Router.service-detail-view.tsx, homepage-view.tsx, blog-index-view.tsx, about/page.tsx, contact-view.tsx, 404.tsx), thay thế bằng typography thanh thoát, trong suốt, giãn chữ tracking-[0.25em], sắc vàng text-brand-gold kèm line kẻ mảnh sang trọng. Tinh giản khung Investment Guidance từ dạng pill thô sang typography tối giản./about): Chuyển trọng tâm trang từ tiểu sử cá nhân sang Tầm Nhìn & Sứ Mệnh Nền Tảng (VWG Platform):https://nhivo.io.vn để tìm hiểu chi tiết.tsc --noEmit), build thành công toàn bộ 31/31 static pages.<Sparkles /> phía trước Top Badges tại tất cả các trang (404.tsx, blog-index-view.tsx, services/page.tsx, homepage-view.tsx, about/page.tsx, service-detail-view.tsx, contact-view.tsx, blog-article-view.tsx), giữ lại typography màu vàng gold sang trọng, thanh mảnh, giãn cách chữ tracking-[0.25em] và đường viền line tinh tế.Philosopher (--font-title) qua @layer base.getWhatsAppUrl và server redirect /whatsapp.https://nhivo.io.vn; email thống nhất nhivo2504@gmail.com.<Image> có width/height khớp file gốc, sizes responsive chuẩn xác, priority đúng ảnh LCP, cấm bật unoptimized.scale-102).tsc --noEmit), Next.js Webpack build thành công 31/31 static routes. Sẵn sàng 100% chuyển giao sang Phase 5 (Nhập liệu Sanity Studio).components/templates/): Tách view của trang /about thành about-view.tsx và trang /services thành services-view.tsx. Toàn bộ 7 view/templates cốt lõi của website hiện được quản lý tập trung và chuẩn mực tại frontend/components/templates/:homepage-view.tsxservices-view.tsxservice-detail-view.tsxblog-index-view.tsxblog-article-view.tsxabout-view.tsxcontact-view.tsx/contact với tone màu Luxury Gold (bg-brand-gold), thay thế việc trỏ nhầm sang WhatsApp trên Header và Mobile Menu.WhatsAppIcon độc lập và màu xanh chuẩn WhatsApp (#25D366), áp dụng đồng bộ trên Header, Mobile Nav, Service Cards, Hero CTAs, Footer và Floating Concierge.inquiry.ts trong Sanity Studio quản lý leads: coupleNames, email, whatsapp, weddingDate, destinationRegion, guestCount, budgetRange, serviceTrack, message, status (new, contacted, booked, archived), internalNotes, submittedAt.studio.weddinginvietnam.com).frontend/app/api/contact/route.ts sử dụng writeClient ghi nhận leads trực tiếp vào Sanity Content Lake hoàn toàn miễn phí (thuộc hạn mức 10k docs, 100k API/tháng của gói Free Sanity, không cần setup SQL DB bên ngoài phức tạp).resend SDK) tới nhivo2504@gmail.com và popup xác nhận kèm Fast-Track WhatsApp CTA tự điền thông tin khách vừa nhập.tsc --noEmit đạt 0 lỗi; next build --webpack xuất bản thành công 32/32 routes.bg-[#25D366]): Xóa bỏ toàn bộ các nút nền xanh neon chói lóa làm phá vỡ phong cách Warm Minimalist Luxury của website (gói dịch vụ, banner CTA, hero, contact card, floating concierge).bg-brand-gold hover:bg-brand-gold-hover text-white) kèm biểu tượng WhatsApp trắng thanh mảnh (w-3.5 h-3.5 fill-white), hài hòa 100% với tiêu đề và badge gold của thẻ.bg-white hover:bg-brand-sand text-brand-dark border border-brand-border hover:border-brand-gold), sử dụng biểu tượng WhatsApp màu xanh nhận diện (fill-[#25D366]) tinh tế, không còn cảm giác thô cứng.bg-white/10 hover:bg-white/20 text-white border border-white/20) điểm xuyết icon WhatsApp xanh #25D366.bg-brand-dark hover:bg-black text-white) kết hợp icon xanh #25D366.bg-white/95 backdrop-blur-md text-brand-dark border border-brand-border hover:border-brand-gold) với đèn trạng thái live pulse xanh và icon WhatsApp xanh #25D366.tsc --noEmit đạt 0 lỗi.next build --webpack xuất bản hoàn tất 32/32 routes tĩnh và động.gdvj8e5j, Nạp Dữ Liệu Cloud Lake & Xác thực Studio:NEXT_PUBLIC_SANITY_PROJECT_ID=gdvj8e5j, dataset production và token vào frontend/.env.local và studio/.env.local. Cấp quyền CORS origin cho http://localhost:3000 với allowCredentials: true qua Sanity Management API. Cấu hình Vite server.host: true trong studio/sanity.cli.ts đảm bảo Studio phục vụ trên mọi địa chỉ mạng local.studio/scripts/generate-seed.mjs và studio/scripts/import-seed.mjs.lexorank tạo chuỗi ranking chuẩn (0|hzzzzz:, 0|i00007:, 0|i0000f:, 0|i0000n:), khắc phục triệt để lỗi parse cảnh báo của @sanity/orderable-document-list.gdvj8e5j:settings: Site name "Vietnam Wedding Guide", tagline, email nhivo2504@gmail.com, whatsapp +84908372168, footerText, socialLinks.navigation: Menu header điều hướng 5 mục chính.author: Hồ sơ tác giả Nhi Võ (author-nhi-vo).category: 4 danh mục chính (Budget & Finance, Destination Guides, Planning Framework, Venue Selection).service: Gói tư vấn Private Couple Consultation và B2B Advisory for Venues & Professionals.post: 3 bài viết hoàn chỉnh (vietnam-wedding-guide-part-1 với Portable Text, Callout, Scenarios, cùng why-vietnam và len-ke-hoach-cuoi).tsc --noEmit) trên cả 2 workspace frontend và studio.http://localhost:3333) hiển thị trực quan toàn bộ cây tài liệu Desk Navigation (Pages, Services, Posts, Categories, Authors, FAQs, Testimonials, Client Inquiries, Navigation, Settings) không còn bất kỳ warning hay lỗi nào.http://localhost:3000) truy vấn trực tiếp và render mượt mà. Sẵn sàng 100% cho Phase 6 (Triển khai Vercel & Subdomain Studio).page-index: Vietnam Wedding Guide (Homepage) (slug: "index")page-about: About Our Platform (slug: "about")page-services: Advisory Services (slug: "services")page-blog: Wedding Guides (slug: "blog")page-contact: Connect with Senior Advisory (slug: "contact")faq-independent-vs-planner, faq-our-fee-model, faq-vendor-review, faq-remote-couples, faq-response-time, faq-first-consultation, faq-budget-range, faq-when-to-start, faq-vietnam-vs-others) có thể reference dùng chung giữa các trang.testimonial-sophie-marcus, testimonial-ellie-james, testimonial-charlotte-liam) tích hợp trực tiếp qua block carousel-2.app/(main)/about/page.tsx, app/(main)/services/page.tsx, app/(main)/blog/page.tsx, app/(main)/contact/page.tsx.generateMetadata: Tự động đọc SEO Title & Description từ Sanity page document, fallback về metadata mặc định nếu chưa cấu hình.blocks[], tự động render qua <Blocks>; nếu chưa có block nào (blocks: []), hiển thị mượt mà template chuyên biệt đã tối ưu (AboutView, ServicesView, BlogIndexView, ContactView).tsc --noEmit đạt 0 lỗi trên cả Frontend và Studio.http://localhost:3000) và Studio (http://localhost:3333)./, /about, /services, /blog, /contact) phản hồi HTTP 200, SanityLive tự động cập nhật cache thời gian thực.studio/scripts/import-all-notion-posts.mjs.docs/content-backup/) gồm: Case Study Siêu tiệc Ấn Độ, Chọn lựa Wedding Planner, The Compass Lên kế hoạch cưới, Ngân sách tiệc cưới Phần 1 & Phần 2, Tại sao chọn Việt Nam, Vietnam Wedding Guide Part 1, The Compass Framework, Top Questions Answered, Wedding Regrets, Why Vietnam.studio/defaultDocumentNode.ts: Bổ sung service vào previewSchemaTypes và cấu hình route preview /services/${slug}.studio/presentation/resolve.ts: Bổ sung location resolver và filter documents cho /services/:slug.tsc --noEmit đạt 0 lỗi trên cả Frontend và Studio.next build --webpack thành công 100%. Toàn bộ 11 bài viết mới và các trang dịch vụ đều được tạo route tĩnh và partial prerender hoàn hảo.frontend/components/portable-text-renderer.tsx):preprocessPortableText tự động phát hiện và chuyển đổi:Scenario 1, 2, 3 và Nếu hai bạn..., Nếu gia đình..., Nếu chi phí...) thành scenariosGrid hiển thị dạng lưới 3 cột (card-luxury) với badge nổi bật Advantage / Lợi ích và Trade-off / Thách thức.<details><summary> và các định dạng Callout: từ Notion thành component CalloutBox viền vàng gold sang trọng.> và > *** thành blockquote chuẩn luxury với viền gold và nền sand nhẹ.CheckCircle2) trong vòng tròn cát thương hiệu (bg-brand-sand).pageId:, customPath:, createdTime:...) và các tiêu đề H1/H2 lặp lại vô nghĩa ở đầu bài viết.scenariosGrid trong Sanity Studio:studio/schemas/blocks/shared/scenarios-grid.ts và đăng ký vào block-content.ts cùng schema-types.ts.studio/scripts/cleanup-post-blocks.mjs trên toàn bộ 12 bài viết trong dataset production.vietnam-wedding-guide-part-1 và vietnam-wedding-guide-part-2.ngan-sach-tiec-cuoi-cao-cap-viet-nam-phan-1, phan-2) trên http://localhost:3000/blog/... đều hiển thị đầy đủ lưới 3 cột, hộp CalloutBox viền gold, blockquote và bullet checkmark sắc nét.vietnam-wedding-guide-part-2, wedding-framework-project-managment, case-study--siu-tic-ci-n sang trạng thái Draft (drafts.<id>).wedding-regrets và len-ke-hoach-cuoi khỏi Sanity và fallbacks code.vietnam-wedding-guide-part-1 là bài viết Featured Spotlight chủ lực với badge ⭐ [Featured] trong Studio và Hero Spotlight trên /blog.nhivo2504/vwg-blog-v2 (Private) qua GitHub API.nhivo2504/vwg-blog-v2 nhánh main.studio/vercel.json định tuyến SPA fallback cho Sanity Studio khi host tại studio.weddinginvietnam.com.https://weddinginvietnam.com, https://www.weddinginvietnam.com, và https://studio.weddinginvietnam.com vào allowed CORS origins trên Sanity Management API.frame-ancestors trong frontend/next.config.mjs cho phép nhúng preview iframe từ https://studio.weddinginvietnam.com.frontend (next build) và studio (sanity build) đều biên dịch 100% thành công.Projects/landingpage_WIV_domain.html:#1C1917 (--color-brand-dark), viền gold sang trọng #C5A880 (--color-brand-gold), chữ cái W font Philosopher-Bold.favicon.ico đa tầng (16x16, 32x32, 48x48), favicon-96x96.png, apple-touch-icon.png (180x180), web-app-manifest-192x192.png, web-app-manifest-512x512.png, vwg-icon-favicon.webp, cùng file định tuyến App Router app/favicon.ico, app/icon.png, app/apple-icon.png.frontend/public/site.webmanifest với tên ứng dụng "Vietnam Wedding Guide" và theme_color / background_color #1C1917.frontend/app/layout.tsx khai báo metadata.icons và metadata.manifest theo chuẩn Next.js App Router.Biên dịch & Kiểm thử:
corepack pnpm --filter frontend build thành công 100% không cảnh báo (34/34 static routes). Next.js tự động tối ưu hóa và xuất ○ /apple-icon.png, ○ /icon.png.2026-09-25 [AG]: Chuẩn hóa toàn bộ hệ thống Contact Email & Kiến trúc Domain kép:
weddinginvietnam.com (quản lý DNS trên Cloudflare, phục vụ Next.js production).studio.weddinginvietnam.com (quản lý nội dung Sanity Studio).vietnamweddingguide.com (đưa vào Cloudflare, cấu hình Redirect Rules 301 tự động bảo lưu full path và bảo đảm SSL HTTPS chuyển hướng về https://weddinginvietnam.com).info@weddinginvietnam.com: Email liên hệ & biên tập công khai thống nhất trên toàn website (Footer, Contact, B2B Partnership, Sanity Settings default). Chuyển tiếp (forward) tự động qua Cloudflare về hòm thư vietnamweddingguide@gmail.com.nhivo@vietnamweddingguide.com: Email định danh cá nhân của Founder. Chuyển tiếp tự động qua Cloudflare về hòm thư nhivo2504@gmail.com./api/contact, /api/partnership):Vietnam Wedding Guide <info@weddinginvietnam.com>.vietnamweddingguide@gmail.com (hoặc biến môi trường CONTACT_NOTIFICATION_EMAIL).replyTo trực tiếp tới email khách hàng điền trong form để admin phản hồi nhanh 1-click từ Gmail.Biên dịch & Kiểm thử:
frontend Next.js 16.2.10: tsc --noEmit 0 lỗi, xuất bản 36/36 static pages.studio Sanity Studio: Biên dịch thành công 100%.2026-09-25 [AG]: Triển khai hoàn chỉnh tính năng Strategic Partnership & Tinh chỉnh Trải nghiệm Thương hiệu (Phase 7):
Biên dịch & Xác Minh:
2026-09-25 [AG]: Triển khai Bản đồ Tương tác Hero & Chuẩn hóa Typography Tinh tế (Phase 8):
VietnamWeddingMap):✦, <Award>, <Handshake>, <Plus>, dot pulse...) nhằm giữ trọn vẹn nét thanh lịch chuẩn typography editorial cao cấp.gold-gradient-text) đồng bộ cho tên thương hiệu "Vietnam Wedding Guide" trên Navbar giống hiệu ứng "Curated Venue".Biên dịch & Kiểm thử:
next build --webpack thành công 100% với 36/36 static pages prerendered, 0 lỗi TypeScript hay linting.2026-09-26 [AG]: Hoàn thiện Phase 9 (Cập nhật 9+ năm kinh nghiệm Founder, Tối ưu độ tin cậy hiển thị ảnh trên Mobile & Đại tu Section 6.5 Hợp tác Chiến lược):
homepage-view.tsx, about-view.tsx, partnership-view.tsx, blog-article-view.tsx, và service-detail-view.tsx.flex + w-full h-full của ảnh chân dung Founder bằng container relative aspect-[4/5] w-full và <Image fill ... />.nhi-vo-portrait.webp (vốn là file định dạng PNG bị đổi đuôi .webp) thành chuẩn WebP đích thực qua cwebp.unoptimized và style={{ width: "auto" }} cho 6 logo venue đối tác trong dải marquee và logo nhận diện thương hiệu trên header để triệt tiêu độ trễ xử lý của proxy /_next/image, chống hiện tượng ảnh bị giật/mất hình trên kết nối di động..com vô giá (weddinginvietnam.com & vietnamweddingguide.com) vào mô tả chính thức của section.next build --webpack thành công 100% (36/36 static pages, 0 lỗi TypeScript).