Báo cáo project

ChatHub.

Ứng dụng nhắn tin real-time đa kênh tích hợp lưu trữ cơ sở dữ liệu MongoDB, tùy biến 32 giao diện DaisyUI và hỗ trợ gửi media.

1 thành viên (Cá nhân)ReactSocket.ioMongoDBZustandCloudinaryExpress
Cuộn xuống để khám phá

Chức năng chính

Gửi nhận text và hình ảnh gần như tức thì qua Socket.IO.

32 DaisyUI Themes

Cá nhân hóa giao diện chat với nhiều theme DaisyUI.

Lưu trữ tin nhắn

Tin nhắn được lưu trong MongoDB để xem lại lịch sử.

Online presence

Hiển thị người dùng online/offline bằng Socket.IO để cuộc trò chuyện có ngữ cảnh.

JWT socket auth

REST auth kết hợp socket handshake để chỉ user hợp lệ mới vào realtime flow.

Cloudinary avatar/media

Upload avatar và hình ảnh chat qua Cloudinary thay vì lưu file thủ công.

WebRTC call flow

Source có luồng lobby/call overlay/call history cho định hướng gọi video.

Testing docs

Có test plan, testing flow và hướng dẫn viết test cho các luồng chat.

Situation - Bối cảnh

Chat app là dự án tốt để chứng minh năng lực realtime vì người dùng thấy ngay độ trễ, online status và lỗi đồng bộ.

Không chỉ gửi message

Dự án có auth, profile/avatar, media upload, online users, theme setting, message history và docs test/structure.

Stack phù hợp realtime

React/Zustand quản lý state client, Express/MongoDB lưu dữ liệu, Socket.IO truyền event và Cloudinary xử lý media.

Có định hướng gọi video

Source có lobby/call overlay/call history, cho thấy dự án không dừng ở text chat cơ bản.

Có docs test

Repo có master test plan, testing flow và hướng dẫn viết test, giúp project đáng tin hơn demo chạy tay.

Giá trị portfolio

ChatHub bổ sung mảng realtime communication vào portfolio, cân bằng với e-commerce, security và routing algorithm.

Task - Nhiệm vụ

Người dùng đóng tab, mất mạng hoặc reconnect có thể làm danh sách online sai nếu socket lifecycle không rõ.

REST và socket phải khớp

REST API lưu/lấy message, Socket.IO phát event realtime; nếu hai luồng không thống nhất sẽ gây duplicate hoặc mất message.

Auth cho socket

Không thể để ai cũng connect socket; handshake cần biết user nào đang đăng nhập và map đúng userId.

Upload media dễ lỗi

Avatar/hình chat cần validate kích thước, preview, upload Cloudinary và xử lý lỗi không làm vỡ UI.

CORS và error response

Realtime backend rất dễ lỗi CORS hoặc trả error thô làm lộ thông tin server, nên cần hardening.

Theme nhiều nhưng phải ổn định

32 DaisyUI themes tạo cá nhân hóa nhưng cũng cần đảm bảo text/contrast và layout chat không vỡ.

Action - Quyết định & Thực thi

Tôi mapping userId với socketId để phát message/presence đúng người và cập nhật online users khi connect/disconnect.

Kết hợp REST + realtime

Tôi dùng REST cho auth/history/upload và Socket.IO cho event realtime, giữ MongoDB là nơi lưu trạng thái lâu dài.

Quản lý state bằng Zustand

Tôi tách auth/chat/theme store để UI phản hồi nhanh khi nhận message, đổi theme hoặc cập nhật profile.

Upload qua Cloudinary

Tôi xử lý avatar/media qua Cloudinary, có preview và update profile để không lưu file cục bộ thiếu kiểm soát.

Harden backend

Tôi chú ý CORS, sanitize error response và Node LTS để giảm lỗi deploy/realtime khó debug.

Chuẩn bị test flow

Tôi ghi docs testing cho các flow chính như auth, chat, upload và realtime để dự án dễ kiểm tra lại.

Mở rộng call flow

Tôi đặt nền cho WebRTC bằng lobby/call overlay/call history, thể hiện hướng phát triển sau messaging.

Result - Kết quả đạt được

ChatHub có auth, message history, instant messaging, online presence, media/avatar upload và theme setting.

Bằng chứng backend realtime

Project chứng minh tôi hiểu Socket.IO, lifecycle connect/disconnect, MongoDB persistence và Cloudinary upload.

Demo dễ kiểm chứng

Có thể demo bằng hai tài khoản/trình duyệt để thấy message, online status và media cập nhật realtime.

Khác biệt với CRUD

ChatHub giúp portfolio có câu chuyện event-driven/realtime rõ hơn các app form/dashboard thông thường.

Limitation thật

Khi scale nhiều instance cần Redis adapter cho Socket.IO; WebRTC call flow cần signaling/ICE handling và test thiết bị kỹ hơn.

Hướng phát triển

Có thể thêm group chat, read receipts, typing indicator, Redis adapter, push notification và test e2e nhiều client.

Nhận Thức Chuyên Môn Cốt Lõi

Tôi học được rằng Socket.IO không thay REST API mà bổ sung cho những trạng thái cần realtime; cả hai cần phối hợp rõ.

Tôi hiểu hơn về

Tôi hiểu hơn về rủi ro của realtime app: CORS, auth handshake, disconnect, online state sai và lỗi upload media.

Dự án giúp tôi

Dự án giúp tôi tự tin hơn khi nói về trải nghiệm người dùng cá nhân hóa, không chỉ API và database.

Preview & Trải nghiệm thực 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
Xem toàn màn hình
01

Project preview

Ảnh này dùng làm bằng chứng cho flow ChatHub. 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 đó.

Mã nguồn & Demo

Trải nghiệm dự án
Source Code & Demo

Xem toàn bộ mã nguồn trên GitHub hoặc mở bản demo hoạt động thực tế.

DỰ ÁN TIẾP THEO
Sẵn sàng cho cơ hội mới

Cùng hợp tác nhé.

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ể.