course.trongpham.vn
Nền tảng khoá học nơi nội dung đổi hằng tuần còn code thì không.
export const project = {
type: "fullstack",
stack: [
"Payload CMS",
"MongoDB",
"React 19",
"Vite",
"TypeScript",
"Tailwind CSS v4",
"TanStack Query",
"Zustand",
"AWS S3",
"AWS SES",
"Playwright",
],
shipped: true,
};- Năm
- 2026
- Vai trò
- Làm một mình
- Thời gian
- 4 tháng
Kiến trúc
CMS
- Payload on MongoDB
- S3 for media, SES for mail
- Courses, lessons, materials and landing blocks as collections
Client
- React 19 + Vite, TanStack Query and Zustand
- Talks to Payload over its API
- Playwright tests
Ghi chú kỹ thuật
Đề bài
Một chỗ để đăng những khoá học tôi thật sự đứng lớp — bài giảng, tài liệu, và những trang giới thiệu bán khoá — mà không phải sửa React mỗi lần đổi một đoạn văn.
Cách làm
Payload CMS làm xương sống, chạy trên MongoDB, dùng S3 cho media và SES cho email. Client là một app React 19 riêng trên Vite, nói chuyện với Payload qua API — nên CMS deploy lại được mà không đụng tới trang, còn trang viết lại được mà không phải chuyển dữ liệu đi đâu.
Cấu trúc khoá học nằm trong CMS chứ không nằm trong code: khoá học, bài học, tài liệu và các block của trang giới thiệu, ai cũng sửa được kể cả người chưa từng mở terminal. Mà đó mới là điểm chính — nội dung đổi hằng tuần, code thì không.
Chỗ khó
Cưỡng lại ý muốn mô hình hoá mọi thứ. Schema đầu tiên có sẵn chi tiết cho bài kiểm tra, tiến độ học và chứng chỉ, những thứ chưa khoá nào cần tới. Cắt lại còn đúng thứ đang dạy làm trang soạn dễ dùng hẳn, và để dành chỗ cho schema lớn lên khi có yêu cầu thật, thay vì một yêu cầu tưởng tượng.