A sleek, interactive web application built with React and Tailwind CSS that allows users to explore elite computer components, filter by category or real-time search keywords, track total system cost, calculate estimated power draw (wattage), and export build specifications instantly.
- Framework: React (Vite)
- Styling: Tailwind CSS (v4)
- Icons & Notifications: Lucide React, React Toastify
- Deployment: Vercel
- Dynamic Build Stack & LocalStorage Persistence: Users can select components dynamically, and their build is safely stored in browser storage so it persists across refreshes.
- Real-time Cost & Power Calculation: Instantly calculates both total financial cost ($) and estimated system power draw (~W) as parts are added or removed.
- Smart Toast Notifications & Audio Feedback: Features interactive toast warnings for duplicate component selection and subtle synth audio cues on actions.
JSX (JavaScript XML) is a syntax extension for JavaScript used in React. It allows us to write HTML-like structures directly inside JavaScript files. Under the hood, JSX gets compiled into standard JavaScript function calls (React.createElement) by Babel before rendering to the DOM.
- Props (Properties): Immutable data passed down from a parent component to a child component (e.g., passing
stackandonAddToBuildfromApp.jsxtoComponentGrid). They are read-only for the receiving component. - State: Mutable, internal data managed within a component (e.g., tracking selected components via
stackstate inApp.jsx). When state changes, React re-renders the component to reflect the updated UI.
useState is a React Hook that lets functional components manage state. It returns an array with the current state value and a setter function to update it.
- In RigVault: We used
useStateinsrc/App.jsxto managestack(const [stack, setStack] = useState(...)) for tracking selected rig components,componentsfor holding the catalog data, andloadingfor managing the initial data fetch loader.
useEffect is a React Hook used for handling side effects like data fetching, manual DOM updates, or synchronizing with local storage after rendering.
- In RigVault: We used
useEffectinsrc/App.jsxto fetch the/data/components.jsoncatalog once when the app mounts, and anotheruseEffectto synchronize thestackstate with browserlocalStoragewhenever components are added or removed.
The key prop helps React identify which items in a list have changed, been added, or been removed. Unique keys give elements a stable identity, optimizing the reconciliation process (Virtual DOM diffing) and preventing state bugs during list re-renders.
Conditional rendering in React allows components to render different UI elements or layouts based on specific conditions or state.
- In RigVault: We used conditional rendering in
src/components/Sidebar.jsxto display an empty build state (Your build stack is empty) whenstack.length === 0, and insrc/components/ComponentCard.jsxto toggle the button UI between"Add to Build"and"✓ In Your Build".
React follows a unidirectional (top-down) data flow:
- Parent to Child: Data is passed down via Props (e.g.,
App.jsxpassingitemstoComponentGrid). - Child to Parent: Children communicate upward via Callback Functions passed as props (e.g.,
ComponentCardinvokingonAddToBuild(item)received fromApp.jsxto update the parent'sstackstate).
⚠️ Simulation Notice: This project was developed and delivered as part of a real-world freelance client simulation / contract workflow for ForgeBench.
"The work itself: Genuinely solid. Everything in the original spec works... None of them were half-baked bolt-ons, they were wired in cleanly... That’s the difference between someone who can code and someone who can ship." — Claude, ForgeBench (Freelance Client Simulation)