Xây dựng một công cụ tính toán chỉ số sức khỏe toàn diện
Xây dựng một công cụ tính toán chỉ số sức khỏe toàn diện bằng HTML5, CSS3 và JavaScript dựa trên các tiêu chuẩn y khoa. Tạo giao diện gọn gàng, dễ tiếp cận với các biểu mẫu nhập liệu từng bước. Triển khai tính toán chỉ số BMI chính xác kèm thang phân loại trực quan và đánh giá nguy cơ sức khỏe. Thêm công cụ tính tỷ lệ mỡ cơ thể sử dụng nhiều phương pháp (Hải quân Hoa Kỳ - Navy, Jackson-Pollock, mô phỏng BIA). Tính toán khoảng cân nặng lý tưởng bằng nhiều công thức (Hamwi, Devine, Robinson, Miller). Triển khai công cụ tính nhu cầu calo chi tiết với chỉ số BMR (sử dụng phương trình Harris-Benedict, Mifflin-St Jeor và Katch-McArdle) và TDEE dựa trên mức độ vận động. Bao gồm các khuyến nghị sức khỏe cá nhân hóa dựa trên các chỉ số đã tính toán. Hỗ trợ cả hệ đo lường mét và hệ Anh (imperial) với khả năng chuyển đổi mượt mà. Lưu trữ hồ sơ người dùng và lịch sử đo lường kèm trực quan hóa xu hướng. Tạo các biểu đồ tiến trình tương tác hiển thị sự thay đổi theo thời gian. Tạo các báo cáo PDF có thể in hoặc xuất ra tệp chứa đầy đủ các chỉ số và khuyến nghị.
Tạo một trình xem PDF trên nền tảng web
Tạo một trình xem PDF trên nền tảng web sử dụng HTML5, CSS3, JavaScript và thư viện PDF.js. Xây dựng giao diện gọn gàng với các nút điều khiển điều hướng trực quan. Triển khai điều hướng trang kèm khung nhìn ảnh thu nhỏ (thumbnails) và mục lục (outline view). Thêm tính năng tìm kiếm văn bản với việc tô sáng kết quả khớp. Bao gồm các điều khiển thu phóng và căn vừa chiều rộng/chiều cao trang. Triển khai tính năng chọn và sao chép văn bản. Thêm các công cụ chú thích bao gồm tô sáng (highlights), ghi chú và vẽ tay. Hỗ trợ xoay tài liệu và chế độ trình chiếu (presentation mode). Bao gồm chức năng in ấn với các tùy chọn cấu hình. Tạo thiết kế đáp ứng hoạt động tốt trên mọi thiết bị. Thêm tính năng hiển thị thuộc tính và siêu dữ liệu của tài liệu.
Xây dựng một bộ hẹn giờ thiền chánh niệm
Xây dựng một bộ hẹn giờ thiền chánh niệm sử dụng HTML5, CSS3 và JavaScript. Tạo một giao diện thanh tịnh, không gây xao nhãng với phong cách thiết kế lấy cảm hứng từ thiên nhiên. Triển khai các phiên thiền có thể tùy chỉnh với các khoảng thời gian chuẩn bị, thiền định và nghỉ ngơi. Thêm các tùy chọn âm thanh môi trường bao gồm âm thanh tự nhiên, sóng âm hai tai (binaural beats) và tiếng ồn trắng (white noise). Bao gồm tính năng thiền có hướng dẫn với các lời nhắc bằng giọng nói có thể tùy chỉnh. Triển khai tiếng chuông báo chuyển giai đoạn với điều khiển âm lượng và lựa chọn âm thanh. Thêm tính năng theo dõi lịch sử phiên thiền và số liệu thống kê. Tạo các hướng dẫn nhịp thở trực quan bằng hoạt ảnh. Hỗ trợ sử dụng ngoại tuyến dưới dạng ứng dụng web tiến bộ (PWA). Bao gồm chế độ nền tối (dark mode) và nhiều chủ đề giao diện. Thêm tính năng lên lịch phiên thiền kèm thông báo nhắc nhở.
Phát triển một trình phát nhạc trên nền tảng web
Phát triển một trình phát nhạc trên nền tảng web sử dụng HTML5, CSS3 và JavaScript kết hợp với Web Audio API. Tạo giao diện hiện đại có hiển thị ảnh bìa album và hiệu ứng sóng nhạc trực quan (visualizations). Triển khai quản lý danh sách phát (playlist) với khả năng kéo và thả để sắp xếp lại thứ tự bài hát. Thêm các nút điều khiển âm thanh bao gồm phát/tạm dừng, chuyển bài, tua, âm lượng và tốc độ phát. Bao gồm chế độ phát ngẫu nhiên (shuffle) và lặp lại (repeat) kèm các chỉ báo trực quan. Hỗ trợ nhiều định dạng âm thanh cùng cơ chế dự phòng (fallbacks). Triển khai bộ cân bằng âm thanh (equalizer) 10 dải tần với các cấu hình cài đặt sẵn (presets). Thêm tính năng trích xuất và hiển thị siêu dữ liệu (metadata) từ các tệp âm thanh. Tạo thiết kế đáp ứng hoạt động tốt trên mọi thiết bị. Bao gồm các phím tắt bàn phím để điều khiển phát nhạc. Hỗ trợ phát nhạc trong nền với tích hợp Media Session API.
Tạo một ứng dụng tìm kiếm công thức nấu ăn
Tạo một ứng dụng tìm kiếm công thức nấu ăn sử dụng HTML5, CSS3, JavaScript và một API ẩm thực. Xây dựng giao diện hấp dẫn trực quan với hình ảnh món ăn đẹp mắt và điều hướng dễ hiểu. Triển khai tìm kiếm nâng cao với bộ lọc theo nguyên liệu, nền ẩm thực, chế độ ăn kiêng và thời gian chuẩn bị. Thêm phần đánh giá và nhận xét của người dùng với hệ thống chấm sao. Bao gồm thông tin dinh dưỡng chi tiết với các chỉ báo trực quan về lượng calo, chất dinh dưỡng đa lượng (macros) và các chất gây dị ứng. Hỗ trợ lưu công thức nấu ăn và phân loại vào các bộ sưu tập. Triển khai lịch lập kế hoạch bữa ăn với chức năng kéo và thả. Thêm tính năng tự động điều chỉnh quy mô khẩu phần kèm việc tính toán lại định lượng nguyên liệu. Bao gồm chế độ nấu ăn với hướng dẫn từng bước và bộ hẹn giờ. Hỗ trợ truy cập ngoại tuyến vào các công thức đã lưu. Thêm chức năng chia sẻ lên mạng xã hội cho các công thức yêu thích.
Phát triển một ứng dụng theo dõi ngân sách toàn diện
Phát triển một ứng dụng theo dõi ngân sách toàn diện sử dụng HTML5, CSS3 và JavaScript. Tạo bảng điều khiển trực quan hiển thị thu nhập, chi tiêu, khoản tiết kiệm và tình trạng ngân sách. Triển khai quản lý giao dịch với các danh mục, thẻ gắn (tags) và các giao dịch định kỳ. Thêm các biểu đồ và đồ thị tương tác để phân tích chi tiêu theo danh mục và khoảng thời gian. Bao gồm tính năng thiết lập mục tiêu ngân sách kèm theo dõi tiến độ và cảnh báo. Hỗ trợ nhiều tài khoản và chuyển tiền qua lại giữa các tài khoản. Triển khai tính năng quét và lưu trữ hóa đơn bằng camera của thiết bị. Thêm chức năng xuất báo cáo ở các định dạng CSV and PDF. Tạo thiết kế đáp ứng theo hướng ưu tiên thiết bị di động (mobile-first). Bao gồm chức năng sao lưu và khôi phục dữ liệu. Thêm các tính năng dự báo để dự đoán tình hình tài chính trong tương lai dựa trên xu hướng hiện tại.Tạo một ứng dụng vẽ tương tác
Tạo một ứng dụng vẽ tương tác sử dụng HTML5 Canvas, CSS3 và JavaScript. Xây dựng giao diện gọn gàng với khả năng chọn công cụ trực quan. Triển khai nhiều công cụ vẽ bao gồm cọ vẽ, bút chì, hình khối, văn bản và cục tẩy. Thêm tính năng chọn màu với danh sách màu dùng gần đây, bộ chọn màu (color picker) và các bảng màu. Bao gồm hỗ trợ đa lớp (layers) với các tùy chọn độ mờ đục (opacity) và chế độ hòa trộn (blend mode). Triển khai chức năng hoàn tác/làm lại (undo/redo) với lịch sử các trạng thái. Thêm tính năng nhập và xuất hình ảnh ở nhiều định dạng (PNG, JPG, SVG). Hỗ trợ thay đổi kích thước và xoay vùng vẽ canvas. Triển khai điều hướng thu phóng (zoom) và kéo trượt (pan). Thêm các công cụ chọn vùng với khả năng di chuyển, thay đổi kích thước và biến đổi hình dạng (transform). Bao gồm các phím tắt bàn phím cho những thao tác phổ biến.
Xây dựng một bảng điều khiển thời tiết toàn diện
Xây dựng một bảng điều khiển thời tiết toàn diện sử dụng HTML5, CSS3, JavaScript và OpenWeatherMap API. Tạo một giao diện bắt mắt hiển thị điều kiện thời tiết hiện tại với các biểu tượng phù hợp và thay đổi hình nền dựa trên thời tiết/thời gian trong ngày. Hiển thị dự báo chi tiết trong 5 ngày kèm khả năng mở rộng xem chi tiết từng giờ cho mỗi ngày. Triển khai tìm kiếm vị trí có tính năng tự động hoàn thành (autocomplete) và lịch sử tìm kiếm, hỗ trợ cả tên thành phố lẫn tọa độ địa lý. Thêm hỗ trợ định vị địa lý (geolocation) để tự động phát hiện vị trí của người dùng. Bao gồm nút chuyển đổi đơn vị nhiệt độ (°C/°F) và định dạng thời gian. Hiển thị các cảnh báo thời tiết khắc nghiệt với việc làm nổi bật mức độ ưu tiên. Hiển thị dữ liệu khí tượng chi tiết bao gồm tốc độ/hướng gió, độ ẩm, áp suất khí quyển, chỉ số tia UV và chất lượng không khí khi có sẵn. Bao gồm thời gian mặt trời mọc/mặt trời lặn kèm chỉ báo trực quan. Tạo bố cục đáp ứng hoàn toàn (responsive layout) bằng CSS Grid thích ứng với mọi kích thước thiết bị với mật độ thông tin hợp lý.
Phát triển giao diện người dùng (front-end) cho hệ thống quản lý tự phục vụ của Xiaomi bằng các công nghệ web hiện đại.
Hãy đóng vai một Nhà Phát triển Frontend (Frontend Developer). Bạn được giao nhiệm vụ xây dựng phần giao diện người dùng cho hệ thống quản lý tự phục vụ của Xiaomi. Trách nhiệm của bạn bao gồm: - Thiết kế giao diện thân thiện với người dùng bằng HTML5, CSS3 và JavaScript. - Đảm bảo khả năng tương thích tốt trên nhiều thiết bị và kích thước màn hình khác nhau. - Triển khai các thành phần tương tác nhằm nâng cao sự gắn kết của người dùng. - Tích hợp với các dịch vụ backend để lấy và hiển thị dữ liệu một cách linh hoạt. - Tiến hành kiểm thử kỹ lưỡng để đảm bảo trải nghiệm người dùng liền mạch, mượt mà. Quy tắc: - Tuân thủ nghiêm ngặt quy chuẩn thiết kế và bộ nhận diện thương hiệu của Xiaomi. - Đảm bảo hiệu năng cao và tốc độ phản hồi nhanh nhạy. - Duy trì mã nguồn sạch sẽ và có tài liệu hướng dẫn đầy đủ. Các biến số: - Bootstrap - Framework CSS sẽ sử dụng - apiEndpoint - Đường dẫn endpoint API của backend - #FF6700 - Màu chủ đạo chính của hệ thống Ví dụ: - Tạo giao diện bảng điều khiển (dashboard) có chức năng đăng nhập người dùng và các tính năng trực quan hóa dữ liệu.
Tạo một trò chơi phòng thủ nhiều người chơi hấp dẫn lấy cảm hứng từ forntwars.io, tập trung vào chiến thuật thời gian thực và quản lý tài nguyên.
Hãy đóng vai một Nhà Phát triển Trò chơi (Game Developer). Bạn có kỹ năng cao trong việc tạo ra các trò chơi nhiều người chơi thời gian thực (real-time multiplayer) tập trung vào tính chiến thuật và sự lôi cuốn.\nNhiệm vụ của bạn là thiết kế một trò chơi phòng thủ nhiều người chơi tương tự như forntwars.io.\nBạn sẽ:\n- Phát triển một máy chủ mạnh mẽ bằng công nghệ Node.js để xử lý các tương tác của người chơi theo thời gian thực.\n- Triển khai ứng dụng phía máy khách (client-side) bằng JavaScript, đảm bảo lối chơi mượt mà và cơ chế điều khiển trực quan.\n- Thiết kế các bản đồ và màn chơi hấp dẫn với độ khó và thử thách đa dạng.\n- Xây dựng hệ thống kinh tế trong game để quản lý tài nguyên và nâng cấp.\nQuy tắc:\n- Đảm bảo trò chơi được cân bằng tốt nhằm mang lại sự cạnh tranh công bằng.\n- Tối ưu hóa hiệu năng để xử lý nhiều người chơi truy cập cùng lúc.\n- Tích hợp các cơ chế chống gian lận (anti-cheat) nhằm duy trì tính minh bạch của trò chơi.\n- Tiếp thu phản hồi từ các đợt chơi thử nghiệm (playtests) để tinh chỉnh cơ chế trò chơi.
Đóng vai lập trình viên front-end chuyên sâu về Next.js, tập trung xây dựng các ứng dụng web năng động, tốc độ cao và hiệu quả.
Hãy đóng vai một Lập trình viên Front-End Chuyên biệt về Next.js. Bạn là chuyên gia trong việc xây dựng các ứng dụng web năng động và hiệu suất cao bằng Next.js và React. Nhiệm vụ của bạn là: - Phát triển các ứng dụng web hiệu năng cao sử dụng Next.js và React - Phối hợp chặt chẽ với các nhà thiết kế UI/UX để nâng cao trải nghiệm người dùng - Triển khai thiết kế đáp ứng (responsive design) và đảm bảo tương thích trên mọi trình duyệt - Tối ưu hóa ứng dụng để đạt tốc độ tải trang tối đa và khả năng mở rộng quy mô (scalability) - Tích hợp các RESTful API và đảm bảo luồng dữ liệu vận hành mượt mà, liền mạch Công cụ và Công nghệ sử dụng: - Next.js - React - JavaScript (ES6+) - CSS và Styled-components - Git để quản lý phiên bản mã nguồn Quy tắc: - Tuân thủ các phương pháp thực hành tốt nhất (best practices) về cấu trúc mã nguồn và các mẫu thiết kế (design patterns) - Đảm bảo toàn bộ mã nguồn đều có tài liệu chú thích rõ ràng và dễ bảo trì - Luôn cập nhật các xu hướng và tính năng mới nhất trong hệ sinh thái Next.js cũng như phát triển front-end hiện đại
Phát triển giao diện bảng điều khiển có thanh điều hướng bên (sidebar dashboard) hiện đại bằng HTML, CSS và JavaScript, tập trung vào trải nghiệm người dùng và thiết kế đáp ứng đa thiết bị (responsive design).
Hãy đóng vai một Lập trình viên Frontend. Bạn được giao nhiệm vụ thiết kế giao diện bảng điều khiển có thanh điều hướng bên (sidebar dashboard) vừa hiện đại vừa thân thiện với người dùng. Trách nhiệm của bạn bao gồm: - Tạo bố cục đáp ứng kích thước màn hình (responsive layout) bằng HTML5 và CSS3. - Triển khai các phần tử tương tác bằng JavaScript để cập nhật nội dung động mượt mà. - Đảm bảo thanh bên (sidebar) dễ dàng điều hướng và tiếp cận, có các mục đóng/mở thu gọn (collapsible sections) cho những nhóm chức năng khác nhau. - Áp dụng các phương pháp thực hành tốt nhất về thiết kế UX/UI nhằm nâng cao trải nghiệm người dùng. Quy tắc: - Duy trì mã nguồn sạch sẽ, có tổ chức khoa học. - Đảm bảo khả năng tương thích chéo trên nhiều trình duyệt (cross-browser compatibility). - Tối ưu hóa hiển thị cho cả màn hình thiết bị di động lẫn máy tính để bàn.
Phát triển bộ công cụ tích hợp dành cho trò chơi Clash of Clans bằng Next.js và React, bao gồm các tính năng sao chép sơ đồ căn cứ, hướng dẫn chiến thuật và thảo luận cộng đồng.
Hãy đóng vai một Lập trình viên Next.js và React. Bạn được giao nhiệm vụ xây dựng một công cụ toàn diện dành cho những người đam mê trò chơi Clash of Clans. Công cụ này cần tích hợp các tính năng sao chép sơ đồ bố trí căn cứ (formation copying), hướng dẫn chiến thuật và thảo luận cộng đồng. Nhiệm vụ của bạn là: - Thiết kế và phát triển phần giao diện (frontend) bằng Next.js và React, đảm bảo giao diện đáp ứng tốt trên mọi thiết bị (responsive) và thân thiện với người dùng. - Triển khai các tính năng giúp người dùng sao chép và chia sẻ sơ đồ căn cứ một cách liền mạch. - Tạo các mô-đun giảng dạy chiến thuật, bao gồm các bài hướng dẫn và cẩm nang tương tác. - Phát triển diễn đàn cộng đồng để thảo luận và chia sẻ chiến thuật. - Đảm bảo ứng dụng được tối ưu hóa về hiệu năng và SEO. Quy tắc: - Tuân theo các thực hành tốt nhất trong phát triển React và Next.js. - Đảm bảo khả năng tương thích đa trình duyệt và thiết kế đáp ứng (responsive design). - Tận dụng kết xuất phía máy chủ (SSR) ở những nơi phù hợp để tối ưu lợi ích SEO. Các biến số: - formation copying, strategy teaching, community discussion - Danh sách các tính năng cần đưa vào - Next.js - Framework sử dụng để phát triển - React - Thư viện sử dụng cho các thành phần giao diện (UI components)
Phân tích mẫu mã nguồn dựa trên cây cú pháp trừu tượng (AST) bằng công cụ ast-grep để phát hiện các vấn đề về bảo mật, hiệu năng và cấu trúc. Sử dụng khi: (1) rà soát mã nguồn để tìm lỗ hổng bảo mật, (2) phân tích các phụ thuộc của React hook hoặc các mẫu hiệu năng, (3) phát hiện các phản mẫu cấu trúc trên các kho mã nguồn lớn, (4) cần đối sánh mẫu có hệ thống vượt ra ngoài khả năng kiểm tra thủ công bằng mắt thường.
--- name: ast-code-analysis-superpower description: Phân tích mẫu mã nguồn dựa trên cây cú pháp trừu tượng (AST) bằng công cụ ast-grep để phát hiện các vấn đề về bảo mật, hiệu năng và cấu trúc. Sử dụng khi (1) rà soát mã nguồn để tìm lỗ hổng bảo mật, (2) phân tích các phụ thuộc của React hook hoặc các mẫu hiệu năng, (3) phát hiện các phản mẫu cấu trúc trên các kho mã nguồn lớn, (4) cần đối sánh mẫu có hệ thống vượt ra ngoài khả năng kiểm tra thủ công bằng mắt thường. --- # Phân tích Mã nguồn bằng AST-Grep Kỹ thuật đối sánh mẫu AST xác định các vấn đề trong mã nguồn thông qua việc nhận diện cấu trúc cú pháp thay vì đọc từng dòng chữ đơn thuần. Cấu trúc mã nguồn hé lộ những mối quan hệ ẩn, các lỗ hổng và các phản mẫu (anti-patterns) mà việc kiểm tra bề mặt dễ dàng bỏ sót. ## Cấu hình - **Ngôn ngữ Mục tiêu**: javascript - **Trọng tâm Phân tích**: security - **Mức độ Nghiêm trọng**: ERROR - **Framework**: React - **Độ sâu Lồng nhau Tối đa**: 3 ## Điều kiện Tiên quyết ```bash # Install ast-grep (if not available) npm install -g @ast-grep/cli # Or: mise install -g ast-grep ``` ## Cây Quyết định: Khi nào Nên Dùng Phân tích AST ``` Cần rà soát mã nguồn (Code review)? | +-- Mã đơn giản (<50 dòng, cấu trúc hiển nhiên) --> Rà soát thủ công | +-- Mã phức tạp (lồng nhau sâu, trải trên nhiều tệp, nhiều tầng trừu tượng) | +-- Cần rà soát bảo mật? --> Sử dụng các mẫu bảo mật (security patterns) +-- Phân tích hiệu năng? --> Sử dụng các mẫu hiệu năng (performance patterns) +-- Chất lượng cấu trúc? --> Sử dụng các mẫu cấu trúc (structure patterns) +-- Tìm mẫu xuyên qua nhiều tệp? --> Chạy kèm cờ --include glob ``` ## Các Danh mục Mẫu (Pattern Categories) | Danh mục | Trọng tâm | Các Phát hiện Thường gặp | |----------|-------|-----------------| | Bảo mật (Security) | Các hàm mật mã học, luồng xác thực | Thông tin bí mật gắn cứng trong mã, tạo token yếu | | Hiệu năng (Performance) | Hooks, vòng lặp, xử lý bất đồng bộ | Vòng lặp kết xuất lại (re-renders) vô hạn, rò rỉ bộ nhớ | | Cấu trúc (Structure) | Độ sâu lồng nhau, độ phức tạp | Câu lệnh điều kiện lồng quá sâu, khó bảo trì | ## Các Mẫu Thiết yếu ### Bảo mật: Thông tin Bí mật Gắn cứng trong Mã (Hardcoded Secrets) ```yaml # sg-rules/security/hardcoded-secrets.yml id: hardcoded-secrets language: javascript rule: pattern: | const $VAR = '$LITERAL'; $FUNC($VAR, ...) meta: severity: ERROR message: "Potential hardcoded secret detected" ``` ### Bảo mật: Khởi tạo Token Không An toàn ```yaml # sg-rules/security/insecure-tokens.yml id: insecure-token-generation language: javascript rule: pattern: | btoa(JSON.stringify($OBJ) + '.' + $SECRET) meta: severity: ERROR message: "Insecure token generation using base64" ``` ### Hiệu năng: Phụ thuộc của Hook trong React ```yaml # sg-rules/performance/react-hook-deps.yml id: react-hook-dependency-array language: typescript rule: pattern: | useEffect(() => { $BODY }, [$FUNC]) meta: severity: WARNING message: "Function dependency may cause infinite re-renders" ``` ### Cấu trúc: Lồng nhau Quá sâu (Deep Nesting) ```yaml # sg-rules/structure/deep-nesting.yml id: deep-nesting language: javascript rule: any: - pattern: | if ($COND1) { if ($COND2) { if ($COND3) { $BODY } } } - pattern: | for ($INIT) { for ($INIT2) { for ($INIT3) { $BODY } } } meta: severity: WARNING message: "Deep nesting (>3 levels) - consider refactoring" ``` ## Chạy Phân tích ```bash # Security scan ast-grep run -r sg-rules/security/ # Performance scan on React files ast-grep run -r sg-rules/performance/ --include="*.tsx,*.jsx" # Full scan with JSON output ast-grep run -r sg-rules/ --format=json > analysis-report.json # Interactive mode for investigation ast-grep run -r sg-rules/ --interactive ``` ## Danh sách Kiểm tra Khi Viết Mẫu (Pattern Writing) - [ ] Mẫu khớp chính xác với phản mẫu cụ thể, không bắt nhầm mã nguồn thông thường - [ ] Sử dụng `inside` hoặc `has` để giới hạn ràng buộc ngữ cảnh - [ ] Bao gồm các mệnh đề phủ định `not` nhằm giảm thiểu báo động giả (false positives) - [ ] Tách riêng quy tắc cho từng ngôn ngữ (JS so với TS) - [ ] Gán mức độ nghiêm trọng phù hợp (ERROR/WARNING/INFO) ## Các Lỗi Thường gặp | Lỗi | Triệu chứng | Cách khắc phục | |---------|---------|-----| | Mẫu quá chung chung | Xuất hiện nhiều báo động giả | Bổ sung các ràng buộc ngữ cảnh | | Thiếu ràng buộc `inside` | Khớp nhầm ở các vị trí không mong muốn | Giới hạn phạm vi bằng ngữ cảnh nút cha | | Không có mệnh đề `not` | Bắt luôn cả các đoạn mã hợp lệ | Loại trừ các trường hợp chuẩn đã biết | | Chạy mẫu JS trên mã TS | Chú thích kiểu dữ liệu (type annotations) làm hỏng kết quả khớp | Tạo bộ quy tắc riêng biệt cho từng ngôn ngữ | ## Các Bước Xác minh 1. **Kiểm thử độ chính xác của mẫu**: Chạy thử trên các mẫu mã nguồn đã biết trước là có lỗ hổng 2. **Kiểm tra tỷ lệ báo động giả**: Rà soát thủ công 10 kết quả khớp đầu tiên 3. **Xác thực mức độ nghiêm trọng**: Xác nhận các phát hiện ở mức ERROR thực sự cần và có thể xử lý ngay 4. **Độ bao phủ xuyên tệp**: Xác minh mẫu quét qua đúng toàn bộ phạm vi dự kiến ## Ví dụ Kết quả Đầu ra ``` $ ast-grep run -r sg-rules/ src/components/UserProfile.jsx:15: ERROR [insecure-tokens] Insecure token generation src/hooks/useAuth.js:8: ERROR [hardcoded-secrets] Potential hardcoded secret src/components/Dashboard.tsx:23: WARNING [react-hook-deps] Function dependency src/utils/processData.js:45: WARNING [deep-nesting] Deep nesting detected Found 4 issues (2 errors, 2 warnings) ``` ## Thiết lập Dự án ```bash # Initialize ast-grep in project ast-grep init # Create rule directories mkdir -p sg-rules/{security,performance,structure} # Add to CI pipeline # .github/workflows/lint.yml # - run: ast-grep run -r sg-rules/ --format=json ``` ## Mẫu Tự Tạo Quy tắc Tùy chỉnh ### Các Mẫu Đặc thù cho React ```yaml # Missing key in list rendering id: missing-list-key language: typescript rule: pattern: | $ARRAY.map(($ITEM) => <$COMPONENT $$$PROPS />) constraints: $PROPS: not: has: pattern: 'key={$_}' meta: severity: WARNING message: "Missing key prop in list rendering" ``` ### Các Mẫu Bất đồng bộ (Async/Await) ```yaml # Missing error handling in async id: unhandled-async language: javascript rule: pattern: | async function $NAME($$$) { $$$BODY } constraints: $BODY: not: has: pattern: 'try { $$$ } catch' meta: severity: WARNING message: "Async function without try-catch error handling" ``` ## Tích hợp vào CI/CD ```yaml # GitHub Actions example name: AST Analysis on: [push, pull_request] jobs: analyze: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Install ast-grep run: npm install -g @ast-grep/cli - name: Run analysis run: | ast-grep run -r sg-rules/ --format=json > report.json if grep -q '"severity": "ERROR"' report.json; then echo "Critical issues found!" exit 1 fi ```
Thực hiện kiểm toán mức độ tuân thủ chuẩn WCAG và khắc phục các lỗi khả năng tiếp cận (accessibility) cho ứng dụng web. Sử dụng khi: 1) Kiểm toán giao diện UI theo chuẩn WCAG 2.1/2.2 2) Khắc phục lỗi trình đọc màn hình hoặc điều hướng bằng bàn phím 3) Triển khai đúng các mẫu ARIA 4) Đánh giá độ tương phản màu sắc và khả năng tiếp cận thị giác 5) Tạo biểu mẫu hoặc thành phần tương tác dễ tiếp cận
--- name: accessibility-testing-superpower description: | Thực hiện kiểm toán mức độ tuân thủ chuẩn WCAG và khắc phục các lỗi khả năng tiếp cận (accessibility) cho ứng dụng web. Sử dụng khi: 1) Kiểm toán giao diện UI theo chuẩn WCAG 2.1/2.2 2) Khắc phục lỗi trình đọc màn hình hoặc điều hướng bằng bàn phím 3) Triển khai đúng các mẫu ARIA 4) Đánh giá độ tương phản màu sắc và khả năng tiếp cận thị giác 5) Tạo biểu mẫu hoặc thành phần tương tác dễ tiếp cận --- # Quy Trình Kiểm Thử Khả Năng Tiếp Cận (Accessibility Testing Workflow) ## Cấu Hình (Configuration) - **Cấp độ WCAG (WCAG Level)**: AA - **Thành phần Đang Kiểm thử (Component Under Test)**: Page - **Tiêu chuẩn Tuân thủ (Compliance Standard)**: WCAG 2.1 - **Điểm Lighthouse Tối thiểu (Minimum Lighthouse Score)**: 90 - **Trình Đọc Màn Hình Chính (Primary Screen Reader)**: NVDA - **Framework Kiểm thử (Test Framework)**: jest-axe ## Cây Quyết Định Kiểm Toán (Audit Decision Tree) ``` Nhận được yêu cầu kiểm tra khả năng tiếp cận (Accessibility) | +-- Thành phần/trang mới? | +-- Chạy quét tự động trước tiên (axe-core, Lighthouse) | +-- Kiểm thử điều hướng bằng bàn phím | +-- Kiểm tra thông báo phát ra trên trình đọc màn hình | +-- Xác minh độ tương phản màu sắc | +-- Sửa lỗi vi phạm hiện có? | +-- Xác định tiêu chí thành công WCAG tương ứng | +-- Kiểm tra xem HTML ngữ nghĩa (semantic HTML) có giải quyết được không | +-- Chỉ áp dụng ARIA khi HTML thuần túy không đáp ứng đủ | +-- Xác minh bản sửa lỗi bằng công nghệ hỗ trợ (assistive technology) | +-- Kiểm toán tuân thủ tổng thể (Compliance audit)? +-- Quét tự động (phát hiện được ~30% số lỗi) +-- Kiểm thử thủ công theo danh sách kiểm tra (checklist) +-- Ghi nhận các vi phạm theo mức độ nghiêm trọng +-- Xây dựng lộ trình khắc phục (remediation roadmap) ``` ## Tham Khảo Nhanh Chuẩn WCAG ### Phân Loại Mức Độ Nghiêm Trọng (Severity Classification) | Mức độ (Severity) | Tác động (Impact) | Ví dụ (Examples) | Thời hạn khắc phục (Fix Timeline) | |----------|--------|----------|--------------| | Nghiêm trọng (Critical) | Chặn hoàn toàn khả năng truy cập | Không thể focus bằng bàn phím, nút bấm rỗng không nhãn, thiếu thuộc tính alt trên hình ảnh chức năng | Ngay lập tức (Immediate) | | Nặng (Serious) | Gây rào cản lớn | Độ tương phản kém, thiếu nhãn biểu mẫu (form labels), không có liên kết bỏ qua điều hướng (skip links) | Ngay trong sprint hiện tại | | Trung bình (Moderate) | Gây khó khăn nhưng vẫn dùng được | Điều hướng thiếu nhất quán, thông báo lỗi không rõ ràng | Bản phát hành tiếp theo | | Nhẹ (Minor) | Gây bất tiện nhỏ | Văn bản alt bị dư thừa lặp lại, lỗi nhỏ về thứ tự thẻ tiêu đề (heading order) | Đưa vào danh sách chờ (Backlog) | ### Các Lỗi Vi Phạm Phổ Biến và Cách Khắc Phục **Thiếu tên định danh hỗ trợ tiếp cận (Missing accessible name)** ```html <!-- Violation --> <button><svg>...</svg></button> <!-- Fix: aria-label --> <button aria-label="Close dialog"><svg>...</svg></button> <!-- Fix: visually hidden text --> <button><span class="sr-only">Close dialog</span><svg>...</svg></button> ``` **Liên kết nhãn biểu mẫu (Form label association)** ```html <!-- Violation --> <label>Email</label> <input type="email"> <!-- Fix: explicit association --> <label for="email">Email</label> <input type="email" id="email"> <!-- Fix: implicit association --> <label>Email <input type="email"></label> ``` **Lỗi độ tương phản màu sắc (Color contrast failure)** ``` Tỷ lệ tương phản tối thiểu (WCAG AA): - Văn bản thường (<18px hoặc <14px in đậm): 4.5:1 - Văn bản cỡ lớn (>=18px hoặc >=14px in đậm): 3:1 - Các thành phần giao diện UI và đồ họa: 3:1 Công cụ kiểm tra: WebAIM Contrast Checker, công cụ DevTools của trình duyệt ``` **Khả năng nhìn rõ trạng thái tiêu điểm (Focus visibility)** ```css /* Never do this without alternative */ :focus { outline: none; } /* Proper custom focus */ :focus-visible { outline: 2px solid #005fcc; outline-offset: 2px; } ``` ## Khung Quyết Định Sử Dụng ARIA (ARIA Decision Framework) ``` Cần truyền tải thông tin tới công nghệ hỗ trợ (assistive technology)? | +-- HTML ngữ nghĩa (semantic HTML) có làm được không? | +-- CÓ: Sử dụng thẻ HTML chuẩn (<button>, <nav>, <main>, <article>) | +-- KHÔNG: Tiếp tục chuyển sang dùng ARIA | +-- Cần sử dụng loại thuộc tính ARIA nào? +-- Vai trò (Role): Phần tử này LÀ gì? (role="dialog", role="tab") +-- Trạng thái (State): Đang ở tình trạng nào? (aria-expanded, aria-checked) +-- Thuộc tính (Property): Có mối quan hệ gì? (aria-labelledby, aria-describedby) +-- Vùng cập nhật trực tiếp (Live region): Nội dung thay đổi động? (aria-live="polite") ``` ### Các Mẫu ARIA Cho Các Thành Phần Tương Tác Phổ Biến **Khối đóng/mở nội dung (Disclosure - show/hide)** ```html <button aria-expanded="false" aria-controls="content-1"> Show details </button> <div id="content-1" hidden> Content here </div> ``` **Giao diện chuyển thẻ (Tab interface)** ```html <div role="tablist" aria-label="Settings"> <button role="tab" aria-selected="true" aria-controls="panel-1" id="tab-1"> General </button> <button role="tab" aria-selected="false" aria-controls="panel-2" id="tab-2" tabindex="-1"> Privacy </button> </div> <div role="tabpanel" id="panel-1" aria-labelledby="tab-1">...</div> <div role="tabpanel" id="panel-2" aria-labelledby="tab-2" hidden>...</div> ``` **Hộp thoại Modal (Modal dialog)** ```html <div role="dialog" aria-modal="true" aria-labelledby="dialog-title"> <h2 id="dialog-title">Confirm action</h2> <p>Are you sure you want to proceed?</p> <button>Cancel</button> <button>Confirm</button> </div> ``` ## Danh Sách Kiểm Tra Điều Hướng Bằng Bàn Phím ``` [ ] Tất cả các phần tử tương tác đều có thể di chuyển tiêu điểm (focus) tới bằng phím Tab [ ] Thứ tự di chuyển tiêu điểm (focus order) khớp với thứ tự thị giác/logic [ ] Trạng thái tiêu điểm (focus) luôn hiển thị rõ ràng bằng mắt thường trên mọi phần tử [ ] Không có bẫy bàn phím (luôn có thể nhấn Tab để thoát ra ngoài) [ ] Liên kết bỏ qua tới nội dung chính (Skip link) là phần tử nhận focus đầu tiên trên trang [ ] Phím Escape đóng được các hộp thoại modal/danh sách thả xuống (dropdowns) [ ] Các phím mũi tên điều hướng mượt mà bên trong các tiện ích (tabs, menus, grids) [ ] Phím Enter/Space kích hoạt được các nút bấm và liên kết [ ] Các phím tắt tùy chỉnh đều có tài liệu hướng dẫn và cho phép cấu hình lại ``` ### Các Mẫu Quản Lý Tiêu Điểm (Focus Management Patterns) **Giữ tiêu điểm bên trong hộp thoại Modal (Modal focus trap)** ```javascript // On modal open: // 1. Save previously focused element // 2. Move focus to first focusable in modal // 3. Trap Tab within modal boundaries // On modal close: // 1. Return focus to saved element ``` **Nội dung cập nhật động (Dynamic content)** ```javascript // After adding content: // - Announce via aria-live region, OR // - Move focus to new content heading // After removing content: // - Move focus to logical next element // - Never leave focus on removed element ``` ## Kiểm Thử Với Trình Đọc Màn Hình (Screen Reader Testing) ### Xác Minh Nội Dung Đọc Thông Báo | Phần tử (Element) | Nội dung Cần Đọc Lên (Should Announce) | |---------|-----------------| | Nút bấm (Button) | Vai trò + tên + trạng thái ("Submit button" / "Nút Gửi") | | Liên kết (Link) | Tên + "link" ("Home page link" / "Liên kết Trang chủ") | | Hình ảnh (Image) | Văn bản thay thế (Alt text) HOẶC coi là ảnh trang trí (bỏ qua không đọc) | | Tiêu đề (Heading) | Cấp độ tiêu đề + nội dung chữ ("Heading level 2, About us") | | Trường biểu mẫu (Form field) | Nhãn + loại trường + trạng thái + hướng dẫn nhập liệu | | Thông báo lỗi (Error) | Nội dung lỗi + gắn kết rõ với trường bị lỗi | ### Các Phím Lệnh Kiểm Thử (Tham Khảo Nhanh) **VoiceOver (macOS)** - VO = Ctrl + Option - VO + A: Đọc toàn bộ từ vị trí hiện tại - VO + Mũi tên Phải/Trái: Di chuyển qua các phần tử - VO + Cmd + H: Chuyển tới tiêu đề (heading) tiếp theo - VO + Cmd + J: Chuyển tới phần tử điều khiển biểu mẫu tiếp theo **NVDA (Windows)** - NVDA + Mũi tên Xuống: Đọc toàn bộ - Tab: Chuyển tới phần tử nhận focus tiếp theo - H: Chuyển tới tiêu đề (heading) tiếp theo - F: Chuyển tới trường biểu mẫu tiếp theo - B: Chuyển tới nút bấm tiếp theo ## Tích Hợp Kiểm Thử Tự Động ### Sử dụng axe-core trong bài kiểm thử ```javascript // jest-axe import { axe, toHaveNoViolations } from 'jest-axe'; expect.extend(toHaveNoViolations); test('component is accessible', async () => { const { container } = render(<MyComponent />); const results = await axe(container); expect(results).toHaveNoViolations(); }); ``` ### Ngưỡng điểm Lighthouse CI ```javascript // lighthouserc.js module.exports = { assertions: { 'categories:accessibility': ['error', { minScore: 90 / 100 }], }, }; ``` ## Ma Trận Ưu Tiên Khắc Phục Lỗi (Remediation Priority Matrix) ``` Mức độ Tác động so với Công sức Bỏ ra: Công sức Thấp Công sức Cao Tác động Cao | LÀM NGAY ĐẦU TIÊN | LÊN KẾ HOẠCH TIẾP | | văn bản alt | thiết kế lại UI | | nhãn biểu mẫu | làm lại thanh nav | ----------------|---------------------|---------------------| Tác động Thấp | THẮNG NHANH | ĐƯA VÀO BACKLOG | | chỉnh tương phản | cải tiến phụ | | tinh chỉnh nhỏ | có thì tốt | ``` ## Danh Sách Kiểm Tra Xác Minh Cuối Cùng Trước khi đánh dấu hoàn thành công việc đảm bảo khả năng tiếp cận: ``` Kiểm thử Tự động: [ ] axe-core báo cáo không còn bất kỳ vi phạm nào (zero violations) [ ] Điểm khả năng tiếp cận trên Lighthouse >= 90 [ ] Trình kiểm tra HTML hợp lệ vượt qua hoàn toàn (ảnh hưởng trực tiếp tới cách công nghệ hỗ trợ phân tích cú pháp) Kiểm thử Bàn phím: [ ] Hoàn thành trọn vẹn mọi tác vụ mà không cần dùng chuột [ ] Viền tiêu điểm (focus) luôn nhìn thấy rõ ở mọi thời điểm [ ] Thứ tự nhấn phím Tab hợp lý, mạch lạc [ ] Không có bẫy bàn phím Kiểm thử Trình đọc Màn hình: [ ] Đã kiểm thử thực tế với ít nhất một trình đọc màn hình (NVDA) [ ] Mọi nội dung đều được đọc thông báo chính xác [ ] Các phần tử tương tác đều có đầy đủ vai trò (roles) và trạng thái (states) [ ] Các cập nhật nội dung động đều được thông báo kịp thời Kiểm thử Thị giác: [ ] Tỷ lệ tương phản màu sắc đã được xác minh (tối thiểu 4.5:1) [ ] Giao diện vẫn hoạt động tốt không vỡ khung ở mức phóng đại 200% zoom [ ] Không có thông tin nào chỉ được truyền tải độc nhất bằng màu sắc [ ] Tôn trọng thiết lập giảm chuyển động (prefers-reduced-motion) của người dùng ```
Tạo một bảng điều khiển (dashboard) thân thiện với người dùng để theo dõi và quản lý các khoản đầu tư của bạn một cách hiệu quả.
Hãy đóng vai một Lập trình viên Phát triển Bảng điều khiển (Dashboard Developer). Bạn được giao nhiệm vụ xây dựng một bảng điều khiển theo dõi đầu tư. Nhiệm vụ của bạn là: - Phát triển một ứng dụng theo dõi đầu tư toàn diện bằng cách sử dụng React và JavaScript. - Thiết kế giao diện trực quan hiển thị hiệu suất danh mục đầu tư, tỷ trọng phân bổ tài sản và mức tăng trưởng đầu tư. - Triển khai các tính năng theo dõi nhiều loại hình đầu tư khác nhau bao gồm cổ phiếu, trái phiếu và quỹ tương hỗ. - Đưa vào các công cụ trực quan hóa dữ liệu chẳng hạn như biểu đồ và đồ thị để biểu diễn dữ liệu một cách rõ ràng. - Đảm bảo bảng điều khiển có thiết kế đáp ứng (responsive) và dễ dàng truy cập trên nhiều thiết bị khác nhau. Quy tắc: - Sử dụng các phương pháp lập trình an toàn, bảo mật và hiệu quả. - Giữ cho giao diện người dùng đơn giản và dễ điều hướng. - Đảm bảo cập nhật dữ liệu theo thời gian thực để theo dõi chính xác. Các biến số: - framework - Framework sử dụng để phát triển giao diện - language - Ngôn ngữ lập trình dành cho logic phía backend.
Hướng dẫn người dùng xây dựng ứng dụng máy tính để bàn (desktop application) bằng Electron với trọng tâm là các thực hành tốt nhất trong phát triển frontend.
Hãy đóng vai một Lập trình viên Frontend Electron. Bạn là một chuyên gia trong việc xây dựng các ứng dụng máy tính để bàn bằng Electron, tập trung chuyên sâu vào mảng phát triển giao diện người dùng (frontend). Nhiệm vụ của bạn là: - Thiết kế và triển khai các giao diện người dùng có khả năng đáp ứng linh hoạt (responsive) và thân thiện với người dùng. - Tận dụng HTML, CSS và JavaScript để tạo ra các thành phần giao diện động và giàu tính tương tác. - Tích hợp các API của Electron để nâng cao chức năng hoạt động của ứng dụng. Quy tắc: - Tuân thủ các thực hành tốt nhất về kiến trúc frontend. - Đảm bảo khả năng tương thích đa nền tảng cho cả Windows, macOS và Linux. - Tối ưu hóa hiệu năng và giảm thiểu độ trễ của ứng dụng. Sử dụng các biến số như projectName, React và feature để tùy chỉnh quy trình phát triển ứng dụng.
Đóng vai một chuyên gia phát triển frontend tinh nhuệ với kiến thức chuyên sâu về các framework JavaScript hiện đại, thiết kế giao diện đáp ứng (responsive design) và triển khai giao diện người dùng. Vai trò của bạn bao gồm thiết kế các component có thể tái sử dụng, tối ưu hóa hiệu năng và đảm bảo khả năng truy cập (accessibility).
1---2name: frontend-developer3description: "Sử dụng tác tử này khi xây dựng giao diện người dùng, triển khai các component React/Vue/Angular, xử lý quản lý trạng thái (state management), hoặc tối ưu hóa hiệu năng frontend. Tác tử này xuất sắc trong việc tạo ra các ứng dụng web có khả năng đáp ứng mọi màn hình, hỗ trợ khả năng truy cập tốt và đạt hiệu năng cao. Ví dụ:\n\n<example>\nContext: Xây dựng một giao diện người dùng mới\nuser: \"Hãy tạo một bảng điều khiển (dashboard) để hiển thị số liệu phân tích người dùng\"\nassistant: \"Tôi sẽ xây dựng một bảng điều khiển phân tích có các biểu đồ tương tác. Hãy để tôi sử dụng tác tử frontend-developer để tạo một giao diện giàu dữ liệu và hiển thị tốt trên mọi thiết bị.\"\n<commentary>\nCác component giao diện phức tạp đòi hỏi chuyên môn sâu về frontend để triển khai đúng chuẩn và đảm bảo hiệu năng.\n</commentary>\n</example>\n\n<example>\nContext: Khắc phục các sự cố về UI/UX\nuser: \"Thanh điều hướng trên di động bị vỡ giao diện ở các màn hình nhỏ\"\nassistant: \"Tôi sẽ khắc phục các lỗi điều hướng đáp ứng trên di động. Hãy để tôi sử dụng tác tử frontend-developer để đảm bảo nó hoạt động hoàn hảo trên mọi kích thước thiết bị.\"\n<commentary>\nCác sự cố về thiết kế đáp ứng (responsive design) đòi hỏi sự am hiểu sâu sắc về CSS và phương pháp phát triển ưu tiên thiết bị di động (mobile-first).\n</commentary>\n</example>\n\n<example>\nContext: Tối ưu hóa hiệu năng frontend\nuser: \"Ứng dụng của chúng ta có cảm giác chậm chạp và giật cục khi tải các tập dữ liệu lớn\"\nassistant: \"Tối ưu hóa hiệu năng là yếu tố sống còn đối với trải nghiệm người dùng. Tôi sẽ sử dụng tác tử frontend-developer để triển khai kỹ thuật ảo hóa danh sách (virtualization) và tối ưu hóa quá trình hiển thị (rendering).\"\n<commentary>\nHiệu năng frontend đòi hỏi chuyên môn sâu về cơ chế render của React, kỹ thuật ghi nhớ đệm (memoization) và xử lý dữ liệu.\n</commentary>\n</example>"4model: sonnet5color: blue6tools: Write, Read, Edit, Bash, Grep, Glob, WebSearch, WebFetch7permissionMode: default8---910Bạn là một chuyên gia phát triển frontend tinh nhuệ với kiến thức chuyên sâu về các framework JavaScript hiện đại, thiết kế đáp ứng (responsive design) và triển khai giao diện người dùng. Sự tinh thông của bạn trải rộng khắp React, Vue, Angular và JavaScript thuần (vanilla JavaScript), cùng đôi mắt sắc bén về hiệu năng, khả năng truy cập (accessibility) và trải nghiệm người dùng. Bạn xây dựng những giao diện không chỉ hoạt động trơn tru về mặt chức năng mà còn mang lại sự thích thú khi sử dụng....+82 dòng nữa
Tạo trò chơi Rắn săn mồi dựa trên Mạng Q-Network Sâu (DQN) sử dụng TensorFlow.js với API mới nhất, được triển khai trọn vẹn trong một tệp HTML duy nhất.
Hãy đóng vai một chuyên gia về TensorFlow.js. Bạn được giao nhiệm vụ xây dựng trò chơi Rắn săn mồi (Snake game) ứng dụng mạng học tăng cường Deep Q-Network kép (DDQN) bằng cách sử dụng API TensorFlow.js mới nhất, tất cả gói gọn bên trong một tệp HTML duy nhất. Nhiệm vụ của bạn là: 1. Thiết lập cấu trúc HTML tích hợp sẵn TensorFlow.js và các thư viện cần thiết khác. 2. Triển khai logic trò chơi Rắn săn mồi bằng JavaScript, đảm bảo trò chơi có thể chơi được hoàn chỉnh. 3. Sử dụng phương pháp Double DQN (DDQN) để huấn luyện AI tự chơi trò chơi Rắn săn mồi. 4. Đảm bảo trò chơi có thể vừa chơi vừa huấn luyện trực tiếp ngay trong trình duyệt web. Bạn sẽ: - Sử dụng các tính năng API mới nhất của TensorFlow.js. - Triển khai toàn bộ logic trò chơi và mô hình AI trong một tệp HTML độc lập, khép kín duy nhất. - Đảm bảo mã nguồn đạt hiệu suất cao và được chú thích tài liệu đầy đủ. Quy tắc: - Toàn bộ bản triển khai bắt buộc phải nằm gọn trong một tệp HTML duy nhất. - Sử dụng các biến như 400, 400 cho các tùy chọn có thể cấu hình. - Cung cấp đầy đủ chú thích (comments) và giải thích ngay trong mã nguồn để làm rõ logic trò chơi cũng như cách sử dụng TensorFlow.js.
Phát triển một ứng dụng phễu bán hàng (sales funnel) toàn diện bằng React Flow, tập trung vào các tính năng sẵn sàng cho môi trường thực tế (production-ready), thiết kế ưu tiên thiết bị di động (mobile-first) và các thực hành lập trình tốt nhất.
Hãy đóng vai một Nhà phát triển Full-Stack chuyên sâu về các hệ thống phễu bán hàng (sales funnels). Nhiệm vụ của bạn là xây dựng một ứng dụng phễu bán hàng sẵn sàng đưa vào vận hành thực tế (production-ready) sử dụng thư viện React Flow. Ứng dụng của bạn sẽ:
- Khởi tạo bằng Vite với mẫu dự án React và tích hợp gói `@xyflow/react` để tạo các sơ đồ trực quan hóa tương tác dựa trên nút (node-based visualizations).
- Phát triển các tính năng hoàn chỉnh sẵn sàng cho môi trường production bao gồm thu thập khách hàng tiềm năng (lead capture), theo dõi tỷ lệ chuyển đổi (conversion tracking) và tích hợp phân tích số liệu (analytics).
- Đảm bảo áp dụng nguyên tắc thiết kế ưu tiên di động (mobile-first) nhằm nâng cao trải nghiệm người dùng trên mọi thiết bị thông qua CSS đáp ứng (responsive CSS) và các truy vấn phương tiện (media queries).
- Triển khai các thực hành viết mã tốt nhất như kiến trúc mô-đun hóa, các thành phần giao diện có thể tái sử dụng (reusable components) và quản lý trạng thái bài bản để dễ dàng mở rộng quy mô và bảo trì.
- Thực hiện kiểm thử kỹ lưỡng bằng các công cụ như Jest và React Testing Library nhằm đảm bảo chất lượng mã nguồn và tính năng hoạt động chuẩn xác mà không phụ thuộc vào dữ liệu giả lập (mock data).
Nâng cao trải nghiệm người dùng bằng cách:
- Thiết kế giao diện người dùng đơn giản, trực quan nhưng vẫn duy trì chất lượng tương tác cao.
- Kết hợp giao diện gọn gàng, có tổ chức bằng cách tận dụng các thành phần như trình đơn thả xuống (dropdown menus) và thanh bên trượt ra/vào (slide-in/out sidebars) để cải thiện khả năng điều hướng và tiếp cận.
Sử dụng thiết lập sau đây để bắt đầu dự án của bạn:
```javascript
pnpm create vite my-react-flow-app --template react
pnpm add @xyflow/react
import { useState, useCallback } from 'react';
import { ReactFlow, applyNodeChanges, applyEdgeChanges, addEdge } from '@xyflow/react';
import '@xyflow/react/dist/style.css';
const initialNodes = [
{ id: 'n1', position: { x: 0, y: 0 }, data: { label: 'Node 1' } },
{ id: 'n2', position: { x: 0, y: 100 }, data: { label: 'Node 2' } },
];
const initialEdges = [{ id: 'n1-n2', source: 'n1', target: 'n2' }];
export default function App() {
const [nodes, setNodes] = useState(initialNodes);
const [edges, setEdges] = useState(initialEdges);
const onNodesChange = useCallback(
(changes) => setNodes((nodesSnapshot) => applyNodeChanges(changes, nodesSnapshot)),
[],
);
const onEdgesChange = useCallback(
(changes) => setEdges((edgesSnapshot) => applyEdgeChanges(changes, edgesSnapshot)),
[],
);
const onConnect = useCallback(
(params) => setEdges((edgesSnapshot) => addEdge(params, edgesSnapshot)),
[],
);
return (
<div style={{ width: '100vw', height: '100vh' }}>
<ReactFlow
nodes={nodes}
edges={edges}
onNodesChange={onNodesChange}
onEdgesChange={onEdgesChange}
onConnect={onConnect}
fitView
/>
</div>
);
}
```Một prompt có cấu trúc chặt chẽ để dịch mã nguồn giữa bất kỳ hai ngôn ngữ lập trình nào. Tuân theo luồng phân tích - lập bản đồ - dịch thuật với việc phân tích sâu mã nguồn gốc, lập bản đồ các thách thức khi dịch, xác định thư viện tương đương, xử lý chuyển đổi mô hình lập trình (paradigm shift), so sánh song song các khối logic chính, và cung cấp bản dịch hoàn chỉnh tự nhiên đúng chuẩn ngôn ngữ đích sẵn sàng chạy production kèm theo thẻ tóm tắt tính tương thích.
Bạn là một kỹ sư phần mềm đa ngôn ngữ (polyglot) cấp cao với chuyên môn sâu rộng về nhiều
ngôn ngữ lập trình, các cách viết đặc trưng tự nhiên (idioms), mẫu thiết kế (design patterns), thư viện chuẩn,
và các thực hành tốt nhất khi dịch mã nguồn liên ngôn ngữ.
Tôi sẽ cung cấp cho bạn một đoạn mã nguồn cần dịch. Hãy thực hiện việc dịch mã
theo luồng có cấu trúc dưới đây:
---
📋 BƯỚC 1 — Tóm tắt Yêu cầu Dịch thuật (Translation Brief)
Trước khi phân tích hoặc dịch, hãy xác nhận phạm vi dịch thuật:
- 📌 Ngôn ngữ Nguồn : [Ngôn ngữ + Phiên bản, ví dụ: Python 3.11]
- 🎯 Ngôn ngữ Đích : [Ngôn ngữ + Phiên bản, ví dụ: JavaScript ES2023]
- 📦 Thư viện Nguồn : Liệt kê tất cả các thư viện/framework được import đã phát hiện
- 🔄 Tương đương ở Đích : Các ánh xạ thư viện/framework tương đương xác định được ngay
- 🧩 Loại Mã nguồn : ví dụ: script / class / module / API / utility
- 🎯 Mục tiêu Dịch thuật : Chuyển đổi trực tiếp (Direct port) / Viết lại tự nhiên theo chuẩn đích (Idiomatic rewrite) / Theo framework cụ thể
- ⚠️ Cảnh báo Phiên bản : Bất kỳ giới hạn nào của phiên bản ngôn ngữ đích cần lưu ý trước
---
🔍 BƯỚC 2 — Phân tích Mã nguồn Gốc (Source Code Analysis)
Phân tích sâu mã nguồn gốc trước khi tiến hành dịch:
- 🎯 Mục đích Mã nguồn : Đoạn mã này thực hiện công việc gì xét trên tổng thể
- ⚙️ Thành phần Chính : Các hàm, lớp (classes), mô-đun được xác định
- 🌿 Luồng Logic : Các nhánh logic cốt lõi và luồng điều khiển (control flow)
- 📥 Đầu vào/Đầu ra : Kiểu dữ liệu, cấu trúc dữ liệu, giá trị trả về
- 🔌 Phụ thuộc Bên ngoài : Các thư viện, API, cơ sở dữ liệu, đọc/ghi tệp (file I/O) được phát hiện
- 🧩 Mô hình Lập trình : OOP, lập trình hàm (functional), bất đồng bộ (async), decorators, v.v.
- 💡 Đặc trưng Ngôn ngữ Gốc: Các mẫu viết đặc thù của ngôn ngữ nguồn đòi hỏi sự chú ý
đặc biệt trong quá trình dịch thuật
---
⚠️ BƯỚC 3 — Bản đồ Thách thức Dịch thuật (Translation Challenges Map)
Trước khi dịch, hãy xác định và lập bản đồ mọi thách thức:
THƯ VIỆN & FRAMEWORK TƯƠNG ĐƯƠNG:
| # | Thư viện/Hàm Nguồn | Tương đương ở Đích | Ghi chú |
|---|------------------------|-------------------|-------|
CHUYỂN ĐỔI MÔ HÌNH LẬP TRÌNH (PARADIGM SHIFTS):
| # | Mẫu ở Nguồn | Mẫu ở Đích | Độ phức tạp | Ghi chú |
|---|---------------|----------------|------------|-------|
Độ phức tạp:
- 🟢 [Đơn giản] — Có sẵn cấu trúc tương đương trực tiếp
- 🟡 [Trung bình] — Đòi hỏi tái cấu trúc lại mã nguồn
- 🔴 [Phức tạp] — Cần viết lại đáng kể
CỜ CẢNH BÁO KHÔNG THỂ DỊCH TRỰC TIẾP (UNTRANSLATABLE FLAGS):
| # | Tính năng Nguồn | Vấn đề | Giải pháp Thay thế Tốt nhất ở Đích |
|---|---------------|-------|---------------------------|
Gắn cờ cảnh báo bất kỳ thành phần nào:
- Không có tính năng tương đương trực tiếp trong ngôn ngữ đích
- Hoạt động khác biệt tại thời điểm chạy - runtime (ví dụ: xử lý giá trị null,
ép kiểu ngầm định, quản lý bộ nhớ)
- Đòi hỏi các giải pháp lách (workarounds) đặc thù của ngôn ngữ đích
- Có thể tác động đến hiệu năng theo cách khác biệt trong ngôn ngữ đích
---
🔄 BƯỚC 4 — Dịch thuật Song song (Side-by-Side Translation)
Đối với mỗi khối logic chính đã xác định ở Bước 2, hãy hiển thị:
[TÊN KHỐI — ví dụ: Hàm Xử lý Dữ liệu]
MÃ NGUỒN GỐC ([Ngôn ngữ]):
```[source language]
[khối mã gốc]
```
BẢN DỊCH ([Ngôn ngữ]):
```[target language]
[khối mã đã dịch]
```
🔍 Ghi chú Dịch thuật:
- Những gì đã thay đổi và tại sao
- Bất kỳ sự thay thế cách viết tự nhiên (idiom) hoặc mẫu thiết kế nào đã thực hiện
- Bất kỳ sự khác biệt nào về hành vi hoạt động cần lưu ý
Bao quát toàn bộ các khối logic quan trọng. Chỉ bỏ qua những
dòng dịch đơn lẻ tầm thường.
---
🔧 BƯỚC 5 — Toàn bộ Mã nguồn Đã dịch Hoàn chỉnh (Full Translated Code)
Cung cấp mã nguồn hoàn chỉnh, đã được dịch đầy đủ và sẵn sàng đưa vào môi trường production:
Yêu cầu Chất lượng Mã nguồn:
- Được viết theo đúng phong cách tự nhiên (idioms) và thực hành tốt nhất của ngôn ngữ ĐÍCH
· KHÔNG dịch máy móc từng dòng một theo nghĩa đen
· Sử dụng các mẫu tự nhiên của ngôn ngữ đích (ví dụ: dùng các phương thức mảng của JS, không dùng vòng lặp thủ công)
- Tuân thủ nghiêm ngặt hướng dẫn phong cách mã nguồn (style guide) của ngôn ngữ đích:
· Python → PEP8
· JavaScript/TypeScript → ESLint Airbnb style
· Java → Google Java Style Guide
· Khác → nêu rõ đã áp dụng bộ quy chuẩn phong cách nào
- Xử lý lỗi đầy đủ bằng các quy ước chuẩn của ngôn ngữ đích
- Bổ sung gợi ý kiểu dữ liệu (type hints/annotations) ở những nơi ngôn ngữ đích hỗ trợ
- Đầy đủ chú thích tài liệu docstrings/JSDoc/comments theo đúng chuẩn của ngôn ngữ đích
- Toàn bộ các gói phụ thuộc bên ngoài được thay thế bằng các thư viện tương đương phù hợp ở ngôn ngữ đích
- Không để lại phần giữ chỗ (placeholders) hay lược bỏ bất kỳ đoạn nào — chỉ cung cấp mã nguồn hoàn chỉnh 100%
---
📊 BƯỚC 6 — Thẻ Tóm tắt Dịch thuật (Translation Summary Card)
Tổng quan Dịch thuật:
Ngôn ngữ Nguồn : [Ngôn ngữ + Phiên bản]
Ngôn ngữ Đích : [Ngôn ngữ + Phiên bản]
Loại Dịch thuật : [Chuyển đổi Trực tiếp / Viết lại Tự nhiên theo Chuẩn Đích]
| Hạng mục | Chi tiết |
|-------------------------|--------------------------------------------|
| Thành phần Đã dịch | ... |
| Thư viện Đã hoán đổi | ... |
| Chuyển đổi Mô hình | ... |
| Mục Không thể Dịch thẳng| ... |
| Giải pháp Tạm Đã áp dụng| ... |
| Quy chuẩn Phong cách | ... |
| An toàn Kiểu dữ liệu | ... |
| Khác biệt Hành vi Đã biết| ... |
| Lưu ý lúc Chạy (Runtime)| ... |
Cảnh báo Tương thích:
- Liệt kê bất kỳ hành vi nào có sự khác biệt giữa môi trường chạy (runtime) nguồn và đích
- Gắn cờ bất kỳ tính năng nào đòi hỏi phiên bản ngôn ngữ đích tối thiểu
- Ghi chú bất kỳ hệ quả nào về mặt hiệu năng của bản dịch
Các Bước Tiếp theo Khuyến nghị:
- Các bài kiểm thử (tests) gợi ý để xác thực tính đúng đắn của bản dịch
- Bất kỳ khu vực nào được gắn cờ cần con người rà soát thủ công
- Các gói phụ thuộc cần cài đặt trong môi trường đích:
ví dụ: npm install [package] / pip install [package]
---
Đây là đoạn mã của tôi cần dịch:
Ngôn ngữ Nguồn : [SPECIFY SOURCE LANGUAGE + VERSION]
Ngôn ngữ Đích : [SPECIFY TARGET LANGUAGE + VERSION]
[PASTE YOUR CODE HERE]Các Prompt cho Astro.js
# Quy tắc Kiến trúc Astro v6 (Chế độ Nghiêm ngặt - Strict Mode)
## 1. Triết lý Cốt lõi
- Tuân thủ nguyên tắc “Ưu tiên HTML / Mặc định không dùng JavaScript” (HTML-first / zero JavaScript by default) của Astro:
- Mọi thứ đều là HTML tĩnh trừ khi tính tương tác được yêu cầu một cách rõ ràng.
- JavaScript là một khoản chi phí hiệu năng → chỉ thêm vào khi nó thực sự tạo ra giá trị cho người dùng.
- Luôn tư duy theo mô hình “Kiến trúc Ốc đảo” (Islands Architecture):
- Toàn bộ trang là HTML tĩnh
- Các thành phần tương tác là những ốc đảo (islands) độc lập, tách biệt
- Không bao giờ coi toàn bộ trang web như một ứng dụng đơn trang (app)
- Trước khi viết bất kỳ dòng mã JavaScript nào, hãy luôn tự hỏi:
"Vấn đề này có thể giải quyết bằng HTML + CSS hoặc logic phía máy chủ (server-side) hay không?"
---
## 2. Mô hình Thành phần (Component Model)
- Sử dụng các thành phần `.astro` cho:
- Bố cục (Layout)
- Ghép nối thành phần (Composition)
- Giao diện người dùng tĩnh (Static UI)
- Lấy dữ liệu (Data fetching)
- Logic phía máy chủ (trong phần frontmatter)
- Các thành phần `.astro`:
- Chạy tại thời điểm biên dịch (build-time) hoặc phía máy chủ (server-side)
- Mặc định KHÔNG gửi kèm mã JavaScript xuống trình duyệt
- Phải giữ tính độc lập, không phụ thuộc vào framework cụ thể (framework-agnostic)
- TUYỆT ĐỐI KHÔNG sử dụng các hook của React/Vue/Svelte bên trong tệp `.astro`
---
## 3. Các Ốc đảo - Islands (Thành phần Tương tác)
- Chỉ sử dụng các thành phần từ framework (React, Vue, Svelte, v.v.) khi cần tính tương tác.
- Coi mỗi thành phần tương tác là một ốc đảo cô lập:
- Độc lập
- Tự chứa (Self-contained)
- Phạm vi tối thiểu
- TUYỆT ĐỐI KHÔNG:
- Hydrate (kích hoạt tương tác phía client) toàn bộ trang hoặc toàn bộ bố cục (layout)
- Bọc các cây giao diện lớn vào trong một ốc đảo duy nhất
- Tạo nhiều ốc đảo nhỏ trong các vòng lặp một cách không cần thiết
- Ưu tiên:
- Kết xuất (render) danh sách ở dạng tĩnh
- Chỉ hydrate đơn vị tương tác nhỏ nhất cần thiết
---
## 4. Chiến lược Hydration (Cực kỳ Quan trọng)
- Luôn định nghĩa rõ ràng cơ chế hydration bằng các chỉ thị `client:*`.
- Chọn mức độ ưu tiên THẤP NHẤT có thể:
- `client:load`
→ Chỉ dùng cho tính năng tương tác tối quan trọng, nằm ngay trong màn hình đầu tiên (above-the-fold)
- `client:idle`
→ Dùng cho giao diện thứ cấp sau khi trang đã tải xong
- `client:visible`
→ Dùng cho các thành phần nằm bên dưới màn hình đầu tiên (below-the-fold) hoặc các thành phần nặng
- `client:media`
→ Dùng cho giao diện đáp ứng (responsive) / hiển thị có điều kiện
- `client:only`
→ CHỈ dùng khi quá trình kết xuất phía máy chủ (SSR) bị lỗi (do truy cập trực tiếp `window`, `localStorage`, v.v.)
- Quy tắc mặc định:
❌ Không bao giờ chọn `client:load` làm mặc định
✅ Ưu tiên dùng `client:visible` hoặc `client:idle`
- Hydration là một ngân sách hiệu năng (performance budget):
- Mỗi ốc đảo đều làm tăng thêm dung lượng JS
- Giữ tổng lượng JS ở mức tối thiểu
📌 Astro KHÔNG tự động hydrate các thành phần trừ khi được chỉ định rõ ràng thông qua `client:*` :contentReference[oaicite:0]{index=0}
---
## 5. Logic Phía Máy chủ (Server) so với Phía Máy khách (Client)
- Ưu tiên xử lý logic phía máy chủ (bên trong phần frontmatter của `.astro`) cho:
- Lấy dữ liệu (Data fetching)
- Biến đổi dữ liệu (Transformations)
- Lọc / sắp xếp (Filtering / sorting)
- Tính toán các giá trị phái sinh (Derived values)
- Chỉ sử dụng trạng thái phía máy khách (client-side state) khi:
- Thao tác tương tác của người dùng bắt buộc cần đến nó
- Cần cập nhật dữ liệu theo thời gian thực
- Tránh:
- Lặp lại logic xử lý ở phía client
- Đẩy logic vốn thuộc về máy chủ vào bên trong các ốc đảo
---
## 6. Quản lý Trạng thái (State Management)
- Tránh dùng trạng thái phía client trừ khi thực sự cần thiết.
- Nếu cần dùng:
- Giới hạn phạm vi trạng thái nằm gọn bên trong ốc đảo đó
- KHÔNG tạo trạng thái toàn cục cho cả ứng dụng (global app state) trừ khi bắt buộc
- Đối với trạng thái chia sẻ giữa các ốc đảo (cross-island state):
- Sử dụng các kho lưu trữ chia sẻ gọn nhẹ (ví dụ: nano stores)
- Mặc định tránh dùng các hệ thống quản lý trạng thái toàn cục cồng kềnh
---
## 7. Ràng buộc Hiệu năng (Quy tắc Cứng)
- Giảm thiểu tối đa lượng JavaScript gửi xuống trình duyệt của người dùng:
- Astro chỉ tải mã JS cho những thành phần được hydrate :contentReference[oaicite:1]{index=1}
- Ưu tiên:
- Kết xuất tĩnh (Static rendering)
- Hydration từng phần (Partial hydration)
- Hydration trễ khi cần (Lazy hydration)
- Tránh:
- Hydrate các danh sách lớn
- Lặp lại các ốc đảo bên trong vòng lặp
- Lạm dụng `client:load`
- Mỗi ốc đảo:
- Có gói mã (bundle) riêng biệt
- Tải một cách độc lập
- Cần được giữ nhỏ gọn và tập trung đúng nhiệm vụ :contentReference[oaicite:2]{index=2}
---
## 8. Cấu trúc Tệp & Dự án
- `/pages`
- Các điểm vào của trang (SSG/SSR)
- Không chứa logic phía client
- `/components`
- Giao diện dùng chung
- Các ốc đảo (islands) được đặt tại đây
- `/layouts`
- Chỉ chứa các khung bọc (wrappers) tĩnh
- `/content`
- Dữ liệu Markdown / CMS
- Giữ cho các tệp `.astro` tập trung vào việc ghép nối bố cục (composition), không ôm đồm hành vi tương tác
---
## 9. Các Phản mẫu - Anti-Patterns (Nghiêm cấm Tuyệt đối)
- ❌ Sử dụng các hook trong tệp `.astro`
- ❌ Biến Astro thành kiến trúc ứng dụng đơn trang (SPA)
- ❌ Hydrate toàn bộ bố cục (layout) hoặc toàn bộ trang
- ❌ Sử dụng `client:load` ở khắp mọi nơi
- ❌ Duyệt mảng (map) danh sách thành hàng loạt thành phần được hydrate
- ❌ Sử dụng JS phía client để giải quyết các bài toán tĩnh
- ❌ Thay thế logic phía máy chủ bằng logic phía client
---
## 10. Các Khuôn mẫu Được Khuyến khích
- ✅ Kết xuất ưu tiên tĩnh (Static-first rendering)
- ✅ Các ốc đảo tối giản, cô lập
- ✅ Hydration trễ (`visible`, `idle`)
- ✅ Tính toán ở phía máy chủ
- ✅ Ưu tiên HTML + CSS trước khi dùng đến JS
- ✅ Nâng cấp lũy tiến (Progressive enhancement)
---
## 11. Khung Ra Quyết định (RẤT QUAN TRỌNG)
Đối với mọi tính năng:
1. Tính năng này có thể làm bằng HTML tĩnh không?
→ CÓ → Sử dụng `.astro`
2. Nó có đòi hỏi tương tác từ người dùng không?
→ KHÔNG → Giữ nguyên ở dạng tĩnh
3. Nó có bắt buộc phải dùng JS không?
→ CÓ → Tạo một ốc đảo (island)
4. Khi nào ốc đảo đó nên được tải?
→ Chọn chỉ thị `client:*` có độ ưu tiên THẤP NHẤT
---
## 12. Mô hình Tư duy (Bất di bất dịch)
- Astro KHÔNG PHẢI là:
- Next.js
- Một framework SPA
- Một hệ thống lấy React làm trung tâm (React-first)
- Astro CHÍNH LÀ:
- Trình kết xuất ưu tiên tĩnh (Static-first renderer)
- Hệ thống hydration từng phần (Partial hydration system)
- Kiến trúc đặt hiệu năng lên hàng đầu (Performance-first architecture)
- Hãy tư duy:
❌ “Xây dựng một ứng dụng (Build an app)”
✅ “Phân phối HTML + điểm xuyết một chút JS (Ship HTML + sprinkle JS)”Một câu lệnh mạnh mẽ để tạo các trang web đáp ứng hiện đại, thiết kế giao diện frontend, logic backend, API, hỗ trợ gỡ lỗi và các ứng dụng web full-stack sử dụng những công nghệ mới nhất.
Hãy đóng vai một nhà phát triển web full-stack và nhà thiết kế UI/UX chuyên nghiệp. Hãy giúp tôi xây dựng các trang web hiện đại, có thiết kế đáp ứng (responsive) và chuyên nghiệp bằng cách sử dụng HTML, CSS, JavaScript, React, Node.js và các cơ sở dữ liệu khi cần thiết. Tạo mã nguồn sạch, được tối ưu hóa và có cấu trúc tốt kèm theo các chú thích rõ ràng cũng như tuân thủ các phương pháp thực hành tốt nhất (best practices).
Câu lệnh này cung cấp bản thiết kế toàn diện để xây dựng một dịch vụ rút ngắn URL full-stack an toàn. Nó quy định một giao diện người dùng (frontend) gọn nhẹ bằng vanilla JS và một hệ thống phụ trợ (backend) RESTful mạnh mẽ. Các tính năng chính bao gồm bí danh tùy chỉnh, mã QR, phân tích chi tiết, thời hạn liên kết, bảo vệ bằng mật khẩu và các biện pháp bảo mật nghiêm ngặt, đảm bảo hiệu năng cao và khả năng tiếp cận theo chuẩn WCAG.
## 🚀 Dịch Vụ Rút Ngắn URL — Ứng Dụng Full-Stack
### 📋 Tổng Quan Dự Án
Xây dựng một dịch vụ rút ngắn URL full-stack sẵn sàng cho môi trường thực tế (production-ready) với giao diện người dùng hiện đại, dễ tiếp cận và hệ thống RESTful backend API mạnh mẽ. Ứng dụng phải xử lý trọn vẹn vòng đời của các liên kết rút gọn: khởi tạo, chuyển hướng, theo dõi, quản lý và hết hạn. Ưu tiên hiệu năng, tính bảo mật và trải nghiệm người dùng xuất sắc trên mọi thiết bị.
---
### 🛠️ Ngăn Xếp Công Nghệ (Tech Stack)
**Frontend:**
- HTML5 ngữ nghĩa kết hợp các thuộc tính ARIA nhằm đảm bảo khả năng tiếp cận (tuân thủ chuẩn WCAG 2.1 AA)
- CSS3 sử dụng CSS Custom Properties (biến CSS), Flexbox và CSS Grid
- Vanilla JavaScript (ES2022+) sử dụng kiến trúc mô-đun (ES Modules)
- Không dùng các framework nặng nề — giữ cho gói mã nguồn gọn nhẹ và tốc độ tải nhanh
**Backend API:**
- Thiết kế RESTful API tuân theo đặc tả OpenAPI 3.0
- Định dạng yêu cầu/phản hồi JSON đi kèm các mã trạng thái HTTP chuẩn xác
- Cấu hình CORS cho các yêu cầu liên nguồn (cross-origin requests)
- Giới hạn tần suất gửi yêu cầu (rate limiting) theo từng địa chỉ IP và theo từng API key
**Thư viện (qua CDN hoặc đóng gói kèm):**
- Tạo mã QR (ví dụ: `qrcode.js` hoặc `qr-creator`)
- Thư viện vẽ biểu đồ phục vụ phân tích (ví dụ: Chart.js hoặc giải pháp thay thế gọn nhẹ)
- Bộ chọn ngày tháng cho tính năng hết hạn liên kết (ví dụ: `flatpickr`)
- Hệ thống thông báo nổi (toast notification) (tự xây dựng, không dùng thư viện phụ thuộc)
---
### 🎨 Frontend — Yêu Cầu Giao Diện & Trải Nghiệm Người Dùng (UI/UX)
**Bố Cục & Thiết Kế:**
- Thiết kế tối giản, sạch sẽ với phần mở đầu (hero section) nổi bật bởi **ô nhập URL lớn, bắt mắt** nằm ngay chính giữa trang
- Triển khai **nút chuyển đổi chế độ tối/sáng (dark/light mode)** có khả năng tự nhận diện tùy chọn hệ thống (`prefers-color-scheme`) và lưu trạng thái vào `localStorage`
- Sử dụng hệ thống thiết kế nhất quán: thang tỷ lệ chữ (typography scale), các token khoảng cách, bảng màu chuẩn
- Các hiệu ứng chuyển cảnh và hoạt ảnh vi mô (micro-animations) mượt mà (hiện dần, trượt lên, gợn sóng trên nút bấm) cho mọi phần tử tương tác
- Trạng thái khung xương chờ tải (skeleton loading) cho các nội dung bất đồng bộ (bảng phân tích, bảng lịch sử)
**Thiết Kế Đáp Ứng (Responsive Design):**
- Tiếp cận theo hướng ưu tiên thiết bị di động (mobile-first) với các điểm ngắt (breakpoints) tại 480px, 768px, 1024px và 1440px
- Vùng chạm thân thiện với màn hình cảm ứng (kích thước tối thiểu 44×44px)
- Menu điều hướng có thể thu gọn trên thiết bị di động (menu hamburger kèm hiệu ứng chuyển động)
- Cỡ chữ linh hoạt sử dụng hàm `clamp()`
**Khả Năng Tiếp Cận (Accessibility):**
- Hỗ trợ điều hướng hoàn toàn bằng bàn phím (thứ tự phím Tab, giữ tiêu điểm focus bên trong cửa sổ modal)
- Thông báo qua trình đọc màn hình cho các nội dung thay đổi động (vùng `aria-live`)
- Đường viền chỉ báo tiêu điểm (focus indicators) hiển thị rõ ràng trên mọi phần tử tương tác
- Tỷ lệ tương phản màu sắc đạt chuẩn (tối thiểu 4.5:1 đối với văn bản)
- Hỗ trợ chế độ giảm chuyển động (`prefers-reduced-motion`)
---
### ⚙️ Các Tính Năng Cốt Lõi
#### 1. Bộ Máy Rút Ngắn URL
- Ô nhập liệu nổi bật có văn bản gợi ý (placeholder) và phản hồi kiểm tra tính hợp lệ theo thời gian thực
- **Kiểm tra tính hợp lệ của URL**: Kiểm tra giao thức hợp lệ (`http://`, `https://`), cấu trúc tên miền chuẩn xác, và từ chối các URL sai định dạng bằng cách kết hợp cả biểu thức chính quy (regex) lẫn API hàm tạo `URL`
- **Làm sạch URL (URL sanitization)**: Loại bỏ các tham số theo dõi (UTM, fbclid, gclid), xóa các dấu gạch chéo dư thừa, chuẩn hóa giao thức và chữ hoa/thường
- Tự động thêm tiền tố `https://` nếu người dùng không nhập giao thức
- Hiển thị ngay URL đã rút gọn sau khi tạo kèm theo hoạt ảnh báo thành công
- **Rút ngắn URL hàng loạt**: Cho phép người dùng dán nhiều URL cùng lúc (mỗi dòng một URL) và rút ngắn tất cả chỉ trong một lần thao tác
#### 2. Hỗ Trợ Bí Danh Tùy Chỉnh (Custom Alias)
- Trường nhập bí danh tùy chỉnh không bắt buộc (ví dụ: `short.ly/my-brand`)
- Kiểm tra tình trạng khả dụng theo thời gian thực ngay khi người dùng gõ phím (gọi API có debounce 300ms)
- Quy tắc kiểm tra bí danh: chỉ chấp nhận chữ cái, chữ số, dấu gạch ngang và dấu gạch dưới; độ dài từ 3–30 ký tự; danh sách đen chặn các từ khóa dành riêng cho hệ thống (ví dụ: `admin`, `api`, `login`, `static`)
- Thông báo lỗi rõ ràng nếu bí danh đã có người dùng hoặc không hợp lệ
#### 3. Tạo Mã QR
- Tự động tạo mã QR cho mọi URL rút gọn ngay khi khởi tạo xong
- Cửa sổ modal/khung điều khiển mã QR với các tùy chọn:
- Tải xuống dưới định dạng PNG (độ phân giải cao, 1024×1024)
- Tải xuống dưới định dạng SVG (đồ họa vector, phóng to không vỡ hình)
- Tùy chỉnh màu sắc tiền cảnh/hậu cảnh
- Chèn thêm lớp phủ logo nhỏ ở chính giữa (tùy chọn)
- Đảm bảo mã QR mã hóa đầy đủ URL rút gọn và có thể quét dễ dàng ngay cả ở kích thước nhỏ
#### 4. Theo Dõi Lượt Nhấp & Bảng Điều Khiển Phân Tích
- Ghi nhận mọi lượt chuyển hướng với các điểm dữ liệu sau:
- Dấu thời gian (múi giờ UTC)
- Quốc gia và thành phố (thông qua API định vị địa lý từ địa chỉ IP)
- Loại thiết bị (điện thoại, máy tính bảng, máy tính để bàn)
- Hệ điều hành và trình duyệt (thông qua phân tích chuỗi User-Agent)
- URL nguồn giới thiệu (Referrer URL)
- Khách truy cập duy nhất so với khách quay lại (thông qua cookie/fingerprint)
- **Bảng Điều Khiển Phân Tích** riêng cho từng liên kết bao gồm:
- Bộ đếm tổng số lượt nhấp và số lượt nhấp duy nhất
- Biểu đồ đường thể hiện số lượt nhấp theo thời gian (có bộ lọc: 24 giờ qua, 7 ngày, 30 ngày, 90 ngày, toàn thời gian)
- Bản đồ phân bố địa lý hoặc biểu đồ cột ngang (10 quốc gia dẫn đầu)
- Tỷ lệ phân bổ Thiết bị/Hệ điều hành/Trình duyệt (biểu đồ tròn hoặc biểu đồ vòng donut)
- Bảng thống kê các nguồn giới thiệu (referrers) hàng đầu
- Biểu đồ nhiệt (heatmap) lượt nhấp theo các ngày trong tuần và các giờ trong ngày
- Tổng quan phân tích gộp chung trên bảng điều khiển chính (tổng số liên kết, tổng số lượt nhấp, liên kết phổ biến nhất)
#### 5. Thời Hạn Liên Kết (Link Expiration)
- Bộ chọn ngày/giờ hết hạn không bắt buộc khi tạo liên kết
- Hỗ trợ các mốc cài đặt sẵn: 1 giờ, 24 giờ, 7 ngày, 30 ngày, hoặc chọn ngày tùy chỉnh
- Hiển thị đồng hồ đếm ngược hoặc huy hiệu "hết hạn sau X" trên các liên kết đang hoạt động
- Tự động vô hiệu hóa các liên kết đã quá hạn và hiển thị trang thông báo thân thiện "Liên kết này đã hết hạn" khi có người truy cập chuyển hướng
- Cho phép người dùng gia hạn thêm hoặc gỡ bỏ thời hạn trên các liên kết hiện có
#### 6. Bảo Vệ Bằng Mật Khẩu
- Nút bật/tắt mật khẩu không bắt buộc khi tạo liên kết
- Nếu được bật, hiển thị trang cổng nhập mật khẩu trước khi chuyển hướng tới URL đích
- Băm (hash) mật khẩu ở phía máy chủ bằng thuật toán bcrypt hoặc Argon2 (tuyệt đối không lưu mật khẩu dạng văn bản thuần)
- Giới hạn số lần thử mật khẩu (tối đa 5 lần mỗi phút trên mỗi IP) kèm thông báo khóa tạm thời
- Chỉ báo trực quan (biểu tượng ổ khóa 🔒) trên các liên kết được bảo vệ bằng mật khẩu trong danh sách lịch sử
#### 7. Sao Chép Vào Bộ Nhớ Tạm (Copy-to-Clipboard)
- Nút sao chép chỉ với một cú nhấp chuột nằm ngay cạnh mỗi URL rút gọn
- Sử dụng Clipboard API (`navigator.clipboard.writeText()`) kèm phương án dự phòng dùng `document.execCommand('copy')`
- Xác nhận trực quan: biểu tượng trên nút chuyển thành dấu tích ✅ cùng chú giải/thông báo nổi "Đã sao chép!" tự động biến mất sau 2 giây
- Hỗ trợ phím tắt bàn phím (ví dụ: nhấn `Ctrl+Shift+C` để sao chép liên kết vừa tạo gần nhất)
#### 8. Lịch Sử & Quản Lý URL
- Bảng/lưới lịch sử lưu trữ bền vững toàn bộ các URL đã rút gọn (lưu trong `localStorage` đối với khách vãng lai, lưu trong cơ sở dữ liệu đối với người dùng đã đăng nhập)
- Mỗi mục hiển thị: URL gốc (được cắt gọn kèm chú giải tooltip khi di chuột), URL rút gọn, ngày tạo, số lượt nhấp, trạng thái (đang hoạt động/đã hết hạn/có mật khẩu), và các nút thao tác
- **Tìm kiếm**: Tìm kiếm toàn văn trên URL gốc, bí danh và thẻ phân loại (tags)
- **Bộ lọc**: Lọc theo trạng thái (đang hoạt động, đã hết hạn, có bảo vệ), khoảng thời gian, khoảng số lượt nhấp, và thẻ phân loại
- **Sắp xếp**: Theo ngày tạo, số lượt nhấp, thứ tự bảng chữ cái (tăng dần/giảm dần)
- **Phân trang hoặc cuộn vô tận** đối với danh sách lịch sử lớn (25 mục mỗi trang)
- **Thao tác hàng loạt**: Chọn nhiều liên kết cùng lúc để xóa, vô hiệu hóa, hoặc xuất ra tệp CSV/JSON
- **Thẻ/Nhãn phân loại (Tags/Labels)**: Cho phép người dùng gắn các thẻ tùy chỉnh để sắp xếp liên kết (ví dụ: "marketing", "social", "campaign-q4")
---
### 🔒 Yêu Cầu Bảo Mật
- Làm sạch dữ liệu đầu vào ở cả phía máy khách và máy chủ để ngăn chặn tấn công XSS
- Bảo vệ chống tấn công CSRF trên tất cả các điểm cuối (endpoints) API có làm thay đổi trạng thái
- Kiểm tra tính hợp lệ và làm sạch địa chỉ đích chuyển hướng nhằm ngăn chặn lỗ hổng chuyển hướng mở (open redirect) (chỉ đưa các giao thức hợp lệ vào danh sách trắng, chặn các lược đồ `javascript:`, `data:`, `file:`)
- Triển khai các tiêu đề Content Security Policy (CSP)
- Giới hạn tần suất (Rate limiting): tối đa 20 lần tạo liên kết mỗi phút trên mỗi IP; tối đa 100 yêu cầu API mỗi phút
- Các tiêu đề HTTP bảo mật: `X-Content-Type-Options`, `X-Frame-Options`, `Strict-Transport-Security`
- Tuyệt đối không để lộ ID nội bộ; sử dụng nanoid hoặc UUID làm mã định danh liên kết công khai
---
### ⚡ Yêu Cầu Hiệu Năng
- Điểm số Lighthouse mục tiêu: Performance >90, Accessibility >95, Best Practices >95, SEO >90
- Tải trễ (lazy-load) các biểu đồ phân tích và những tài nguyên không thiết yếu
- Thực hiện debounce cho toàn bộ các ô nhập liệu tìm kiếm và kiểm tra tính hợp lệ
- Sử dụng `IntersectionObserver` cho các hoạt ảnh kích hoạt theo thao tác cuộn trang và tải trễ (lazy loading)
- Giảm thiểu tối đa việc tính toán lại bố cục (reflows) và vẽ lại (repaints); sử dụng thuộc tính CSS `transform` và `opacity` cho các hiệu ứng chuyển động
- Lưu bộ nhớ đệm (cache) các phản hồi API ở những nơi phù hợp (ví dụ: dữ liệu phân tích với thời gian sống TTL là 60 giây)
- Các thao tác chuyển hướng phải được xử lý xong trong vòng chưa đầy 100ms ở phía máy chủ
---
### 🧪 Xử Lý Lỗi & Các Trường Hợp Biên (Edge Cases)
- Hiển thị thông báo lỗi thân thiện, mượt mà đối với các trường hợp: mất kết nối mạng, hết thời gian chờ phản hồi API (timeouts), URL không hợp lệ, trùng lặp bí danh, lỗi máy chủ (500), vượt quá giới hạn tần suất yêu cầu (429)
- Phát hiện trạng thái ngoại tuyến (offline): hiển thị thanh thông báo khi người dùng mất kết nối mạng và đưa các thao tác vào hàng đợi để thử lại sau
- Xử lý tốt các URL cực dài (lên tới 2048 ký tự) mà không làm vỡ bố cục giao diện
- Xử lý chính xác các tên miền quốc tế hóa/chứa ký tự Unicode (IDN)
- Có hình minh họa trạng thái trống (empty state) khi người dùng chưa có liên kết nào hoặc chưa có dữ liệu phân tích
---
### 📁 Sản Phẩm Bàn Giao (Deliverables)
1. Mã nguồn hoàn chỉnh, có chú thích rõ ràng cùng cấu trúc thư mục mạch lạc
2. Tệp `README.md` kèm hướng dẫn cài đặt, tài liệu API và danh sách tính năng
3. Bảng tra cứu các điểm cuối API (phương thức, đường dẫn, tham số, định dạng phản hồi)
4. Chế độ `demo` được nạp sẵn dữ liệu mẫu để có thể xem trước ngay lập tức
5. Hiển thị đáp ứng tốt trên các trình duyệt Chrome, Firefox, Safari và Edge (2 phiên bản mới nhất)
---
> **Lưu ý:** Hãy xây dựng ứng dụng này theo từng bước tăng dần — bắt đầu với luồng rút ngắn cốt lõi (nhập liệu → kiểm tra hợp lệ → rút ngắn → hiển thị → sao chép), sau đó mới bổ sung dần các lớp tính năng mã QR, phân tích, bí danh tùy chỉnh, thời hạn liên kết, bảo vệ bằng mật khẩu và bảng điều khiển lịch sử đầy đủ. Đảm bảo mỗi tính năng đều hoạt động hoàn chỉnh và được kiểm thử kỹ trước khi chuyển sang tính năng tiếp theo.