Markets as configuration
Each market has its own data and flow, but six separate apps would be unmanageable.
A shared shell with per-market configuration, so launching a new market doesn't mean a redesign.

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

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.
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.
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.
4 steps, from architecture to launch.
Each market declares its categories, listing fields and detail layout, and inherits navigation, feed, chat and wallet.
Rooms open on first contact and are reused, with typing state, read receipts and in-chat offers.
Registration creates the Stripe customer and the Connect Express account, with identity checks handled by Stripe.
A three-step Shippo flow prints labels, and language tags decide which listings each buyer sees.
Each market has its own data and flow, but six separate apps would be unmanageable.
A shared shell with per-market configuration, so launching a new market doesn't mean a redesign.
Live messaging and offer negotiation usually need dedicated infrastructure.
Firestore subscriptions carry messages, offers and read state, kept in sync across tabs.
Buyers kept finding sellers they couldn't communicate with.
Users pick languages at sign-up, and listings carry the seller's languages, which shape search and recommendations.
Goods, jobs, rentals, events, freelance and services, each with its own feed and filters.
Pick a market first, then get the form that market needs.
Messages, photos, offers and counter-offers tied to each listing, plus the Myte AI helper in the inbox.
Top-ups, withdrawals, saved cards and seller payouts through Stripe Connect, with paid boosts for listings.
Cart, checkout, returns and ratings, with Shippo labels and QR drop-off codes.
Tell us what you are shipping.
Start a Project →