Evanstore adalah aplikasi katalog belanja responsif yang dibuat menggunakan Next.js, TypeScript, TanStack Query, dan Redux Toolkit.
Aplikasi mengambil data produk dari Fake Store API dan menyediakan katalog produk, halaman detail, pencarian, filter, serta shopping cart yang tetap tersimpan setelah browser di-refresh.
- Live Demo:
https://evanstore.vercel.app - GitHub Repository: https://github.com/morvn/evanstore
- Menampilkan daftar produk dari Fake Store API
- Halaman detail produk
- Loading skeleton
- Error handling dan tombol retry
- Pencarian produk
- Filter berdasarkan kategori dan harga
- Sorting produk
- Tampilan grid dan list
- Load more products
- Shopping cart menggunakan Redux Toolkit
- Cart tetap tersimpan setelah refresh
- Halaman cart
- Responsive untuk desktop, tablet, dan mobile
- Mobile navigation
- Newsletter form demo
- Next.js App Router
- React
- TypeScript
- Tailwind CSS
- TanStack Query
- Redux Toolkit
- React Redux
- Fake Store API
- ESLint
Daftar produk:
https://fakestoreapi.com/products
Detail produk:
https://fakestoreapi.com/products/{id}
| Route | Fungsi |
|---|---|
/ |
Halaman katalog |
/?q= |
Hasil pencarian |
/products/0 |
Detail produk |
/cart |
Shopping cart |
Clone repository:
git clone https://github.com/morvn/evanstore.gitMasuk ke folder proyek:
cd evanstoreInstall dependency:
npm installJalankan development server:
npm run devBuka aplikasi:
http://localhost:3000
Development:
npm run devPemeriksaan ESLint:
npm run lintPemeriksaan TypeScript:
npx tsc --noEmitProduction build:
npm run buildMenjalankan production build:
npm run startTanStack Query digunakan untuk mengelola data produk dari API, termasuk:
- caching;
- loading state;
- error state;
- retry request.
Redux Toolkit digunakan untuk mengelola shopping cart, seperti:
- menambahkan produk;
- mengubah quantity;
- menghapus produk;
- menghitung jumlah produk;
- menyimpan cart ke
localStorage.
Data cart disimpan pada browser menggunakan key:
evanstore.cart.v1
Cart dipulihkan setelah aplikasi berjalan di browser. Aplikasi menunggu proses hydration selesai sebelum menulis ulang data ke localStorage.
Pendekatan ini mencegah cart lama tertimpa oleh state kosong saat aplikasi pertama kali dimuat.
Pencarian produk menggunakan URL parameter:
/?q=jacket#products
Pencarian dilakukan berdasarkan:
- nama produk;
- kategori;
- deskripsi.
Penggunaan URL membuat hasil pencarian tetap tersedia setelah refresh dan dapat dibagikan.
Harga dari Fake Store API dikonversi ke Rupiah menggunakan nilai demonstrasi:
1 USD = Rp16.000
Nilai ini bukan kurs real-time dan hanya digunakan untuk tampilan aplikasi.
src/
├── app/
│ ├── cart/
│ ├── products/
│ ├── layout.tsx
│ ├── page.tsx
│ └── providers.tsx
├── components/
│ ├── cart/
│ ├── catalog/
│ ├── layout/
│ ├── product/
│ └── search/
├── features/
│ └── cart/
├── lib/
└── store/
Jalankan:
npm run lint
npx tsc --noEmit
npm run buildPastikan semua perintah selesai tanpa error.
Aplikasi dapat di-deploy menggunakan Vercel.
Setelah deployment, periksa route berikut:
/
/products/1
/cart
/?q=jacket
Pastikan:
- produk berhasil dimuat;
- gambar tampil;
- pencarian dan filter bekerja;
- Add to Cart bekerja;
- cart tetap tersedia setelah refresh;
- tidak ada error pada browser console.
- API hanya menyediakan satu gambar untuk setiap produk
- Kurs Rupiah bukan kurs real-time
- Checkout dan pembayaran belum tersedia
- Login pengguna belum tersedia
- Newsletter belum terhubung ke backend
- Cart hanya tersimpan pada browser yang digunakan