Live Shopping Platform
A live shopping marketplace where auctions settle the moment they close, charge, label, and payout included.

The product is a live commerce platform where sellers broadcast live video shows and sell in real time, through timed auctions, flash sales, giveaways, direct purchases, and negotiated offers, while buyers bid and check out with a card already on file.
We delivered the full stack across four codebases: the core Node.js API and Socket.IO realtime engine, the React marketplace SPA, the React admin SPA, and a shared TypeScript backend-for-frontend. A companion Flutter mobile app consumes the same documented API.
The product compresses an entire e-commerce transaction into seconds of screen time: a viewer watches the host, sees the pinned product, bids against other buyers, and is charged the moment the auction closes, no cart, no checkout page.
Real-time correctness with money on the line
An auction that closes a second late, accepts a stale bid, or charges the wrong winner destroys trust immediately. Bid validation, auction countdowns, and payment capture cannot be left to the browser, yet everything has to stay synchronized across every connected device, including phones with drifting clocks, while video, commerce, and chat share one screen.
Post-sale logistics add marketplace-scale complexity: each winning bid becomes a real parcel with rates, labels, and customs for international orders, and the common case of one buyer winning several items from the same seller in one show. Meanwhile the money flow is two-sided: buyers are charged instantly, but sellers accumulate earnings that should only become withdrawable when the funds actually clear, minus commission and fees.

The server decides; clients render pushed state
A single authoritative API process owns auction timers, bid validation, and payment capture. Clients receive state over Socket.IO and never decide outcomes locally. Every auction event carries a server timestamp, and the web client measures its clock offset and renders countdowns against server time, so a phone with a wrong clock still shows the true remaining seconds.
Concurrency is guarded at the database: auction start, auction finalisation, and giveaway draws are claimed through conditional MongoDB updates, so double-clicks, reconnects, and overlapping timers cannot start or settle the same auction twice.
Purpose-built services handle each concern, LiveKit for video transport and recording, Stripe for charging and seller payouts, Shippo for rates and labels, Firebase for chat and push, each wrapped behind the platform's own workflow logic, with all three clients consuming one documented REST and Socket.IO contract.

Five selling formats, one settlement pipeline
During a show, bids are validated server-side through an ordered rule chain, auction still open, bid actually higher, increment respected, bidder holds a valid payment method, with precise error events for each failure. Anti-snipe protection extends the countdown when a bid lands in the final ten seconds, and prebids and autobids let buyers set a maximum the system bids on their behalf, proxy-auction style. The moment an auction closes, the winner's stored card is charged off-session, a shipping rate is fetched, and the order is created; shows are recorded via LiveKit egress and the final seconds of each auction are automatically clipped with ffmpeg into a video receipt attached to the sold item.
Beyond auctions, hosts trigger timed flash sales with server-computed discounts, run giveaways with random winner draws, and negotiate through a full offer, counter-offer, and accept workflow where acceptance charges the card immediately. Shipping is bundle-aware: when a buyer wins multiple items from the same seller in one show, the items collapse into a single Shippo shipment under a weight cap and the buyer pays only the incremental shipping difference.
Every sale lands in a transaction ledger. Seller earnings accrue to a pending wallet and become withdrawable only when Stripe reports the funds as cleared, at which point idempotent transfers move money to the seller's connected account. A dedicated admin application covers seller approval, show and inventory oversight, an enforced order-status state machine, payouts, disputes, email campaigns, and a CMS for the public site.
Live shows with in-room management
Sellers schedule shows (including recurring series), go live through LiveKit, pin products, invite co-hosts, appoint moderators, and ban disruptive users, with a reconnection grace window if the host's connection drops.
Real-time auction engine
Server-validated bids, anti-snipe extension, prebids and autobids, and instant off-session card settlement at close, with the next auction opening automatically while stock remains.
Video receipts
Every auction's closing seconds are automatically clipped from the show recording and attached to the sold item, giving buyer and seller video proof of exactly what was sold and for how much.
Smart shipment bundling
Multiple wins from one seller in one show collapse into a single label under a weight cap, with the buyer charged only the delta, plus rate shopping, label refunds, manifests, and customs declarations through Shippo.
Ledgered seller payouts
Earnings split into pending and available balances that advance only on Stripe's own clearing events, with idempotent Connect transfers, sellers cannot withdraw money the platform has not received.
Full admin operations suite
A dedicated admin app for user management and seller approval, orders and shipments, payouts, disputes, giveaways, email campaigns, and a CMS for the public site's content pages.


- 01
Server-stamped time with client offset correction
Every timing event carries a server timestamp and clients compute a clock offset, so two viewers on different continents see the same remaining seconds regardless of device clocks.
- 02
Database-level finalisation locks
Auction start, settlement, and giveaway draws are claimed through conditional MongoDB updates, preventing double settlement and conflicting auctions under reconnects and race conditions.
- 03
A ~40-event Socket.IO protocol
Rooms, auctions, bids, giveaways, flash sales, presence, and moderation all flow through a purpose-designed realtime event model with per-auction one-second server timers.
- 04
Stripe webhooks driving the money lifecycle
Platform and connected-account webhook endpoints with signature-verified raw-body handling drive pending-balance clearing, payout reconciliation, and refund status.
- 05
Runtime-configurable platform economics
Commission with per-category overrides, processing fees, carrier preferences, and demo mode live in a database settings document editable from the admin panel, business rules change without deploys.
- A complete live-commerce transaction loop, go live, pin product, auction, automatic charge, bundled label, seller payout, with every fairness-critical step enforced server-side.
- Five selling formats (auction, scheduled auction, flash sale, buy now, offers) plus giveaways, all on one product catalog.
- A two-sided marketplace web experience of 60-plus buyer and seller screens and a 40-screen admin operations suite, served by one documented API shared with the mobile client.