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

🔥 50 updates in last 7 days

🕒 Last update Just updated

Latest updates and improvements to JK Index

Development Analytics

552
Total Updates
50
Last 7 Days
150
Last 30 Days
94
Day Streak

Activity

Consistent shipping, week after week

Focus Areas

Backend395 (71.6%)
Data189 (34.2%)
Frontend188 (34.1%)
Testing122 (22.1%)
UX79 (14.3%)
Bug Fix70 (12.7%)
Feature69 (12.5%)

Shipping Velocity

This week: 50 updates
Previous week: 30 updates

Latest Shipped Features

Checkout wallet pay that lines up with the chain

Your order can move to paid once the vault transfer is recognized, with clearer guidance before you approve anything in your wallet.

Release notes

Link your Solana wallet for marketplace checkout

Prove wallet ownership with a normal sign-in flow, keep linked addresses as the source of truth, and pick one of your linked wallets when you buy—no more pasting an address by hand.

Account profile

Buy marketplace listings with USDC

Complete a purchase from the card page, see your order, and pay with a standard Solana wallet flow—totals, timing, and payment instructions stay tied to what the marketplace recorded for you.

Browse marketplace

Turn a card page into a listing

Approved sellers can photograph, price, and submit inventory without leaving the card context.

My Listings

Manage what you sell on JK Marketplace

See your seller status and listings in one place, with honest messaging until photo upload unlocks listing creation.

Seller Hub

Browse Instant Listings in one place

Scan active singles and sealed offers with filters—then open the card page when you want full JK Index context.

Open Marketplace

Release Notes

Instant Listings: paid status after vault deposits

v0.6.516
MarketplaceFrontendFeatureBug Fix

Buyers paying USDC from the order page could remain stuck in awaiting payment even after a successful on-chain transfer, because matching logic treated only the custody wallet owner as the destination while tokens actually credit that wallet’s USDC balance account. The payment panel now explains that confirmation follows backend processing (not the moment an explorer shows finality), shows the site hostname and custody vault on a block explorer before you pay, and blocks the flow if the mint does not match this deployment’s expected USDC. Local smoke guidance states that observer and reconcile jobs must keep running for orders to advance during development.

Changes:

  • Observation and reconciliation now treat inbound USDC to the platform vault token account the same as the owner address, so real buyer transfers can complete the payment path.
  • Checkout adds an explicit wallet authorization step, explorer links, expected-mint validation, and copy that sets expectations for when the order leaves awaiting payment.
  • The storefront reads Solana RPC and mint settings from the same environment family as the marketplace backend so wallet flows stay aligned with custody configuration.
  • Smoke documentation calls out that observer and reconcile workers need to run locally for paid-state transitions after a signed transfer.

Instant Listings: hybrid payment observer (backend)

v0.6.515
MarketplaceBackend

Production can now ingest on-chain USDC vault transfers into the same payment-event path reconciliation already trusts. A scheduled one-shot worker discovers recent inbounds via Solscan-style APIs, then reads each transaction on Solana RPC to recover the Solana Pay reference account wallets attach, matches it to pending intents, and records a raw transfer observation—without changing how orders move to paid. Operators gain a dedicated Procfile process, a small cursor table so reruns do not thrash the same signatures, and configuration for source mode (hybrid, RPC-only, or Solscan-only discovery). Reconcile stays DB-only; a narrow fix removes an unnecessary RPC requirement from that worker. This is backend and ops wiring only; buyer UI polling is unchanged.

Changes:

  • New `marketplace-observer` worker plus thin `observer_sources` adapters: vendor transfer discovery stays isolated from payment services; reference recovery uses chain RPC instruction accounts per the locked PASS B split.
  • Adds `marketplace_observer_cursors` for last-processed signature per vault stream so skipped or unmatched transfers still advance scan progress safely.
  • Extends marketplace config with observer source, Solscan key, lookback limit, commitment, and stream name; documents and verification JSON describe behavior, tests, and staging caveats (Solscan mainnet-only).
  • Twenty-three new backend tests cover derivation, Solscan and RPC adapter behavior, hybrid delegation, worker matching and idempotency, and observe-then-reconcile order transition.

Instant Listings: Tranche 9 reference spike (PASS B)

v0.6.514
MarketplaceDocumentation

Operators now have a closed gate for how payment intent reference keys line up with the read-only account wallets attach on vault transfers, without changing runtime code. A deterministic cross-runtime check confirms the same public key the buyer wallet shows is what the backend can expect when matching confirmed payments. The write-up chooses PASS B: use third-party explorer APIs for vault transfer discovery, but read the reference account from chain RPC transaction payloads because vendor transfer feeds do not surface instruction accounts needed for that field. Documentation and verification JSON only—no observer worker ships in this commit.

Changes:

  • New gate doc records the end-to-end story from stored intent UUID to buyer-facing payment link through the on-chain reference account and what reconciliation already compares.
  • PASS B locks vendor usage: explorer-style feeds for listing recent vault inbounds; chain reads for the reference pubkey field Solana Pay encodes as a non-signer transfer account.
  • Adds a verification artifact with go/no-go metadata, test vectors, and provider boundary notes so implementation can follow one adapter shape later.
  • Explicitly defers live mainnet end-to-end proof to a follow-on pass; this change set is documentation and operator evidence only.

Instant Listings: Solscan-first observer delta preflight (operator documentation)

v0.6.513
MarketplaceDocumentation

The earlier payment-observer preflight assumed raw Solana RPC as the first chain-read path. A focused delta pass checks whether Solscan Pro API can serve production observation instead: filtered vault transfer discovery, standard pagination, and parsed transaction detail for the risky reference-key step. The write-up maps Solscan account-transfer and transaction-detail endpoints to the fields `record_observed_payment` already needs, calls out Solscan’s mainnet-only stance so dev and staging still need an RPC fallback, and recommends a very small source adapter so indexer response shapes never leak into reconciliation. This remains documentation and planning only—no observer code ships yet.

Changes:

  • New Solscan delta preflight doc and verification JSON: field fit for vault USDC inbound transfers, CU and polling guidance, and explicit note that the Solana Pay reference pubkey still must be read from transaction instruction accounts (likely a second API call).
  • Documents that Solscan Pro does not cover devnet or testnet per vendor FAQ, so local and staging verification paths should keep a narrow RPC-backed source behind the same adapter boundary.
  • Recommends a minimal `observer_sources`-style split (Solscan plus RPC fallback) instead of embedding vendor JSON in the worker or payment services.
  • Adds the in-repo tranche 1–7 narrative brief under docs so operators have a single consolidated execution story alongside the newer observer notes.

Instant Listings: payment observer preflight (production confirmation path)

v0.6.512
MarketplaceDocumentation

Buyer-facing payment polling can only reflect what the backend already knows. The new operator preflight maps the full intended chain from Solana Pay intent through persisted payment events, reconciliation, and order state transitions, and names the single missing production rail: something must observe finalized vault transfers and record them as transfer events before the existing reconcile worker can mark intents confirmed. The document recommends starting with a narrow Solana RPC polling worker against the marketplace vault, documents the exact match fields already enforced in reconciliation (reference, recipient, mint, amount). No on-chain observer ships in this change set; this is planning and release hygiene only.

Changes:

  • New `docs/dev/instant_listings_payment_observer_preflight.md` plus verification JSON: current pipeline, gap analysis (no production caller for observed transfers yet), RPC-first observation recommendation, worker cadence guidance, and config checklist.
  • Clarifies that internal reconciliation and timer HTTP ticks are dry-run stubs today and that scheduled one-shot workers must run with real mode for expiry and confirmation matching.
  • Operator-facing framing: frontend polling improves freshness but authoritative paid state still depends on the future observer writing persisted events the reconcile job can trust.

Instant Listings: order payment page refreshes automatically while you wait

v0.6.511
MarketplaceFrontend

After placing an order and sending payment, buyers had to manually refresh the page to see whether the payment was confirmed, expired, or failed. The payment block on the order detail page now polls the lightweight payment-intent endpoint automatically while the intent is pending, using a step-function backoff schedule that starts at five seconds and gradually widens to fifteen seconds. Polling pauses when the browser tab is hidden and resumes promptly when the tab becomes visible again. When the backend reports a terminal status change the parent order detail page re-fetches so the header badge, fulfillment section, and other order fields all update in place without a manual reload. The confirmed and expired states now have dedicated visual treatments instead of relying solely on the countdown timer.

Changes:

  • PaymentBlock polls the existing payment-intent endpoint every 5 seconds while pending; interval drops to 3 seconds for two minutes after a wallet transaction is sent, then widens to 10s after two minutes and 15s after five minutes.
  • Polling pauses when the browser tab is hidden and resumes with a short jitter delay when the tab becomes visible, preventing wasted requests on backgrounded tabs.
  • Concurrent poll requests are blocked by an in-flight guard so slow network responses cannot stack up duplicate fetches.
  • On any status transition (confirmed, expired, failed), polling stops and the parent order detail page re-fetches the full order so every section reflects the new state.
  • Dedicated confirmed (green banner with timestamp), expired (slate explanation), and failed (red banner) UI states replace the generic pending display once a terminal status is reached.

Dev update generator: accurate Docs commits and fewer false “new API” bullets

v0.6.510
ToolingTesting

The automated `generate-dev-update` script had two sharp edges: every `Docs:` commit reused a long fixed “Ascended Heroes” audit paragraph unrelated to the actual change, and any commit that mentioned the word “endpoint” (even “no new endpoint”) could emit generic “new API endpoint” bullets. The generator now reserves that audit copy for messages that explicitly mention Ascended Heroes, builds a disclosure-safe summary from the rest of generic documentation commits, and runs documentation bullets before the API template so negated endpoint language does not hijack the change list. Commits scoped as `fix(tooling):` that only touch `generate-dev-update` are no longer lumped into the unrelated “sales refresh worker” tooling narrative, so bingo-driven releases stay faithful to what actually shipped.

Changes:

  • Generic `Docs:` / audit commits derive summary text from the commit body instead of a single unrelated audit paragraph; Ascended Heroes copy is gated on an explicit mention.
  • Documentation-style bullet templates are chosen before the API endpoint template, so phrases like “no new endpoint” in a docs commit no longer produce fake API bullets.
  • `fix(tooling):` commits that reference `generate-dev-update` skip the sales-refresh tooling branch so titles and summaries match the generator change.
  • Removed the overly broad `generate` keyword from tooling detection to reduce accidental classification.

Instant Listings: payment-status polling preflight (docs + bingo reliability)

v0.6.509
MarketplaceDocumentationTooling

We added operator-facing documentation that audits how buyer order payment state is represented today and how a future polling implementation should behave without overloading the API. The preflight names the true fields (`MarketplacePaymentIntent.status` plus aligned `order.state` / `order.payment_status`), compares full order detail versus the lightweight payment-intent endpoint, and ties refresh expectations to worker-driven reconciliation rather than sub-second magic. The bingo release script was also tightened so documentation-only commits under `docs/` still generate dev updates (they were previously misclassified as internal-only and skipped), and so automated runs no longer block forever on the interactive “press Enter” review step when stdin is not a TTY—use `BINGO_NONINTERACTIVE=1` to skip the pause explicitly.

Changes:

  • New `docs/dev/instant_listings_payment_polling_preflight.md` and matching verification JSON: source of truth, endpoint cost analysis, recommended poll cadence (5s with backoff, visibility pause, no overlap), and explicit “no new status endpoint” decision.
  • Documents that reconcile/timers workers are one-shot processes whose effective cadence is scheduler-defined, so frontend polling should not run faster than backend truth can change.
  • bingo.sh: treat paths under `docs/` as user-facing for dev-update generation; document `BINGO_NONINTERACTIVE`; skip the dev-update review `read` when stdin is not a terminal or when that env is set.
  • bingo.sh: run `npx --yes tsx` for validate-dev-updates to reduce interactive npx prompts.

Instant Listings: "Pay with wallet" button sends USDC directly from your connected Solana wallet

v0.6.508
MarketplaceFrontendBug Fix

The "Open in wallet" link on the order payment page used a solana: deep-link URI that only worked on mobile devices. Desktop browsers have no registered handler for the protocol, so clicking the link did nothing. The payment block now uses the already-connected Solana wallet adapter to build a real USDC SPL token transfer transaction and pop open the Phantom approval dialog directly in the browser. If no wallet is connected, clicking "Pay with wallet" opens the wallet selection modal first, then proceeds with the transaction once connected. The raw Solana Pay URL is still available under a "Manual payment options" toggle for mobile users or anyone who wants to copy and paste the link into a wallet app.

Changes:

  • Replaced the inert solana: anchor link with a "Pay with wallet" button that constructs and sends a USDC SPL transfer using createTransferCheckedInstruction from the connected wallet adapter.
  • Added @solana/spl-token as a frontend dependency for building the token transfer instruction.
  • Transaction includes a deterministic reference public key derived from the payment intent UUID so the backend indexer can locate the on-chain transfer.
  • If no wallet is connected, clicking the button opens the wallet modal and auto-proceeds after connection.
  • Solana Pay URL preserved under a collapsible "Manual payment options" section for mobile and manual use.

Instant Listings: wallet-link flow now triggers Phantom connection and signature prompts correctly

v0.6.507
MarketplaceFrontendBug Fix

After selecting Phantom in the wallet modal, nothing happened because the adapter library only marks the wallet as "selected" without actually opening a connection when auto-connect is off. The link flow now explicitly calls connect() once a wallet is selected and the user intended to link, which surfaces the Phantom approval popup and then the signature request as expected. The button also shows a "Connecting…" state during the handshake so the user knows the app is waiting on the extension, and the effect chain is structured so each step—select, connect, sign, verify—fires in the correct order without racing or silently dropping.

Changes:

  • Wallet-link flow explicitly calls connect() after the adapter modal sets the selected wallet, fixing the silent no-op when auto-connect is disabled.
  • Button label transitions through Connecting, Linking, and idle states so the user always sees where the handshake is in the sequence.
  • Effect dependencies correctly track wallet, connected, and signMessage individually so no step is skipped when the adapter delivers them across multiple renders.

Instant Listings: link a Solana wallet to your account and pay from linked wallets at checkout

v0.6.506
MarketplaceFrontendBackendAccount

Checkout already required that the paying wallet belong to the signed-in account, but email-first members had no supported way to add that wallet without legacy paths. The app now issues a short-lived link challenge, verifies an Ed25519 signature on the exact message bytes, and stores Solana addresses in user_wallets with correct base58 casing so lookups stay honest. On the profile page you can connect Phantom (or extend adapters later), complete the signature, and see linked wallets listed. The buy sheet loads those wallets into a simple pick list and sends the exact on-chain string to order creation. Local seed data uses a real generated public key, and Alembic defaults now match the psycopg2 driver the repo already ships so migrations run cleanly against a typical developer database.

Changes:

  • First-party wallet link API (list wallets, challenge, verify) with single-owner enforcement so one Solana address cannot be claimed by two accounts.
  • Profile and checkout UX use the wallet adapter for connection and signing; checkout no longer relies on a free-text payment address as the primary path.
  • Solana address normalization no longer lowercases base58; marketplace order checks and Privy wallet sync are chain-aware, with a dedicated challenges table and migration tooling aligned to psycopg2.

Instant Listings: local buyer checkout smoke can use a pre-linked test wallet

v0.6.505
MarketplaceBackendDocumentation

Buyer checkout already insists the paying wallet is one the signed-in account has on file, which keeps the marketplace honest about who is authorizing spend. The development buyer persona created for manual smoke signs in with email only, so that account had no linked Solana wallet and could not complete the flow even when everything else was wired—without weakening the same rule production relies on. The marketplace test-user seed now adds a single deterministic Solana wallet association for that buyer in a way that can be run repeatedly without duplicates, prints the address for operators to paste at checkout, and documents that this is strictly a local convenience until a first-class wallet-link experience ships under the current authentication approach.

Changes:

  • Local marketplace seeding gives the buyer persona a linked Solana payment identity so manual checkout exercises the real “wallet must already be linked” contract instead of bypassing it.
  • Re-running the seed stays safe: it recognizes an existing wallet link and surfaces the same address at the end so smoke steps stay copy-pasteable.
  • Contributor notes spell out that this is a development unblocker and that durable wallet linking for real members still needs its own product pass after the legacy wallet-through-sign-in path stopped being the supported story.