Daily Vibe
Trang nhỏ để ghé qua mỗi ngày — đọc một câu nói dành riêng cho hôm nay hoặc rút một lá tarot khi đang phân vân. Bán cảm giác chứ không bán chức năng.
- Next.js 16
- React 19
- TypeScript
- Tailwind CSS 4
- Zod
- Zustand
- React Hook Form
- Gemini API

Điểm nổi bật
- Câu nói dành cho bạn: mở lên là có ngay một câu, cả ngày không đổi.
- Xem tarot hai dạng — bốc 1 lá cho câu hỏi nhanh, trải 3 lá cho chuyện đang vướng.
- Luận giải bằng AI theo đúng câu chuyện bạn kể. Không có AI vẫn dùng được: app soạn sẵn câu hỏi để bạn mang sang ChatGPT hay Gemini.
- Kết quả giữ nguyên cả ngày — tải lại trang cũng không đổi, vì đổi là mất tin.
- Bộ bài tarot đầy đủ 78 lá.
- Câu hỏi riêng tư của bạn được giữ kín, không bị lộ qua đường link.
- Toàn bộ chữ viết bằng giọng người Việt tự nhiên — không dịch máy, không hô hào.
Về dự án
Daily Vibe là dự án cá nhân tôi bắt đầu từ tháng 8/2026, hiện đang chạy tại daily.liqwy.com.
Ý tưởng đơn giản: một trang nhỏ để người ta ghé qua mỗi ngày, thấy dễ chịu một chút rồi đi ra. Hai phần đang mở là “Câu nói dành cho bạn” và “Xem tarot” (bốc 1 lá hoặc trải 3 lá).
Thứ quyết định sản phẩm này sống hay chết không phải tính năng mà là hai điều. Một: kết quả phải ổn định theo ngày — tải lại trang mà đổi câu là người dùng nhận ra “à hoá ra random” rồi hết tin. Hai: chữ phải nghe như người nói, vì một câu sáo rỗng làm hỏng nhanh hơn bất kỳ lỗi nào.
Phần luận giải tarot dùng AI để đọc mấy lá đã rút theo đúng chuyện người dùng kể. Khi AI không sẵn sàng, app vẫn chạy: nó soạn sẵn câu hỏi để người dùng tự mang sang ChatGPT hay Gemini.
Góc kỹ thuật
- Next.js 16 (App Router, Turbopack) + React 19 + Tailwind CSS 4; Zod làm nguồn type kèm validation, Zustand cho state phiên, React Hook Form cho form.
- Mọi kết quả sinh từ seed theo ngày (mốc ngày tính theo UTC+7) thay vì random — deterministic nên F5 không đổi.
- Route luận giải tự rút lại lá từ seed thay vì nhận từ client, nên không ai sửa request để xin luận giải lá bất kỳ.
- Gọi Gemini API để luận giải; không cấu hình API key thì tự chuyển sang nhánh copy-prompt.
- Dữ liệu nguồn (bộ câu và bộ bài 78 lá) chỉ đọc ở server, không bundle xuống client — vừa nhẹ trang vừa không lộ cả bộ bài.
- Câu hỏi riêng tư gửi bằng POST, không nhét vào query string để khỏi lọt vào log và Referer.
Bạn có câu hỏi?
Tôi luôn sẵn sàng hợp tác với những dự án thú vị và sáng tạo!