trong.
Full-stack2026

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.

course-platform.ts
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

01

CMS

  • Payload on MongoDB
  • S3 for media, SES for mail
  • Courses, lessons, materials and landing blocks as collections
02

Client

  • React 19 + Vite, TanStack Query and Zustand
  • Talks to Payload over its API
  • Playwright tests
Điểm nhấn 01
2
apps, deployable independently
Điểm nhấn 02
0
code changes to publish a lesson
Điểm nhấn 03
Self
hosted on a VPS

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.