What's new in TCGSignal.
---
---
- Games: `pokemon` (cat 35, pokemon-jp), `onepiece` (cat 67), `yugioh` (cat 34), `mtg` (cat 64, disabled by default)
- Condition: corner_ribbon `New` → NM, `Pre-Order` → skip, else → LP
- Matching: Pokemon (set_code + CN fraction), YGO (lang-swap), One Piece (direct CN)
- Dedup: by `card_id:condition`, keep lowest price
- Env: `TCGREPUBLIC_ENABLED`, `TCGREPUBLIC_GAMES` (default: `pokemon,onepiece`), `TCGREPUBLIC_MAX_SUBCATEGORIES_PER_GAME` (50), `TCGREPUBLIC_MAX_PAGES_PER_SUBCATEGORY` (10), `TCGREPUBLIC_REQUEST_DELAY_MS` (3000)
- Smoke test probe added to orchestrator
---
---
1. Apply migration 050 in Supabase SQL Editor
2. `ANALYZE cards;`
3. Deploy to DO VPS
4. Dry-run: `node dist/scripts/catalog-backfill.js --source tcgdex --game pokemon-jp --dry-run`
5. Production: `node dist/scripts/catalog-backfill.js --source tcgdex --game pokemon-jp --confirm`
---
- `YUYUTEI_GAMES` env var (default: `pokemon-jp`) — comma-separated list: `pokemon-jp,mtg,yugioh`
- `YUYUTEI_MAX_SETS_PER_GAME` (default: `50`) — cap sets per game per run
- `YUYUTEI_MAX_REQUESTS` (default: `0` = unlimited) — global HTTP request cap
- Per-game circuit breaker (3 failures → skip to next game, not abort run)
- MTG/YGO set maps start **empty** — zero risk to existing Pokemon scraping
- `pokemonExtractor` — full fraction "025/414" format
- `ygoExtractor` — OCG format "SAST-JP067"
- `mtgExtractor` — fraction-first, bare-number fallback
- Pokemon-JP: `set_code + collector_number` (unchanged)
- MTG: `set_code (lowercase) + collector_number` (Scryfall-style codes)
- YGO: `collector_number` only + language-swap (SAST-JP067 → SAST-EN067) + strip fallback (same strategy as BigWeb)
- "YUYU-TEI collector number extractors" — 18 unit tests for `pokemonExtractor`, `ygoExtractor`, `mtgExtractor`
- "YUYU-TEI parseSetPage with YGO config" — 3 tests with OCG-format HTML fixtures
- "YUYU-TEI parseSetPage with MTG config" — 3 tests with fraction/bare-number fixtures
---
---
---
---
---
---
---
---
---
---
---
- 57K+ EN retail cards, full catalog daily (~19 min at 2s delay)
- NM condition only, foils skipped, consignment items filtered
- Collector number + set_code matching (card-format-guide priority)
- Exchange rate inversion (USD→JPY stored, inverted for JPY→USD)
- Circuit breaker (3 consecutive failures), 30-min timeout guard
- Response caching (Level 1), dedup by card_id:condition (lowest price)
- 500-row batch upserts, `data_source='hareruya_api'`
- ScraperValidation metrics, smoke test probe registered
---
---
---
---
---
---
---
- `idx_cards_name` (full-text GIN, 3 scans — trigram index covers all search)
- `cards_name_jp_trgm_idx` (JP trigram GIN, 22 scans — full scan acceptable at this frequency)
- `idx_cards_cardtrader_id` (0 scans — card matching uses unique constraint instead)
- `idx_cards_cardmarket_product_id` (0 scans — card matching uses unique constraint instead)
- `idx_price_summary_source_url` (0 scans — never queried)
- `src/proxy.ts`: 4-step fetch escalation
- `src/scrapers/yuyutei.ts`: Ports full YUYU-TEI parser
- `src/scrapers/cardmarket-csv.ts`: S3 CSV download + parse + upsert
- `python/cardmarket_scraper.py`: Camoufox-based fallback scraper
- `docker/docker-compose.yml`: FlareSolverr container
- `cron/daily-scrape.sh`: Bash wrapper with random jitter + log rotation
---
Full details for older versions are preserved in git history (`git log -- CHANGELOG.md`).
| Version | Date | Summary |
|---------|------|---------|
| v0.76.2 | 2026-03-07 | Functional health checks for all 9 adapters |
| v0.76.1 | 2026-03-06 | Japanese card names (`name_jp`) + sync health report + YUYU-TEI selector hotfix |
| v0.76.0 | 2026-03-06 | Cross-source deals & search enhancements |
| v0.75.0 | 2026-03-06 | CardTrader integration (adapter + sync route + platform CHECK) |
| v0.74.0 | 2026-03-03 | Search page filter improvements |
| v0.73.1 | 2026-03-03 | Community decks: visual builder |
| v0.73.0 | 2026-03-03 | Community decks: save + browse + view |
| v0.72.0 | 2026-03-03 | Deck parser enhancement + cross-platform deck pricing |
| v0.71.0 | 2026-03-03 | Nav consolidation + game hub enhancement |
| v0.70.3 | 2026-03-03 | Autocomplete performance + data source resilience |
| v0.70.2 | 2026-03-03 | Code quality audit + error handling hardening |
| v0.70.1 | 2026-03-03 | Rate limiter resilience + platform constraint fix |
| v0.70.0 | 2026-03-02 | Price history charts + buy signal |
| v0.69.0 | 2026-03-02 | Buyer price comparison + total cost |
| v0.68.0 | 2026-03-02 | Filter sidebar + inline multi-source prices |
| v0.67.0 | 2026-03-02 | Multi-source autocomplete + summary panels |
| v0.66.1 | 2026-03-02 | Pokemon Japan catalog (category 85) + JustTCG rate limit fix |
| v0.66.0 | 2026-03-02 | Multi-source integration (PriceComparisonPanel + YUYU-TEI) |
| v0.65.0 | 2026-03-02 | Game mega menu & hub polish |
| v0.64.0 | 2026-03-02 | Next.js 16 + React 19 + Tailwind CSS 4 upgrade |
| v0.63.0 | 2026-03-02 | Currency-aware deals |
| v0.62.0 | 2026-03-02 | Cardmarket EUR→USD fix & search defaults |
| v0.61.1 | 2026-03-02 | Consistent price formatting & URL cleanup |
| v0.61.0 | 2026-03-02 | Clickable prices & multi-source foundation (source_url, currency) |
| v0.60.0 | 2026-03-02 | Game hub pages, game-scoped search, search fixes |
| v0.59.0 | 2026-03-01 | Claude AI decklist analysis, database performance review |
| v0.58.0 | 2026-03-01 | Realtime prices, tiered rate limits, ISR tuning |
| v0.57.0 | 2026-03-01 | Smoke tests, image optimization, cache stats, type audit |
| v0.56.0 | 2026-03-01 | Data integrity fixes, performance optimizations |
| v0.55.0 | 2026-03-01 | Calendar export, sets search, help troubleshooting & glossary |
| v0.54.0 | 2026-03-01 | Alert export, deal presets, market freshness |
| v0.53.0 | 2026-03-01 | Search view toggle, tournament controls, pricing feature matrix |
| v0.52.0 | 2026-03-01 | Price insights, portfolio performance, context-aware dashboard |
| v0.51.0 | 2026-03-01 | Watchlist filters, deal stats, trending game breakdown |
| v0.50.0 | 2026-03-01 | Collection sort/search, saved search stats, PriceTable a11y |
| v0.49.0 | 2026-03-01 | Set sort, compare export/history, share button with prices |
| v0.48.0 | 2026-03-01 | Portfolio condition filter, alert timeline, preferences export |
| v0.47.0 | 2026-03-01 | Deal sort & time filter, trending summary stats, recent searches |
| v0.46.0 | 2026-03-01 | Searchable FAQ, alert stats & game filters, market volatility index |
| v0.45.0 | 2026-03-01 | Watchlist value widget, deal freshness, card quick stats, admin scorecard |
| v0.44.0 | 2026-03-01 | API docs, search price filter, enhanced exports, tournament trending, digest email |
| v0.43.0 | 2026-03-01 | Notification test buttons, AdSense, CSV import, welcome email |
| v0.42.0 | 2026-03-01 | Affiliate links, portfolio analytics, price chart moving averages |
| v0.41.0 | 2026-03-01 | fetchPrices on all adapters, Scryfall catalog adapter, sync log recording |
| v0.40.0 | 2026-03-01 | MTGMelee integration, admin scoring panel, fetchPrices adapter |
| v0.39.0 | 2026-03-01 | Admin Telegram alerts, CSP headers, source scoring, login anomaly detection |
| v0.38.0 | 2026-03-01 | Snipe UX, deal filters, volatility view, dashboard security |
| v0.37.0 | 2026-03-01 | Admin source health, arbitrage alerts, payment failure handling |
| v0.36.0 | 2026-03-01 | Data source adapter system |
| v0.35.0 | 2026-03-01 | Anti-abuse detection, alert insights, shareable portfolios |
| v0.34.0 | 2026-03-01 | Smart volatility alerts, per-card frequency, watchlist notes |
| v0.33.0 | 2026-03-01 | Tournament scraping, alert frequency enforcement, login history |
| v0.32.0 | 2026-03-01 | Cardmarket migration, JustTCG integration, data source overhaul |
| v0.31.0 | 2026-03-01 | Saved searches, price alert overlay, portfolio sets widget |
| v0.30.0 | 2026-02-28 | Bulk price check, set collection tracker, user onboarding |
| v0.29.0 | 2026-02-28 | Notification center, market overview, portfolio timeline |
| v0.28.0 | 2026-02-28 | Dashboard overview, daily sync chain, cron consolidation |
| v0.27.0 | 2026-02-28 | Deal finder, price trend badges, portfolio insights |
| v0.26.0 | 2026-02-28 | PWA offline support, price history cron, Vercel deploy fixes |
| v0.25.0 | 2026-02-28 | Next.js Image optimization, input sanitization, PWA support |
| v0.24.0 | 2026-02-28 | Mobile portfolio edit, GA analytics, tournament sync stub |
| v0.23.0 | 2026-02-28 | Search filters, table sorting, compare swap, portfolio editing |
| v0.22.0 | 2026-02-28 | Form validation, type safety, timing-safe auth, query optimization |
| v0.21.0 | 2026-02-28 | Accessibility, CSV security, OG image, polish |
| v0.20.0 | 2026-02-28 | JSON-LD, admin tools, API key UI, tournament expand |
| v0.19.0 | 2026-02-28 | SEO metadata, decklist export, pricing page, sets optimization |
| v0.18.0 | 2026-02-28 | Bug fixes, feature gaps, Cardmarket sync |
| v0.17.0 | 2026-02-28 | Navigation polish, loading states, cron fixes |
| v0.16.0 | 2026-02-28 | Cardmarket, dealer API, notification preferences |
| v0.15.0 | 2026-02-28 | Tournaments, multi-platform charts, affiliate links |
| v0.14.0 | 2026-02-28 | eBay integration, Stripe billing, MVP-1 features |
| v0.13.0 | 2026-02-28 | Sparklines, watchlist bulk actions, tests |
| v0.12.0 | 2026-02-28 | Set pagination, rarity filter, SEO metadata |
| v0.11.0 | 2026-02-28 | Home stats, popular searches, condition filter |
| v0.10.0 | 2026-02-28 | Recently viewed, alert badges, portfolio breakdown |
| v0.9.0 | 2026-02-28 | Image zoom, keyboard shortcuts, portfolio stats |
| v0.8.0 | 2026-02-28 | Share, breadcrumbs, alert presets, 55 new tests |
| v0.7.0 | 2026-02-28 | Help, changelog, loading states, accessibility |
| v0.6.0 | 2026-02-28 | Calendar, decklists, SEO, tests |
| v0.5.0 | 2026-02-28 | Set browser, card comparison, UX polish |
| v0.4.0 | 2026-02-28 | Multi-channel alerts, portfolio, admin |
| v0.3.1 | 2026-02-28 | Post-MVP fixes |
| v0.3.0 | 2026-02-28 | MVP-0 |
| v0.0.0 | 2026-02-28 | Initial commit |