Thư viện AI Prompts
Prompt do thành viên đóng góp, kèm những lần dùng thật đã ra kết quả.
Lối vào là CỘNG ĐỒNG, không phải trang chủ (09.09.2026)
Thư viện sống trong khu vực "AI & Prompts" của từng cộng đồng: /c/:slug/prompts. Thẻ giới thiệu ở trang chủ tokyo đã gỡ, một thư viện chung trộn prompt của mười tám ngành vào một danh sách, và người đọc phải tự lọc ra thứ hợp với ngành mình.
/prompts và /prompts/:slug vẫn còn và vẫn phải còn: thẻ trong tab của cộng đồng trỏ thẳng vào trang chi tiết, và /prompts là chỗ xem toàn bộ (gồm cả prompt chưa gắn cộng đồng nào).
Một prompt biết nó thuộc cộng đồng nào qua cột prompt_library_prompts.community_id (migration 20260919d_prompt_library_community.sql). Cột để NULL được có chủ ý: mọi prompt đóng góp trước hôm đó không thuộc cộng đồng nào, và đoán bừa một ngành cho chúng làm prompt hiện ra ở phòng của người khác, hỏng mà không có lỗi nào để lần ra. POST /api/user/prompts nhận community_slug (do ?community= trên /prompts/new đặt vào); slug lạ thì để trống, không đoán.
Ba thứ tạo nên nó, và thứ tự giữa chúng là cố ý:
- Success case đứng trước nội dung prompt. Trang chi tiết cho đọc các lần dùng thật trước, phần thân prompt nằm dưới. Một prompt không có chuyện đã chạy được cho ai thì chỉ là một đoạn văn.
- Ai cũng góp case được, không riêng tác giả. Case là của người dùng, không phải của người viết prompt.
- Lời cám ơn gắn vào cả prompt lẫn từng case. Một người cám ơn một thứ đúng một lần, ràng buộc
UNIQUE(target_type, target_id, user_id)ở tầng bảng, không phải ở tầng nút bấm.
Ba mức người xem
| Người xem | Thấy gì |
|---|---|
| Khách chưa đăng nhập | Tên, giới thiệu, thẻ, tác giả, số case, số lời cám ơn. Không thân prompt, không nội dung case. |
| Thành viên | Toàn bộ case của mọi prompt; thân prompt của prompt để visibility='member'. |
| Pro Member | Thêm thân prompt của prompt để visibility='pro'. |
Khoá nằm ở nội dung, không nằm ở cánh cửa vào trang: /prompts mở cho cả khách (requiredLevelForPath trả 'open', và root.tsx không đá về /login cho đường dẫn này). Khoá ở cửa thì không ai biết bên trong có gì để mà muốn vào.
Mặt tiền công khai cắt ở tầng truy vấn: GET /api/public/prompts không bao giờ chọn cột body, cũng không đọc bảng case. Một endpoint công khai lỡ trả về body thì không giao diện nào giấu lại được.
Endpoint
| Đường dẫn | Ai gọi được | Làm gì |
|---|---|---|
GET /api/public/prompts | công khai | Danh sách giới thiệu + thống kê (total, member_open, pro_only, cases). |
GET /api/public/prompts/:slug | công khai | Giới thiệu một prompt. |
GET /api/user/prompts | thành viên | Danh sách, kèm cờ locked tính theo người xem. |
POST /api/user/prompts | thành viên | Đóng góp prompt (visibility: member | pro). |
GET /api/user/prompts/:slug | thành viên | Chi tiết; body là null khi bị khoá. |
POST /api/user/prompts/:slug/cases | thành viên | Góp một success case. |
POST /api/user/prompts/:slug/thanks | thành viên | Cám ơn tác giả prompt. |
POST /api/user/prompts/cases/:id/thanks | thành viên | Cám ơn người kể case. |
GET /api/user/prompts/me/thanks | thành viên | Lời cám ơn tôi nhận được. |
GET /api/communities/:slug/prompts | thành viên | Thư viện AI Prompts của một cộng đồng, cờ locked tính theo tư cách Pro ở CHÍNH cộng đồng đó, không phải tư cách Pro chung. |
Không tự cám ơn chính mình được (422), nếu không thì con số cám ơn chỉ đo được sự chăm chỉ bấm nút của tác giả.
Bảng
prompt_library_prompts, prompt_library_cases, prompt_library_thanks, dựng lười lúc chạy (ensureTables), theo đúng lối của forum.ts. Lý do lúc viết (trước 01.09.2026): migration áp tay và deploy là hai việc tách rời, mà mã đọc bảng chưa tồn tại thì hỏng âm thầm, endpoint đọc vẫn trả rỗng như thường, chỉ endpoint ghi chết. Nay CI áp migration trước deploy trong cùng job, nên lý do đó không còn; DDL này nên chuyển vào migrations/ để dựng lại được cơ sở dữ liệu từ repo (việc tiếp theo, ghi ở rà soát 03.09).
Nội dung ở đây KHÔNG do máy sinh
Thư viện này nằm ngoài đường ống course-intelligence. Từ 03.09.2026 nội dung khoá học thì ai viết cũng được, nhưng luật riêng của thư viện này không đổi: agent không viết prompt hộ ai. Lý do khác hẳn, thư viện là tiếng nói của thành viên, và một thư viện đầy prompt do agent viết thì không còn là thư viện của ai cả. Không có prompt hay success case nào được chèn bằng migration hay bằng một phiên Claude Code. Thư viện rỗng cho tới khi có người thật đăng lên, và trang chủ tự ẩn khối giới thiệu khi stats.total = 0.
Việc "khoảng 10 prompt mở cho mọi member, phần còn lại dành Pro" là quyết định của người soạn khi đăng, đặt bằng nút chọn trong form đóng góp, không phải hằng số trong mã.