2025Full Stack Developer

Chic Couture

A catalog + inquiry platform for a jewelry reseller. Modeled the seller's actual workflow — browse, ask, follow up — into structured data, then built the interface around it.

  • TypeScript
  • Next.js
  • Supabase
  • Cloudinary
  • Resend
  • Tailwind CSS

Problem

A local jewelry reseller needed a professional way to showcase their products online without the complexity of a full e-commerce system. They wanted customers to browse products by category and easily inquire about items, while retaining manual control over sales and inventory.

Approach

I built a catalog-style website focused on product discovery rather than checkout. Products are organized into categories such as bracelets, watches, necklaces, and rings, with client-side filtering for ease of browsing. Instead of a shopping cart, customers can send inquiries directly to the business via email using Resend. On the backend, I implemented an admin dashboard where the business owner can upload products with images, update availability statuses, and track inquiry statuses.

Chic Couture screenshot

Technical Decisions

Decision 01

Supabase for Auth & Database

Chose Supabase to quickly bootstrap authentication for the admin panel and store product data. Its row-level security (RLS) policies ensured that only the admin could modify product details while public users could strictly only read data.

sql
create policy "Public profiles are viewable by everyone."
  on products for select
  using ( true );

create policy "Admins can insert products."
  on products for insert
  with check ( auth.role() = 'authenticated' );
Decision 02

Cloudinary for Image Optimization

Jewelry requires high-quality images, but loading heavy assets hurts performance. I integrated Cloudinary to automatically resize and serve images in next-gen formats (WebP) based on the user's viewport, significantly improving LCP scores.

Tradeoffs

Inquiry System vs. Full Checkout

Opted for an inquiry-based model instead of a payment gateway. This reduces friction for the non-technical owner but adds a manual step to close sales.

Client-Side Filtering

Fetched all products at build/runtime and filtered client-side. Good for small inventories (<100 items) and feels instant, but won't scale if inventory grows to thousands.

What I learned

  • 01

    Implementing secure file uploads with signed URLs.

  • 02

    Designing intuitive admin interfaces for non-technical clients.

  • 03

    Handling email transactional flows with Resend.

Command Palette

Search the portfolio. Use arrow keys, Enter to select.