Mục lục
- Mục tiêu bài học
- GitHub profile là gì và recruiter nhìn gì trong 30 giây
- Username — chọn đúng từ đầu
- Avatar, bio và public profile settings
- Profile README — feature quan trọng nhất
- Template Profile README cho AI Engineer
- Pinned repo — chọn và trình bày đúng
- Topics và description cho từng repo
- Activity heatmap — duy trì đều đặn
- Languages stats và .gitattributes
- Profile widgets bên thứ ba
- Dọn dẹp repo và archive
- AI Engineer trái ngành — cách điều chỉnh profile
- Lịch refresh profile
- Audit checklist trước khi apply
- Bài tiếp theo
Mục tiêu bài học
Sau bài này, bạn sẽ:
- ✅ Biết cách chọn username GitHub chuyên nghiệp và khớp với LinkedIn
- ✅ Tạo và viết Profile README theo template AI Engineer
- ✅ Cấu hình pinned repo, topics, description cho từng repo public
- ✅ Hiểu activity heatmap hoạt động và cách duy trì đều đặn
- ✅ Có checklist audit đầy đủ để chạy trước mỗi lần apply
GitHub profile là gì và recruiter nhìn gì trong 30 giây
URL github.com/<username> là trang profile công khai của bạn. Không cần login để xem. Recruiter nhận CV hoặc tìm tên bạn trên Google, thường click vào 2 link: LinkedIn và GitHub.
Recruiter scan profile theo thứ tự nào
Observation từ hiring process: khi recruiter mở GitHub profile lần đầu, họ xem theo thứ tự:
- Avatar + tên + bio — 3-5 giây: bạn là ai, làm gì.
- Profile README (nếu có) — 10-15 giây: dừng lại đọc nếu nội dung rõ.
- 6 pinned repo — 10 giây: tên repo và description. Click vào 1-2 cái nếu tên hấp dẫn.
- Activity heatmap — 2-3 giây: có xanh đều không, hay thưa thớt.
Tổng cộng khoảng 30 giây cho lần xem đầu. Nếu không có gì gây chú ý, recruiter chuyển sang profile tiếp theo.
Sự khác biệt giữa GitHub profile và project repo
Bài 6 và các bài Module 2-3 hướng dẫn cấu trúc từng repo cụ thể (README, structure, commit message). Bài này tập trung vào trang profile — landing page hiển thị trước khi recruiter click vào bất kỳ repo nào.
Profile tốt không thay thế được project tốt, nhưng profile xấu làm recruiter không muốn click vào project của bạn.
Username — chọn đúng từ đầu
Username xuất hiện trong mọi URL repo: github.com/username/repo-name. Khi bạn comment trên issue, gửi PR, hay được tag — username này hiển thị trước cộng đồng. Đây là identifier gắn với bạn lâu dài.
Nguyên tắc chọn username
- Lowercase, không dấu: GitHub không phân biệt hoa thường trong URL, nhưng lowercase dễ gõ và nhất quán.
- Hyphen hoặc không separator:
nguyen-van-anhhoặcnguyenvananh. Underscore (_) không được GitHub username hỗ trợ. - Khớp với LinkedIn: LinkedIn URL
linkedin.com/in/username— cùng username trên cả hai giúp recruiter xác nhận danh tính nhanh, không bị nhầm với người khác. - Không có số đuôi ngẫu nhiên:
dev1234,aiengineer99trông như account tạm. - Không có nickname cá nhân:
coolninja,dragonmaster— không phù hợp ngữ cảnh professional.
Ví dụ
| Username | Đánh giá | Lý do |
|---|---|---|
nguyen-van-anh |
Tốt | Tên thật, dễ đọc, không số |
vananh-nguyen |
Tốt | Format anglicized, phù hợp profile quốc tế |
nguyenvananh |
Được | Không separator vẫn chấp nhận được |
aiengineer2024 |
Tránh | Không phải tên thật, số năm sẽ lỗi thời |
xX_killer99_Xx |
Không dùng | Không professional, tạo ấn tượng xấu |
Đổi username về sau — hậu quả
GitHub cho đổi username, nhưng tất cả URL cũ (repo, comment, reference trong README của project khác) sẽ break. GitHub redirect tạm thời một thời gian, nhưng không vĩnh viễn. Nếu bạn đã có repo public và link đang được dùng ở đâu đó, đổi username sẽ mất các link đó. Chọn đúng từ đầu, tránh phải đổi sau.
Avatar, bio và public profile settings
Avatar
Ảnh avatar xuất hiện cạnh mọi comment, PR, commit bạn tạo. Với recruiter, avatar là visual cue đầu tiên họ gắn với tên bạn.
- Tốt: ảnh headshot, nền trơn hoặc nền nhạt, khuôn mặt rõ. Không cần ảnh chụp studio — ảnh selfie tốt ở điều kiện ánh sáng tự nhiên là đủ.
- Tránh: ảnh nhóm (khó biết ai là bạn), ảnh mờ, ảnh landscape, avatar anime/game, hoặc để trống (hiện Identicon mặc định).
Avatar nên vuông, tối thiểu 400×400 px để không bị vỡ ảnh khi GitHub resize.
Bio (dòng mô tả dưới tên)
Giới hạn 160 ký tự. Bio hiển thị ngay dưới tên và location — recruiter đọc trong 3-5 giây đầu.
Tốt:
AI Engineer | Building RAG/LLM products | Ex-Data Analyst at Vietcombank | Vietnam
Tệ:
Passionate developer who loves coding 💻🚀 Always learning!
Bio tốt trả lời được: bạn làm gì kỹ thuật, bối cảnh cũ của bạn là gì, bạn ở đâu. Bio tệ là cliche áp dụng được cho bất kỳ ai, không thêm thông tin gì.
Public profile settings (Settings → Profile)
Vào github.com/settings/profile và điền đầy đủ:
- Name: tên thật hoặc tên anglicized (vd "Anh Nguyen"). Tên hiển thị trên profile, tách biệt với username.
- Bio: như hướng dẫn trên.
- Company: công ty hiện tại, hoặc "Freelance / Open to work" nếu đang tìm việc.
- Location: ít nhất city + country (vd "Ho Chi Minh City, Vietnam"). Recruiter remote dùng location để filter.
- Website: link blog hoặc personal site nếu có. Không điền nếu link chết hoặc site trống.
- Social accounts: GitHub cho thêm LinkedIn, Mastodon, Twitter/X. Thêm LinkedIn giúp recruiter xác nhận cross-platform.
- Email public: tùy chọn. Nếu ổn với cold mail từ recruiter, để email visible. Nếu không, bỏ trống — recruiter thường có cách khác liên hệ.
Profile README — feature quan trọng nhất
GitHub có một feature ít người biết: nếu bạn tạo repo có tên trùng với username (vd username là nguyen-van-anh, tạo repo nguyen-van-anh/nguyen-van-anh), file README.md trong repo đó sẽ render trực tiếp trên trang profile, ngay phía trên pinned repo.
Tạo Profile README
- Vào
github.com/new, tạo repo mới. - Tên repo: chính xác bằng username (case-insensitive, GitHub sẽ nhận ra).
- Chọn Public.
- Tick Add a README file.
- Nhấn Create repository.
GitHub hiện banner thông báo đây là special repository. Sau khi tạo, edit file README.md — nội dung render ngay trên profile của bạn.
Profile README hiển thị ở đâu
Nội dung render ở phần trên cùng của Overview tab, trước pinned repo và activity heatmap. Recruiter thấy ngay khi mở profile.
Nội dung nên có gì
Profile README là cơ hội giới thiệu bản thân với ngôn ngữ và cấu trúc bạn tự kiểm soát — khác với bio (160 ký tự) hay CV (format cứng). Nội dung tốt:
- 1-2 câu giới thiệu ngắn — bạn là ai, làm gì.
- Danh sách 2-3 featured project có link và số liệu kết quả.
- Tech stack ngắn gọn — không liệt kê mọi thứ, chỉ core stack.
- Link blog nếu có bài viết kỹ thuật.
- Contact: LinkedIn + email.
- "Currently learning" — 1-2 thứ thôi, không phải 10.
Nội dung nên tránh
- Badge spam: 30 badge framework, language, OS — trông cluttered, không thêm thông tin.
- Motivational quote: "The best time to plant a tree..." — không liên quan, unprofessional.
- Animated GIF banner to: load chậm, distract khỏi content.
- "Currently learning" liệt kê 10 thứ — recruiter hiểu là bạn không làm sâu cái nào.
- Emoji quá nhiều: 2-3 emoji hợp lý, nhiều hơn trông không serious.
Template Profile README cho AI Engineer
Template dưới đây là khung cơ bản. Điền vào phần placeholder, xóa những section không relevant với bạn.
# Hi, I'm [Your Name]
**AI Engineer** | Ex-[Previous Role] at [Company] | Based in Vietnam
I build AI products focused on RAG pipelines, LLM applications,
and ML deployment. Background in [domain] helps me work on
problems that require both domain knowledge and engineering depth.
---
## Featured Projects
### [RAG Chatbot for Vietnamese Legal Documents](https://github.com/user/rag-legal)
FastAPI + LangChain + Qdrant. Faithfulness 0.87 on 500-page corpus.
Eval framework: RAGAS. [[Demo]](https://demo.link) [[Blog post]](https://blog.link)
### [Customer Churn Predictor](https://github.com/user/churn)
XGBoost classifier. AUC 0.87. Deployed on Render with FastAPI.
[[Demo]](https://demo.link)
### [Email Triage Agent](https://github.com/user/agent)
LangGraph + tool calling + human-in-the-loop. Reduces manual triage
time by ~60% in internal testing. [[Video walkthrough]](https://loom.link)
---
## Tech Stack
**Languages**: Python, TypeScript
**AI/ML**: PyTorch, scikit-learn, Transformers, LangChain, LangGraph
**Backend**: FastAPI, PostgreSQL, Redis
**Vector DB**: ChromaDB, Qdrant
**MLOps**: MLflow, Docker, GitHub Actions
---
## Writing
- [How I built a RAG chatbot on Vietnamese legal docs](https://blog.link) — May 2026
- [From data analyst to AI engineer: what actually changed](https://blog.link) — Mar 2026
---
## Connect
- LinkedIn: [linkedin.com/in/username](https://linkedin.com/in/username)
- Email: [email protected]
*Currently learning: vLLM serving, multi-agent evaluation.*
Điểm cần tùy chỉnh
- Featured Projects: thay bằng project thực của bạn. Mỗi project có 1 dòng mô tả kỹ thuật cụ thể và 1 số liệu kết quả. Không để trống số liệu ("results pending").
- Tech Stack: chỉ liệt kê những gì bạn thực sự dùng trong project, không phải tất cả những gì bạn từng đọc về.
- Writing: bỏ section này hoàn toàn nếu chưa có bài viết. Section rỗng trông tệ hơn không có section.
- "Currently learning": cập nhật thật, không để cũ 6 tháng.
Pinned repo — chọn và trình bày đúng
GitHub cho pin tối đa 6 repo lên profile. Mặc định GitHub sắp xếp theo star count hoặc thứ tự tạo — không phải thứ tự tốt nhất cho portfolio. Bạn cần pin thủ công.
Bài 3 đã nêu ngắn về pin 6 repo theo tier. Phần này đi vào chi tiết cụ thể hơn về tiêu chí chọn và cách trình bày.
Tiêu chí chọn repo để pin
Đặt câu hỏi: nếu recruiter chỉ xem 3 repo đầu trong danh sách pin, họ có hiểu được bạn làm được gì không?
- Đủ phổ kỹ năng: không pin 6 repo cùng loại (vd 6 notebook data analysis). Mỗi repo nên cho thấy một kỹ năng khác nhau — ML cổ điển, deep learning, LLM/RAG, deployment, agent.
- Có README đầy đủ: recruiter click vào repo, nếu README trống là lãng phí slot pin.
- Có demo link hoặc screenshot: repo với demo link được click nhiều hơn repo chỉ có code.
- Không phải fork không thay đổi: fork tutorial mà không thêm gì là dấu hiệu bạn chỉ làm theo, không tự build.
Cơ cấu 6 slot khuyến nghị
- Slot 1-3: 3 capstone project chính (ML, DL, LLM/Agent). Đây là trọng tâm.
- Slot 4: project có domain crossover rõ (nếu có) — cho thấy bối cảnh nghề cũ.
- Slot 5: project có open source contribution hoặc tools/library nhỏ bạn tự viết.
- Slot 6: learning repo có README chất lượng cao — ghi lại quá trình học với experiment và ghi chú.
Re-pin theo job target
Trước khi apply vào job cụ thể, xem lại pinned repo: nếu job cần MLOps → đưa repo có Docker/CI/CD lên đầu; nếu job cần LLM → đưa RAG/Agent project lên đầu. GitHub không giới hạn số lần re-pin.
Những gì không nên pin
- Repo tên
test,practice,homework1. - Fork tutorial mà không có thay đổi thực chất.
- Repo rỗng (0 commit ngoài README tự tạo).
- Repo private — không hiển thị gì, chỉ chiếm slot.
Topics và description cho từng repo
Repository description
Description hiển thị dưới tên repo trong trang profile và trong search result. Giới hạn 200 ký tự.
Tốt:
Customer churn prediction with XGBoost. AUC 0.87. FastAPI inference endpoint deployed on Render.
Tệ:
AI Project
Description tốt trả lời: project làm gì, dùng gì, kết quả số liệu. Recruiter đọc description trước khi click vào repo — description rõ tăng xác suất click.
Topics (tags)
Mỗi repo có thể thêm topics qua nút "Add topics" bên cạnh description. GitHub indexer dùng topics để cung cấp repo cho người tìm kiếm theo topic.
Thêm topics phù hợp cho repo AI Engineer:
- Framework:
pytorch,scikit-learn,langchain,fastapi - Task:
machine-learning,rag,llm,nlp,computer-vision - Infrastructure:
docker,mlflow,github-actions - Domain (nếu applicable):
healthcare,finance,legal
Không cần thêm quá nhiều — 5-8 topics per repo là đủ. Topics quá nhiều không tăng discoverability thêm.
Topics trên tất cả repo public
Không chỉ pinned repo mới cần topics. Mọi repo public bạn muốn ai đó tìm thấy đều nên có description và topics. Repo thiếu cả hai trông bị bỏ dở.
Activity heatmap — duy trì đều đặn
Tab Overview của GitHub profile hiển thị contribution calendar — grid ô vuông màu xanh theo ngày trong 1 năm. Màu đậm hơn = nhiều contribution hơn trong ngày đó.
Contribution được tính là gì
Theo GitHub documentation (docs.github.com/en/account-and-profile/setting-up-and-managing-your-github-profile/managing-contribution-settings-on-your-profile):
- Commit vào default branch hoặc
gh-pagesbranch của repo public. - Mở Issue, Pull Request.
- Submit Pull Request review.
- Co-author commit (khi commit message có
Co-authored-by:).
Commit vào repo private không hiển thị trên heatmap trừ khi bạn bật "Include private contributions" trong profile settings.
Pattern recruiter nhìn thấy
| Pattern | Recruiter interpret |
|---|---|
| Xanh đều 6-12 tháng, 3-5 ngày/tuần | Developer active, có discipline |
| 1 tháng xanh đậm, còn lại trống | Burst học rồi dừng, không sustainable |
| Trống hoàn toàn | Không commit vào repo public, không có gì để verify |
| Xanh rất đậm mọi ngày liên tục | Acceptable — nhưng không tốt hơn nhiều so với đều vừa phải |
Duy trì heatmap đều đặn
Không cần commit code phức tạp mỗi ngày. Contribution nhỏ cũng tính:
- Fix typo trong README.
- Thêm comment vào function.
- Update
requirements.txtversion. - Thêm test case.
- Mở Issue ghi lại bug tìm thấy.
Target thực tế: 3-5 commit/tuần trong 6+ tháng. Không nhất thiết phải mỗi ngày — consistent hơn là intense rồi biến mất.
Repo học là contribution hợp lệ
Nếu bạn đang học một paper hoặc course, tạo repo public ghi lại quá trình: code implementation, ghi chú Markdown, experiment result. Đây là contribution thực, không phải "farm activity".
Languages stats và .gitattributes
GitHub tự động phân tích file extension trong tất cả repo public và hiển thị "Most used languages" trên profile. Với AI Engineer, kết quả mặc định thường bị lệch.
Vấn đề với Jupyter Notebook
File .ipynb về kỹ thuật là JSON — GitHub Linguist (thư viện phát hiện ngôn ngữ) phân loại chúng là "Jupyter Notebook" thay vì Python. Nếu phần lớn code AI của bạn nằm trong notebook, language stats sẽ hiển thị "Jupyter Notebook" chiếm phần lớn, Python rất ít — không phản ánh đúng stack.
Fix với .gitattributes
Thêm file .gitattributes vào root của repo:
*.ipynb linguist-vendored=false
*.ipynb linguist-language=Python
Dòng đầu đảm bảo notebook không bị loại ra khỏi stats. Dòng hai báo Linguist phân loại notebook là Python. Sau khi commit, GitHub sẽ recount language stats (có thể mất vài phút đến vài giờ).
Thêm file này vào mỗi repo có notebook. Không có file .gitattributes tập trung cho cả profile — mỗi repo phải set riêng.
Repo generate code tự động
Một số tool generate HTML/CSS/JavaScript vào repo (vd Jekyll, Sphinx). Nếu không muốn các file này tính vào language stats:
docs/ linguist-generated=true
_site/ linguist-vendored=true
Profile widgets bên thứ ba
Một số project open source cung cấp widget render dưới dạng ảnh động, nhúng vào Profile README qua Markdown image syntax.
GitHub Readme Stats (anuraghazra/github-readme-stats)
Hiển thị stats: tổng commit, PR, issue, star. Deploy trên Vercel — bạn nhúng URL với username của mình:

Widget này có ích nếu stats của bạn đáng show (nhiều commit, nhiều repo). Nếu account còn mới, stats trống trông phản tác dụng.
Top Languages widget

Widget này lấy dữ liệu tương tự GitHub Linguist. Sau khi fix .gitattributes (phần 10), widget cũng sẽ phản ánh đúng hơn.
WakaTime
WakaTime (wakatime.com) là IDE plugin track thời gian coding theo ngôn ngữ, project, editor. Bạn có thể nhúng weekly coding stats vào Profile README. Với AI Engineer, WakaTime có thể cho thấy bạn thực sự spend time với Python và AI tools, không chỉ khai trong bio.
Giới hạn của widgets
Widgets phụ thuộc vào service bên thứ ba — nếu server của họ down, ảnh widget hiển thị lỗi trên profile của bạn. Kiểm tra link widget trước khi apply. Nếu widget của bạn thường xuyên broken, bỏ ra.
Thêm nhiều widget cũng không đồng nghĩa profile tốt hơn. Mỗi widget chiếm không gian trong Profile README. Ưu tiên content text trước, widget sau.
Dọn dẹp repo và archive
Tab Repositories trên profile hiển thị tất cả repo public, sắp xếp theo ngày cập nhật gần nhất. Recruiter có thể scroll xuống xem. Những gì ở đây cũng là một phần ấn tượng về bạn.
Repo nên archive
Archive (không xóa) là giải pháp tốt hơn delete. Archive giữ lại commit history, link cũ vẫn hoạt động, nhưng repo được đánh dấu "Archived" và ít hiển thị hơn trong search:
- Repo tên
test1,tmp,practicekhông có README. - Fork tutorial chưa có thay đổi thực chất.
- Repo homework từ khóa học cũ, không show thêm gì so với project chính.
- Repo có README placeholder ("Todo: update this").
Repo nên để private
Những repo bạn không muốn ai đọc code nhưng vẫn cần access (vd config cá nhân, script nội bộ, work-in-progress chưa sẵn sàng).
Repo nên delete
Chỉ delete khi chắc chắn không cần commit history, không có link nào trỏ vào. Trường hợp phổ biến: repo tạo nhầm tên, repo test init trong 5 phút rồi không dùng.
Sau khi dọn dẹp
Sau khi archive/private/delete repo không cần thiết, kiểm tra tab Repositories trên profile: những gì còn lại nên là repo bạn tự hào khi recruiter scroll qua.
AI Engineer trái ngành — cách điều chỉnh profile
Người chuyển ngành sang AI Engineer có thể dùng GitHub profile để biến career transition thành narrative rõ ràng, thay vì phải giải thích trong cover letter.
Bio — show transition
Thay vì giấu background cũ, đưa nó vào bio một cách brief:
AI Engineer | Building NLP tools for healthcare | Ex-pharmacist | Vietnam
AI Engineer | LLM/RAG focus | Former financial analyst at BIDV
Background cũ trong bio cho recruiter context ngay từ đầu — họ có thể tìm kiếm người với domain knowledge đúng với team họ.
Profile README — My Journey section
Thêm một đoạn ngắn 2-3 câu về transition nếu bạn muốn explain context:
I spent 5 years as a pharmacist before transitioning into AI Engineering.
That background drives my focus on healthcare NLP — where domain accuracy
matters more than benchmark scores.
Ngắn gọn và fact-based. Không cần kể toàn bộ câu chuyện — chỉ cần đủ để recruiter hiểu context và thấy relevant.
Pinned repo — prioritize domain crossover
Nếu bạn có project dùng kiến thức nghề cũ (medical NLP, legal document RAG, financial forecasting), ưu tiên pin sớm trong danh sách 6 slot. Project có domain depth khó fake hơn project tutorial — đây là điểm khác biệt thực sự với người học AI thuần.
GitHub profile không cần giải thích lý do chuyển ngành
Giải thích "vì sao chuyển sang AI" là việc của interview và cover letter, không phải GitHub profile. Profile chỉ cần show: bạn làm được gì về kỹ thuật và background của bạn là gì. Phần narrative để cover letter và LinkedIn summary lo.
Lịch refresh profile
Profile tối ưu một lần rồi bỏ quên sẽ dần lỗi thời. Demo link chết, "Currently learning" cũ 1 năm, featured project trong README không còn là project mới nhất — recruiter nhìn thấy ngay.
Trước mỗi lần apply
- Re-pin repo theo yêu cầu job — MLOps role thì đưa DevOps project lên đầu, LLM role thì đưa RAG/Agent lên đầu.
- Kiểm tra demo link trong Profile README và repo description — thử click từng cái, không assume còn sống.
- Update "Currently learning" nếu đã đổi hướng học.
Mỗi 3 tháng
- Update Featured Projects trong Profile README: thêm project mới nếu đã hoàn thành, bỏ project cũ không còn representative.
- Thêm blog post mới vào section Writing nếu có.
- Review tech stack: nếu đã thêm framework mới vào workflow, cập nhật.
Hàng tuần
- Duy trì contribution activity — nhỏ cũng được, quan trọng là đều.
- Commit vào ít nhất 1-2 repo public mỗi tuần.
Audit checklist trước khi apply
Chạy checklist này trước khi gửi application. Mở profile trên browser ở chế độ incognito (để xem như người ngoài, không phải như owner) khi audit.
Visual — 30 giây đầu
- [ ] Avatar là ảnh thật, rõ khuôn mặt, không mờ
- [ ] Bio specific: role + domain + location, không cliche
- [ ] Tên hiển thị là tên thật (hoặc anglicized)
- [ ] Location điền đầy đủ
- [ ] 6 slot pinned repo đã filled — không còn slot trống
- [ ] Profile README hiển thị đúng (không bị render lỗi Markdown)
Content — pinned repo
- [ ] Mỗi pinned repo có description rõ (không phải "AI Project" hay rỗng)
- [ ] Mỗi pinned repo có topics phù hợp (ít nhất 3-5 topics)
- [ ] Click vào từng pinned repo: README đầy đủ, không trống
- [ ] Demo link trong README còn sống (thử click)
- [ ] Không có repo fork tutorial chưa được customize
Content — Profile README
- [ ] Featured project có số liệu kết quả cụ thể
- [ ] Link trong Profile README còn hoạt động (demo, blog)
- [ ] Tech stack liệt kê đúng với project thực tế
- [ ] Contact info có LinkedIn
- [ ] "Currently learning" còn relevant, không cũ hơn 3 tháng
Cleanup
- [ ] Tab Repositories: không có repo tên
test1,tmp,practiceở dạng public - [ ] Fork tutorial chưa customize đã archive hoặc private
- [ ] Repo public nào cũng có ít nhất description ngắn
- [ ] Activity heatmap có data đều trong 3-6 tháng gần nhất
Thiếu mục nào là priority?
Theo thứ tự ảnh hưởng giảm dần:
- Profile README rỗng → tạo ngay, mất 30-60 phút.
- Pinned repo thiếu description → fix trong 10 phút.
- Demo link chết → update README, hoặc thay bằng video demo.
- Activity heatmap thưa → không fix được ngay, bắt đầu commit đều từ bây giờ.
- Username unprofessional → xem xét đổi nếu chưa có link nào quan trọng, đổi sớm tốt hơn đổi sau.
