# Baseball Cards Search (eBay Sold Listings) Search eBay completed (sold) listings for baseball cards by player name. Simple, fast UI: a single centered search box and a “Search Sold” button. Results show image, title, sold price, and end time, with a click-through to the listing on eBay. ## Features - Player name search against eBay “Completed (Sold)” items - Clean centered UI (input + button) - Results grid with image, title, price, end time - Click any result to open the eBay listing ## Tech Stack - Backend: Node.js + Express - Frontend: Vanilla HTML/CSS/JS (served statically) - External API: eBay Finding API (`findCompletedItems`) ## Prerequisites - Node.js 18+ recommended - eBay App ID (aka Client ID) from the eBay Developers Program (Production keys) ## Setup 1. Install dependencies: ```bash npm install ``` 2. Configure environment: - Copy `.env.example` to `.env` and set your App ID ```bash cp .env.example .env # then edit .env EBAY_APP_ID=YOUR_EBAY_APP_ID_HERE ``` ## Run - Start the server: ```bash npm start ``` - Open the app: - http://localhost:3000 ## Usage 1. Enter a player name (e.g., “Derek Jeter”) in the search box 2. Click “Search Sold” (or press Enter) 3. Browse results; click a card to open the listing on eBay ## API - `GET /api/ebay/search?player=...&page=...` - Query params: - `player` (required): player name text - `page` (optional): page number (default: 1) - Response shape: ```json { "results": [ { "title": "...", "url": "https://www.ebay.com/itm/...", "image": "https://...", "price": "99.99", "currency": "USD", "ended": "2024-01-01T12:34:56.000Z" } ] } ``` ## Project Structure ``` public/ index.html # UI styles.css # styles (centered layout) app.js # client logic server.js # express server + eBay route .env.example # environment template (copy to .env) package.json ``` ## Notes - Ensure `EBAY_APP_ID` is set; otherwise `/api/ebay/search` returns 500. - This app only surfaces limited listing metadata from eBay’s Finding API; you can expand it (conditions, set names, years, etc.) by refining keywords or adding item filters. - For production usage, consider rate limiting, caching, and stricter keyword sanitization.