From 4b7dad1fcd9cbd69684a6c7affb711a97d72f73f Mon Sep 17 00:00:00 2001 From: MaiTamDev Date: Sat, 3 Jan 2026 00:37:12 +0700 Subject: [PATCH 1/2] Improve SafetyToolkit accessibility --- app/components/SafetyToolkit.tsx | 111 +++++++++++++++++++++++++++++++ app/page.tsx | 30 +++++++++ 2 files changed, 141 insertions(+) create mode 100644 app/components/SafetyToolkit.tsx diff --git a/app/components/SafetyToolkit.tsx b/app/components/SafetyToolkit.tsx new file mode 100644 index 0000000..eaaaeab --- /dev/null +++ b/app/components/SafetyToolkit.tsx @@ -0,0 +1,111 @@ +'use client' + +import { motion } from 'framer-motion' +import { Bell, Download, Users, ScanSearch } from 'lucide-react' +import { useRouter } from 'next/navigation' +import { useTranslation } from '../lib/i18n/LanguageContext' + +const cards = [ + { + icon: ScanSearch, + action: '/scan', + color: 'from-blue-500/20 via-cyan-500/10 to-blue-600/20', + title: { + vi: 'Kiểm tra tức thì', + en: 'Instant check' + }, + description: { + vi: 'Quét URL, hình ảnh hoặc tin nhắn đáng ngờ chỉ với một cú nhấp.', + en: 'Scan suspicious links, images, or messages in one tap.' + } + }, + { + icon: Bell, + action: '/alerts', + color: 'from-amber-500/15 via-orange-500/10 to-amber-600/15', + title: { + vi: 'Cảnh báo nóng', + en: 'Live alerts' + }, + description: { + vi: 'Cập nhật xu hướng lừa đảo mới nhất để tránh các chiêu trò mới.', + en: 'Stay ahead of emerging scam trends with fresh alerts.' + } + }, + { + icon: Download, + action: '/extension', + color: 'from-emerald-500/15 via-green-500/10 to-emerald-600/15', + title: { + vi: 'Cài extension', + en: 'Install extension' + }, + description: { + vi: 'Bảo vệ trình duyệt 24/7 với cảnh báo và kiểm tra tự động.', + en: 'Get always-on browser protection with automatic checks.' + } + }, + { + icon: Users, + action: '/community', + color: 'from-indigo-500/15 via-purple-500/10 to-indigo-600/15', + title: { + vi: 'Cộng đồng hỗ trợ', + en: 'Community support' + }, + description: { + vi: 'Học kinh nghiệm thực chiến từ cộng đồng và chuyên gia.', + en: 'Learn real-world tips from peers and experts.' + } + } +] + +export default function SafetyToolkit() { + const router = useRouter() + const { language } = useTranslation() + + return ( +
+ {cards.map((card, index) => { + const Icon = card.icon + + return ( + router.push(card.action)} + type="button" + initial={{ opacity: 0, y: 12 }} + whileInView={{ opacity: 1, y: 0 }} + viewport={{ once: true }} + transition={{ delay: index * 0.05 }} + aria-label={language === 'vi' ? card.title.vi : card.title.en} + className="relative overflow-hidden rounded-2xl border border-white/10 bg-white/5 p-5 text-left shadow-lg backdrop-blur-xl transition hover:-translate-y-1 hover:border-white/20" + > +
+
+
+ +
+
+
+ + {index + 1 < 10 ? `0${index + 1}` : index + 1} + +

+ {language === 'vi' ? 'Bước tiếp theo' : 'Next step'} +

+
+

+ {language === 'vi' ? card.title.vi : card.title.en} +

+

+ {language === 'vi' ? card.description.vi : card.description.en} +

+
+
+ + ) + })} +
+ ) +} diff --git a/app/page.tsx b/app/page.tsx index 54a05eb..ddda683 100644 --- a/app/page.tsx +++ b/app/page.tsx @@ -24,6 +24,7 @@ import FeatureShowcase from './components/FeatureShowcase' import TestimonialCarousel from './components/TestimonialCarousel' import ScamTypeCards from './components/ScamTypeCards' import TypewriterText from './components/TypewriterText' +import SafetyToolkit from './components/SafetyToolkit' import { useRouter } from 'next/navigation' import { useTranslation } from './lib/i18n/LanguageContext' @@ -573,6 +574,35 @@ export default function Home() {
+ {/* Safety Toolkit Section - NEW */} +
+
+ +
+

+ {language === 'vi' ? 'Tăng tốc an toàn' : 'Accelerate your safety'} +

+

+ {language === 'vi' + ? 'Chọn bước tiếp theo để tận dụng tối đa bộ công cụ chống lừa đảo.' + : 'Pick your next move to get the most from the anti-scam toolkit.'} +

+
+
+ + {language === 'vi' ? 'Đề xuất thông minh' : 'Smart recommendations'} +
+
+ + +
+
+ {/* Testimonials Section - NEW */}
From cd6ce60aa7bd7bc59e478114942f8e4970d9f050 Mon Sep 17 00:00:00 2001 From: MaiTamDev Date: Sat, 3 Jan 2026 00:46:26 +0700 Subject: [PATCH 2/2] Fix SafetyToolkit markup formatting --- app/components/SafetyToolkit.tsx | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/app/components/SafetyToolkit.tsx b/app/components/SafetyToolkit.tsx index eaaaeab..e5a9f5c 100644 --- a/app/components/SafetyToolkit.tsx +++ b/app/components/SafetyToolkit.tsx @@ -69,18 +69,18 @@ export default function SafetyToolkit() { {cards.map((card, index) => { const Icon = card.icon - return ( - router.push(card.action)} - type="button" - initial={{ opacity: 0, y: 12 }} - whileInView={{ opacity: 1, y: 0 }} - viewport={{ once: true }} - transition={{ delay: index * 0.05 }} - aria-label={language === 'vi' ? card.title.vi : card.title.en} - className="relative overflow-hidden rounded-2xl border border-white/10 bg-white/5 p-5 text-left shadow-lg backdrop-blur-xl transition hover:-translate-y-1 hover:border-white/20" - > + return ( + router.push(card.action)} + type="button" + initial={{ opacity: 0, y: 12 }} + whileInView={{ opacity: 1, y: 0 }} + viewport={{ once: true }} + transition={{ delay: index * 0.05 }} + aria-label={language === 'vi' ? card.title.vi : card.title.en} + className="relative overflow-hidden rounded-2xl border border-white/10 bg-white/5 p-5 text-left shadow-lg backdrop-blur-xl transition hover:-translate-y-1 hover:border-white/20" + >