Website giới thiệu và bán sản phẩm thiên nhiên — Next.js 15 + TypeScript + Tailwind + shadcn/ui.
- Node.js ≥ 20 (đã test trên v24)
- npm (đi kèm Node)
npm install
npm run dev| Lệnh | Tác dụng |
|---|---|
npm run dev |
Chạy server phát triển (hot-reload) |
npm run build |
Build production |
npm run start |
Chạy server production (cần build trước) |
npm run typecheck |
Kiểm tra TypeScript không lỗi |
npm run lint |
Lint code |
app/ Routes Next.js (App Router)
├ page.tsx Trang chủ
├ san-pham/ Trang sản phẩm + chi tiết
├ nhom/[nhom]/ Trang nhóm sản phẩm
├ blog/ Trang cẩm nang
├ cau-hoi-thuong-gap/
├ ve-bioglowvn/
├ lien-he/
├ sitemap.ts Tự sinh sitemap.xml
└ robots.ts Tự sinh robots.txt
components/ Components tái sử dụng
├ ui/ shadcn-style components (Button, Card, Tabs...)
├ header.tsx Header có Zalo/SDT
├ footer.tsx
├ product-card.tsx
└ ...
data/ TOÀN BỘ DỮ LIỆU SHOP — sửa ở đây
├ site-config.ts Tên shop, SDT, Zalo, email
├ products.ts Danh sách sản phẩm
├ categories.ts 4 nhóm sản phẩm
├ faq.ts Câu hỏi thường gặp
└ blog.ts Bài blog
lib/utils.ts Hàm tiện ích chung
public/ Ảnh tĩnh (logo, favicon, ảnh sản phẩm)
└ products/<slug>/1.jpg, 2.jpg...
Mở data/site-config.ts — chỉnh các trường:
export const siteConfig = {
name: "BioGlowVN",
contact: {
phone: "0373478587",
phoneDisplay: "0373 478 587",
zalo: "0373478587",
email: "", // điền email nếu có
workingHours: "8:00 - 22:00 hằng ngày",
},
...
};Mở data/products.ts và thêm vào mảng products. Mỗi sản phẩm cần:
{
slug: "ten-san-pham", // URL: /san-pham/ten-san-pham (không dấu, không khoảng trắng)
name: "Tên sản phẩm",
subtitle: "Mô tả 1 dòng",
category: "suc-khoe", // dinh-duong | thiet-yeu | suc-khoe | my-pham
shortDesc: "Mô tả ngắn 1-2 câu",
longDesc: "Mô tả dài...",
price: 500000, // VND, hoặc null nếu liên hệ
images: ["/products/ten-san-pham/1.jpg"],
featured: true, // true để hiện trên trang chủ
}- Lưu ảnh vào
public/products/<slug>/1.jpg,2.jpg... - Thêm đường dẫn vào trường
imagescủa sản phẩm
Nếu chưa có ảnh, để mảng images: [] — site sẽ tự hiện placeholder.
Mở data/blog.ts, thêm vào mảng blogPosts. Nội dung viết bằng markdown đơn giản (##, ###, - cho bullet, **text** cho in đậm).
Mở data/faq.ts.
- Màu:
tailwind.config.ts, mụccolors - Font:
app/layout.tsx, đổiBe_Vietnam_Pro/Loratheo font Google Fonts khác
- Tạo tài khoản tại https://vercel.com/signup
- Cài đặt Vercel CLI:
npm i -g vercel
- Trong thư mục dự án, chạy:
vercel
- Đăng nhập, chọn "link to existing project" → "no" để tạo mới
- Vercel tự build và cấp URL dạng
bioglowvn.vercel.app
- Mua domain (ví dụ Mắt Bão, PA Việt Nam, Namecheap)
- Trong dashboard Vercel → project → Settings → Domains → Add
- Làm theo hướng dẫn cấu hình DNS của Vercel
Sửa nội dung trong các file ở data/ rồi:
git add .
git commit -m "Cập nhật sản phẩm"
git pushVercel tự động build và deploy mỗi lần push.
Site hiện có 12 sản phẩm mẫu thuộc 4 nhóm:
- Dinh dưỡng (Green Quantum, Caphelink, Vhealth Chocolate, Vhealth Trà Xanh)
- Sức khoẻ (TOPAPRO, VSPORTGEL)
- Thiết yếu (VSMILE)
- Mỹ phẩm (Orico Cleanser, Toner, Micellar, Moisturizer, Sun Screen)
Có thể thêm các sản phẩm khác bằng cách sửa data/products.ts — code không cần thay đổi gì.
- Form liên hệ hiện gọi mailto: (cần điền email vào
site-config.ts). Nếu email trống, form sẽ chuyển hướng sang Zalo. - Mặc định cỡ chữ body 17px — dễ đọc cho khách lớn tuổi.
- Mọi trang đều có metadata SEO + Open Graph; trang sản phẩm có JSON-LD
Product; trang FAQ có JSON-LDFAQPage.
Site hiển thị disclaimer "Thực phẩm bảo vệ sức khoẻ không phải là thuốc..." ở footer và trên trang sản phẩm có ô "Lưu ý". Đây là yêu cầu khi quảng cáo TPCN tại Việt Nam.