Quản lý ảnh Cloudinary
Admin upload ảnh sản phẩm lên Cloudinary với preset tối ưu.
Trang thương mại điện tử thực phẩm tươi sống full-stack tích hợp giỏ hàng thông minh, theo dõi đơn hàng và quản lý phương tiện truyền thông qua Cloudinary.
Tự động tính giá sản phẩm, phí vận chuyển và số lượng.
Admin upload ảnh sản phẩm lên Cloudinary với preset tối ưu.
Khách hàng theo dõi trạng thái đơn từ đặt hàng đến giao thành công.
Admin thêm/sửa/xóa sản phẩm, danh mục, ảnh và thông tin bán hàng.
Đăng ký, đăng nhập, quản lý tài khoản và địa chỉ giao hàng.
Người mua đánh giá sản phẩm, giúp trang bán hàng có dữ liệu phản hồi.
Admin cập nhật trạng thái đơn, hỗ trợ flow từ đặt hàng tới giao thành công.
Backend tách controller, routes, models, middleware và services để dễ bảo trì.
Tự động tính giá sản phẩm, phí vận chuyển và số lượng.
Admin upload ảnh sản phẩm lên Cloudinary với preset tối ưu.
Khách hàng theo dõi trạng thái đơn từ đặt hàng đến giao thành công.
Admin thêm/sửa/xóa sản phẩm, danh mục, ảnh và thông tin bán hàng.
Đăng ký, đăng nhập, quản lý tài khoản và địa chỉ giao hàng.
Người mua đánh giá sản phẩm, giúp trang bán hàng có dữ liệu phản hồi.
Admin cập nhật trạng thái đơn, hỗ trợ flow từ đặt hàng tới giao thành công.
Backend tách controller, routes, models, middleware và services để dễ bảo trì.
FruitHub là bước nâng cấp sau các landing page bán hàng: không chỉ hiển thị sản phẩm mà có auth, cart, order, review và admin.
Khách hàng cần tìm sản phẩm, thêm giỏ, đặt hàng, theo dõi đơn và review; admin cần quản lý sản phẩm, ảnh, đơn và user.
Thực phẩm tươi cần ảnh sản phẩm tốt, trạng thái đơn dễ hiểu, giỏ hàng chính xác và quản trị nhanh.
React 19/Tailwind ở client, Node/Express/MongoDB/Mongoose ở server, Cloudinary cho media và JWT/bcrypt cho auth.
Server có controllers, models, routes, middlewares, services và utils, giúp project đáng tin hơn cấu trúc demo một file.
FruitHub giúp tôi luyện các nghiệp vụ web phổ biến trong một app hoàn chỉnh: auth, CRUD, upload, cart, order và admin.
FruitHub là bước nâng cấp sau các landing page bán hàng: không chỉ hiển thị sản phẩm mà có auth, cart, order, review và admin.
Khách hàng cần tìm sản phẩm, thêm giỏ, đặt hàng, theo dõi đơn và review; admin cần quản lý sản phẩm, ảnh, đơn và user.
Thực phẩm tươi cần ảnh sản phẩm tốt, trạng thái đơn dễ hiểu, giỏ hàng chính xác và quản trị nhanh.
React 19/Tailwind ở client, Node/Express/MongoDB/Mongoose ở server, Cloudinary cho media và JWT/bcrypt cho auth.
Server có controllers, models, routes, middlewares, services và utils, giúp project đáng tin hơn cấu trúc demo một file.
FruitHub giúp tôi luyện các nghiệp vụ web phổ biến trong một app hoàn chỉnh: auth, CRUD, upload, cart, order và admin.
Giỏ hàng cần đồng bộ số lượng, tổng tiền, phí vận chuyển và thay đổi khi user thêm/xóa sản phẩm.
Đơn hàng không chỉ tạo record; cần trạng thái, hủy/thanh toán/giao hàng và hiển thị đúng cho customer/admin.
Admin cần upload ảnh sản phẩm ổn định; dùng link ảnh thủ công dễ lỗi, khó quản lý và không chuyên nghiệp.
Một số API chỉ admin được gọi như thêm sản phẩm hoặc cập nhật đơn; nếu middleware yếu sẽ mở lỗ hổng quyền.
Review sản phẩm phải gắn user/product/order context để tránh feedback trôi nổi không có giá trị.
Các màn hình cần xử lý loading, empty cart, lỗi API, hết hàng hoặc trạng thái đơn thay đổi.
Giỏ hàng cần đồng bộ số lượng, tổng tiền, phí vận chuyển và thay đổi khi user thêm/xóa sản phẩm.
Đơn hàng không chỉ tạo record; cần trạng thái, hủy/thanh toán/giao hàng và hiển thị đúng cho customer/admin.
Admin cần upload ảnh sản phẩm ổn định; dùng link ảnh thủ công dễ lỗi, khó quản lý và không chuyên nghiệp.
Một số API chỉ admin được gọi như thêm sản phẩm hoặc cập nhật đơn; nếu middleware yếu sẽ mở lỗ hổng quyền.
Review sản phẩm phải gắn user/product/order context để tránh feedback trôi nổi không có giá trị.
Các màn hình cần xử lý loading, empty cart, lỗi API, hết hàng hoặc trạng thái đơn thay đổi.
Tôi tổ chức User, Product, Cart, Order, Review thành model/route/controller riêng để dễ bảo trì.
Tôi triển khai luồng thêm giỏ, cập nhật số lượng, tạo đơn, theo dõi trạng thái và admin cập nhật đơn.
Tôi dùng Multer/Cloudinary để admin upload ảnh sản phẩm, giảm phụ thuộc vào URL ảnh thủ công.
Tôi dùng JWT/bcrypt và middleware kiểm tra quyền để tách API customer/admin.
Tôi chỉnh cấu hình API URL để frontend có thể chạy local/deploy mà không hardcode backend.
Tôi gom logic cart/order/review vào service/controller rõ hơn, tránh frontend tự quyết định trạng thái quan trọng.
Tôi đưa product CRUD, order status và user management vào admin flow để dự án có mặt vận hành.
Tôi tổ chức User, Product, Cart, Order, Review thành model/route/controller riêng để dễ bảo trì.
Tôi triển khai luồng thêm giỏ, cập nhật số lượng, tạo đơn, theo dõi trạng thái và admin cập nhật đơn.
Tôi dùng Multer/Cloudinary để admin upload ảnh sản phẩm, giảm phụ thuộc vào URL ảnh thủ công.
Tôi dùng JWT/bcrypt và middleware kiểm tra quyền để tách API customer/admin.
Tôi chỉnh cấu hình API URL để frontend có thể chạy local/deploy mà không hardcode backend.
Tôi gom logic cart/order/review vào service/controller rõ hơn, tránh frontend tự quyết định trạng thái quan trọng.
Tôi đưa product CRUD, order status và user management vào admin flow để dự án có mặt vận hành.
FruitHub có cả customer và admin flow, đủ để demo hành trình từ xem sản phẩm tới quản lý đơn.
Source có client/server riêng, Express backend, MongoDB models, Cloudinary service và route theo domain.
Project chứng minh CRUD nâng cao, auth, upload file, order lifecycle, validation và phân quyền admin.
FruitHub cho thấy quá trình phát triển từ Cái Tiệm Trái Cây static UI lên app bán hàng có dữ liệu thật.
Chưa thấy payment gateway production và inventory reservation chặt; nếu nhiều user mua cùng lúc có thể cần khóa tồn kho tốt hơn.
Có thể thêm payment thật, coupon, stock reservation, test e2e checkout và dashboard doanh thu cho admin.
Tôi học được vòng đời đơn hàng ảnh hưởng nhiều tầng: UI, cart service, order service, admin status và lịch sử người dùng.
Dự án giúp tôi hiểu rõ hơn tầm quan trọng của service layer và validation trong backend e-commerce.
Tôi cũng thấy rõ khác biệt giữa landing page bán hàng và một hệ thống e-commerce có dữ liệu/đơn hàng/admin thật.
FruitHub có cả customer và admin flow, đủ để demo hành trình từ xem sản phẩm tới quản lý đơn.
Source có client/server riêng, Express backend, MongoDB models, Cloudinary service và route theo domain.
Project chứng minh CRUD nâng cao, auth, upload file, order lifecycle, validation và phân quyền admin.
FruitHub cho thấy quá trình phát triển từ Cái Tiệm Trái Cây static UI lên app bán hàng có dữ liệu thật.
Chưa thấy payment gateway production và inventory reservation chặt; nếu nhiều user mua cùng lúc có thể cần khóa tồn kho tốt hơn.
Có thể thêm payment thật, coupon, stock reservation, test e2e checkout và dashboard doanh thu cho admin.
Tôi học được vòng đời đơn hàng ảnh hưởng nhiều tầng: UI, cart service, order service, admin status và lịch sử người dùng.
Dự án giúp tôi hiểu rõ hơn tầm quan trọng của service layer và validation trong backend e-commerce.
Tôi cũng thấy rõ khác biệt giữa landing page bán hàng và một hệ thống e-commerce có dữ liệu/đơn hàng/admin thật.
Mỗi màn hình đi kèm phần mô tả chi tiết để làm rõ luồng hoạt động và trải nghiệm người dùng thực tế.

Project preview
Ảnh này dùng làm bằng chứng cho flow FruitHub. Màn hình "Project preview" giúp giải thích rõ trạng thái UI, dữ liệu hiển thị và thao tác người dùng ở bước đó.
Xem toàn bộ mã nguồn trên GitHub hoặc mở bản demo hoạt động thực tế.
Tôi đang tìm kiếm những thử thách mới và cơ hội hợp tác. Nếu bạn có câu hỏi hoặc chỉ muốn chào hỏi, tôi sẽ phản hồi sớm nhất có thể.