Day 04 - 18/09/2026 (Remote)

Work completed

Refactored the landing page into a component-based bilingual architecture

  • Consolidated the sections into LandingPage.tsx — both language routes share one UI, receiving the copy and locale through props.
  • Converted 10 components to receive their content via props: Hero, Marquee, Highlights, Story, Menu, Stats, Gallery, Testimonials, Visit, Footer. Each component only receives the exact slice of data it needs (types such as SiteCopy["hero"], SiteCopy["menu"]…), so when the content structure changes, TypeScript reports the error right at the component concerned.
  • Two root layouts via route groups: (en) for / and (vi) for /vi. This gives each language its own <html lang> and metadata — something a single shared layout cannot do. Fonts were extracted into fonts.ts so both layouts share one instance.
  • Declared hreflang: both pages have their own canonical plus an alternate pointing to the other version.
  • Locale-aware price formatting: formatPrice now takes a locale — EN renders 35,000₫, VI renders 35.000₫.
  • Cleanup: removed mock.ts (no longer imported), removed the old layout.tsx/page.tsx, and removed the commented-out legacy code block in Navbar.tsx.
  • Verification: the build succeeds and produces 2 static routes, / and /vi; ESLint is clean; verified on the dev server: correct lang per page, correct title per language, correct translated content, the EN/VI switch pointing the right way, and all 164 images on each route returning 200.