AI-assisted marketplace listing tool

POSTA

POSTA explores how AI can reduce the repetitive work behind selling authenticated collectibles. I designed and built the product from the interface through the backend.

This case study is as much about what building taught me as what I designed. I have kept this writeup honest about what works today and what does not.

Role
Product design + development
Platform
Web
Tools
Figma · Claude · Supabase · eBay APIs
Status
In development
POSTA new listing screen, upload state POSTA listings generated view
Client
Real sports memorabilia seller, OC
Focus
Reducing repetitive listing work
Scope
Interface through backend
Domain
Authenticated collectibles on eBay
The Problem

Listing collectibles involves the same work, over and over.

I designed POSTA around the workflow of a real sports memorabilia seller. Each listing requires identifying the item, entering certification and grading information, writing listing content, and selecting the correct marketplace category.

None of those steps is especially difficult on its own. The problem is how much accumulates when the same process repeats across an inventory.

I can push out maybe 70 listings in a full 8-hour day. It's the same thing over and over, and I still have thousands left to go.
Chris · OC Sports Cards

Research

Existing tools automate listing. Collectibles add another layer.

I looked at existing listing and cross-posting tools to understand what sellers could already automate. Most handled common tasks. Authenticated collectibles introduced more specific requirements: certification numbers, grading information, marketplace taxonomy, and category-dependent item specifics.

ToolPrimary jobAI writes the listingPublishes to eBayCollectibles-aware
QuickList AIPhoto to eBay listingFull: title, desc, specificsDirect
VendooCrosslist to 10+ marketsBasic, in testingYes
eBay Magical ListingPhoto to eBay listingAI-nativeNativeWeak, casual only
POSTAPhoto to authenticated listingCert-aware, fullIn development✓ reads slab + cert
The opportunity
The opportunity was not simply to generate listings faster. It was to understand which parts of the workflow could be automated reliably and where the seller still needed visibility and control.
Where collectibles differ
No existing tool reads a slab, verifies a certification, or handles category-specific requirements that authenticated collectibles carry. That is the hardest part of the workflow, and it is where POSTA focuses.

04. Opportunity

Not every part of the workflow should be automated equally.

I ranked which decisions were worth automating, which needed transparency, and which had to stay with the seller.

← POSTA automatesSeller owns →
01
Repetitive decisions
What POSTA can automate
Photo grouping
Item identification
Certification lookup
Listing generation
Category assistance
02
Trust
What POSTA should explain
Generated information
Sources
Confidence
Warnings
Missing information
03
Seller control
What stays with the seller
Pricing
Editing
Final review
Publishing
Repetitive tasks where automation can reduce manual work without removing seller judgment.
AI output should be easy to verify rather than presented as automatically correct.
Decisions involving judgment or financial consequences stay with the seller.
Design principle
The goal became less about automating the entire listing process and more about reducing repetitive work while keeping the seller responsible for decisions that require judgment.

The Solution

From product photos to a reviewable listing.

01
Photo grouping
Upload → AI groups
02
Listing generation
AI reads → writes listing
03
Pricing research
Terapeak on every card
04
Review + prepare
Seller approves

Upload a batch of product photos — fronts, backs, slabs, cert cards, all mixed together. POSTA groups them by item so you don't have to sort anything before you start.

7 mixed photos might become 3 grouped items. Claude makes that call so the seller doesn't have to.

Empty state

Claude interprets the grouped images — reads the player name, cert number, authentication company, grade, and condition — and turns those details into a structured eBay listing the seller can review and correct.

Opus was chosen over cheaper models on purpose. On a $500 card, description quality shows up in the sale price.

POSTA, 3 listings generated from 7 photos

Each listing card keeps a direct link to Terapeak, eBay's sold-comps tool, so the seller can check what comparable items have actually sold for before setting a price.

Pricing stays with the seller. POSTA never suggests a price — that decision requires market knowledge the system doesn't have.

Pricing research screenshot

Review generated listings, edit anything that needs correction, set the price, and prepare completed listing data for the eBay workflow. Approve individually or in bulk.

A card layout gives each item enough visual weight to make that review feel deliberate rather than like scanning rows in a spreadsheet.

Dashboard
1
Design decision
Why cards instead of a table
These are high-value items and the seller reviews every listing before it goes out. A card gives each item enough visual weight to make that review feel deliberate rather than like scanning rows in a spreadsheet.
2
Design decision
Why Terapeak stays accessible
The seller already checks Terapeak before pricing almost every item. Each card links directly to comparable sales so pricing research stays close to the decision rather than being a separate step.

Try It

Explore the workflow.

Click through to see how a seller moves from uploaded photos to reviewing an AI-generated listing. Some backend functionality is still in development.

Step 1 of 7
Welcome to POSTA
This is the New Listing screen. The left panel handles uploads and grouping. The right panel reacts to whatever state you're in. Everything starts with a photo.
→ Click the drop zone on the left to upload photos
↺ Reset
posta-prototype.html
Open prototype →

The Build

Building the interface exposed the system underneath it.

I started POSTA as a product design project. Once I began building, decisions that looked simple in the interface started depending on authentication, marketplace APIs, database structure, and the format of AI-generated output.

Infrastructure
Vercel · Railway · Supabase
Deployed across three services.
Frontend on Vercel, backend on Railway, with Supabase handling authentication, persistent user data, and marketplace account information. Splitting the stack taught me how each layer depends on the others.
Auth and data
Supabase · eBay OAuth
Accounts, seller data, and marketplace connection.
POSTA supports user accounts, persistent seller data, and eBay account connection through OAuth. Building this changed how I thought about account-level data and marketplace state.
AI pipeline
Claude Opus Vision
From images to structured listing content.
Claude interprets uploaded product images and converts unstructured visual information into structured listing content that the seller can review.
Marketplace
eBay Trading API
Connecting to a live marketplace.
Building against the marketplace exposed requirements that were not visible when I was designing the interface alone. Category selection turned out to be harder than expected.

What POSTA is built on.

Frontend
Next.js 15 · React · Tailwind CSS
Backend
Python Flask · Gunicorn
AI
Claude Opus (Vision)
Auth + DB
Supabase Auth · Supabase Postgres
eBay
Trading API · AddItem · UploadSiteHostedPictures
Hosting
Vercel (frontend) · Railway (backend)

Identifying the item wasn't enough.

Claude could recognize an item and generate plausible listing information, but eBay doesn't accept a plausible category. A listing has to resolve to a valid leaf category, and that category determines everything else the marketplace expects.

That turned category selection from a classification problem into a systems problem. I began building a set of cooperating resolvers with seller-specific category memory in front of them.

0
Seller memory
POSTA stores categories a seller has previously used so common inventory can be matched against seller-specific data first. Built and populated — reliability inside the resolver still being validated.
Built, validating
1
Category resolver
Queries eBay's taxonomy and selects from the categories the marketplace actually returns, rather than allowing the model to invent a category ID.
In progress
2
Validation and repair
Uses marketplace validation errors to identify missing or invalid information, correct the listing data, and retry. Handles the gap between what AI generates and what eBay accepts.
In progress

The architecture now constrains AI decisions with marketplace data instead of assuming that a reasonable AI answer is necessarily a valid marketplace answer.


System Architecture

How it all connects.

A two-phase flow — generate listings from photos, then publish to eBay. The publish side depends on the category resolver that is still in development.

📐
System architecture diagram
Replace with Figma export · PNG or SVG · full width

What Changed

Building revised three assumptions I made while designing.

01Authentication
02Marketplace API
03Categories
What I assumed
One connected eBay account was enough to prototype the workflow.
What I assumed
The newer Inventory API would be the natural path for the listing workflow.
What I assumed
If AI could identify the item, it could select the category.
What building exposed
A multi-user product needs seller-specific authentication, marketplace credentials, and persistent listing data.
What building exposed
The API's structure and requirements did not map to POSTA's workflow as cleanly as I expected.
What building exposed
A plausible category is not necessarily a valid eBay leaf category, and category selection determines requirements further downstream.
What changed
I moved toward per-user authentication, storage, and eBay OAuth.
What changed
I moved the listing workflow toward the Trading API rather than forcing the original architecture to fit.
What changed
I moved toward a constrained resolver combining seller-specific category memory with eBay's live taxonomy.

Reflections

Building POSTA changed how I design.

I knew how to design a workflow. I knew how to map an existing process, identify repetitive work, and design an experience that reduced unnecessary decisions. That part came naturally.

What I didn't know was how to design a system. Building POSTA pushed me into APIs, OAuth, authentication, database architecture, marketplace taxonomy, and the relationship between AI-generated information and what an external system will actually accept.

It changed how I start. I used to treat implementation as something that followed design. POSTA taught me to test technical assumptions much earlier, especially when an experience depends on external APIs or system rules that aren't visible from the interface.


Building became part of how I design, not just how I bring a design to life.
POSTA is in active development. I keep it off public demo to manage API costs, but I'm happy to walk through it live.