From 7bca96f42f0e196e53ff4ddd0e4c830ecb650bdd Mon Sep 17 00:00:00 2001 From: Pyronewbic Date: Tue, 12 May 2026 13:58:29 +0530 Subject: [PATCH 1/2] feat: Umbreon demo data now multi-source (eBay + magi + Yahoo) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Added magi (¥54,800-56,950) and Yahoo Auctions (¥58,150) listings with NM detectedCondition. Enables arbitrage comparison across all 3 sources — magi cheapest at ~$349 vs eBay $380-426. --- lib/data/demo.js | 23 +++++++++++++++++++++-- 1 file changed, 21 insertions(+), 2 deletions(-) diff --git a/lib/data/demo.js b/lib/data/demo.js index f54cb27..ef87b81 100644 --- a/lib/data/demo.js +++ b/lib/data/demo.js @@ -102,8 +102,9 @@ const DEMO_CARDS = { "umbreon ex sar 217/187": { query: "Umbreon ex SAR 217/187 sv8a Terastal Festival ex", - source: "ebay", + source: "multi", listingFormat: "raw", + listingDescription: "eBay + magi.camp + Yahoo Auctions — raw (¥157/USD)", lang: "jp", activeByCountry: { US: [ @@ -159,6 +160,24 @@ const DEMO_CARDS = { ], grade: { overall: 7.5, centering: 8.0, corners: 8.0, edges: 8.5, surface: 7.5, confidence: 0.68, mode: "llm-detailed", notes: "Grade limiter: surface — Visible scratch near bottom-right of artwork.", limitations: "", subgradeDetails: { centering: { score: 8.0, confidence: 0.70, detail: "Centering acceptable ~56/44 front. Back appears slightly off." }, corners: { score: 8.0, confidence: 0.65, detail: "Corner whitening on back top-left. Other corners appear clean." }, edges: { score: 8.5, confidence: 0.68, detail: "Edges mostly clean with minor wear visible on right edge." }, surface: { score: 7.5, confidence: 0.72, detail: "Visible scratch near bottom-right of artwork. Photo compression may exaggerate but defect is clear." } } }, }, + { + itemId: "magi-umb-001", itemWebUrl: "https://magi.camp/item/umb-sar-217187-001", + title: "ブラッキーex SAR 217/187 テラスタルフェスティバル ex sv8a 1枚", + price: 348.73, priceCurrency: "USD", priceJPY: 54800, shippingLabel: "—", totalCost: 348.73, detectedCondition: "NM", + imageUrl: "https://i.ebayimg.com/images/g/XYkAAeSw8fBp9JS-/s-l500.jpg", + }, + { + itemId: "magi-umb-002", itemWebUrl: "https://magi.camp/item/umb-sar-217187-002", + title: "〔状態A-〕ブラッキーex【SAR】{217/187} テラスタルフェスティバル 1枚", + price: 362.42, priceCurrency: "USD", priceJPY: 56950, shippingLabel: "—", totalCost: 362.42, detectedCondition: "NM", + imageUrl: "https://i.ebayimg.com/images/g/FTcAAeSwiLRpgfeC/s-l500.jpg", + }, + { + itemId: "yahoo-umb-001", itemWebUrl: "https://page.auctions.yahoo.co.jp/jp/auction/umb217187001", + title: "ブラッキーex SAR 217/187 sv8a テラスタルフェスティバルex ポケモンカード 美品", + price: 370.06, priceCurrency: "USD", priceJPY: 58150, shippingLabel: "—", totalCost: 370.06, detectedCondition: "NM", + imageUrl: "https://i.ebayimg.com/images/g/dvIAAeSwCB9p3n5z/s-l500.jpg", + }, ], }, sold: [ @@ -169,7 +188,7 @@ const DEMO_CARDS = { ], soldSource: "scrape", psaSignal: { certNumber: null, totalPop: 3420, pop10: 1890, pop9: 1105, difficulty: "easy", gem10Pct: 55.3, grade10Chance: "high", avgDaysToGrade: 30, tier: "Regular", estCost: "$50", tierReason: "PSA 10 comps at $750+, above the $499 Value cap. Submitting at Value risks an upcharge to Regular anyway." }, - counts: { activeTotal: 5, sold: 4 }, + counts: { activeTotal: 8, sold: 4 }, }, "pikachu ex sar 234/193 psa 10": { From d6f0e6c30e616eec0d239c5b2e006f8dda0cc943 Mon Sep 17 00:00:00 2001 From: Pyronewbic Date: Tue, 12 May 2026 14:05:35 +0530 Subject: [PATCH 2/2] =?UTF-8?q?feat:=20signal=20ungraded=20listings=20?= =?UTF-8?q?=E2=80=94=20dash=20chip=20on=20cards,=20note=20in=20detail=20pa?= =?UTF-8?q?nel?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Listing cards show a muted dash with tooltip ("Single photo" or "Not graded") where the grade chip would be. Detail panel shows "AI grading unavailable — single photo" note when no grade exists. --- public/app.js | 4 +++- public/style.css | 22 ++++++++++++++++++++++ 2 files changed, 25 insertions(+), 1 deletion(-) diff --git a/public/app.js b/public/app.js index 161f048..1bd75f3 100644 --- a/public/app.js +++ b/public/app.js @@ -287,11 +287,12 @@ function renderList(container, items) { const outlierHtml = item._priceOutlier ? 'Price outlier' : ""; + const hasMultiplePhotos = item.additionalImages?.length > 0; const gradeChip = item.grade && !item.grade.error ? `${item.grade.overall.toFixed(1)}` : item.listingGradeLabel ? `${esc(item.listingGradeLabel)}` - : ""; + : ``; const srcTag = sourceTag(item.itemWebUrl); return ` @@ -411,6 +412,7 @@ function selectItem(itemId) { ${gradeHtml}
+ ${!hasGrade && !slabLabel ? `
${images.length <= 1 ? "AI grading unavailable — single photo" : "AI grading unavailable"}
` : ""} ${slabLabel ? renderPsaInline(currentPsaSignal) : ""} diff --git a/public/style.css b/public/style.css index 430dbc0..a872551 100644 --- a/public/style.css +++ b/public/style.css @@ -961,6 +961,28 @@ main { letter-spacing: 0.03em; margin-left: auto; } +.no-grade-chip { + font-family: 'Space Grotesk', system-ui, sans-serif; + font-size: 12px; + font-weight: 500; + color: var(--muted); + opacity: 0.5; + cursor: help; +} +.no-grade-note { + font-family: 'JetBrains Mono', monospace; + font-size: 10px; + text-transform: uppercase; + letter-spacing: 0.06em; + color: var(--muted); + background: var(--inset); + border: 1px solid var(--border); + border-radius: 6px; + padding: 8px 12px; + margin-bottom: 14px; + text-align: center; + opacity: 0.7; +} .slab-chip { font-family: 'Space Grotesk', system-ui, sans-serif; font-size: 11px;