Ứng dụng web hiện đại dành cho cộng đồng Locket Widget - Chia sẻ ảnh và video ngay lập tức từ trình duyệt
🌐 Demo Trực Tiếp | 📱 Repo Frontend | 💬 Telegram | 📖 Tài Liệu
- ✨ Tính Năng
- 🚀 Demo
- 🛠️ Cài Đặt
- ⚙️ Cấu Hình
- 🏗️ Công Nghệ
- 📁 Cấu Trúc Dự Án
- 🔧 Tham Khảo API
- 🤝 Đóng Góp
- 👥 Tác Giả
- 🙏 Lời Cảm Ơn
- 📞 Hỗ Trợ
- 🚀 Đăng Nhập Nhanh - Hệ thống xác thực đơn giản và an toàn
- 🔒 Bảo Mật Dữ Liệu - Không lưu trữ dữ liệu người dùng, ưu tiên quyền riêng tư
- 🛡️ Phiên Bảo Mật - Xác thực dựa trên JWT token
- 🔐 Bảo Vệ Route - Bảo mật cấp độ đường dẫn
- 📷 Truy Cập Camera Trực Tiếp - Chụp ảnh ngay trong trình duyệt
- 🎥 Quay Video HD - Quay video chất lượng cao
- 🔄 Chuyển Đổi Camera - Hỗ trợ camera trước/sau trên di động
- ⚡ Xem Trước Thời Gian Thực - Live camera feed với điều khiển
- 📂 Tải File Lên - Upload từ thư viện thiết bị
- 👁️ Xem Trước Media - Xem trước nội dung trước khi chia sẻ
- ✂️ Cắt Thông Minh - Cắt vuông với lựa chọn tùy chỉnh
- 📝 Caption Tùy Chỉnh - Thêm tin nhắn cá nhân hóa
- ❤️ Tương Tác - Hệ thống thả cảm xúc tương tác
- 📱 Thiết Kế Responsive - Hoạt động trên mọi thiết bị và kích thước màn hình
- 🌙 Giao Diện Hiện Đại - Interface sạch sẽ, trực quan
- ⚡ Hiệu Suất Nhanh - Được tối ưu hóa với Vite bundler
- 🔮 Animation Mượt Mà - Được hỗ trợ bởi Framer Motion
- 📊 Lịch Sử Moment - Xem lại các khoảnh khắc đã chia sẻ
- 🔔 Thông Báo Đẩy - Thông báo thời gian thực qua Firebase
- 💾 Hỗ Trợ Offline - IndexedDB cho chức năng offline
- 🌐 PWA Sẵn Sàng - Khả năng Progressive Web App
- ☁️ Lưu Trữ Đám Mây - Tích hợp Cloudinary cho media
- 🎯 Theo Dõi Hiệu Suất - Analytics tích hợp sẵn
Trước khi bắt đầu, hãy đảm bảo bạn đã cài đặt:
- Node.js >= 18.0.0
- npm >= 8.0.0 hoặc yarn >= 1.22.0
- Git để quản lý phiên bản
git clone https://github.com/doi2523/Client-Locket-Dio.git
cd Client-Locket-DioSử dụng npm:
npm installSử dụng yarn:
yarn installnpm run dev
# hoặc
yarn devMở http://localhost:5173 để xem trong trình duyệt.
npm run build
# hoặc
yarn buildnpm run preview
# hoặc
yarn previewTạo file .env trong thư mục gốc:
# =========================
# 🌐 Cấu Hình API
# =========================
# API chính cho logic, moments, users
VITE_BASE_API_URL=https://apilocket-diov2.onrender.com
# API test cơ sở dữ liệu
VITE_DATA_API_URL=https://data.locket-dio.com
#API upload phương tiện lên cloud
VITE_STORAGE_API_URL=https://storage.locket-dio.com
# =========================
# 🔔 Thông Báo Đẩy
# =========================
# VAPID public key cho web push notifications
VITE_VAPID_PUBLIC_KEY=your_vapid_public_key_hereClient-Locket-Dio/
├── 📂 public/ # Tài nguyên tĩnh, truy cập trực tiếp
│ ├── 📁 images/ # Ảnh minh họa, biểu tượng
│ ├── 📄 favicon.ico # Icon website
│ ├── 📄 manifest.json # Thông tin PWA (Progressive Web App)
│ └── 📄 robots.txt # Quy tắc crawl cho bot tìm kiếm
│
├── 📂 src/ # Mã nguồn chính
│ ├── 📁 assets/ # Ảnh, font, video dùng trong code
│ ├── 📁 components/ # Các thành phần UI tái sử dụng
│ │ ├── 📁 common/ # Các UI nhỏ như Button, Modal, Icon
│ │ ├── 📁 camera/ # Component Camera, Recorder
│ │ ├── 📁 media/ # Preview, Editor, Upload
│ │ └── 📁 auth/ # Đăng nhập, đăng ký, xác thực
│ │
│ ├── 📁 context/ # React Context: Auth, Theme, AppState...
│ ├── 📁 cache/ # Setting cache với indexDB...
│ ├── 📁 config/ # Cài đặt kết nối...
│ ├── 📁 hooks/ # Custom hooks: useAuth, useTheme...
│ ├── 📁 layout/ # MainLayout, LocketLayout...
│ ├── 📁 pages/ # Các trang chính: Home, Login, Moment...
│ ├── 📁 routes/ # Định tuyến React Router
│ ├── 📁 services/ # Gọi API (axios/fetch)
│ ├── 📁 lib/ # Cấu trúc axios, fetch...
│ ├── 📁 utils/ # Hàm tiện ích: formatDate, validate...
│ ├── 📁 constants/ # Biến cấu hình, enums, routes...
│ ├── 📁 styles/ # CSS/tailwind bổ sung (nếu cần)
│ │ └── global.css
│ │
│ ├── ⚙️ App.jsx # App chính, chứa Router & Layout
│ ├── ⚙️ main.jsx # Entry Point chính
│ ├── ⚙️ sw.jsx # Service Worker (PWA, push...)
│ └── 📄 index.css # CSS toàn cục (import Tailwind)
│
├── 📄 .env # Biến môi trường thực tế (không commit)
├── 📄 .env.example # Biến môi trường mẫu
├── 📄 .gitignore # Bỏ qua file khi push Git
├── 📄 README.md # Mô tả dự án
│
├── 📦 package.json # Danh sách thư viện và script
├── 📦 package-lock.json # Khóa phiên bản chính xác
│
├── ⚙️ vite.config.js # Cấu hình Vite và PWA
├── 🎨 tailwind.config.js # Cấu hình Tailwind CSS
├── 🔥 firebase.json # Cấu hình Firebase (hosting, rewrites)
| Package | Phiên Bản | Mô Tả |
|---|---|---|
| Frontend Framework | ||
react |
^18.2.0 | Thư viện React để xây dựng UI |
react-dom |
^18.2.0 | React DOM renderer |
react-router-dom |
^7.2.0 | Client-side routing |
| Styling & Animation | ||
@tailwindcss/vite |
^4.0.9 | Tailwind CSS cho styling |
lucide-react |
^0.476.0 | Thư viện icon đẹp |
| Backend Integration | ||
firebase |
^11.9.0 | Firebase SDK cho backend services |
axios |
^1.8.1 | HTTP client cho API calls |
jwt-decode |
^4.0.0 | JWT token decoder |
| Media & Storage | ||
dexie |
^4.0.11 | IndexedDB wrapper cho offline storage |
react-easy-crop |
^5.4.2 | Component cắt hình ảnh |
| UI/UX Enhancement | ||
react-toastify |
^11.0.5 | Hệ thống toast notification |
POST /locket/loginV2
Content-Type: application/json
{
"username": "string",
"password": "string"
}POST /locket/postMomentV2
Authorization: Bearer {token}
Content-Type: application/json
{
"model": "Version-UploadmediaV3.1",
"mediaInfo": {
"url": "https://cdn.example.com/path/to/file.jpg",
"path": "user_uploads/abc123.jpg",
"name": "abc123.jpg",
"size": 194203,
"contentType": "image/jpeg",
"timeCreated": "2025-07-24T14:30:00Z",
"type": "image"
},
"options": {
"caption": "Caption tuỳ chọn",
"overlay_id": "abc123",
"type": "caption_theme",
"icon": "❤️",
"text_color": "#FFFFFF",
"color_top": "#000000",
"color_bottom": "#FF0000",
"audience": "selected",
"recipients": ["uid1", "uid2"],
"music": "https://cdn.example.com/music.mp3"
}
}Chúng tôi yêu thích những đóng góp! Vui lòng đọc Hướng Dẫn Đóng Góp để tìm hiểu về quy trình phát triển, cách đề xuất sửa lỗi và cải tiến.
- Fork repository này
- Clone fork của bạn:
git clone https://github.com/doi2523/Client-Locket-Dio.git - Cài đặt dependencies:
npm install - Tạo branch:
git checkout -b feature/new-feature-babi - Thực hiện thay đổi của bạn
- Test thay đổi:
npm run test - Commit thay đổi:
git commit -m 'Thêm tính năng tuyệt vời' - Push lên branch:
git push origin feature/tinh-nang-tuyet-voi - Mở Pull Request
- Tuân theo style code hiện có
- Viết commit message rõ ràng
- Thêm test cho tính năng mới
- Cập nhật tài liệu khi cần
- Đảm bảo tất cả test pass trước khi submit PR
Khi báo cáo lỗi, vui lòng bao gồm:
- Mô tả vấn đề
- Các bước tái hiện vấn đề
- Hành vi mong đợi
- Screenshots (nếu có)
- Chi tiết môi trường (OS, trình duyệt, phiên bản)
- 🎨 Chỉnh Sửa Hình Ảnh Nâng Cao - Bộ lọc và hiệu ứng cho ảnh/video
- 🌙 Hệ Thống Theme - Chế độ Dark/Light với nhiều theme
- 🔔 Thông Báo Nâng Cao - Hệ thống push notification tiên tiến
- 📱 Progressive Web App - Triển khai PWA đầy đủ
- 🔍 Tìm Kiếm & Khám Phá - Tìm và khám phá moments
- 👥 Tính Năng Xã Hội - Bạn bè, nhóm và chia sẻ
- 🎨 Cảm Hứng Thiết Kế - Xu hướng thiết kế web hiện đại và mẫu trải nghiệm người dùng
- 📚 Cộng Đồng Open Source - Cho những thư viện và công cụ tuyệt vời
- 🔥 Đội Ngũ Firebase - Vì đã cung cấp dịch vụ fontend xuất sắc
- ☁️ Clouflare - Cho giải pháp quản lý media đáng tin cậy
- 💡 Cộng Đồng Locket Widget - Vì cảm hứng và phản hồi
- 🌟 Contributors - Mọi người đã đóng góp cho dự án này
- Email: doibncm2003@gmail.com
- Website: https://locket-dio.com
- Telegram: @ddevdio
- GitHub: @doi2523
🔒 Ưu Tiên Quyền Riêng Tư: Ứng dụng này tuân theo phương pháp ưu tiên quyền riêng tư. Chúng tôi không lưu trữ dữ liệu người dùng không cần thiết.
🔧 Trạng Thái Backend: Dịch vụ backend hiện đang ở chế độ riêng tư và chứa các thành phần nội bộ chưa sẵn sàng để phát hành công khai.
🌟 Phát Triển Tích Cực: Dự án này được duy trì và cập nhật thường xuyên.
Được tạo với ❤️ bởi Dio | © 2025 Locket Dio | Tất cả quyền được bảo lưu




