Projects (মিনি-প্রজেক্ট)
প্র্যাকটিক্যাল মিনি-প্রজেক্ট: calculator, todo, quiz, weather — HTML/CSS/JS-এ বানানোর ধাপ বাংলায়।
শেষ ধাপ — হাতে-কলমে। প্রতিটি প্রজেক্ট একটি করে দৈনন্দিন feature জুড়ে প্রতিটি chapter-এর জ্ঞান কাজে দেয়। নিজে বানান, ব্রাউজারে চালান।
১. Calculator
জ্ঞান: event listener, DOM, value প্রসেসিং।
<input id="display" disabled />
<button data-num="7">7</button>
<button data-op="+">+</button>
<script>
const display = document.getElementById("display");
let current = "";
document.addEventListener("click", (e) => {
const num = e.target.dataset.num;
const op = e.target.dataset.op;
if (num) {
current += num;
display.value = current;
}
if (op) {
current += op;
display.value = current;
}
});
</script>একটি সম্পূর্ণ calculator-এ = চাপলে eval না রেখে নিজে parse করা ভালো অথবা explicit নিয়ম। শুরুতে eval-শিক্ষার্থী হিসেবে ঠিক আছে, তবে production-এ নয়।
২. Todo List
জ্ঞান: createElement, storage, delegation, remove।
const form = document.querySelector("#todo-form");
const list = document.getElementById("list");
const todos = JSON.parse(localStorage.getItem("todos") || "[]");
function render() {
list.innerHTML = "";
todos.forEach((todo) => {
const li = document.createElement("li");
li.textContent = todo.text;
list.appendChild(li);
});
localStorage.setItem("todos", JSON.stringify(todos));
}
form.addEventListener("submit", (e) => {
e.preventDefault();
const input = document.querySelector("#input");
todos.push({ text: input.value });
input.value = "";
render();
});
// delete: delegation + data-id
render();পরে যোগ করুন: data-id দিয়ে delete, status (done/pending), filtering।
৩. Quiz App
জ্ঞান: array/object, user interplay, score।
const questions = [
{ q: "JavaScript-এ কতপ্রকার primitive?", a: 7 },
{ q: "`==` চেয়ে কে ভালো?", a: "===", options: ["==", "===", "একই"] },
];
let score = 0;
let idx = 0;
function showQuestion() {
const q = questions[idx];
const container = document.getElementById("quiz");
container.textContent = q.q;
}
// উত্তর check → score++ → পরের প্রশ্ন
showQuestion();৪. Weather App
জ্ঞান: fetch, async/await, error handling।
async function getWeather(city) {
const key = "YOUR_API_KEY";
const url = `https://api.openweathermap.org/data/2.5/weather?q=${city}&appid=${key}`;
try {
const res = await fetch(url);
if (!res.ok) throw new Error(`HTTP ${res.status}`);
const data = await res.json();
return `${data.name}: ${Math.round(data.main.temp - 273.15)}°C`;
} catch (err) {
return "লোড ব্যর্থ: " + err.message;
}
}
// getWeather("Dhaka").then(console.log);API key নিজের .env-এ, আপাতত কোডে নয়। °C রূপান্তর, loading state — নিজে যোগ করুন।
৫. Toggle Theme — Dark Mode
জ্ঞান: localStorage, classList, storage event।
const toggle = document.getElementById("theme");
function applyTheme(theme) {
document.documentElement.dataset.theme = theme;
localStorage.setItem("theme", theme);
}
// প্রথম ভিজিট/আগের থিম
applyTheme(localStorage.getItem("theme") || "light");
toggle.addEventListener("click", () => {
const current = document.documentElement.dataset.theme;
applyTheme(current === "dark" ? "light" : "dark");
});CSS-এ [data-theme="dark"] দিয়ে color arrangement করুন — সরাসরি রং না, CSS variable ভালো।
৬. Progress Bar
জ্ঞান: scroll, requestAnimationFrame।
const bar = document.getElementById("progress");
window.addEventListener("scroll", () => {
const h = document.documentElement;
const scrolled = h.scrollTop;
const total = h.scrollHeight - h.clientHeight;
bar.style.width = (scrolled / total) * 100 + "%";
});| প্রজেক্ট | শেখায় |
|---|---|
| Calculator | events, DOM |
| Todo | storage, delegation |
| Quiz | array/object, UI state |
| Weather | fetch, async/error |
| Dark mode | storage, classList |
| Progress | scroll, render |
একটি বানাতে না পারলেও চিন্তা নেই — ধাপে ধাপে, প্রতিবার ১০ মিনিট। কারও কোড কপি করে সংশোধিত হলেও শেখা।
প্রতিটি প্রজেক্টে HTML, CSS, JS — তিনটি ফাইলে আলাদা রাখুন; class-এ শেখা যায় না, প্রজেক্ট-এ শেখা হয়।
সংঘবদ্ধ: GitHub-এ push, gh-pages/Netlify-এ live — একটি বাস্তব portfolio-র শুরুতেই।