A modern, responsive web application that allows developers to explore popular technologies and build their ideal development stack.
- React.js + TypeScript
- Tailwind CSS
- Vite
- React-Toastify
- JSON (for technology data)
- Explore Technologies — Browse 12+ technologies with icons, ratings, and difficulty levels.
- Build Your Stack — Add/remove technologies to build a custom stack. Duplicates are prevented.
- Fully Responsive — Works smoothly on mobile, tablet, and desktop with a mobile hamburger menu.
[Add your live link here]
JSX stands for JavaScript XML. It allows us to write HTML-like code inside JavaScript. React uses JSX to make the UI code more readable and easier to write. Instead of using React.createElement(), we can simply write <div>Hello</div>.
Props are read-only data passed from a parent component to a child component. State is data managed inside a component that can change over time. Props cannot be modified by the child, but state can be updated using useState.
useState allows a functional component to have its own state. It returns the current value and a function to update it. In this project, I used useState to store the stack array, the loading state, and the mobile menu toggle.
useEffect runs side effects after the component renders. I used it to fetch the technologies.json file when the app first loads. Without useEffect, the fetch would run on every render, causing infinite loops.
The key prop helps React identify which items have changed, been added, or removed. Without a unique key, React cannot efficiently update the list and may cause bugs.
Conditional rendering means showing different UI based on a condition. I used it in the "Your Stack" section — if the stack is empty, it shows "Your stack is empty." Otherwise, it shows the list of selected technologies.
Parents pass data to children through props. Children send data back by calling a callback function passed as a prop. For example, TechCard receives onAdd as a prop and calls it when the user clicks "Add to Stack".