All notable changes to this project will be documented in this file.
docs/content-backup/.frontend/app/globals.css with Tailwind v4 @theme.Philosopher and Be Vietnam Pro.service.ts document schema for destination wedding advisory packages.publishedAt to post.ts schema and updated settings.ts with WhatsApp, social links, tagline, and footerText.callout.ts and gallery.ts block schemas to Portable Text.Header, Footer, WhatsAppButton, PostCard, ServiceCard, TableOfContents, and CalloutBox.frontend/sanity/queries/service.ts, updated settings.ts and post.ts GROQ queries, generated brand og-image.jpg (1200x630), and cleaned up theme remnants.vietnamweddingguide.com to weddinginvietnam.com. Set up Cloudflare Email Routing for info@weddinginvietnam.com (forwarding to vietnamweddingguide@gmail.com) and nhivo@vietnamweddingguide.com (forwarding to nhivo2504@gmail.com). Unified all UI, footer, form settings, and API routes to info@weddinginvietnam.com./partnership landing page with complete 8-section architecture (Strategic Edge, Market Context, Monetization Models, Partnership Tiers, Governance Standards, Collaboration Lifecycle, and Interactive Proposal Form).partnershipInquiry schema in Sanity Studio desk structure with status lifecycle management (new, contacted, negotiating, archived) and Lucide Handshake icon./api/partnership route handling both write operations to Sanity Content Lake and instant HTML email dispatches via Resend.bg-brand-gold text-brand-dark) synchronized with Header sticky positioning on scroll."Become a Partner" leading to /partnership./services./contact pointing non-couples/partners to /partnership."Let's Connect".settings to unified info@weddinginvietnam.com.VietnamWeddingMap) highlighting 8 premier wedding destinations (Sapa, Ha Long Bay, Da Nang, Ninh Van Bay, Nha Trang, Dalat, Ho Chi Minh City, Phu Quoc Island) with smooth 4.5s auto-cycling preview cards and waypoint coordinates.gold-gradient-text luxury gradient styling to navbar brand wordmark "Vietnam Wedding Guide".animate-ping) on active destinations in favor of a calm, static luxury gold halo ring.homepage-view.tsx, about-view.tsx, partnership-view.tsx, blog-article-view.tsx, service-detail-view.tsx) from 8+ to 9+ years.fill inside responsive relative aspect-[4/5] w-full wrapper.nhi-vo-portrait.webp from mislabeled PNG into genuine WebP format.unoptimized and explicit style={{ width: "auto" }} to static marquee venue logos and navbar brand mark to guarantee instantaneous rendering and eliminate optimizer lag or timeouts on mobile networks.weddinginvietnam.com and vietnamweddingguide.com.weddinginvietnam.com • vietnamweddingguide.com) as a prominent visual anchor; condensed descriptions by 50% into crisp 1-sentence statements with elegant 01, 02, 03 typography indices.SITE_DOMAINS, FOUNDER_CREDENTIALS, CONTACT_INFO) into frontend/lib/constants/site.ts.FounderBioSection (frontend/components/sections/founder-bio-section.tsx) with 4 distinct luxury variants (editorial, about, card, compact), replacing ~250 lines of duplicate code across 4 templates.LuxuryCTABanner (frontend/components/sections/luxury-cta-banner.tsx), standardizing call-to-actions and eliminating duplicate banner markup across templates.ServiceCard in homepage, PostCard in blog-article) and typed the services prop using SERVICES_QUERY_RESULT.sanity schema extract && sanity typegen generate, adding SERVICE_QUERY_RESULT and SERVICES_QUERY_RESULT to sanity.types.ts and removing loose any return types in frontend/sanity/lib/fetch.ts.author.ts schema with role, bio, and socialLinks (website, linkedin, instagram, whatsapp).slug field to category.ts schema to support category linking and URL routing.categories[]->{ _id, title, slug } and full author fields in POST_QUERY and POSTS_QUERY (frontend/sanity/queries/post.ts).service.ts schema with packages (array of package objects), processSteps (array of step objects), and faqs (references to faq documents).SERVICE_QUERY (frontend/sanity/queries/service.ts) to query packages, process steps, and resolved FAQs.sanity.types.ts with 10 queries and 65 schema types.blog/[slug]/page.tsx and blog-index-view.tsx without manual slug heuristics or any casting.coverImage, features, ctaText, ctaUrl) and dynamic packages/processSteps/faqs in service-detail-view.tsx with graceful fallbacks.ALL_FAQS_QUERY in frontend/sanity/queries/faqs.ts and fetchSanityFaqs helper in frontend/sanity/lib/fetch.ts.ContactPage (app/(main)/contact/page.tsx) to fetch settings and faqs concurrently via Promise.all and pass them to ContactView.ContactView to render dynamic contactEmail and faqs from Sanity CMS with full PortableText support and safe fallbacks.AboutPage (app/(main)/about/page.tsx) to fetch settings and pass them to AboutView.services prop in homepage-view.tsx Section 5 to dynamically populate the 2 service pathways (Couples and Professionals) with title, description, link slug, and CTA text from Sanity CMS while preserving fallback safety.partnership-view.tsx from a 1,204-line monolithic file into 7 clean, dedicated subcomponents in frontend/components/partnership/:PartnershipHeroPartnershipStrategicEdgePartnershipMarketContextPartnershipMonetizationPartnershipTiersPartnershipGovernancePartnershipLifecyclePartnershipInquiryFormpartnership-view.tsx to an elegant ~60-line orchestrator while retaining 100% feature, interaction, and styling parity.npm run build) across all 36/36 static pages with zero errors.services prop in services-view.tsx with dynamic mapping from SERVICES_QUERY_RESULT, preserving fallback to static luxury cards.settings in about-view.tsx for dynamic tagline and passed whatsappNumber dynamically to LuxuryCTABanner.contact-view.tsx, dynamically populated serviceTrack options from fetchSanityServices, passed whatsappNumber to Concierge card and post-submit confirmation links, and removed all residual "business hours" mentions.venue.ts schema in Sanity Studio, registered in desk structure with Lucide Building2, created VENUES_QUERY, and wired into homepage-view.tsx marquee with fallback to curatedVenues.ALL_FAQS_QUERY_RESULT and VENUES_QUERY_RESULT.frontend/lib/constants/partnership.ts.testimonial.ts schema documentation regarding its integration with carousel-2 block, added TESTIMONIALS_QUERY and fetchSanityTestimonials helper.components/templates/*) as the default luxury interface receiving typed CMS data, with Page Builder Blocks (components/blocks/*) as the dynamic CMS override when page.blocks exist.frontend/components/templates/index.ts exporting all 8 bespoke views and their TypeScript props.ARCHITECTURE.md detailing system topology, schema hierarchy, shared components, design guardrails, and Content Editor Standard Operating Procedures (SOP).APP_CONTEXT.md, CONTEXT.md, and master task list.frontend/components/templates/index.ts across all 8 page routes (app/(main)/page.tsx, about/page.tsx, services/page.tsx, contact/page.tsx, partnership/page.tsx, blog/page.tsx, blog/[slug]/page.tsx, services/[slug]/page.tsx), achieving single source of truth for template imports.components/templates/index.ts (HomepageViewProps, ServicesViewProps, ServiceDetailViewProps, BlogIndexViewProps, ArticleData, BlogArticleViewProps).app/(main)/[...slug]/page.tsx: filtered RESERVED_STATIC_SLUGS (index, about, services, contact, partnership, blog) and replaced colliding ["about"] fallback with non-colliding placeholder ["_cms-preview"].any types in ServiceDetailData, ArticleData, and ContactFaqItem, replacing them with strict PortableTextProps["value"] and Sanity typegen definitions.PARTNERSHIP_TIERS constants into partnership-inquiry-form.tsx dropdown options and partnership-view.tsx initial state.vwg-leasing.html and updated CONTEXT.md (unified email to info@weddinginvietnam.com and removed "khung giờ làm việc").services-view.tsx.