Khang
Tất cả dự án

Navigos Talent One

Sản phẩm tuyển dụng giúp tìm ứng viên và quản lý quá trình tuyển dụng.

Xem Navigos Talent One
Biểu đồ tuyển dụng và danh sách việc làm vẽ bằng chì trên giấy màu ngà xếp lớp, có điểm nhấn xanh cobalt.
Tin tuyển dụng, ứng viên và thông tin chiến dịch cùng xuất hiện trong ngày làm việc của nhà tuyển dụng.

Tóm tắt nhanh

Đây là gì
Nền tảng giúp doanh nghiệp đăng tin tuyển dụng, chạy chiến dịch và theo dõi người ứng tuyển.
Vai trò của mình
Kỹ sư frontend cấp cao, cùng một lập trình viên khác phụ trách phần frontend cốt lõi cho nhiều nhóm.
Phần mình làm
  • Công cụ tạo landing page với mẫu có sẵn, khối tái sử dụng và xem trước
  • Phần hiển thị trang chiến dịch, trang tuyển dụng, từ bản nháp đến xuất bản
  • Luồng tiếp nhận yêu cầu đăng tuyển bằng AI từ văn bản, tệp hoặc URL
Công nghệ
  • React
  • Next.js
  • TypeScript
  • Turborepo
  • Immer
  • TipTap
Trạng thái
Đang hoạt động, từ 2024 đến nay talent.navigos.vn

Mình cũng cùng thiết lập kiến trúc frontend cốt lõi, gồm định tuyến riêng, đổi ngôn ngữ tức thì và cách quản lý trạng thái dùng chung, đồng thời review code ở phần giao tiếp giữa các module. Mô hình AI và dịch vụ backend do các nhóm khác phụ trách.

Sản phẩm được dùng để làm gì

Nhà tuyển dụng cần viết tin, tiếp cận ứng viên và theo dõi người ứng tuyển. Navigos Talent One kết nối những công việc đó với chiến dịch tuyển dụng và trang tuyển dụng của doanh nghiệp. Mình làm các giao diện phục vụ những công việc này và nền tảng frontend dùng chung cho các nhóm phát triển.

  1. Chuẩn bị

    Thu thập yêu cầu và soạn tin tuyển dụng hoặc trang chiến dịch.

  2. Kiểm tra

    Chỉnh nội dung và xem trang ở các cỡ màn hình.

  3. Tuyển dụng

    Xuất bản rồi tiếp tục quy trình tuyển dụng đã kết nối.

Trình biên tập trang tuyển dụng có vùng soạn thảo, thanh công cụ và ảnh tòa nhà văn phòng, vẽ trên giấy xé.
Người soạn sắp xếp nội dung và kiểm tra cách trình bày trước khi xuất bản.

Tạo trang tuyển dụng mà không cần một dự án riêng

Mỗi chiến dịch tuyển dụng cần một trang giới thiệu cơ hội việc làm và cho phép ứng tuyển. Nếu xây riêng từng trang, mỗi lần sửa nội dung đều cần đến lập trình viên. Công cụ tạo trang đưa công việc đó vào quy trình biên tập với mẫu có sẵn và các khối nội dung tái sử dụng.

Công cụ tạo landing page và các trang được tạo từ đó là một phần quan trọng trong công việc frontend của mình. Mình làm các khối tái sử dụng và phần hiển thị cho trang chiến dịch, trang tuyển dụng, gồm chọn mẫu, chỉnh giao diện và phông chữ, xem trước theo cỡ màn hình và chuyển từ bản nháp sang xuất bản. Các trang kết nối với quy trình chiến dịch và ứng tuyển của sản phẩm.

Mình làm cả hai phía của trình biên tập: bộ điều khiển dành cho người soạn và trang mà ứng viên sẽ xem. Đồng nghiệp ở các nhóm sản phẩm, thiết kế, backend và QA phụ trách những phần tương ứng của hệ thống.

Biểu mẫu yêu cầu tuyển dụng có các lựa chọn nhập văn bản, đính kèm tệp và URL, vẽ trên giấy.
Bản nháp có thể bắt đầu từ những yêu cầu nhà tuyển dụng đã có.

Để người soạn quyết định nội dung bản nháp do AI tạo

Nhà tuyển dụng có thể bắt đầu từ vài yêu cầu sơ bộ, một tài liệu có sẵn hoặc đường dẫn đến mô tả công việc. Mình làm phần tiếp nhận đầu vào cho đăng tuyển bằng AI, hỗ trợ văn bản tự soạn hoặc dán vào, tệp tải lên hay URL, cùng tên vị trí và từ khóa.

Công việc của mình gồm thu thập những yêu cầu đó và đưa dữ liệu tin tuyển dụng đã có cấu trúc sang bước duyệt có thể chỉnh sửa. Nhà tuyển dụng có thể sửa bản nháp trước khi đăng. Phần tạo nội dung bằng AI và các dịch vụ hỗ trợ thuộc phạm vi của những nhóm khác trong đội ngũ.

Để nhiều nhóm cùng xây dựng một sản phẩm

Nhiều nhóm phụ trách các module có liên kết với nhau. Mình tham gia xây dựng kiến trúc frontend cốt lõi và cấu trúc dự án, gồm định tuyến riêng, trạng thái dùng chung và ranh giới giữa các submodule. Nền tảng này giúp các nhóm làm tính năng riêng nhưng vẫn dùng chung cơ chế xác thực và phân quyền.

Đổi ngôn ngữ có hiệu lực ngay mà không cần tải lại trang. Trong lúc lập trình, trình soạn thảo gợi ý các khóa bản dịch hợp lệ. Giá trị dùng chung và trạng thái riêng của từng tính năng tuân theo cùng quy ước, nên một tính năng có thể dùng dữ liệu cần thiết mà không phải theo dõi mọi thay đổi trong ứng dụng.

Nền tảng dùng chung và các tính năng lớn

Đóng góp của mình trải từ cấu trúc frontend cốt lõi đến công cụ biên tập hằng ngày: tạo và hiển thị landing page, cùng tiếp nhận yêu cầu đăng tuyển bằng AI. Mình cũng review code ở các phần giao tiếp giữa những module frontend dùng chung.

Mình chia sẻ trách nhiệm frontend cốt lõi với một lập trình viên khác và hỗ trợ một đồng nghiệp junior. Sản phẩm tuyển dụng được phát triển cùng các đồng nghiệp phụ trách sản phẩm, thiết kế, backend và QA.

Cả đội muốn tự sửa nội dung, khỏi gọi người làm web mỗi lần?

Ghi chú triển khai

Kiến trúc, định tuyến và submodule

Frontend dùng React, Next.js và TypeScript với Turborepo. Mình tham gia xây dựng cấu trúc dự án, định tuyến riêng, cơ chế tải động route và layout, các lớp bọc API dùng chung và ranh giới tính năng. Git submodules tách phạm vi tính năng để các nhóm làm việc trong module của mình. Các quy ước xác thực và phân quyền dùng chung kết nối những module đó.

Đổi ngôn ngữ tức thì

Bản dịch nằm trong các object thông thường và được truy cập bằng khóa. Type guard, khóa có kiểu và gợi ý của trình soạn thảo giúp lập trình viên chọn mục hợp lệ mà không cần bước biên dịch bản dịch riêng. Đổi ngôn ngữ cập nhật nội dung hiển thị ngay; thay đổi khi đăng nhập và đăng xuất cũng được truyền đi mà không cần tải lại trình duyệt.

Trạng thái ứng dụng và tính năng

Mình xây dựng cách quản lý trạng thái riêng bằng useSyncExternalStore và Immer. Store toàn ứng dụng và store trong từng module cung cấp các giá trị được chọn cho component đăng ký theo dõi. Immer cho phép cập nhật theo cách viết thay đổi trực tiếp mà vẫn giữ trạng thái bất biến. Bài viết đi kèm giải thích cơ chế đăng ký và ranh giới giữa các store.

Biên tập khối và trang đã xuất bản

Công cụ tạo trang dùng trạng thái phân cấp với Immer, sắp xếp vị trí bằng chỉ số dạng phân số và chỉ tính cấu trúc phân cấp khi cần. Bộ hiển thị tái sử dụng đưa các khối vào landing page; phần biên tập văn bản định dạng bằng TipTap và phần hiển thị phải thống nhất cách hiểu nội dung. Mình phụ trách bộ điều khiển biên tập, xem trước theo cỡ màn hình, hiển thị trang đã xuất bản và tích hợp với luồng chiến dịch, ứng tuyển.

Phạm vi luồng tiếp nhận yêu cầu bằng AI

Đầu vào gồm văn bản tự soạn, tên vị trí và từ khóa, tệp tải lên và URL. Mình làm phần frontend thu thập dữ liệu, kiểm soát điều kiện tạo nội dung và chuyển sang bước duyệt, giữ nguyên dữ liệu tin tuyển dụng có cấu trúc giữa các bước. Bản duyệt vẫn có thể chỉnh sửa trước khi đăng. Mình phụ trách luồng frontend trong nhóm sản phẩm; mô hình AI và dịch vụ backend do các nhóm tương ứng phụ trách.