Case study · 2026
Swishswap Market
A peer-to-peer campus marketplace platform built with React and Supabase, enabling university students to buy, sell, and trade products with real-time updates.

Overview
Swishswap Market is a specialized peer-to-peer (P2P) campus trading platform engineered for university students. The application streamlines buying, selling, and exchanging items through an intuitive, mobile-responsive workflow. Leveraging Supabase for authentication, real-time database operations, and cloud media storage, Swishswap delivers an instant and secure trading experience tailored for campus communities.
Problem
Students trading goods on general social media channels or traditional marketplaces often face fragmented communication, lack of localized campus discovery, and sluggish listing updates.
My role
As a Fullstack Developer, I built the trading workflows and product discovery features using React, Next.js, and TailwindCSS. I integrated Supabase for real-time database subscriptions, user authentication, and secure image storage handling.
Real-time Campus Trading Engine
Swishswap Market was engineered to make peer-to-peer campus exchange frictionless. Built on top of Supabase (PostgreSQL), the application uses WebSockets to reflect new product listings, item availability status, and price updates instantly across connected clients without requiring manual page reloads.
Key Technical Capabilities
- Real-time Database Sync — Subscribes to Supabase Realtime channel changes for instant updates on product availability and offer statuses.
- Secure Cloud Storage — Handles multi-image upload workflows with client-side image compression and Supabase Storage bucket access control policies.
- Campus Product Discovery — Advanced filtering by item condition, price range, exchange preference (sell vs. trade), and campus location.
// Example Supabase Realtime Subscription for Product Feed
import { supabase } from "@/lib/supabaseClient";
export function subscribeToProductListings(onNewProduct: (product: Product) => void) {
const channel = supabase
.channel("public:products")
.on(
"postgres_changes",
{ event: "INSERT", schema: "public", table: "products" },
(payload) => {
onNewProduct(payload.new as Product);
}
)
.subscribe();
return () => {
supabase.removeChannel(channel);
};
}Security & Access Control
Row Level Security (RLS) policies in Supabase ensure that students can only update or delete their own product listings, preventing unauthorized modification while keeping read access public for active listings.
