
Template web app là bộ khung dùng đi dùng lại cho nhiều dự án: đã có sẵn đăng nhập, phân quyền, layout, menu, bảng dữ liệu, biểu mẫu, cách kết nối dữ liệu và quy trình deploy. Khi bộ khung này ổn định, mỗi dự án mới chỉ cần tập trung vào nghiệp vụ riêng thay vì xây lại từ đầu. Và điều ít người để ý: một template rõ ràng còn giúp AI như Claude Code hiểu cấu trúc dự án, sinh code đồng bộ và ít lỗi vặt hơn hẳn.
Nguồn: video Seri Vibe Coding: Cách tạo Template Web App chuẩn, ổn định để phát triển nhiều dự án của kênh Nghiện AppSheet. Bài viết dưới đây tôi viết lại theo cách hiểu và kinh nghiệm triển khai của mình, không chép lời thoại.
Template web app là gì? Hiểu đơn giản là cái khuôn
Template nghĩa đen là cái khuôn để dùng lại. Giống như khuôn đúc bánh: bạn đổ bột khác nhau, nhân khác nhau, nhưng hình dáng và chất lượng đầu ra luôn giống nhau.
Điểm quan trọng mà nhiều người hiểu sai: không có một template vạn năng cho mọi loại dự án. Khuôn phụ thuộc vào mục đích:
- Template ERP nội bộ công ty: luôn đi từ phòng ban → chức vụ → nhân viên, rồi mới tới các module nghiệp vụ. Phần xương sống nhân sự - phân quyền gần như lặp lại ở mọi công ty.
- Template website / trang tin: trọng tâm lại là trình soạn thảo bài viết, danh mục tin tức, trang chủ, và phải đẹp trên cả máy tính lẫn điện thoại.
- Template app bán hàng, app cho khách dùng: cần giao diện cao cấp hơn, có hiệu ứng chuyển động, tối ưu thao tác nhanh.
Ba loại này không dùng chung một khuôn được. Nếu bạn còn chưa rõ web app khác website và mobile app ở đâu, nên đọc trước bài web app là gì rồi quay lại phần dưới.
Một template web app chuẩn cần có những thành phần nào?
Câu trả lời ngắn: template cần chứa đúng những thứ mà hầu như dự án nào cũng phải có, chứ không phải càng nhiều chức năng càng tốt. Dưới đây là danh sách thành phần tôi coi là bắt buộc:
- Kiến trúc và cấu trúc thư mục rõ ràng, đặt tên nhất quán.
- Layout, menu và routing (điều hướng giữa các trang) dùng chung.
- Hệ thống component (khối giao diện dùng lại) thống nhất: nút, thẻ, modal, tab.
- Đăng nhập và xác thực: một luồng duy nhất cho mọi dự án.
- Người dùng, vai trò và phân quyền: ai thấy gì, ai sửa được gì.
- Quản lý cấu hình môi trường (ENV): chuỗi kết nối, khoá API, link dữ liệu để ở một chỗ, không rải rác trong code.
- Cách kết nối API và database chuẩn hoá: mọi module gọi dữ liệu theo cùng một kiểu.
- Xử lý lỗi, thông báo và validation (kiểm tra dữ liệu nhập) thống nhất.
- Logging và theo dõi hoạt động: ai làm gì, lúc nào, lỗi phát sinh ở đâu.
- Component bảng dữ liệu, biểu mẫu và bộ lọc tái sử dụng — đây là phần dùng nhiều nhất trong phần mềm quản lý.
- Giao diện responsive: dùng được trên máy tính và điện thoại.
- Quy trình build, deploy và đánh phiên bản.
- Tài liệu mô tả cấu trúc dự án — viết cho cả người mới lẫn cho AI đọc.
Mục 13 nghe có vẻ thừa nhưng với tôi lại là mục đáng giá nhất khi làm việc cùng AI. Một file tài liệu mô tả rõ "dự án này tổ chức thế nào, bảng dữ liệu đặt tên ra sao, thông báo lỗi hiển thị kiểu gì" sẽ khiến Claude Code sinh code theo đúng khuôn, thay vì mỗi module một phong cách.

Vì sao cùng một giao diện vẫn cần nhiều template khác nhau?
Vì phần lưu dữ liệu và nơi deploy quyết định rất nhiều thứ trong code. Trong các dự án của mình, tôi giữ cùng một bộ giao diện nhưng tách thành vài nhánh template theo hạ tầng:
| Nhánh template | Nơi lưu dữ liệu | Nơi deploy | Hợp với |
|---|---|---|---|
| Next.js App Router + PostgreSQL | PostgreSQL trên VPS | VPS riêng | Hệ thống nội bộ nhiều dữ liệu, cần chủ động hạ tầng |
| Next.js + Supabase | Supabase | Vercel | Dự án vừa, muốn có sẵn auth và database quản lý |
| Next.js + Google Sheet | Google Sheet qua Sheet API | Vercel | App nhỏ, dữ liệu ít, đội ngũ quen làm việc trên Sheet |
Ba nhánh này nhìn bề ngoài giống hệt nhau với người dùng cuối, nhưng cách truy vấn, phân quyền và xử lý lỗi bên trong khác nhau. Cố nhồi cả ba vào một template duy nhất là con đường nhanh nhất để bộ khung trở nên rối và khó nâng cấp. Về chuyện code và dữ liệu nằm ở đâu sau khi triển khai, tôi có giải thích riêng trong bài về deploy ở cuối.
Cái gì nên đưa vào template, cái gì nên để riêng từng dự án?
Nguyên tắc của tôi: đưa vào template thứ gì lặp lại ở hơn 80% dự án; để riêng thứ gì gắn với nghiệp vụ cụ thể.
| Nên nằm trong template | Nên để riêng từng dự án |
|---|---|
| Đăng nhập, phiên làm việc, đổi mật khẩu | Quy trình duyệt nhiều cấp đặc thù công ty |
| Vai trò, phân quyền theo menu và theo dòng dữ liệu | Danh mục vai trò cụ thể (kế toán kho, tổ trưởng ca…) |
| Bảng dữ liệu, bộ lọc, phân trang, xuất file | Cột và công thức tính của từng báo cáo |
| Biểu mẫu, validation, thông báo lỗi | Các trường nghiệp vụ riêng, mã chứng từ riêng |
| Layout, menu, dark mode, responsive | Bộ nhận diện thương hiệu của khách hàng |
| Cấu hình ENV, logging, quy trình deploy | Tích hợp với phần mềm kế toán, máy chấm công riêng |
Cái bẫy lớn nhất là tham: mỗi dự án lại nhét thêm một chức năng "cho chắc" vào template. Sáu tháng sau template nặng nề, sửa một chỗ hỏng ba chỗ, và không ai dám nâng cấp nó nữa. Khi phân vân, tôi chọn để chức năng đó ở dự án; nếu dự án thứ ba cũng cần, lúc đó mới đưa ngược lên template.
Web app có template so với AppSheet: cái nào ổn định hơn?
Câu trả lời thẳng thắn: AppSheet ổn định hơn ở những lỗi cơ bản, còn web app ổn định hơn ở những thứ lớn — tốc độ, số lượng module, bảo mật — với điều kiện bạn có template tốt.
Lý do rất dễ hiểu. AppSheet đã là một cái khuôn do Google dựng sẵn. Bạn tạo bao nhiêu module thì chúng cũng chạy theo đúng khuôn đó, không có chuyện module này bấm vào thì tên bị lệch còn module kia thì không. Web app thì ngược lại: code từ đầu đến cuối, nên nếu không có khuôn rõ ràng, hôm nay làm xong, ngày mai người dùng hỏi "sao chỗ này lại thế này", và bạn lại đi sửa vặt.
| Tiêu chí | AppSheet | Web app không có template | Web app có template chuẩn |
|---|---|---|---|
| Lỗi giao diện vặt khi thêm module | Rất ít, do khuôn sẵn | Hay gặp, mỗi module một kiểu | Rất ít, do khuôn tự dựng |
| Tự do giao diện | Giới hạn trong khuôn của Google | Tự do | Tự do nhưng theo chuẩn |
| Tốc độ khi dữ liệu lớn, nhiều module | Giảm dần khi app phình | Tốt | Tốt |
| Thời gian ra bản chạy được đầu tiên | Nhanh nhất | Chậm | Nhanh |
| Dò lỗi | Phải tự dò từng biểu thức, có khi cả trang công thức | Dùng AI được nhưng AI thiếu tham chiếu | AI so sánh module lỗi với module tương tự để tìm nguyên nhân |
Điểm cuối cùng là điểm tôi thích nhất ở việc có template. Khi module xuất dữ liệu ở phân hệ kho bị lỗi, tôi chỉ cần bảo Claude Code: module kho lỗi, hãy so sánh với module đơn hàng và module nhân sự vốn đang chạy đúng, tìm chỗ khác nhau. Vì các module cùng một khuôn nên AI có nhiều điểm tham chiếu, tìm nguyên nhân nhanh hơn nhiều so với đoán mò. Ngược lại, với AppSheet tôi phải tự mở từng biểu thức ra soi — thiếu một dấu ngoặc trong một trang công thức dài là đủ sai, mà nhìn mắt thường thì khó thấy. Nói công bằng: nếu doanh nghiệp bạn chỉ cần một app nhập xuất tồn đơn giản, chạy nội bộ, thì AppSheet vẫn là lựa chọn nhanh và rẻ công hơn làm web app.
Phần lớn sự cố đến từ nợ kỹ thuật, không phải máy chủ
Khi khách hỏi "app lỗi là do máy chủ hay do code", câu trả lời theo kinh nghiệm của tôi là: đại đa số nằm ở phía code và cấu hình, chứ VPS hỏng rất hiếm — nhất là khi bạn đã sàng lọc nhà cung cấp VPS tử tế ngay từ đầu.
Các nguồn lỗi tôi gặp thường xuyên, xếp theo tần suất:
- Lỗi trong code: chức năng làm thiếu, mỗi module xử lý một kiểu.
- Lỗi lệch giữa code và database: code khai báo 10 cột, database chỉ có 8 cột.
- Lỗi phân quyền: set quyền không đầy đủ, người lẽ ra chỉ được xem lại xoá được dữ liệu.
- Lỗi cấu hình ENV: ví dụ muốn app kết nối Google Sheet thì phải điền đúng đường dẫn Sheet trong cấu hình; điền sai là app không lấy được dữ liệu dù code đúng.
- Lỗi hạ tầng VPS: hiếm nhất.
Nợ kỹ thuật là những chỗ làm tắt, làm thiếu, làm cho xong lúc đầu, để lại hậu quả phải trả sau. Ví dụ dễ hình dung nhất tôi hay kể: trong bảng thông tin công ty, ô email lẽ ra phải đặt kiểu dữ liệu email để hệ thống tự kiểm tra, nhưng vì vội nên để kiểu text. Vài tuần sau người dùng gõ một chuỗi chữ bất kỳ vào ô email mà hệ thống vẫn nhận, rồi email gửi đi thất bại — lúc đó mới quay lại sửa. Chuyện này xảy ra trên AppSheet, và xảy ra y hệt trên web app.
Template chính là cách trả trước món nợ đó một lần. Những quy tắc nhỏ như "ô email phải validate", "mọi bảng phải có nút xuất dữ liệu", "mọi form phải báo lỗi ở cùng một vị trí" được đóng sẵn vào khuôn, nên dự án thứ hai, thứ mười cũng không bị thiếu.

Có cần dùng Skill để đặt quy tắc cho AI không?
Không bắt buộc. Tôi làm template chủ yếu bằng Claude Code bình thường, không cần cơ chế Skill phức tạp. Thứ quyết định kết quả là yêu cầu bạn đưa vào rõ đến đâu, chứ không phải bạn dùng tính năng gì.
Quy tắc rõ ràng nghĩa là mô tả được tới mức chi tiết của giao diện. Vài ví dụ quy tắc thật trong template của tôi:
- Độ rộng cột trong bảng dữ liệu không vượt quá 800px, dù nội dung dài đến đâu.
- Không dùng kéo thả để chỉnh độ rộng cột; người dùng bấm nút chọn mức rộng hoặc hẹp.
- Lựa chọn đó phải được lưu lại: lần sau mở lên, bảng giữ nguyên trạng thái người dùng đã chọn.
Ba dòng trên nghe nhỏ nhặt, nhưng viết vào tài liệu dự án thì mọi bảng dữ liệu trong mọi module đều hành xử giống nhau, và AI không tự ý mỗi nơi làm một kiểu. Nếu bạn mới bắt đầu với công cụ này, xem thêm hướng dẫn chính thức của Anthropic về Claude Code để nắm cách đưa tài liệu dự án vào ngữ cảnh làm việc.
6 bước tự dựng template web app đầu tiên
- Chọn đúng một loại dự án để làm khuôn. Đừng bắt đầu bằng "khuôn cho mọi thứ". Ví dụ: phần mềm quản lý nội bộ cho công ty 20–50 người.
- Chốt hạ tầng: dữ liệu lưu ở đâu, deploy ở đâu. Mỗi tổ hợp là một nhánh template riêng.
- Làm phần nền trước: đăng nhập, vai trò, phân quyền, layout, menu. Đây là phần chiếm nhiều thời gian nhất nếu phải làm lại mỗi dự án.
- Dựng ba component xương sống: bảng dữ liệu có lọc và xuất file, biểu mẫu có validation, hộp thông báo lỗi. Làm thật kỹ một lần.
- Viết tài liệu quy tắc: cấu trúc thư mục, quy ước đặt tên, cách gọi dữ liệu, cách hiển thị lỗi, quy tắc giao diện. Viết để người mới và AI đọc đều hiểu.
- Chạy thử bằng một dự án thật nhỏ, ghi lại chỗ nào phải sửa tay nhiều lần — đó chính là thứ cần bổ sung vào template.
Lấy một ví dụ Việt Nam cho dễ hình dung: một xưởng cơ khí ở Bình Dương cần ba phần mềm trong hai năm — quản lý vật tư, quản lý lệnh sản xuất, và báo cáo công đoạn cho tổ trưởng. Cả ba đều cần đăng nhập, phân quyền theo tổ, bảng dữ liệu lọc theo ngày, biểu mẫu nhập liệu trên điện thoại ngoài xưởng và xuất file cho kế toán. Nếu làm rời rạc, bạn xây ba lần những thứ giống nhau và mỗi lần lại sinh ra một bộ lỗi mới. Có template, phần mềm thứ hai và thứ ba chỉ còn là việc dựng bảng dữ liệu và quy tắc nghiệp vụ.

Tóm tắt và bước tiếp theo
- Template web app là khuôn dùng lại, không phải dự án chứa thật nhiều chức năng.
- Khuôn phải gắn với một loại dự án và một tổ hợp hạ tầng cụ thể; đừng gộp tất cả vào một.
- Đưa vào template thứ lặp lại ở hầu hết dự án; để nghiệp vụ đặc thù ở ngoài.
- AppSheet mạnh ở chỗ khuôn có sẵn nên ít lỗi vặt; web app mạnh ở tự do, tốc độ và khả năng mở rộng — nhưng chỉ khi bạn tự dựng được khuôn.
- Phần lớn sự cố là nợ kỹ thuật trong code, database, phân quyền và cấu hình, chứ hiếm khi do máy chủ.
- Template rõ ràng giúp AI có nhiều điểm tham chiếu để so sánh và tìm lỗi nhanh hơn.
Việc nên làm ngay tuần này nếu bạn đang vibe coding: mở dự án gần nhất, liệt kê ra giấy những thứ bạn chắc chắn sẽ phải làm lại ở dự án sau (đăng nhập, phân quyền, bảng dữ liệu, xuất file, thông báo lỗi), rồi viết chúng thành một file tài liệu quy tắc. Đó là phiên bản 0.1 của template, và nó đã đủ để cải thiện chất lượng code AI sinh ra.
Xem thêm
- Deploy web app xong thì app và dữ liệu nằm ở đâu? Giải thích dễ hiểu
- Chi phí làm web app: cách tự ước tính trước khi thuê hay tự làm
Nếu doanh nghiệp bạn đang cân nhắc làm phần mềm quản lý riêng và muốn trao đổi về phạm vi, hạ tầng phù hợp, bạn có thể liên hệ qua trang tư vấn và báo giá.
Câu hỏi thường gặp
›Template web app là gì?
Template web app là bộ khung code dùng lại cho nhiều dự án, đã có sẵn những phần mà hầu như web app nào cũng cần: đăng nhập, vai trò và phân quyền, layout, menu, bảng dữ liệu, biểu mẫu, cấu hình môi trường và quy trình deploy. Nhờ đó dự án mới chỉ cần tập trung vào nghiệp vụ riêng thay vì xây lại nền tảng từ đầu.
›Làm web app bằng AI có ổn định bằng AppSheet không?
Ở những lỗi giao diện cơ bản thì AppSheet ổn định hơn vì Google đã dựng sẵn khuôn, tạo bao nhiêu module cũng chạy giống nhau. Web app code từ đầu nên dễ lệch nếu không có template. Nhưng khi đã có template chuẩn, web app ổn định hơn ở tốc độ, số lượng module và khả năng mở rộng.
›Có cần dùng Skill để đặt quy tắc cho AI khi làm template không?
Không bắt buộc. Bạn có thể dùng Claude Code bình thường và đặt quy tắc bằng một file tài liệu mô tả cấu trúc dự án, quy ước đặt tên và quy tắc giao diện. Yếu tố quyết định là yêu cầu bạn viết ra rõ và cụ thể tới mức nào, chứ không phải dùng tính năng gì.
›Nợ kỹ thuật là gì và vì sao template giúp giảm nợ kỹ thuật?
Nợ kỹ thuật là những chỗ làm tắt hoặc làm thiếu lúc đầu để kịp tiến độ, sau này phải quay lại sửa. Ví dụ ô email để kiểu text thay vì kiểu email nên người dùng gõ gì hệ thống cũng nhận. Template đóng sẵn các quy tắc kiểm tra dữ liệu và xử lý chuẩn nên dự án sau không lặp lại thiếu sót đó.
›Nên đưa chức năng nào vào template và chức năng nào để riêng từng dự án?
Đưa vào template những thứ lặp lại ở hầu hết dự án: đăng nhập, phân quyền, bảng dữ liệu, biểu mẫu, thông báo lỗi, cấu hình môi trường, quy trình deploy. Để riêng những thứ gắn với nghiệp vụ cụ thể như quy trình duyệt đặc thù, công thức báo cáo, tích hợp phần mềm kế toán. Nếu phân vân, cứ để ở dự án; khi dự án thứ ba cũng cần thì mới đưa lên template.
Tác giả
Chuyên gia chuyển đổi số · Đại diện 5F Edu
Hơn 8 năm triển khai và tư vấn chuyển đổi số cho doanh nghiệp vừa và nhỏ: chuẩn hoá quy trình, xây phần mềm quản lý bằng AppSheet và web app, tự động hoá bằng N8N. Người làm kênh YouTube Nghiện AppSheet.



