Production URL: furni-craft-4jd13fny3-elfajomes-projects.vercel.app
Deployed with Vercel for fast global delivery.
Real project visual from the app assets:
FurniCraft is a stylish furniture storefront focused on clean UI, smooth browsing, and modern e-commerce interactions.
It includes product listing, details, wishlist, cart flow, comparison, checkout, and account pages in one cohesive React app architecture.
- Elegant homepage with hero, featured products, and inspiration sections
- Shop page with product browsing and details page per item
- Cart management with quantity-aware state
- Wishlist system with real-time counter badges
- Product comparison page for side-by-side decision support
- Checkout and account flows ready for backend integration
- Fully componentized layout with reusable UI parts
- Responsive design patterns for desktop and mobile
- Centralized API/service layer and clean Redux data flow
- Frontend: React 19, React DOM
- Build Tool: Vite 7
- Routing: React Router DOM 7
- State Management: Redux Toolkit + React Redux
- Styling: Tailwind CSS 4
- Icons: React Icons
- Linting: ESLint 9
- Component-Based Architecture: Reusable UI and layout components for maintainability
- Container/Presentation Separation: Pages orchestrate logic, UI components focus on display
- Redux Slice Pattern: Domain-based slices (
auth,products,cart,wishlist) - Service Layer Pattern: API calls isolated in
src/servicesfor scalability and clean page code - Central Store + Predictable State Flow: Single source of truth with controlled updates
- Route-Driven Modular Structure: Clear page-level routing with React Router
- Singleton Pattern: Central API client instance is created once in
src/api/client.jsviagetApiClient()and reused everywhere through exportedapi - Facade Pattern: Unified app-facing gateway in
src/services/index.jsviaservicesFacadethat exposes grouped methods (products,auth,cart,wishlist) while hiding lower-level service details
- Singleton (
src/api/client.js):apiClientSingletoncaches one immutable HTTP client object (Object.freeze(createApiClient())), ensuring consistent request behavior and one source for headers/error handling - Facade (
src/services/index.js):servicesFacadeprovides a clean interface consumed by feature layers, so pages/slices avoid direct coupling to internal service files and can evolve with minimal refactoring
FurniCraft/
├── src/
│ ├── api/ # API client setup
│ ├── components/ # Layout, common, sections, UI components
│ ├── config/ # Environment and app-level config
│ ├── pages/ # Route pages (Home, Shop, Cart, Checkout, etc.)
│ ├── services/ # Service layer for products, auth, cart, wishlist
│ ├── store/ # Redux store + slices
│ ├── utils/ # Utility helpers
│ ├── App.jsx # Route definitions
│ └── main.jsx # App bootstrap
├── index.html
├── package.json
└── vite.config.jsgit clone https://github.com/elfajome/FurniCraft.git
cd FurniCraftnpm installnpm run devnpm run buildnpm run previewnpm run dev- Start Vite development servernpm run build- Build production bundlenpm run preview- Preview production build locallynpm run lint- Run ESLint checksnpm run test- Run unit/integration tests oncenpm run test:watch- Run tests in watch modenpm run test:perf- Run performance-focused tests for Redux cart operations
- Unit tests: validate utility and service behavior (example: formatting and storage safety)
- Integration tests: validate Redux slice behavior end-to-end through actions and selectors
- Performance tests: stress-test cart state operations with larger datasets to detect regressions early
npm run test:perfCurrent performance suite targets cart reducer hotspots:
- bulk item insertion
- bulk quantity updates
- bulk item removals
- Add real backend integration and authentication persistence
- Add order history in account section
- Add unit/integration tests
- Deploy and link live demo
Contributions, ideas, and suggestions are welcome.
- Fork the project
- Create your feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m "Add amazing feature") - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
Ibrahim Farouk
GitHub: @elfajome
This project is currently unlicensed.