ANONYMECODE&DESIGN
← Back to Projects
Client Project (Deployment Pending)

Filivoire

Marketplace / E-commerce

Project Overview

Digital marketplace designed for a client to showcase and sell products related to crochet and handmade creations.

The Problem

The client needed a real, live marketplace for crochet and handmade creations: genuine accounts, inventory synced across devices, and a payment flow that could eventually process real transactions, not a static catalogue.

The Objective

Build a full multi-role marketplace (client, seller, courier, admin) on a real backend, with authentication, live data sync, image storage, and a payment integration ready to go live.

My Approach

  • •Four dedicated spaces (client, seller, courier and admin) across roughly 44 screens
  • •Cart automatically split into one order per shop when a client buys from multiple vendors, each with its own delivery fee
  • •Real-time data sync across every connected device
  • •GeniusPay payment integration validated end-to-end in test mode (payment → webhook → order creation), switchable to live mode by an admin toggle
  • •Seller and courier verification workflow (ID + business registration), reviewed and approved by the admin
  • •Automatic partner contracts generated per commission rate, with an in-app acceptance flow

Technology

React Native (Expo)TypeScriptSupabase (Postgres, Auth, Storage, Realtime)React NavigationGeniusPayResend

Architecture

A single Expo/React Native codebase covers all four roles, with Supabase Postgres as the single source of truth. Row Level Security policies enforce who can read or write each table: a shop only ever sees its own verification documents, a courier only sees orders in its zone. Supabase Realtime keeps every screen in sync the moment underlying data changes, without polling.

Client · Seller · Courier · Admin (a single React Native/Expo app)
Supabase — Auth, Postgres (Row Level Security), Storage, Realtime

Development Process

Started on Firebase, then migrated the entire backend to Supabase mid-project (same features, no regressions) once Firebase's billing requirements became a blocker for the client's payment method. The payment integration itself went through more than one provider before settling on one whose verification tier matched the client's situation.

Screenshots

Filivoire 1
Filivoire 2
Filivoire 3

Results

A working end-to-end order flow (browse, cart split by shop, checkout, payment, seller fulfillment, courier delivery, admin oversight) running on a real backend and tested with the client via a shared app link. Real-money payment stays deliberately gated behind an admin switch while the client finishes onboarding with their payment provider.

Challenges

Getting real-time updates to actually propagate: Supabase Realtime has to be explicitly enabled per table, and it fails silently if you forget. The initial data loads fine, but live updates simply never arrive. Postgres numeric columns also serialize as strings by default over the API, which quietly breaks arithmetic on totals and ratings unless every money/rating column is cast to a floating-point type.

Lessons Learned

Test permission rules against a second real account, not just by reading the policy code: a subtle self-referential bug in an early access-control policy only showed up once tested from an actual second account, not from inspecting the SQL alone.