BugBittle
Case study · 14Social Commerce

myTerrace

A social commerce web app where one account can sell goods, post jobs, rent rooms, sell tickets and offer services.

In active development
Client
myTerrace
Industry
Social Commerce · Multi-vertical Marketplace
Platform
Web
Timeline
12 months, ongoing
Outcome
Six markets running on one account, inbox and wallet
myTerrace preview
  • 6Hubs on one platform
  • 1Inbox for every transaction
  • 1Wallet with Connect payouts
01

Overview

myTerrace runs six markets (goods, jobs, rentals, events, freelance and services) on one account, with a single feed, inbox and wallet. We shaped the hub navigation and new-user registration, then connected the services behind them: Firestore messaging, Stripe Connect payments, Shippo labels and the Myte AI helper.

02

The challenge

Someone who wants to sell a phone, rent a spare room and hire a designer normally needs a separate app, login and payment method for each, and each app handles trust differently. Deals across borders add missing escrow, shipping and language barriers. myTerrace wanted all of it on one account, without forcing six very different kinds of listing into the same mold.

03

Our approach

We built one hub framework and made each market a configuration of it. Shared parts such as the feed, chat, wallet and profile are written once, and each market supplies its own categories, form and detail layout. The API runs on Bun with TypeScript, while Firestore carries realtime chat.

04

How we built it

4 steps, from architecture to launch.

  1. 01

    A configurable hub

    Each market declares its categories, listing fields and detail layout, and inherits navigation, feed, chat and wallet.

  2. 02

    Messaging without a backend server

    Rooms open on first contact and are reused, with typing state, read receipts and in-chat offers.

  3. 03

    Payouts set up during sign-up

    Registration creates the Stripe customer and the Connect Express account, with identity checks handled by Stripe.

  4. 04

    Shipping and language

    A three-step Shippo flow prints labels, and language tags decide which listings each buyer sees.

05

Technical challenges

Problem → How we solved it
01

Markets as configuration

Problem

Each market has its own data and flow, but six separate apps would be unmanageable.

How we solved it

A shared shell with per-market configuration, so launching a new market doesn't mean a redesign.

02

Realtime chat with no chat server

Problem

Live messaging and offer negotiation usually need dedicated infrastructure.

How we solved it

Firestore subscriptions carry messages, offers and read state, kept in sync across tabs.

03

Language-aware matching

Problem

Buyers kept finding sellers they couldn't communicate with.

How we solved it

Users pick languages at sign-up, and listings carry the seller's languages, which shape search and recommendations.

06

Screens

6 screens
myTerrace: Sign in
01 · Sign in
myTerrace: Checkout
02 · Checkout
myTerrace: Seller analytics
03 · Seller analytics
myTerrace: Messages
04 · Messages
myTerrace: Rent listing
05 · Rent listing
myTerrace: Brand & profile
06 · Brand & profile
07

What we shipped

5 features
  • 01

    Six markets, one account

    Goods, jobs, rentals, events, freelance and services, each with its own feed and filters.

  • 02

    Listing wizard

    Pick a market first, then get the form that market needs.

  • 03

    Chat and offers

    Messages, photos, offers and counter-offers tied to each listing, plus the Myte AI helper in the inbox.

  • 04

    Wallet and payouts

    Top-ups, withdrawals, saved cards and seller payouts through Stripe Connect, with paid boosts for listings.

  • 05

    Orders and shipping

    Cart, checkout, returns and ratings, with Shippo labels and QR drop-off codes.

08

Tech stack

React + Vite
Single-page app for every hub
Bun + TypeScript
REST API backend
Recoil + React Query
UI state and server cache
Firebase
Firestore chat, storage and push
Stripe Connect
Wallets, payments and seller payouts
Shippo
Carrier quotes and printable labels
OpenAI
The in-inbox AI helper
Google Maps + Leaflet
Maps and location