course.trongpham.vn
A course platform where the content changes weekly and the code doesn't.
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,
};- Year
- 2026
- Role
- Solo engineer
- Duration
- 4 months
Architecture
Technical notes
The brief
A place to publish courses I actually teach — lessons, materials, and the landing pages that sell them — without editing React every time a paragraph changes.
The approach
Payload CMS as the backbone, on MongoDB, with S3 for media and SES for mail. The client is a separate React 19 app on Vite, talking to Payload over its API — so the CMS can be redeployed without touching the site, and the site can be rewritten without migrating content.
Course structure is modelled in the CMS rather than in code: courses, lessons, materials and landing blocks, each editable by someone who has never opened a terminal. Which is the point — the content changes weekly, the code doesn't.
The harder parts
Resisting the urge to model everything. The first schema had detail for quizzes, progress and certificates that no course needed yet. Cutting it back to what is actually taught made the editor usable and left the schema room to grow when a real requirement arrives instead of an imagined one.