# Coffee Shop Frontend

Dự án Frontend cho hệ thống đặt món cà phê, xây dựng bằng Next.js App Router,
React 19, TypeScript và Tailwind CSS v4.

---

## Mô Tả Dự Án

Giao diện người dùng (frontend) cho hệ thống đặt và bán đồ uống trực tuyến.

### Tính Năng Hiện Tại

#### 1. **Trang Đăng Nhập & Đăng Ký** (app/(main)/login, app/(main)/register)

- Form đăng nhập với validation (username, password)
- Form đăng ký với xác thực OTP
- Lưu trữ thông tin người dùng trong localStorage
- Hỗ trợ 3 loại tài khoản: Manager, Staff, Customer
- Hiển thị thông tin shop trong form

#### 2. **Trang Khám Phá Quán Nước** (app/(feed)/feed)

- Danh sách các quán cà phê
- Tìm kiếm theo tên quán và địa chỉ
- Thẻ quán với ảnh, địa chỉ, nút "Xem menu"
- Responsive layout (grid 1/2/3 cột)
- Empty state khi không tìm thấy quán

#### 3. **Trang Chính - Duyệt Thực Đơn** (app/(main))

Dành cho khách hàng:

- Sidebar collapsible (64px/240px) - danh mục sản phẩm
- Grid sản phẩm responsive (1-5 cột tuỳ thiết bị)
- Tìm kiếm món theo tên / mô tả
- Xem card sản phẩm với giá và nút "Mua"
- Lọc tự động theo trạng thái available
- Mobile menu: scrollable category tabs (< md)

#### 4. **Hệ Thống Giỏ Hàng** (lib/cart-context.tsx)

- Lưu trữ trạng thái giỏ trong localStorage
- Thêm/xóa/tăng/giảm số lượng sản phẩm
- Tính tổng giá và số mặt hàng
- Persist dữ liệu giữa các session

#### 5. **Hệ Thống Xác Thực** (lib/auth-context.tsx)

- Quản lý trạng thái người dùng (login/logout/register)
- Lưu thông tin user trong localStorage
- Mock auth database với 3 loại tài khoản
- Hỗ trợ hoàn tất đăng ký qua OTP

#### 6. **Hệ Thống Danh Mục** (lib/menu-context.tsx)

- Chia sẻ trạng thái category giữa Header mobile và Sidebar
- Tự động clear search khi thay đổi category

---

## Cách Chạy Dự Án

### Yêu cầu hệ thống

- Node.js >= 18
- pnpm (khuyến nghị) hoặc npm

### Cài đặt

```bash
pnpm install
```

### Dev

```bash
pnpm dev
```

Mở trình duyệt tại http://localhost:3000

### Build

```bash
pnpm build && pnpm start
```

### Lint

```bash
pnpm lint
```

---

## Cấu Trúc Thư Mục

```
frondend/
+-- app/                   # Next.js App Router
|   +-- layout.tsx         # Root layout + Header + Footer
|   +-- globals.css        # CSS design tokens + Tailwind import
|   +-- providers.tsx      # Context providers (Auth, Menu, Cart)
|   +-- APP.md             # Tài liệu chi tiết về routes
|   +-- (main)/            # Main route group
|   |   +-- layout.tsx     # Main layout
|   |   +-- page.tsx       # Trang chính - duyệt thực đơn
|   |   +-- login/page.tsx # Trang đăng nhập
|   |   +-- register/page.tsx # Trang đăng ký
|   |   +-- payment/page.tsx # Trang thanh toán
|   +-- (feed)/            # Feed route group
|       +-- layout.tsx     # Feed layout
|       +-- feed/page.tsx  # Trang khám phá quán nước
+-- components/            # Shared UI components
|   +-- Navbar.tsx         # Sidebar danh mục (collapsible)
|   +-- CartProduct.tsx    # Card sản phẩm
|   +-- CartFab.tsx        # FAB - nút giỏ hàng floating
|   +-- COMPONENTS.md      # Tài liệu chi tiết components & contexts
+-- layouts/               # Layout-level components
|   +-- header.tsx         # Sticky top header + auth demo
|   +-- footer.tsx         # Footer + shop info
|   +-- LAYOUTS.md         # Tài liệu chi tiết layouts
+-- lib/                   # Shared logic & data
|   +-- constants.ts       # Mock data (products, shops, users, shop info)
|   +-- types.ts           # TypeScript interfaces
|   +-- auth-context.tsx   # Authentication context & provider
|   +-- cart-context.tsx   # Shopping cart context & provider
|   +-- menu-context.tsx   # Menu/Category context & provider
|   +-- LIB.md             # Tài liệu chi tiết về lib
+-- types/                 # Global TypeScript declarations
|   +-- css.d.ts           # CSS module type shim
+-- public/                # Static assets
|   +-- imgs/
|   |   +-- logo.png
|   |   +-- products/      # Ảnh sản phẩm
|   +-- favicon/
+-- WORKFLOW.md            # Tài liệu kiến trúc tổng thể & quy trình
+-- README.md              # (file này) - Mô tả dự án
+-- TODO.md                # Danh sách tính năng hoàn thành & chưa làm
+-- next.config.ts
+-- tsconfig.json
+-- postcss.config.mjs
+-- eslint.config.mjs
+-- package.json
+-- pnpm-workspace.yaml
```

---

## Công Nghệ Sử Dụng

| Công nghệ    | Phiên bản | Mục đích                              |
| ------------ | --------- | ------------------------------------- |
| Next.js      | 16.1.7    | React Framework (App Router)          |
| React        | 19.2.3    | Thư viện UI                           |
| TypeScript   | ^5        | Kiểu dữ liệu tĩnh                     |
| Tailwind CSS | ^4        | Utility-first CSS framework           |
| Geist Font   | -         | Font chữ (Google Fonts via next/font) |
| FontAwesome  | 6.7.2     | Icon library (CDN)                    |
| pnpm         | -         | Package manager                       |
| ESLint       | ^9        | Linting                               |

---

## Ghi Chú Phát Triển

### Điểm Vào Chính

- **Trang Chủ (User):** `app/(main)/page.tsx` - Duyệt thực đơn
- **Trang Khám Phá:** `app/(feed)/feed/page.tsx` - Khám phá quán
- **Đăng Nhập:** `app/(main)/login/page.tsx`
- **Đăng Ký:** `app/(main)/register/page.tsx`

### Design & Styling

- Design tokens (CSS variables) định nghĩa trong `app/globals.css`
- Tailwind CSS v4 + custom properties cho consistent color/spacing
- Dark mode: biến CSS đã chuẩn bị sẵn nhưng chưa kích hoạt
- FontAwesome icons từ CDN

### Data & Integration

- Mock data nằm trong `lib/constants.ts`
- Context providers trong `app/providers.tsx` - Sử dụng: AuthProvider,
  MenuProvider, CartProvider
- Thay bằng API calls khi backend sẵn sàng
- Ảnh sản phẩm: thêm vào `public/imgs/products/`

### Tài Liệu Chi Tiết

- **WORKFLOW.md** - Kiến trúc tổng thể, data flow, quy trình phát triển
- **APP.md** - Chi tiết các routes, layouts, pages
- **COMPONENTS.md** - Tài liệu từng component + contexts
- **LAYOUTS.md** - Header, Footer, responsive behavior
- **LIB.md** - Constants, Types, Contexts
