GitHub Portfolio: README, docs, demo, tests, architecture diagram

recruiter-ready repository (Series 10, Episode 02)

🟢 BEGINNER Series 10 — AI/ML Engineer হিসেবে চাকরি Episode 02 / 10

📑 এই পর্বে যা যা আছে

🧩 ১. গল্প: recruiter link-এ ক্লিক করল

গত পর্বে Rahim CV ঠিক করল, GitHub link দিল। এবার একটা কোম্পানি সত্যিই সেই link-এ ক্লিক করল। কিন্তু তারা যা দেখল সেটা হতাশাজনক — একটা repo যার নাম project-final-v2-real, ভেতরে শুধু একটা Untitled.ipynb, কোনো README নেই, কোনো ব্যাখ্যা নেই। তারা বুঝতেই পারল না কাজটা কী।

Arif (ML Engineer বড় ভাই) Rahim-কে বলল:

"তোমার notebook-এ কাজটা হয়তো দারুণ। কিন্তু আমি ৩০ সেকেন্ডে সেটা বুঝতে না পারলে চলে যাব। GitHub repo হলো তোমার দোকানের সাজানো shelf — জিনিস ভালো হলেও যদি এলোমেলো পড়ে থাকে, কেউ কিনবে না। junior হিসেবে তোমার GitHub-ই তোমার সবচেয়ে জোরালো প্রমাণ — এটাকে অবহেলা করা মানে নিজের পায়ে কুড়াল মারা।"

এই পর্বে শিখব — কীভাবে একটা repo এমনভাবে সাজানো যায় যে recruiter/engineer ৩০ সেকেন্ডে বুঝে ফেলে: এই মানুষটা শুধু model বানায় না, একজন engineer-এর মতো কাজ করে।

😓 ২. সমস্যা: ভালো কাজ, খারাপ repo

বেশিরভাগ junior-এর GitHub-এ এই সমস্যাগুলো থাকে:

মূল ধারণা: recruiter কোড লাইন-বাই-লাইন পড়ে না। তারা signal খোঁজে — README আছে? চালানো যায়? পরিষ্কার structure? এই signal গুলোই বলে "এই মানুষটা team-এ কাজ করার জন্য প্রস্তুত"।

🤔 ৩. কেন GitHub-ই junior-এর আসল CV

Level 1 — সহজ intuition: CV বলে "আমি পারি"; GitHub দেখায় "আমি করেছি"। কথার চেয়ে প্রমাণ সবসময় শক্তিশালী।

Level 2 — technical: একটা repo দিয়ে একসাথে অনেক skill প্রমাণ হয় — কোড লেখার মান, Git workflow, documentation, testing, deployment। এগুলো একটা লাইনে "I know Docker" বলার চেয়ে অনেক গভীর signal।

Level 3 — engineer perspective: senior engineer তোমার repo দেখে ভাবে "এই কোড আমার team-এ merge হলে কি আমার রাতের ঘুম নষ্ট হবে?" পরিষ্কার, reproducible, tested repo মানে "না, নষ্ট হবে না" — এটাই তোমাকে hire করার সিদ্ধান্তে সাহায্য করে।

🏗️ ৪. একটা professional repo-র কাঠামো

একটা ML project repo মোটামুটি এভাবে সাজানো ভালো (একটা reasonable, পরিচিত pattern):

bd-tech-career-assistant/ ├── README.md # প্রথমেই যা পড়া হয় - সবচেয়ে গুরুত্বপূর্ণ ├── requirements.txt # অথবা pyproject.toml ├── .gitignore # data/, .venv/, .env, __pycache__ ইত্যাদি ├── .env.example # secret-এর template (আসল .env নয়!) ├── data/ # gitignore করা (README-তে download link) │ └── README.md # data কোথা থেকে, কীভাবে আনতে হবে ├── src/ │ └── career_assistant/ │ ├── __init__.py │ ├── preprocess.py │ ├── train.py │ ├── predict.py │ └── api.py # FastAPI app ├── notebooks/ │ └── 01_eda.ipynb # exploration - কিন্তু production code নয় ├── tests/ │ └── test_preprocess.py ├── models/ # gitignore (বড় file) বা release-এ রাখা ├── docs/ │ └── architecture.png └── Dockerfile
বড় নীতি: exploration থাকবে notebooks/-এ, কিন্তু আসল, reusable code থাকবে src/-এ পরিষ্কার function/class হিসেবে। notebook থেকে .py-তে কোড সরানোই junior থেকে engineer হওয়ার একটা বড় signal (Series 09-এর মূল শিক্ষা)।

📖 ৫. README: repo-র হৃদয়

README হলো একমাত্র জিনিস যা প্রায় সবাই পড়ে। একটা ভালো README এই প্রশ্নগুলোর উত্তর দেয়: এটা কী? কেন? কীভাবে চালাব? কী ফল?

# Bangladesh Tech Career Assistant Job description থেকে skill বের করে এবং career প্রশ্নের উত্তর দেয় — একটা RAG-ভিত্তিক assistant। ## Demo ![demo](docs/demo.gif) <-- একটা GIF হাজার শব্দের সমান Live: https://... (থাকলে) ## Features - 5k+ job description থেকে skill extraction - RAG দিয়ে career Q&A (pgvector + LLM) - FastAPI endpoint, Docker-ready ## Architecture ![architecture](docs/architecture.png) ## Quickstart ```bash git clone https://github.com/rahim/bd-tech-career-assistant cd bd-tech-career-assistant python -m venv .venv && source .venv/bin/activate pip install -r requirements.txt cp .env.example .env # তারপর key বসান uvicorn src.career_assistant.api:app --reload ``` ## Results | Metric | Value | |---------------------|-------| | Retrieval precision | 0.82 | | API latency (p95) | 140ms | ## Tech stack Python, Pandas, sentence-transformers, PostgreSQL/pgvector, FastAPI, Docker
README-এ সবচেয়ে দামি দুটো জিনিস: (১) একটা demo GIF/screenshot (এক নজরে বোঝা যায়), (২) একটা কাজ করা Quickstart (প্রমাণ করে এটা সত্যিই চলে)।

♻️ ৬. Reproducibility: "clone করে চালানো যায়" প্রমাণ

সবচেয়ে শক্তিশালী signal — অন্য কেউ তোমার repo clone করে, README ফলো করে, ঠিকঠাক চালাতে পারে। এর জন্য দরকার:

⚠️ Secret leak: ভুল করে .env বা API key commit করা AI/ML repo-তে খুব common ভুল, এবং এটা একটা negative signal। সবসময় .gitignore-এ .env রাখুন, আর accidentally commit হয়ে গেলে key rotate করুন — history থেকে মুছলেও ধরে নিতে হবে সেটা leaked।

🎬 ৭. Demo: দেখানো > বলা

একটা কাজ করা demo তোমার repo-কে বাকি ৯০% থেকে আলাদা করে। বিকল্পগুলো (সহজ থেকে কঠিন):

Demo typeকীভাবেকখন
Screenshot/GIFterminal বা UI-এর ছবি/GIF README-তেসবসময়, সবচেয়ে সহজ
Deployed linkFastAPI app cloud-এ (Series 09)API/RAG project-এ দারুণ
Streamlit/Gradio demoদ্রুত একটা UI বানিয়ে Hugging Face Spaces-এ hostML/NLP demo-র জন্য জনপ্রিয়
Notebook (rendered)GitHub নিজেই .ipynb render করেEDA/analysis দেখাতে
Must Know / Learn Later: চাকরির আগে অন্তত একটা GIF/screenshot অবশ্যই। একটা live deployed demo থাকলে বড় plus, কিন্তু বাধ্যতামূলক নয় — সেটা পরে যোগ করা যায়।

🧪 ৮. Tests ও architecture diagram

অনেক junior test লেখে না, তাই একটা ছোট test suite থাকলেই তুমি আলাদা হয়ে যাও। কমপক্ষে একটা-দুটো pytest test (Series 02-এ শেখা) দেখায় তুমি code quality নিয়ে ভাবো।

# tests/test_preprocess.py from career_assistant.preprocess import extract_skills def test_extract_skills_finds_python(): text = "Looking for Python and SQL experience." skills = extract_skills(text) assert "python" in skills assert "sql" in skills

Architecture diagram-ও শক্তিশালী signal — এটা প্রমাণ করে তুমি system-level চিন্তা করতে পারো। জটিল tool দরকার নেই; একটা simple box-and-arrow ছবি (এমনকি ASCII) যথেষ্ট:

Job Descriptions ──► Preprocess ──► Embeddings ──► pgvector │ User Question ──────────────► Retrieve top-k ◄─────────┘ │ ▼ LLM + context ──► Answer

👤 ৯. GitHub profile ও pinned repo

Repo ঠিক করার পর profile-টাও গুরুত্বপূর্ণ। recruiter প্রথমে তোমার profile page দেখে। তাই:

💼 Boss Question

Boss: "এত সাজানো-গোছানো GitHub দিয়ে আমার business-এর কী লাভ? আমি তো coder চাই, decorator না।"

উত্তর: সাজানো repo মানে decoration নয় — এটা প্রমাণ যে এই লোকটা maintainable কোড লেখে। একটা কোম্পানিতে কোড শুধু একবার লেখা হয় না, বছরের পর বছর অন্যরা সেটা পড়ে, বদলায়, চালায়। যে junior আজ README আর test লিখতে অভ্যস্ত, সে team-এ যোগ দিলে অন্যদের সময় বাঁচায়, bug কমায় — সেটাই সরাসরি business value।

🔎 ১০. Job Requirement Decoder

JD-তে প্রায়ই থাকে: "Writes clean, well-documented, and maintainable code."

প্রশ্নউত্তর
কী বোঝায়?কোড শুধু চলে না — অন্যরা পড়ে বোঝে, চালাতে পারে, নিরাপদে বদলাতে পারে।
কেন চায়?টিমে কোড বছরের পর বছর maintain হয়; খারাপ কোড দীর্ঘমেয়াদে ব্যয়বহুল।
কোন সমস্যা সমাধান করে?onboarding সহজ, bug কম, "আমার মেশিনে চলছিল" সমস্যা কমে।
junior-এর কী জানা লাগে?README, requirements, .gitignore, পরিষ্কার commit, ছোট test, notebook-vs-src পার্থক্য।
এখনই কী master লাগে না?জটিল CI/CD pipeline, ১০০% test coverage, monorepo tooling।
GitHub-এ কীভাবে দেখাবে?এই পুরো episode-ই তার উত্তর — পরিষ্কার repo + README + demo + test।
Interview-তে কী জিজ্ঞেস করতে পারে?"এই repo-টা আমাকে চালিয়ে দেখাও তো", "কেন notebook আর src আলাদা রাখলে?"

⚠️ ১১. সাধারণ ভুল

ভুল ১: README নেই বা default। → ঠিক: problem, quickstart, demo, results সহ README।

ভুল ২: শুধু একটা বিশাল notebook। → ঠিক: reusable code src/-এ সরান।

ভুল ৩: বড় data/model repo-তে push। → ঠিক: gitignore করুন; link/release ব্যবহার করুন।

ভুল ৪: .env/API key commit। → ঠিক: gitignore + .env.example; leak হলে key rotate।

ভুল ৫: "asdf", "final v3" এর মতো commit message। → ঠিক: অর্থপূর্ণ message (Series 02 Git পর্ব)।

ভুল ৬: ৫০টা অসম্পূর্ণ repo pin করা। → ঠিক: সেরা ৩-৬টা pin, বাকিটা গুছিয়ে ফেলুন।

🎤 ১২. Interview Prep

প্রশ্ন ১: তোমার এই repo-টা কীভাবে structure করেছ, আর কেন?
উত্তর: notebook (exploration) বনাম src (reusable code) পার্থক্য, README-র ভূমিকা, reproducibility।

প্রশ্ন ২: এই project কেউ clone করে চালাতে চাইলে কী করবে?
উত্তর: Quickstart ধাপ দেখাও — venv, requirements, .env, run command। চালিয়ে দেখাতে পারলে দারুণ।

প্রশ্ন ৩: Test লিখেছ? কেন গুরুত্বপূর্ণ?
উত্তর: preprocess/utility function-এ test দেখায় regression ধরা যায়; refactor করার সাহস বাড়ে।

✍️ ১৩. হাতে-কলমে (Mini Exercise)

তোমার সেরা project-টা নিয়ে আজই এই checklist সম্পন্ন করো:

☐ একটা README লেখো: এক লাইন description, Quickstart, একটা screenshot/GIF, results table
requirements.txt আর .gitignore যোগ করো
.env বা কোনো secret commit করা আছে কিনা চেক করো — থাকলে সরাও
☐ অন্তত একটা pytest test লেখো
☐ একটা simple architecture diagram (ASCII হলেও চলবে) যোগ করো
☐ GitHub profile-এ এই repo pin করো

🚀 ১৪. Project Connection

Flagship "Bangladesh Tech Career Assistant"-কে এই episode-এর checklist দিয়ে সাজালে এটা তোমার portfolio-র মুকুট হয়ে যাবে। Series 09-এ আমরা এটাকে notebook থেকে src/ package, FastAPI, Docker-এ রূপান্তর করেছি — সেই structure-ই এখানে repo হিসেবে দেখানোর জন্য প্রস্তুত। README-তে সেই "notebook → production" যাত্রাটা দেখালে recruiter বুঝবে তুমি পুরো lifecycle সামলাতে পারো।

📌 ১৫. সারসংক্ষেপ

এই Episode-এ আমরা শিখলাম:

✓ junior-এর জন্য GitHub-ই আসল CV — বলা নয়, দেখানো
✓ Repo structure: notebook (exploration) বনাম src (reusable code) আলাদা
✓ README-ই repo-র হৃদয়: problem, quickstart, demo GIF, results
✓ Reproducibility: requirements, .env.example, clear run steps — secret কখনো commit নয়
✓ Demo (GIF/deployed/Streamlit) তোমাকে ৯০% থেকে আলাদা করে
✓ ছোট test suite + architecture diagram = engineer signal
✓ Profile-এ সেরা ৩-৬টা repo pin, বাকিটা গুছিয়ে রাখা

➡️ ১৬. পরবর্তী পর্বে কী শিখব

পরবর্তী Episode (S10E03): "Portfolio Strategy: ৫টা project যা junior থেকে আলাদা করে"।

Repo সাজানো শিখলাম — কিন্তু কোন project গুলো বানাব? পরের পর্বে দেখব কীভাবে Classical ML, Deep Learning, NLP/LLM, RAG আর Production — এই ৫ ধরনের project দিয়ে একটা coherent, differentiating portfolio সাজাতে হয়।
© 2025 Sheikh Thanbir Alam. All Rights Reserved. thanbirtamim.github.io
এই লেখা মূল লেখকের সম্পত্তি — লিখিত অনুমতি ছাড়া কপি করে অন্য কোনো ওয়েবসাইট, ব্লগ, বই বা প্ল্যাটফর্মে প্রকাশ/বিতরণ করা কঠোরভাবে নিষিদ্ধ। Content may not be copied or republished without permission.