← Tất cả bài viết
Lập Trình Viên Fullstack Creative: Không Chỉ Frontend
Lập trình viên fullstack creative làm trọn cả build — vừa motion/WebGL, vừa CMS, API, database và auth phía sau. Một đối tác cho toàn bộ dự án, không chỉ giao diện.

Đa số khách hàng thuê "creative developer" vì phần nhìn thấy được: cú cuộn mượt như lụa, hero WebGL, chữ nghĩa bung ra đúng nhịp. Rồi tới ngày launch — form liên hệ âm thầm nuốt mất lead, cái CMS đã hứa với khách thì không tồn tại, và giao diện đẹp đó đang nằm trên một backend chẳng ai quản. Lập trình viên fullstack creative lấp đúng khoảng trống đó: bạn có cả phần motion/WebGL lẫn CMS, API, database, auth nuôi nó — từ một đối tác duy nhất thay vì bàn giao qua tay ba người. Bài này nói về những gì "fullstack" thực sự giao được trên một dự án creative, và vì sao làm chủ cả backend còn nâng chất lượng của chính phần frontend.
Tôi sẽ lấy stack của chính mình làm ví dụ chạy xuyên bài, vì đó là loại bằng chứng thật thà nhất: website bạn đang đọc chạy trên CMS tự host bằng Postgres qua Prisma, phục vụ bởi Next.js App Router — đúng kiến trúc tôi ship cho khách. Không có gì ở đây là "năng lực" chỉ đọc từ tutorial.
"Chỉ frontend" là nơi dự án creative âm thầm gãy
Rất nhiều dự án web đẳng cấp giải thưởng được bán dưới dạng hợp đồng chỉ-frontend. Ổn thôi — khi khách đã có đội backend in-house. Nhưng đa số dự án brand, startup, studio thì không, và các đường nối bung ra ở những chỗ rất dễ đoán:
- CMS được "mặc định là có", chứ không được build. Thiết kế có grid case-study chỉnh được, có blog, có mục team. Ai đó phải mô hình hóa content, nối vào CMS, và làm nó revalidate. Nếu dev chỉ làm frontend, đây thành một hợp đồng thứ hai bất ngờ.
- Form là "frontend" cho tới khi nó không phải. Một form liên hệ cần endpoint phía server, validate, chống spam, transport gửi mail, và xử lý lỗi. Cái ô input đẹp chỉ là 10% công việc.
- Dữ liệu nuôi phần chuyển động. Một counter chạy real-time, archive dự án lọc được, content gated, widget đặt lịch — animation chỉ tốt bằng cái API phía sau nó, và ai đó phải build API đó.
- Không ai quản deploy, env và chi phí. Giới hạn connection của database, chiến lược cache, pipeline ảnh, preview deploy. Không hào nhoáng, nhưng quyết định site có sống nổi và có rẻ không.
Khi một freelancer frontend bàn giao cho một dev backend khác, mỗi đường nối đó là một chỗ để tầm nhìn bị bào mòn — API trả về đúng cái shape mà animation không lường trước, tên field trong CMS lệch với component, cache invalidation là chuyện tính sau. Làm chủ cả hai phía xóa hẳn khâu bàn giao.
"Fullstack" thực ra gồm những gì trên một build creative
"Fullstack" bị dùng khá lỏng, nên đây là bản cụ thể — các tầng tôi giao trên một dự án điển hình, từ trên xuống:
| Tầng | Gồm những gì | Ví dụ trên build thật |
|---|---|---|
| Presentation | GSAP, Lenis, React Three Fiber, shader GLSL, chuyển trang | Hero WebGL và các section scroll-scrub |
| App / render | Next.js App Router, Server Components, ISR/streaming, SEO & OG | Cấu trúc route, metadata, revalidateTag |
| API | Route handler hoặc Express/Node — form, auth, webhook, tích hợp | Endpoint liên hệ, webhook CMS → xóa cache |
| Content | Headless CMS (Sanity, WordPress-headless, Strapi, Prismic) hoặc tự host | Page-builder mà khách thật sự dùng được |
| Data | Postgres/Prisma (hoặc store của CMS), schema, migration | Bài blog, archive dự án, dữ liệu form |
| Infra | Deploy, env, pooling connection, cache, ảnh/CDN, kiểm soát chi phí | Giữ database dưới giới hạn connection |
Hợp đồng chỉ-frontend phủ một hai hàng trên cùng. Lập trình viên fullstack creative phủ cả sáu — nên animation và dữ liệu được thiết kế cùng nhau thay vì thương lượng qua ranh giới hợp đồng. Muốn stream một tập dữ liệu đã lọc vào scene Three.js theo scroll? Cái đó cần response API được nắn theo animation ngay từ ngày đầu, không phải chắp vá về sau.
Backend, ngay trên website này
Cho cụ thể: mọi thứ CMS làm trên site này đang chạy trên hạ tầng do tôi sở hữu và vận hành. Content contract được khai báo bằng code, CMS tự sinh form admin, và content nằm trong Postgres:
// FE khai báo schema; CMS sinh UI admin; content nằm trong Postgres.
export const blog = defineCollections({
post: {
fields: {
title: text({ required: true }),
cover: image(),
body: richText(),
tags: list(text()),
},
// defaults giữ site vẫn render kể cả khi DB không truy cập được
defaults: { title: 'Untitled', tags: [] },
},
})
Phần đọc đi qua cache theo tag để frontend không nện database ở mỗi request — một lỗi rất dễ mắc và tốn kém về lâu dài, tôi đã mổ xẻ trong bài vì sao Next.js cứ gọi CMS ở mọi request. Và bản thân database cũng có giới hạn thật đáng tôn trọng: tôi đã viết lại vì sao Neon hết giới hạn connection dù site ít traffic sau khi debug đúng chuyện đó. Hai bài đó là chiều sâu backend không hào nhoáng mà một portfolio chỉ-frontend không thể cho thấy — và chính là lý do giao diện đẹp kia sống nổi và rẻ.
Dùng CMS nào bạn đang có — hoặc không cần CMS
"Fullstack" không có nghĩa "stack của tôi, chịu thì làm". Tầng content đúng đắn phụ thuộc vào ai chỉnh site sau khi launch, không phải khẩu vị của dev. Nên phần tích hợp là CMS-agnostic:
- Đội bạn sống trong WordPress? Giữ nó làm backend headless và vứt bỏ tầng theme PHP — editor giữ dashboard, người dùng nhận frontend Next.js tùy biến. Tôi mô tả trọn kiến trúc trong bài headless WordPress + Next.js cho web chuyển động, cũng là cách tôi làm phần CMS cho dự án đoạt giải Iventions.
- Muốn editor hiện đại, có cấu trúc? Một site Next.js trên Sanity (hướng dẫn) cho bạn schema page-builder, truy vấn GROQ, và preview tức thì.
- Muốn tự sở hữu dữ liệu trên server của mình? Strapi (xem thêm) là headless CMS tự host — đúng lựa chọn phía sau build Mat Voyce.
- Chưa chắc cái nào hợp? Tôi đặt chúng cạnh nhau trong bài so sánh headless CMS — Sanity vs Prismic vs Strapi vs WordPress, theo trải nghiệm editor, chi phí và quyền kiểm soát.
- Không cần CMS? Với microsite art-direction chặt, không đổi, content có thể nằm trong file dữ liệu có kiểu — không tốn CMS, không hóa đơn hằng tháng.
Điểm mấu chốt không phải cái logo trên CMS. Mà là dù chọn cái nào, một người tích hợp nó, cache đúng cách, nối webhook vào revalidation, và bảo đảm trải nghiệm chỉnh sửa là thứ đội không-kỹ-thuật của khách thật sự dùng được.
Vì sao một đối tác thắng "frontend + backend dev riêng"
Phản biện hiển nhiên: sao không thuê một dev frontend chuyên và một dev backend chuyên? Đôi khi đúng là vậy — trong một đội lớn có backend riêng, tôi chính là chuyên gia frontend cắm vào. Nhưng trên một dự án brand/studio khép kín, chia build cho hai freelancer làm tăng chi phí và rủi ro:
- Không có đường nối bàn giao. API được nắn theo animation vì cùng một người viết cả hai.
- Motion và dữ liệu thiết kế cùng nhau. Loading state, streaming, optimistic UI và biên đạo reveal là một quyết định, không phải một cuộc thương lượng.
- Một đầu mối chịu trách nhiệm. Khi thứ gì đó gãy giữa form và hộp thư, không có màn "đó là tầng của dev kia".
- Lặp nhanh hơn. Đổi copy trong CMS, thêm field, thêm endpoint — không phải khớp lịch hai người.
Đây cũng là lập luận tôi đưa ra khi so thuê creative developer với agency hay template, mở rộng xuống toàn stack: càng ít người đứng giữa tầm nhìn và site đã ship, càng ít thứ bị rơi rớt. Nếu bạn vẫn đang hình dung vai trò này, bài creative developer là gì nói về phần craft frontend; bài này là nửa backend của nó.
Khi bạn không cần fullstack
Thành thật xây được nhiều niềm tin hơn là chèo kéo, nên: không phải lúc nào bạn cũng cần cái này. Bỏ qua hợp đồng fullstack khi —
- Bạn đã có đội backend in-house và chỉ cần một chuyên gia frontend creative cắm vào.
- Site là brochure tĩnh — không form, không CMS, không dữ liệu động, vài trang content không đổi.
- Bạn đã chốt một công cụ no-code (Webflow, Framer) và chỉ cần phủ motion lên trên, không cần build tùy biến.
Với mọi thứ có content thật, form thật, dữ liệu thật phía sau chuyển động — archive case-study, một blog, content gated, một configurator, một luồng đặt lịch — một đối tác làm chủ toàn stack là khác biệt giữa một cú launch vững vàng và một cú launch âm thầm rò rỉ.
Câu hỏi thường gặp
Lập trình viên fullstack creative có giống full-stack engineer không?
Không hẳn. Một full-stack engineer thông thường làm cả backend lẫn frontend, nhưng thường thiếu phần craft motion/WebGL. Lập trình viên fullstack creative mang cả frontend đẳng cấp giải thưởng (GSAP, shader, React Three Fiber) lẫn backend (CMS, API, database, auth) — bề mặt creative là mục tiêu, còn backend tồn tại để phục vụ nó cho tốt.
Bạn khuyên dùng headless CMS nào?
Tùy ai chỉnh site. WordPress-headless nếu đội đã ở đó; Sanity cho editor hiện đại, có cấu trúc; Strapi để tự host và sở hữu dữ liệu. Tôi so sánh chúng trong bài so sánh headless CMS. Không có cái "tốt nhất" phổ quát — chỉ có cái hợp nhất với đội và ngân sách của bạn.
Bạn có làm việc được với backend hoặc CMS sẵn có của chúng tôi không?
Được. Năng lực fullstack nghĩa là tôi có thể build cả stack hoặc cắm một frontend chỉn chu vào API/CMS sẵn có của bạn — tùy dự án cần gì. Việc tích hợp là cùng một kỷ luật dù theo hướng nào.
Bạn có lo phần deploy và hạ tầng vận hành không?
Có — deploy, cấu hình môi trường, giới hạn connection database, cache và kiểm soát chi phí đều thuộc phần làm chủ stack. Hai ví dụ về chiều sâu đó: giữ Neon dưới giới hạn connection và cache CMS để Next.js không gọi nó ở mọi request.
Cần một đối tác cho toàn bộ build — motion, WebGL, và cả backend phía sau? Xem cách tôi làm việc ở mục dịch vụ, lướt qua dự án tiêu biểu, hoặc chỉ cần email cho tôi kèm ý tưởng bạn đang ấp ủ. Tôi sẽ nói thật bạn cần một hợp đồng fullstack hay chỉ cần phần frontend.


