diff --git a/apps/spa/src/pages/WishlistPage.tsx b/apps/spa/src/pages/WishlistPage.tsx
new file mode 100644
index 0000000..38990ad
--- /dev/null
+++ b/apps/spa/src/pages/WishlistPage.tsx
@@ -0,0 +1,67 @@
+import { useState, useEffect } from 'react'
+import { Link } from 'react-router-dom'
+import Navbar from '../components/Navbar'
+import Footer from '../components/Footer'
+import ProductCard from '../components/ProductCard'
+import { API_BASE, type Category } from '../types'
+import { useWishlistStore } from '../store/wishlistStore'
+import { Heart } from 'lucide-react'
+
+export default function WishlistPage() {
+ const [categories, setCategories] = useState
([])
+ const { items } = useWishlistStore()
+
+ useEffect(() => {
+ fetch(`${API_BASE}/categories`)
+ .then(res => res.json())
+ .then(setCategories)
+ .catch(console.error)
+ }, [])
+
+ return (
+
+
+
+
+
+ {/* Header */}
+
+
+
+
+
Your Wishlist
+
+ Items you've loved. Keep them here until you're ready to make them yours.
+
+
+
+ {items.length === 0 ? (
+
+
+
+
+
Your wishlist is empty
+
Explore our products and tap the heart icon to save your favorites.
+
+
+ Browse Shop
+
+
+
+ ) : (
+
+ {items.map(product => (
+
+ ))}
+
+ )}
+
+
+
+
+
+ )
+}
diff --git a/apps/spa/src/store/wishlistStore.ts b/apps/spa/src/store/wishlistStore.ts
new file mode 100644
index 0000000..cdb53a3
--- /dev/null
+++ b/apps/spa/src/store/wishlistStore.ts
@@ -0,0 +1,33 @@
+import { create } from 'zustand'
+import { persist } from 'zustand/middleware'
+import { Product } from '../types'
+
+interface WishlistState {
+ items: Product[]
+ addItem: (product: Product) => void
+ removeItem: (productId: number) => void
+ isInWishlist: (productId: number) => boolean
+}
+
+export const useWishlistStore = create()(
+ persist(
+ (set, get) => ({
+ items: [],
+ addItem: (product) => {
+ const { items } = get()
+ if (!items.find(item => item.id === product.id)) {
+ set({ items: [...items, product] })
+ }
+ },
+ removeItem: (productId) => {
+ set({ items: get().items.filter(item => item.id !== productId) })
+ },
+ isInWishlist: (productId) => {
+ return get().items.some(item => item.id === productId)
+ }
+ }),
+ {
+ name: 'homaroma-wishlist',
+ }
+ )
+)