From 5db698be8b82238bb70222694902385a26feda4f Mon Sep 17 00:00:00 2001 From: Ho Ngoc Hai Date: Sun, 4 Jan 2026 16:00:36 +0700 Subject: [PATCH] =?UTF-8?q?feat:=20Th=C3=AAm=20th=C3=A0nh=20ph=E1=BA=A7n?= =?UTF-8?q?=20footer,=20lo=E1=BA=A1i=20b=E1=BB=8F=20bi=E1=BB=83u=20t=C6=B0?= =?UTF-8?q?=E1=BB=A3ng=20c=E1=BB=9D=20kh=E1=BB=8Fi=20b=E1=BB=99=20chuy?= =?UTF-8?q?=E1=BB=83n=20=C4=91=E1=BB=95i=20ng=C3=B4n=20ng=E1=BB=AF,=20v?= =?UTF-8?q?=C3=A0=20c=E1=BA=A3i=20thi=E1=BB=87n=20an=20to=C3=A0n=20SSR=20c?= =?UTF-8?q?ho=20ng=E1=BB=AF=20c=E1=BA=A3nh=20ch=E1=BB=A7=20=C4=91=E1=BB=81?= =?UTF-8?q?.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/web-client/src/app/page.tsx | 176 +++++++------- .../src/components/layout/footer.tsx | 219 ++++++++++++++++++ .../src/components/ui/language-switcher.tsx | 44 ++-- .../components/ui/theme-toggle-enhanced.tsx | 19 +- .../web-client/src/contexts/theme-context.tsx | 8 +- apps/web-client/src/i18n/messages/en.json | 19 ++ apps/web-client/src/i18n/messages/vi.json | 19 ++ 7 files changed, 385 insertions(+), 119 deletions(-) create mode 100644 apps/web-client/src/components/layout/footer.tsx diff --git a/apps/web-client/src/app/page.tsx b/apps/web-client/src/app/page.tsx index e210bd72..3b588a6f 100644 --- a/apps/web-client/src/app/page.tsx +++ b/apps/web-client/src/app/page.tsx @@ -5,6 +5,9 @@ import { useEffect, useState } from 'react'; import { useTranslation } from '@/hooks/use-translation'; import { BrandLogo } from '@/components/ui/brand-logo'; import { Button } from '@/components/ui/button'; +import { Footer } from '@/components/layout/footer'; +import { NavigationHeader } from '@/components/layout/navigation-header'; +import { Zap, Building, Code } from 'lucide-react'; /** * EN: Home page component - main application entry point with brand elements @@ -56,101 +59,104 @@ export default function Home() { } return ( - // EN: Main content area with brand gradient background - // VI: Khu vực nội dung chính với background gradient thương hiệu -
- {/* EN: Brand gradient overlay / VI: Overlay gradient thương hiệu */} -
+ <> + + {/* EN: Main content area with brand gradient background / VI: Khu vực nội dung chính với background gradient thương hiệu */} +
+ {/* EN: Brand gradient overlay / VI: Overlay gradient thương hiệu */} +
- {/* EN: Decorative brand dots / VI: Chấm trang trí thương hiệu */} -
-
-
+ {/* EN: Decorative brand dots / VI: Chấm trang trí thương hiệu */} +
+
+
-
- {/* EN: Brand Logo / VI: Logo thương hiệu */} -
- -
+
+ {/* EN: Brand Logo / VI: Logo thương hiệu */} +
+ +
- {/* EN: Hero Title / VI: Tiêu đề Hero */} -

- {t('home.title')} -

+ {/* EN: Hero Title / VI: Tiêu đề Hero */} +

+ {t('home.title')} +

- {/* EN: Subtitle/Description / VI: Phụ đề/Mô tả */} -

- {t('home.description')} -

+ {/* EN: Subtitle/Description / VI: Phụ đề/Mô tả */} +

+ {t('home.description')} +

- {/* EN: Conditional rendering based on authentication status / VI: Render có điều kiện dựa trên trạng thái xác thực */} -
- {isAuthenticated && user ? ( - // EN: Authenticated user welcome message / VI: Thông báo chào mừng người dùng đã xác thực -
-
- {user.email?.[0].toUpperCase()} + {/* EN: Conditional rendering based on authentication status / VI: Render có điều kiện dựa trên trạng thái xác thực */} +
+ {isAuthenticated && user ? ( + // EN: Authenticated user welcome message / VI: Thông báo chào mừng người dùng đã xác thực +
+
+ {user.email?.[0].toUpperCase()} +
+

+ {t('home.welcome', { email: user.email })} +

+
+ + {t('home.role', { role: user.role })} +
-

- {t('home.welcome', { email: user.email })} -

-
- - {t('home.role', { role: user.role })} + ) : ( + // EN: Login prompt for unauthenticated users / VI: Nhắc đăng nhập cho người dùng chưa xác thực +
+

+ {t('home.pleaseLogin')} +

+
+ + +
-
- ) : ( - // EN: Login prompt for unauthenticated users / VI: Nhắc đăng nhập cho người dùng chưa xác thực -
-

- {t('home.pleaseLogin')} -

-
-
+ + {/* EN: Feature highlights / VI: Điểm nổi bật tính năng */} + {!isAuthenticated && ( +
+ {[ + { title: 'Fast Development', icon: Zap, desc: 'Build and deploy in minutes' }, + { title: 'Enterprise Ready', icon: Building, desc: 'Production-grade platform' }, + { title: 'Developer First', icon: Code, desc: 'Built for modern teams' }, + ].map((feature, index) => ( +
- Get Started - - -
+
+ +
+

+ {feature.title} +

+

{feature.desc}

+
+ ))}
)}
- - {/* EN: Feature highlights / VI: Điểm nổi bật tính năng */} - {!isAuthenticated && ( -
- {[ - { title: 'Fast Development', icon: '⚡', desc: 'Build and deploy in minutes' }, - { title: 'Enterprise Ready', icon: '🏢', desc: 'Production-grade platform' }, - { title: 'Developer First', icon: '💻', desc: 'Built for modern teams' }, - ].map((feature, index) => ( -
-
- {feature.icon} -
-

- {feature.title} -

-

{feature.desc}

-
- ))} -
- )} -
-
+
+