LaunchLoft
LaunchLoft
A high-performance workspace marketplace with integrated KYC and automated escrow management.

LaunchLoft connects professionals with flexible coworking spaces through a seamless booking experience. It features a robust host onboarding system, real-time map-based search, and a comprehensive admin suite for managing disputes and financial transactions.


Manual Workspace Booking.
Traditional workspace booking platforms often suffer from fragmented payment systems, lack of verified host identity, and poor geographical discovery. Building a system that handles multi-step host verification (KYC), secure escrow-based payments, and a responsive map interface requires a highly synchronized state management strategy and a scalable backend architecture to prevent booking conflicts and financial discrepancies across 72+ code modules.

Zero Friction.
Verified Spaces.
Developed using Next.js 16 and Supabase, the platform implements a sophisticated multi-tenant architecture. I integrated Mapbox GL for geospatial search with real-time filtering and built a custom multi-step onboarding flow for hosts that includes document uploads to Supabase Storage and automated KYC status tracking. The financial layer utilizes a platform-fee model with escrow logic, managed through a dedicated admin dashboard that provides granular control over disputes and revenue analytics, ensuring fault tolerance in high-traffic scenarios.

Geospatial Search via Mapbox.
System Core // Dynamic Workspace Filtering with Supabase
const fetchWorkspaces = async () => {
let query = supabase
.from('workspaces')
.select('*, reviews(rating)')
.eq('is_active', true);
if (filterType) query = query.eq('space_type', filterType);
if (filterPrice) query = query.lte('price_per_day', filterPrice);
if (filterSeats) query = query.gte('capacity', filterSeats);
if (selectedAmenities.length > 0) {
query = query.contains('amenities', selectedAmenities);
}
const { data, error } = await query.order('created_at', { ascending: false });
if (!error) setWorkspaces(data);
};Next Case Study