Mohamed GhoniemWeb Developer
MohamedGhoniem
  • Work
  • Services
  • Experience
  • Blog
Available
CV
Open to opportunities
WorkServicesExperienceBlogDownload CV
MG

© 2024 Mohamed Ghoniem. All rights reserved.

TwitterGitHubLinkedIn
Case StudyOffline

CARTOE-Commerce Marketplace

Multi-Vendor Marketplace

  • E-Commerce✦
  • Offline✦
  • React + Supabase✦
  • 2026✦
  • E-Commerce✦
  • Offline✦
  • React + Supabase✦
  • 2026✦
  • E-Commerce✦
  • Offline✦
  • React + Supabase✦
  • 2026✦
  • E-Commerce✦
  • Offline✦
  • React + Supabase✦
  • 2026✦
  • E-Commerce✦
  • Offline✦
  • React + Supabase✦
  • 2026✦
  • E-Commerce✦
  • Offline✦
  • React + Supabase✦
  • 2026✦
  • E-Commerce✦
  • Offline✦
  • React + Supabase✦
  • 2026✦
  • E-Commerce✦
  • Offline✦
  • React + Supabase✦
  • 2026✦

Fig. 01

Desktop · Laptop · Tablet · Phone

project screen
project screen
project screen
01Role
Frontend Developer
+ Data modelling
02Duration
Feb 2026
First release
03Team
2 People
Small team
04Status
Offline
Archived
Project Purpose

Why it exists

Carto is a multi-vendor online marketplace where shoppers browse products from many independent stores in one place. It covers the whole shopping loop — discovering products by category and price, comparing them, reading vendor profiles, filling a cart and reaching checkout — on top of a Supabase (Postgres) backend.

The goal was to build a realistic storefront end to end: relational data with vendors, categories and sub-categories, route-level data loading so pages paint with data already in hand, and a cart that survives a refresh.

Collaborators

The team

  • MS

    Menna Selim

    Collaborator

Tools & Technologies

What it's built with

  • 01
    React 19
  • 02
    Vite
  • 03
    Tailwind CSS
  • 04
    Supabase
  • 05
    TanStack Query
  • 06
    React Router
  • 07
    JavaScript
  • 08
    Git
Features

What it does best

04

Core Features

Categories & Sub-categories

Five top-level categories with their own sub-categories, shown as a themed carousel on the home page and as a sidebar filter in the shop.

01

Price & Category Filtering

Filters live in the URL query string, so a filtered shop view can be refreshed, bookmarked or shared and still show the same products.

02

Search Across Products & Vendors

One search box queries products and stores at the same time and returns a mixed result list that links straight to each page.

03

Persistent Cart

A Redux Toolkit cart with quantity controls and totals, saved to local storage so it survives a refresh.

04
More Features

Beyond the essentials

  • 05

    Daily Deals

    Time-limited offers with the old price, the new price, how many items are left and a live expiry countdown.

  • 06

    Vendor Profiles

    Each store has its own page with rating, customers, on-time shipping rate, address and a grid of the products it sells.

  • 07

    Product Comparison

    Add products to a side-by-side table to compare price, rating and details before buying.

  • 08

    Accounts & Orders

    Sign-up and login through Supabase Auth, plus a profile area with account details and an order history.

App Screens

Inside the product

Home
Carto home page with promo carousel and category tiles
01

Home

Storefront Landing Page

A promo carousel, a category strip with tabs for each top-level category, featured vendors and the popular-products grid — all loaded before the page renders so there is no spinner flash.

  • Route loaders
  • TanStack Query
  • Carousel
Discovery
Carto shop page listing products with filters
02

Discovery

Shop With Filters

Every product in a responsive grid with a category sidebar and a price-range slider. Cards show the vendor, rating, old and new price and an add-to-cart button.

  • URL filters
  • Price range
  • Relational joins
Product
Carto product details page
03

Product

Product Details

Large product image, price with discount, stock, add-to-cart, wishlist and share buttons, then tabs for product info, vendor info and reviews — plus related products from the same category.

  • Tabbed details
  • Related products
  • Reviews
Merchandising
Popular products grid on the Carto home page
04

Merchandising

Popular Products

A rating-sorted list of the best products, built from one Supabase query that pulls in each product’s vendor and category in the same request.

  • Supabase embeds
  • Sorted by rating
  • Card grid
Marketplace
Vendor profile page with products
05

Marketplace

Vendor Profile

A storefront inside the marketplace: store logo, rating, customer count, on-time shipping rate, contact details and everything the vendor sells.

  • Vendor stats
  • Nested route
  • Product grid
Checkout
Shopping cart with order summary
06

Checkout

Cart & Order Summary

Quantity steppers, per-line totals, remove buttons and an order summary with shipping fee, delivery address check and coupon field. The cart lives in Redux and is mirrored to local storage.

  • Redux Toolkit
  • Local storage
  • Order summary
Problems & How We Solved Them

Hard problems, solved

Issue #01High
−

The problem

Pages flashing empty while data loaded

+

The solution

Each route has a loader that prefetches its queries into the TanStack Query cache before the page renders. Components then read the same query keys, so the first paint already has data and later visits come straight from the cache.

Pages render with data in hand, not spinners
Issue #02Critical
−

The problem

Showing products with their vendor and category

+

The solution

Products, vendors, categories and sub-categories live in separate tables. Instead of several round trips, queries use Supabase’s embedded relations to fetch a product together with its vendor and category in one request, and filters (category, sub-category, price range) are applied server-side.

One request per listing instead of many
Issue #03Low
−

The problem

Keeping the cart across refreshes

+

The solution

The cart is a Redux Toolkit slice that is initialised from local storage and written back on change, with reducers for add, remove, increase and decrease so totals stay consistent.

Cart survives reloads and new tabs
Outcomes

The results, by the numbers

0

Seeded products

0

Vendors

0

Top-level categories

0

Routed pages

Previous projectRABEHFleet Operations DashboardNext projectORABY TRAVELTransport Admin Dashboard