Nền tảng luyện phỏng vấn

FrontendPro

Nền tảng ôn phỏng vấn kết hợp bài viết, câu hỏi theo độ khó, quiz và theo dõi tiến độ trong cùng một nơi.

Next.js 16ReactTypeScriptPrisma ORMPostgreSQLSupabaseTailwind CSS 4
FrontendPro - Nền tảng luyện phỏng vấn

Kết quả

306 câu hỏi phỏng vấn, 330 quiz
68 bài viết theo chủ đề
Streak, XP và heatmap tiến độ

Bài toán

Việc ôn phỏng vấn có một vấn đề quen thuộc: ghi chú một nơi, danh sách câu hỏi một nơi khác, và không có gì ghi lại mình đã thật sự ôn tới đâu. Đọc mãi vẫn có cảm giác tiến bộ, dù kiến thức đọng lại không nhiều. Tôi làm FrontendPro để khép kín quy trình đó cho chính mình: đọc một chủ đề, làm bài kiểm tra ngay sau đó, và kết quả được lưu lại, tất cả trong cùng một sản phẩm.

Các cơ chế duy trì thói quen như streak, XP hay bảng xếp hạng tuần được học từ những app học ngoại ngữ, vì phần khó nhất của ôn phỏng vấn không phải thiếu tài liệu mà là giữ được nhịp học mỗi ngày. Bên dưới, mọi con số đều quy về một bản ghi trong XP ledger, nên phần gamification phản ánh hoạt động thật chứ không chỉ để trang trí.

Tính năng chính

  • Bài viết render từ Markdown, chia theo JavaScript, React, System Design, TypeScript, CSS và các chủ đề khác.
  • Ngân hàng 306 câu hỏi, gắn tag theo độ khó, framework và nguồn, xem đáp án khi cần.
  • 330 quiz nhanh để ôn lại kiến thức đã đọc.
  • Dashboard với vòng tiến độ theo độ khó, thanh tiến độ từng chủ đề và heatmap hoạt động kiểu GitHub.
  • Streak hằng ngày, XP và cấp độ cộng theo mỗi lần hoàn thành, kèm bảng xếp hạng tuần.

Dữ liệu và đăng nhập

Bài viết, câu hỏi và tiến độ của tài khoản được lưu trong PostgreSQL trên Supabase, truy cập qua Prisma. Người dùng đăng nhập bằng email và mật khẩu, Google hoặc GitHub. Tài khoản đăng nhập nhận JWT session trong cookie httpOnly; khách chưa đăng nhập vẫn đọc bài và làm quiz được, tiến độ khi đó lưu tạm trong trình duyệt.

Theo dõi tiến độ

Mỗi lần đọc bài, giải câu hỏi hoặc vượt qua quiz đều tạo một bản ghi trong XP ledger. Cấp độ, thành tựu, streak và bảng xếp hạng tuần được tính từ các bản ghi này, nên mọi con số trên dashboard đều gắn với một hoạt động đã hoàn thành.

Giới hạn và hướng phát triển

Toàn bộ nội dung do một mình tôi viết và bảo trì, nên kho bài mở rộng theo tốc độ học của chính tôi chứ chưa có cộng đồng đóng góp. XP ledger hiện được tính trực tiếp mỗi lần truy vấn, chưa có bảng tổng hợp; ở quy mô hiện tại như vậy là đủ, nhưng khi bảng xếp hạng đông hơn sẽ cần thêm rollup. Tính năng tôi muốn thêm nhất cũng là thứ còn thiếu: quiz đã có, nhưng app chưa tự quyết định khi nào nên cho gặp lại một câu hỏi, nên spaced repetition đúng nghĩa là cột mốc tiếp theo.