Loading
TRADEHUB-TCG

TradeHub TCG

A European multi-seller marketplace for Pokémon, Magic: The Gathering and Flesh and Blood cards.

TradeHub TCH Laptop
Role
Fullstack-developer, UI/UX
Period
Aug 2025 to Apr 2026
Status
Live
Stack
Frontend
Next.js, TypeScript, React, TanStack Query, Tailwind CSS, Shadncui
Backend
NestJS, PostgreSQL, Prisma, Redis, BullMQ, Stripe Connect

The problem

A card marketplace depends on price comparison and trust between strangers

The client wanted a platform to compete with established card marketplaces: sellers from across Europe offering Pokémon, Magic: The Gathering and Flesh and Blood cards to buyers in other countries. Buyers compare offers for the exact same card, and both sides trade with people they do not know. I found the client and built the platform.

The product

Sellers, buyers and administrators each get their own tools

Buyers and sellers talk through real-time chat, and both follow each order through its stages, from payment to delivery.

Sellers

  • Choose the countries they ship to and set their shipping prices.
  • List offers for cards from the shared catalogue.
  • Get a public profile with their number of listings, reviews, rating and a filterable table of everything they sell.

Buyers

  • Browse listings in a discovery view or in an advanced table with filters.
  • See on each card page the lowest price, the seller, card details and similar offers from other sellers.
  • Buy only from sellers who ship to their country.
  • Edit quantities in the cart, review the order summary and check out with the payment method of their choice.

Administrators

  • Manage the product catalogue and all listings.
  • Manage user wallets.
  • Handle issues reported by users, grouped by category.

Decision 01

One shared catalogue, many offers per card

Sellers cannot create products. Each card exists once in a catalogue filled by the administrator, one by one through a form or in bulk by importing CSV files or JSON from other card databases. Sellers only attach offers with their own price and quantity. Because every offer for the same card points to one product, the platform can show the lowest price and compare sellers without guessing which listings describe the same card. The cost is that a seller cannot list a card until it is in the catalogue, so keeping it complete is a job for the admin side.

Decision 02

The platform holds the payment until the parcel arrives

Payments go through Stripe Connect with escrow. The platform holds the money until the buyer confirms that the parcel has arrived, and only then credits the seller's wallet, minus the commission. Sellers wait longer for their money, and every order needs explicit states from payment to confirmed delivery.

Decision 03

Every issue comes with its own context

When something goes wrong, a user reports an issue, and each issue belongs to a category with its own component. An order issue, for example, shows the order details inside the issue and links straight to the order. The administrator gets the context without searching for it. The cost is one more component to build for every new category.

Contact

Open to frontend, full-stack and AI engineering roles. B2B, Warsaw or remote.

lukols.dev@gmail.com
Email me

Let's work
together

Łukasz©2026
Olszewski