Alpha Release: JK Index is in active development. Data coverage is expanding and you may see gaps or inconsistencies as we iterate. Feedback is welcome.

Dev Updates

🔥 28 updates in last 7 days

🕒 Last update Just updated

Latest updates and improvements to JK Index

Development Analytics

256
Total Updates
28
Last 7 Days
170
Last 30 Days
50
Day Streak

Activity Heatmap (Last 6 Weeks)

42 days agoToday

Focus Areas

Backend211 (82.4%)
Frontend96 (37.5%)
Data91 (35.5%)
UX54 (21.1%)
Data Quality50 (19.5%)
Feature46 (18.0%)
Testing41 (16.0%)

Shipping Velocity

This week: 28 updates
Previous week: 43 updates

Latest Shipped Features

Ascended Heroes set in catalog

Explore the 2026 mega set with Mega Evolution ex, returning Trainer's Pokémon, and new Mega Attack Rare cards.

View set

Fire Red & Leaf Green set

Browse and explore all 226 cards from the classic EX-era set, including iconic EX cards like Charizard EX, Blastoise EX, and Venusaur EX, all with high-resolution images.

View the set

JK Index on card pages

View composite market health (liquidity, stability, depth, confidence) and a stable/volatile/illiquid band directly on each card.

View a card

EX Hidden Legends

Browse 205 cards and sealed products from the June 2004 EX-era set, including reverse holos, EX cards, and prerelease variants.

View set

Contact System

Access the contact form from any page to submit feedback, report issues, or request features.

Contact Us

Four New E-Card Era Pokémon Sets

Explore 1,256 new cards and sealed products from Aquapolis, Expedition, Legendary Collection, and Skyridge.

Browse sets

Release Notes

Ascended Heroes (ASC) soft support

v0.6.219
BackendFrontendDataFeature

Ascended Heroes is now available in the catalog as a modern set. Card pages show set numbering as card count out of 217 (e.g. 1/217) instead of total catalog items, so collectors see the correct denominator. Production ingestion supports running the full pipeline (cards plus product ID resolution) in the background to avoid timeouts, and image backfill runs only for cards missing images by default.

Changes:

  • Set registry and API metadata for Ascended Heroes (ASC); display set size 217 for card numbering on card pages
  • Production ingestion script with optional background mode so the full pipeline can run without session timeout
  • Image backfill defaults to missing-only; card and frontend display use 217 as set size for ASC

Phase 8.1: Raw sale UI — opt-in ungraded sales block

v0.6.218
FrontendData

The Sales History section now supports an optional view of ungraded, condition-unknown sales for market context. A new checkbox "Include raw / ungraded sales" is off by default; when turned on, the page fetches and shows a separate block below the main sales tables. That block lists only sales without a stated condition, with columns for date, price, marketplace, and an informational proximity label (e.g. price near a condition median) plus a tooltip that clarifies we do not assign condition and this does not affect pricing. Raw sales are capped to five rows initially with a "Load more raw sales" control to expand in steps of five. Default behavior, pricing, charts, and conditioned tables are unchanged.

Changes:

  • Checkbox "Include raw / ungraded sales" in Sales History; default OFF, re-fetches only sales when toggled
  • Dedicated "Ungraded / condition-unknown sales" block with date, price, marketplace, proximity badge, condition column fixed as "Ungraded"
  • Proximity labels and tooltips use allowed copy only; missing proximity shows "—" with fail-closed tooltip
  • Client-side pagination: first 5 rows shown, "Load more raw sales" adds 5; count resets when card or toggle changes
  • Empty state when toggle ON but no ungraded sales; no backend or pricing changes

Phase 8.0-D: Liquidity Confidence UI (context-only)

v0.6.217
FrontendData

Liquidity confidence is now shown on the card page as a contextual market-health signal next to the JK Index score. When the API returns an optional liquidity_confidence value (high, medium, or low), a badge appears below the score with a tooltip that explains what the signal means and explicitly states that it does not assign condition and does not affect pricing. Display-only, no raw sales, no API or backend changes, and no change to default behavior when the field is absent.

Changes:

  • Badge shows high/medium/low with muted styling (green/yellow/gray) next to JK Index
  • Tooltip copy states that the signal does not assign condition and does not affect pricing
  • Badge appears only when liquidity_confidence is present in the JK Index response
  • Frontend tests cover label rendering, tooltip copy, and conditional rendering

JK Index: include liquidity_confidence on cache hit for API consistency

v0.6.216
BackendBugfixData

When the JK Index score was served from cache, the optional liquidity_confidence field was missing from the API response, while fresh computations did include it. That meant the same card could return different response shapes depending on cache hit or miss. We fixed this so cached and recomputed responses both include the field when data is available. The field remains optional and is omitted when the lookup fails or data is absent.

Changes:

  • Cached JK Index responses now include liquidity_confidence when data is available
  • API response shape is consistent for cache hit vs recompute; fail-closed behavior preserved (field omitted on error)

JK Index liquidity confidence (Phase 8.0-C)

v0.6.215
BackendFrontendData

The JK Index response can now include an optional liquidity confidence label (high, medium, or low) when we have enough sale-based data for that card. This is metadata only: it does not change the index score, band, or any pricing. It sets up future UI to show how confident we are in the liquidity signal without altering authoritative numbers. The signal is read-only and fail-closed: we never trigger recomputation or touch condition pricing; if data is missing or anything fails, the field is omitted. Existing clients are unchanged and the new field appears only when present.

Changes:

  • JK Index API may include an optional liquidity_confidence label when data is available
  • Score, band, and all pricing logic unchanged; new field is additive metadata only
  • Fail-closed behavior: field omitted when data is missing or on any error
  • Frontend and API types updated so the new field is optional and omitted when null

Liquidity confidence: fail closed when summary fields are None

v0.6.214
BackendDataBugfix

We fixed a robustness issue in the liquidity confidence interpreter. When the aggregated summary had certain numeric fields explicitly set to None (rather than omitted), the interpreter could raise TypeError during arithmetic. It now validates those fields the same way it already validated the average confidence score: if any are None, it returns None (fail closed) instead of computing. No behavior change for valid inputs; invalid or incomplete data is now handled consistently.

Changes:

  • Interpreter now returns None when high_confidence_count, outlier_count, or iqr_coverage_ratio is explicitly None
  • Avoids TypeError on arithmetic and aligns with existing fail-closed behavior for avg_confidence_score
  • Unit tests added for None in each of these fields to lock in behavior

Liquidity confidence interpretation (Phase 8.0-B)

v0.6.213
BackendData

We added a read-only interpretation step that turns aggregated proximity confidence into a single liquidity confidence label (high, medium, or low) for future market-health features. It consumes only pre-aggregated data, does not query the database or change any pricing or UI, and fails closed when data is missing or insufficient. The label is deterministic and safe to use later as an optional modifier for market health signals.

Changes:

  • New interpretation layer produces a single liquidity confidence label from aggregated proximity data
  • Read-only and fail-closed: no DB, no recompute, no impact on existing pricing or market math
  • Unit tests lock in behavior for insufficient data, high/medium/low outcomes, and determinism

Read-only proximity confidence aggregation by canonical_id

v0.6.212
BackendData

We added a read-only aggregation that summarizes raw-sale proximity confidence per card for use in liquidity and market health signals. It runs a single query per card, returns nothing when there is no cached data, and does not trigger recomputation or touch condition pricing or any existing market logic. This gives Phase 8.0 a safe way to use proximity as an internal confidence signal without surfacing raw sales in the UI.

Changes:

  • New read-only aggregation summarizes proximity confidence per card in one query
  • Returns a structured summary when cache exists; None when absent—no writes or recompute
  • Unit tests ensure empty data returns None, aggregation is stable, and no recompute is triggered

Phase 8: UI surfacing discovery and placement analysis

v0.6.211
DocsProductData

A written product and UI analysis was produced to decide where and how Raw Sale Price Proximity should be surfaced before any frontend implementation. The doc maps the card page (authoritative vs contextual zones), condition and grade filtering behavior, and existing trust signals (tooltips, badges, muted text). It evaluates placement options (sales rows, filter context, secondary panel, hidden-by-default, off main page) and calls out where proximity must not appear (condition pricing blocks, Condition column, default-on, graded sales). The recommended Phase 8 entry point is an opt-in "Include raw/ungraded sales" control that shows raw sales in a dedicated block with proximity as an informational badge and tooltip, keeping default experience and condition pricing unchanged.

Changes:

  • Phase 8 discovery doc: card page mental model, condition filtering, trust signals, proximity fit analysis
  • Recommended entry: opt-in "Include raw/ungraded sales" with dedicated raw block and proximity badge + tooltip
  • Explicit non-goals, open questions for user validation, failure analysis, one-paragraph BiP summary

GeminiUsageGuard with soft rate limits

v0.6.210
BackendInfra

A centralized guard now decides whether each Gemini call runs immediately, is deferred, or (rarely) rejected. Soft limits are applied per purpose: scan identify is capped per user and per IP over a 10-minute window, scan retry is limited to one per session, enrichment uses a global hourly cap, UI preview is heavily throttled, and backfill is always deferred unless admin mode is on. Confidence rules gate retries: high confidence disallows retry, mid allows one, low defers. Budgets are tracked in-memory for now; every decision is logged with purpose, user, IP, and outcome. The listing enrichment hook consults the guard before calling Gemini and skips the call when the guard defers or disallows, so existing behavior stays unchanged under load.

Changes:

  • New GeminiUsageGuard module with decide(), record_attempt_for_purpose(), and purpose-based soft limits (scan identify, scan retry, enrichment, UI preview, backfill)
  • Confidence-aware retry gating: high confidence blocks retry, mid allows once, low defers; logic lives only in the guard
  • Listing enrichment hook calls guard before Gemini; when defer or not allowed, skips call and returns sale unchanged
  • Unit tests for confidence rules, per-user soft limit, backfill defer, UI preview throttle; mock time, no Gemini calls

Phase 7.2: integration tests for proximity performance guard

v0.6.209
BackendTestingData

Integration tests were added to prove that proximity recomputation never runs unless explicitly requested. Three tests hit the sales history API and mock recompute_raw_sale_proximity: when include_raw_sales is omitted or false, the mock is never called; when include_raw_sales=true, the mock is called once. Default API behavior stays cheap and unchanged; future refactors cannot accidentally trigger proximity recomputation. These tests fail loudly if recompute is triggered unintentionally, locking in the performance contract alongside Phase 7.1’s data-integrity guard.

Changes:

  • Integration test suite test_proximity_performance_guard: recompute not called without opt-in, not called when flag false, called once when flag true
  • Tests mock only at recompute boundary; assert status 200 and mock_recompute.assert_not_called() or assert_called_once()
  • Uses same card resolution as API tests; fast, deterministic, CI-safe; no production code changes

One Piece Pillars of Strength set ingestion

v0.6.208
BackendData

The One Piece TCG set Pillars of Strength (OP-03, 341 cards) is now fully supported in the index. Set registration, API metadata, and release date (June 30, 2023) were added so the set appears correctly in set lists and set detail views. Card records are created and updated via the existing set ingestion pipeline; canonical IDs use the short set slug for consistency with other One Piece sets. Front images for cards are downloaded, processed to small and large variants, and stored on the CDN using the existing One Piece image pipeline. Ingestion is idempotent and safe to re-run.

Changes:

  • Registered Pillars of Strength in set pipeline and API metadata with release date June 30, 2023
  • Ingested 341 cards using existing set ingestion pipeline; canonical IDs normalized for One Piece
  • Added ingest script and ran image pipeline; front images stored on CDN for Pillars of Strength cards