Glossario UI
Terminologia interna
Riferimento rapido per mantenere copy coerente in tutte le pagine.
Collection — Collezione personale (inventario carte possedute)
Wantlist — Lista carte desiderate (chase cards)
Owned — Carta posseduta (quantità > 0)
Missing — Carta non presente in collezione
Binder — Vista album del set con pagine
Set Completion — Progresso completamento del set
Sealed Product — Prodotto fisico collegato al set (non carta)
Product Category — Categoria prodotto (booster, box, bundle, accessory, ...)
Scan Beta — OCR testuale con conferma manuale del match
Confidence — Affidabilità match scan (High / Medium / Low)
Movimenti collezione, QR mobile e readiness eBay
5 luglio 2026Milestones
Movimenti collezioneGruppi scambio/acquistoUpload foto via QRReadiness sandbox eBay
- Aggiunta in Collection 2.0 la registrazione dei movimenti manuali per carte e prodotti sealed: vendita fuori piattaforma, scambio, acquisizione e rettifica, con quantita, valore, controparte, data, note e aggiornamento della quantita in collezione.
- Aggiunta la timeline movimenti in Collection 2.0 per vedere la storia degli spostamenti di carte e prodotti, separata dalla semplice quantita posseduta.
- Estesa la tab Movimenti in Collection 2.0 con registro globale filtrabile, riepilogo vendite/acquisti/scambi, ricerca per carta/prodotto/persona/evento, filtri per tipo, oggetto, gruppo e stato pagamento.
- Aggiunto il dettaglio consultivo dei gruppi movimento: selezione dalla sidebar, riepilogo movimenti associati, valore entrato/uscito, saldo stimato, totale, pagato, residuo, canale, persona, luogo e note.
- Aggiunta la vista Percorso nella tab Movimenti: lo storico viene raggruppato per giorno, con i gruppi come tappe cliccabili e i movimenti singoli mostrati lungo il percorso.
- Aggiunti download CSV dello storico movimenti, modifica dei gruppi movimento e annullamento tracciato dei movimenti con badge Annullato e ripristino quantita quando possibile.
- Aggiunta una dashboard operativa nella tab Movimenti con saldo entrate/uscite, arretrati da saldare, persone/eventi ricorrenti, ultimi annullati e filtro rapido Da saldare.
- Aggiunto il comando rapido Segna pagato sui gruppi movimento aperti, disponibile dalla dashboard arretrati e dal dettaglio gruppo.
- Riorganizzato il dettaglio gruppo con una sezione Pagamenti dedicata a totale, gia pagato, residuo, stato, avanzamento saldo e modifica pagamento.
- Rese cliccabili persone ed eventi ricorrenti nella dashboard Movimenti per aprire rapidamente lo storico filtrato del soggetto selezionato.
- Aggiunto il flusso Da verificare per i gruppi movimento in bozza: badge dedicato, filtro Stato gruppo, blocco Da controllare e azione Segna completato.
- Aggiunto il riepilogo dei filtri attivi nello storico Movimenti con chip rimovibili, conteggio movimenti filtrati e reset rapido.
- Aggiunti i gruppi facoltativi di scambio/acquisto/vendita per collegare piu movimenti allo stesso evento, persona o accordo, con canale, luogo, stato pagamento, totale, importo pagato e note.
- Aggiunto il supporto SQL per collection_movements e collection_transaction_groups, con policy RLS per mantenere i movimenti separati per utente.
- Aggiunta nella pagina eBay la creazione di sessioni QR per caricare foto dal telefono direttamente nelle immagini della bozza inserzione.
- Aggiunta la pagina mobile di upload foto tramite token QR, con invio immagini al server e associazione automatica alla bozza eBay corretta.
- Generalizzata la logica QR in mobile_action_sessions, cosi le sessioni mobile possono essere riusate in futuro anche per azioni diverse dall'upload immagini eBay.
- Aggiornato il flusso upload immagini eBay per usare lo storage interno delle immagini bozza e non dipendere da Supabase Storage.
- Aggiunta la pagina Admin eBay Readiness per verificare ambiente sandbox/production, credenziali, marketplace, RuName, token encryption key e stato operativo prima della pubblicazione.
- Rese operative le azioni della readiness eBay con controlli guidati, messaggi di blocco e indicazioni chiare per il primo test in sandbox.
- Separata la configurazione eBay seller dalle chiavi eBay usate per le watch della piattaforma, evitando che le credenziali production delle watch blocchino il flusso seller sandbox.
- Aggiornata Config Env per mostrare e verificare le variabili eBay rilevanti per seller, watch e publish sicuro.
- Migliorato il modale movimento in Collection 2.0 rendendo overlay, pannello e campi opachi e piu leggibili.
Scanner AI DINOv2 in debug
27 giugno 2026- Aggiunto il primo motore di riconoscimento AI con DINOv2 e Supabase pgvector: indicizzazione immagini ufficiali in scanner_ai_embeddings, RPC match_scanner_ai_embeddings e script di test per cercare candidati da foto locale.
- Integrato DINOv2 nello Scanner 2.0 dietro feature flag SCANNER_AI_ENABLED: la pipeline Sharp/Jimp resta responsabile del match principale, mentre l'AI aggiunge solo candidati diagnostici in debug senza modificare stati o soglie.
- Aggiunto il pannello AI DINOv2 nella UI risultati scanner, con top candidati, similarity, set, numero carta e miniatura, per confrontare rapidamente il motore AI con il match visuale esistente.
- Aggiunta la pagina admin AI Scanner Service per avviare, fermare e monitorare Uvicorn/DINOv2 locale con health check, PID e log stdout/stderr.
- Aggiunta la pagina admin Embedding Set per vedere la copertura DINOv2 per gioco e set, selezionare i set mancanti e lanciare l'indicizzazione senza usare env o riga di comando.
- Spostato il controllo operativo del match AI da variabili env a impostazione admin: la pagina AI Scanner Service permette di abilitare o spegnere DINOv2 nello scanner, con fallback env solo se la tabella impostazioni non e ancora applicata.
- Aggiunta la pagina admin Config Env per diagnosticare le variabili runtime importanti con categoria, stato, valore mascherato, fingerprint dei segreti e reveal tracciato solo per valori sensibili non critici.
- Aggiunta una prima Analytics leggera: tracker client per page view e durata stimata, endpoint di raccolta senza IP pieno, tabella app_analytics_events e pagina admin con visite, visitatori unici, pagine piu viste, device e ultimi eventi.
- Resi confermabili anche i candidati AI DINOv2 nello Scanner 2.0: il feedback salva la sorgente scelta visual/ai/none, rank e score AI, top visuale e top AI per confrontare in Scanner Quality quale motore vince nei casi reali.
- Aggiunto nello Scanner 2.0 il box assistito 'AI suggerisce un match diverso' quando DINOv2 ha un candidato #1 ad alta similarity diverso dal top visuale, con confronto diretto e conferma AI immediata.
- Riorganizzata la UI dello Scanner 2.0 rendendo collassabile la sezione Camera e scanner continuo, cosi il flusso desktop resta concentrato su upload, analisi e conferma risultati.
- Validato lo scanner AI su un nuovo set indicizzato: gli ultimi test reali salvati in scanner feedback confermano DINOv2 come sorgente scelta con candidato AI rank 1 corretto.
- Aggiunto il primo bot Telegram admin con allowlist chat, comandi rapidi per stato sito/AI/import/utenti e scansione carta da foto usando lo scanner AI crop2.
- Aggiunta la pagina Admin Telegram Bot per avviare/fermare il processo del bot, controllare configurazione env mascherata, vedere stdout/stderr e leggere i comandi ricevuti.
- Esteso il bot Telegram con lista comandi via chat e controllo dei blocchi della pianificazione import: /blocks elenca i blocchi e /run_block avvia sequenze con conferma IMPORT per step live.
- Rifinita la risposta scanner del bot Telegram: quando riceve una foto carta restituisce solo il primo match con immagine catalogo, set, numero carta, rarita, score AI, prezzi Cardmarket/CardTrader, quantita/listing CT e link alla scheda 2.0.
Trend 2.0 e console admin piu operative
25 giugno 2026Milestones
Trend 2.0 separataPortafoglio segnali V2Admin piu compattaSegnali eBay Pro piu leggibili
- Aggiunta la nuova pagina Trend 2.0 su /v2/trend, mantenendo la Trend classica separata: hero V2, viste operative in evidenza, filtri per TCG e set, risultati piu leggibili e analisi tecnica affiancata.
- Riorganizzata la scheda risultato di Trend 2.0 con immagine, nome, link scheda, bottone analisi tecnica, data inizio/fine analisi, copie iniziali/finali, prezzo Cardmarket iniziale/finale, prezzo CardTrader iniziale/finale e percentuali.
- Aggiunto il grafico analisi tecnica espandibile in Trend 2.0 con overlay scuro fuori dal contenitore, render tramite portal per stare sopra la barra di ricerca, punti con tooltip, date sull'asse e tabella dati con CM, CT, copie e listing.
- Ripristinato in Trend 2.0 il salvataggio dei segnali tramite bottone Monitora, usando la stessa API /api/trend/saved della Trend classica e mostrando lo stato Monitorata per i segnali gia salvati.
- Aggiunta la pagina /v2/trend/portfolio per seguire i trend salvati con entry CardTrader, valore attuale, P/L, ROI, stato operativo, dettaglio posizione, link scheda e analisi tecnica.
- Aggiornata la Home 2.0 e la navigazione V2 con accesso diretto a Trend 2.0 e portafoglio dedicato, senza rimuovere la Trend classica.
- Rifinita la dashboard admin con una console piu compatta: stato rapido worker/quota eBay e menu diviso per Operazioni, Mercato, Catalogo e Sistema, mantenendo priorita a chiarezza e velocita d'uso.
- Migliorata la vista Pro della scheda carta 2.0 per i segnali eBay: la API espone origine ricerca, motivi match/scarto, stato prezzo e venduti revisionati; il pannello mostra qualita segnale, campioni usati, scarti, venduti inclusi/esclusi e link a inserzione e ricerca di origine.
- Aggiunta in Admin una sintesi qualita segnali eBay con venduti globali, match, percentuale inclusi, auto-validati, review, scarti per motivo, qualita cache prezzo e top carte con segnali forti o indicativi.
- Preparata una regola piu prudente nel refresh dei segnali eBay: i match in review con nome, numero e raw_listing vengono auto-validati solo se il prezzo e coerente con un cluster eBay gia esistente per la stessa variante.
- Ottimizzata la pagina Admin Venduti eBay per la review manuale: filtri rapidi per da rivedere, quasi buoni, cluster, outlier e lingua mancante, ordinamento per priorita e badge diagnostici sulle singole inserzioni.
- Aggiunta la provenienza dei venduti eBay quando disponibile: lo scraper salva il country_code della vendita e Admin/Vista Pro lo mostrano come contesto informativo senza modificare le metriche prezzo.
- Rimossa dalla pagina Watch la lettura automatica dei venduti eBay all'espansione di una query e tolto il pannello con stampe/diagnostiche venduti: la gestione dei venduti resta concentrata nei pannelli Admin.
- Disattivata la route legacy /api/watch/ebay-sold: eventuali vecchie chiamate ricevono 410 Gone e non possono piu avviare import venduti fuori dal flusso Admin.
- Raffinata la pagina Admin Venduti eBay con riepiloghi e filtri operativi per provenienza vendita, variante raw/graded e qualita venditore, mantenendo i calcoli prezzo separati dalle nuove viste di review.
- Migliorata la Vista Pro della scheda carta 2.0 con lettura rapida dei segnali eBay: affidabilita, confidenza media, prezzo credibile, ultima vendita usata, copertura geografica e distinzione raw/graded.
- Corretto il caricamento dei campi CardTrader nelle schede carte/prodotti 2.0: i riquadri Free ora leggono i prezzi correnti lato server con service role, evitando vuoti causati dalle policy RLS su price_current.
- Rafforzato l'import prezzi CardTrader: se il Postgres locale configurato non risponde, lo script disabilita il mirror locale per quel run, fa fallback su Supabase e svuota i buffer solo dopo una scrittura riuscita.
- Aggiunto nella review Admin Venduti eBay il link diretto alla scheda 2.0 della carta o del prodotto candidato, per velocizzare il controllo manuale dei match.
- Aggiornata la guida piattaforma con Trend 2.0, Portafoglio Trend 2.0 e nuova descrizione della console admin.
Integrazione eBay seller multiutente
24 giugno 2026Milestones
OAuth eBay per utenteBozze pubblicabili su eBay
- Aggiunto lo schema eBay seller multiutente con account collegati, stati OAuth, preferenze venditore e log pubblicazioni, mantenendo i refresh token cifrati e non leggibili dal client Supabase.
- Aggiunta la libreria server eBay per generare il consenso OAuth, scambiare authorization code, aggiornare access token, cifrare/decrittare refresh token e costruire SKU e titoli inserzione.
- Aggiunti endpoint per connettere/disconnettere account eBay, leggere policy venditore, location e salvare preferenze di pubblicazione per singolo utente.
- Aggiunta la pagina Account con pannello eBay: stato connessione, ambiente, marketplace, selezione location, payment policy, shipping policy, return policy, categoria default e link alle bozze eBay.
- Aggiunta la pagina /ebay per revisionare bozze generate dalla collezione, modificare titolo, prezzo, quantita e categoria, quindi pubblicare manualmente su eBay tramite Inventory API.
- Esteso il pulsante bozza vendita per creare anche bozze eBay dalla Collection 2.0, senza rimuovere il flusso Collector Market esistente.
- Aggiunto il link eBay alla navigazione principale per rendere accessibile la gestione delle pubblicazioni.
- Aggiunto in Import Control e Pianificazione admin l'indicatore storage prezzi, con fonte primaria locale/Supabase, conteggi current/history, ultimo snapshot CardTrader/Cardmarket e diagnostica metadata v2.
- Rafforzata la pagina Trend: la vista Pressione usa ora profondita CardTrader, floor quantity, seller count, spread depth 3/5/10 e calo quantita valide per ordinare i segnali di pressione mercato.
- Aggiunto nella vista Pro della scheda carta 2.0 il pannello Profondita mercato CardTrader con floor, depth 3/5/10, costi cumulati, livelli prezzo, condizioni e lingue.
eBay Scan Queue piu permissiva
23 giugno 2026Milestones
Query venduti eBay meno restrittive
- Rimossa l'inclusione del nome set dalla query principale della coda eBay Scan Queue per evitare di tagliare risultati validi quando le inserzioni non riportano il set o lo riportano in modo diverso; il set resta salvato nei metadati di contesto per controllo e matching.
- Ritarato il profilo Liquido della coda eBay: Pokemon riceve priorita operativa piu alta perche nome e numero sono piu discriminanti, mentre One Piece viene abbassato per ridurre rumore dovuto a numerazioni ambigue tra promo, parallel e ristampe.
- Abilitato lo script import:ebay:sold-queue ad aggiornare automaticamente gli aggregati ebay_price_signals tramite service role, mantenendo il refresh manuale riservato agli admin.
- Aggiunta nella pagina admin Venduti eBay la review manuale dei match: un admin puo approvare un venduto scartato come segnale prezzo o escluderlo, con refresh immediato degli aggregati eBay e protezione delle inclusioni manuali dal filtro outlier automatico.
- Arricchita la pagina admin Venduti eBay con il soggetto di partenza del match: nome carta/prodotto, numero, set e TCG sono visibili direttamente nella tabella per valutare piu rapidamente se il venduto proposto e coerente.
- Raffinata l'approvazione manuale dei venduti eBay: se un risultato trovato da query raw dichiara PSA, BGS, CGC, SGC o ACE nel titolo, l'approvazione lo salva nella variante graded corretta invece di sporcare il segnale raw.
- Automatizzato il recupero dei venduti graded trovati da query raw: quando titolo, nome carta e numero sono coerenti e il grading e dichiarato chiaramente, il match viene spostato nel bucket graded corretto invece di essere scartato.
- Rafforzata la deduplica dei venduti eBay: la coda admin non puo salvare due match per lo stesso sold item, soggetto e variante, e la pagina admin mostra una sola riga anche quando lo stesso venduto arriva da watch diversi.
Audit review CardTrader
22 giugno 2026Milestones
Log review nella pagina admin
- Collegate le azioni di quarantena CardTrader ai log admin esistenti: pubblicazione set, pubblicazione massiva, pubblicazione/eliminazione singola carta o prodotto ed eliminazione set ora scrivono eventi in admin_activity_logs.
- Aggiornata la pagina Log modifiche per includere la review CardTrader tra le azioni tracciate e renderla riconoscibile con styling dedicato.
- Aggiunto in Valutazione 2.0 e nella vista Valutazione lo switch fonte prezzo CardTrader/Cardmarket, applicato a valore carte, prodotti sealed, grafici, delta, opportunita ed export CSV.
- Corretto il valore CardTrader in Valutazione: la fonte CardTrader usa il minimo valido/floor price corrente e storico, evitando mediane influenzate da inserzioni outlier.
- Esteso l'import prezzi CardTrader con aggregati leggeri di profondita mercato: livelli prezzo validi, quantita al floor, venditori al floor, secondo/terzo floor, prezzi depth 3/5/10, percentili bassi/alti e riepilogo per lingua.
- Migliorato il matching dei venduti eBay su titoli tradotti automaticamente: quando il nome non combacia ma numero carta e set coincidono, il match riceve un boost controllato invece di restare pending.
- Aggiunto il filtro area per i venduti eBay: la route HTML supporta region local/eu/global con LH_PrefLoc, la coda admin separa Italia, Unione Europea e globale tramite scan_region.
- Aggiunto lo script import:ebay:sold-queue per consumare la coda ebay_scan_queue, scaricare i venduti eBay via HTML con filtro area, salvarli nel modello globale sold item + match e aggiornare i segnali prezzo senza usare chiamate Browse API.
- Ottimizzato enqueue_ebay_scan_candidates per filtrare i prezzi sopra soglia prima dell'aggregazione, aggiungere un indice dedicato ai candidati eBay, ridurre/cappare i batch della pagina eBay Scan Queue ed evitare timeout quando si popola la coda Italia sopra 250 EUR.
- Corretto il prezzo di riferimento della coda eBay: CardTrader usa il floor valido, Cardmarket usa trend/media senza minimo aggregato e i candidati fuori scala vengono esclusi prima dell'enqueue.
- Migliorata la qualita delle query eBay generate dalla coda: carte e prodotti includono contesto set e TCG, con token normalizzati come mtg, pokemon, yugioh e one piece card per ridurre risultati rumorosi.
- Ridotto il rumore salvato dall'import eBay Scan Queue: i venduti con match pending/rejected o needs_review sotto soglia non vengono piu persistiti, lasciando in coda solo conteggi parsed/persisted/skipped.
- Aggiunto il profilo di enqueue eBay Scan Queue: Liquido ordina per priorita operativa su TCG/range 250-5000 EUR mantenendo reference_price, High value mantiene l'ordine per valore stimato fino a 50000 EUR.
Import Control e pianificazione piu durabili
21 giugno 2026Milestones
Run import persistentiLog completiEsecuzioni blocchi salvate
- Reso Import Control piu durabile: le run possono essere registrate subito come running, aggiornate con heartbeat/output tail, completate sulla stessa riga, dotate di log completo su file e diagnostica leggibile degli exit code Windows.
- Aggiunta in Import Control l'apertura del log completo direttamente dallo storico run, con lettura sicura dei file in data/admin/import-logs e copia rapida del contenuto.
- Aggiunta in Import Control la pulizia controllata dei log runtime, con eliminazione dei file oltre 30 giorni mantenendo comunque gli ultimi 100 e audit dell'operazione.
- Aggiunta persistenza delle esecuzioni blocco in Pianificazione admin, con salvataggio JSON dello stato step-by-step e riepilogo delle ultime run disponibili anche dopo refresh della pagina.
- Aggiornato lo schema admin_import_runs per supportare stati running e stopped oltre a completed, failed e partial.
- Aggiunto nella hero della pagina Trend il link diretto al Portafoglio segnali, con conteggio dei trend salvati quando disponibile.
- Aggiunta in Import Control la copertura catalogo CardTrader per TCG: expansion remote, set locali, set mancanti, set vuoti, carte/prodotti importati, category map e ultima run.
- Ottimizzato il polling delle run attive in Import Control con una risposta leggera dedicata, evitando di ricaricare diagnostiche pesanti a ogni refresh.
- Corretto lo stato vuoto della copertura catalogo CardTrader: durante il caricamento mostra un messaggio dedicato e in caso di errore espone il dettaglio reale.
- Resa piu robusta la copertura catalogo CardTrader: i conteggi carte/prodotti sono best-effort e non bloccano piu l'intera tabella se Supabase non restituisce il count.
- Spostata la copertura catalogo CardTrader in una pagina admin dedicata, con API separata, per evitare che fetch esterni o query diagnostiche rallentino Import Control.
- Aggiunta la revisione dei nuovi set CardTrader: gli import live marcano i nuovi set, carte e prodotti come pending, la pagina admin permette di ispezionarli, pubblicarli a cascata o eliminarli per riprovare l'import piu avanti.
- Estesa la quarantena CardTrader anche ai set gia presenti: nuove carte e nuovi prodotti mancanti compaiono nella coda pending del relativo set e possono essere pubblicati o scartati senza eliminare il set gia confermato.
- Aggiornata la coda conferma CardTrader per mostrare tutte le carte e tutti i prodotti pending del set, non solo un campione iniziale.
- Uniformati i bottoni azione delle schede carta/prodotto 2.0: collezione, wantlist, binder, preferiti, stato posseduto e azioni prodotto ora usano la stessa altezza, raggio, padding e gerarchia visiva.
- Collegata la copertura CardTrader a Import Control: il bottone Import di ogni TCG apre la run catalogo gia precompilata con gioco, dry-run, set mancanti/vuoti e riferimenti esterni.
- Migliorata la pagina Catalogo CardTrader admin con badge pending per TCG, conteggio pending set/carte/prodotti nella copertura e filtri sulla coda di conferma per ricerca, TCG e tipo inserimento.
- Aggiunte azioni granulari nella quarantena CardTrader: singole carte e singoli prodotti pending possono essere aperti, pubblicati o eliminati senza pubblicare/scartare l'intero set.
- Aggiunto nella quarantena CardTrader un riepilogo controlli automatici per set, con alert su immagini mancanti, source id assente e duplicati probabili tra carte o prodotti pending.
- Aggiunta la pubblicazione massiva filtrata nella quarantena CardTrader: i set visibili senza alert critici possono essere pubblicati insieme, con riepilogo di set, carte e prodotti coinvolti.
- Aggiunto lo schema SQL cardtrader_catalog_review per gestire review_status, reviewed_at e reviewed_by su set, carte e prodotti, con filtri nelle liste catalogo v2 per non mostrare elementi pending.
Prezzi locali, Scanner 2.0 e catalogo v2 completo
19 giugno 2026Milestones
PostgreSQL locale per storico prezziScanner crop matching miglioratoBatch test Scanner 2.0Catalogo set 2.0 funzionaleListe carte e prodotti 2.0 operativeGrafici prezzo leggibiliValore stimato setDettagli prezzo carte/prodotti 2.0Trend prezzi ripuliti
- Aggiunto supporto opzionale a PostgreSQL locale per price_current, price_history e price_snapshots tramite LOCAL_DATABASE_URL, con schema dedicato, script di setup, controllo container Docker e migrazione da Supabase.
- Introdotto il repository prezzi locale con fallback automatico a Supabase, usato da catalogo carte/prodotti, schede dettaglio, pannello Pro, valuation, trend, deck, museum e draft marketplace.
- Aggiunte API interne /api/prices/bulk e /api/trend per servire prezzi e analytics da PostgreSQL locale quando configurato, mantenendo fallback Supabase.
- Aggiornati gli import Cardmarket e CardTrader per scrivere sul database locale quando LOCAL_DATABASE_URL e' configurato, lasciando invariata la scrittura Supabase in assenza di DB locale.
- Migliorato Scanner 2.0 con nuovo preprocessing crop, aggregazione visuale multi-frame, ricerca concorrente degli embedding, modalita anonima rate-limited per test e rimozione del vecchio modulo OCR hints.
- Aggiunta pagina /v2/scanner/batch per testare molte immagini reali, confrontare candidati, tempi, crop selezionati e debug di matching.
- Aggiunti script scanner-crop2-sample e scanner-compare-crop-matching per generare anteprime crop e report comparativi tra crop classico e crop 2.0.
- Completata /v2/catalog/sets/[id] mantenendo grafica Collector 2.0 ma portando dentro paginazione completa, griglia/lista/binder, set completion, filtri owned/wanted/missing, selezione mancanti, azioni carta e sealed products interattivi.
- Aggiornati SetCardsClientView, SetBinderView e SetBinderModal per supportare link verso schede carta v2 quando vengono usati nel namespace Collector 2.0, senza rompere le pagine classiche.
- Resa /v2/catalog/cards operativa con badge prezzo Cardmarket, aggiunta a collezione, wantlist e selezione bulk direttamente dalle card, mantenendo link alle schede carta 2.0.
- Resa /v2/catalog/products operativa con prezzi Cardmarket/CardTrader, quantita e listing CardTrader quando disponibili, piu azioni prodotto per collezione e wantlist direttamente dalla lista.
- Aggiunti valori numerici direttamente sui grafici prezzo di carte, prodotti e pannello Pro, con label su inizio, ultimo, minimo, massimo e su tutti i punti quando lo storico e' corto.
- Aggiornate le barre di completamento set con percentuale visibile direttamente nella progress bar, sia nella scheda set sia nelle card mini.
- Aggiunto riepilogo valore set nelle pagine set classiche e 2.0: stima set completo, valore posseduto, valore mancante, completamento economico, copertura prezzi e carte mancanti piu costose.
- Completata la scheda prodotto 2.0 con grafico storico Cardmarket, switch Base/Variante-Foil, delta percentuale, riepilogo inizio/ultimo/min/max, dettaglio CardTrader, dettaglio Cardmarket, Product ID e Cardmarket IDs.
- Completata la scheda carta 2.0 rendendo visibili fuori dal pannello Pro il grafico storico Cardmarket, i dettagli CardTrader, i dettagli Cardmarket e i riepiloghi prezzo principali.
- Aggiunto alla scheda carta 2.0 il grafico storico del prezzo CardTrader, con valori inizio/ultimo/min/max e delta percentuale separato dal grafico Cardmarket.
- Aggiunto nella scheda carta 2.0 un riquadro di confine della Vista Pro che chiarisce quali componenti appartengono all'analisi avanzata.
- Spostati i grafici storici Cardmarket e CardTrader della scheda carta 2.0 dentro la Vista Pro, lasciando nella vista standard solo riepiloghi e dettagli correnti.
- Corretto il grafico Cardmarket nella Vista Pro della scheda carta 2.0: se manca trend_price usa avg_price e poi low_price come fallback, evitando grafici vuoti quando lo storico Cardmarket e' comunque presente.
- Aggiunta l'icona di espansione sui grafici delle schede carta/prodotto 2.0 per aprire lo storico in una vista modal piu grande.
- Aggiunto l'hover sui grafici espansi carta/prodotto 2.0 con data, valore e variazione assoluta/percentuale rispetto all'inizio della serie.
- Rifinito il link di ritorno nelle schede carta/prodotto 2.0 con una barra di navigazione coerente al layout Collector 2.0 e label contestuale.
- Aggiunta una barra sticky di riepilogo nelle schede carta/prodotto 2.0 con ritorno integrato, nome, contesto, prezzi principali e link rapidi alle sezioni della pagina.
- Rifinita la pagina Trend con filtri TCG/set, selezione sorgente Cardmarket/CardTrader, confronto coerente trend-con-trend/media-con-media/minimo-con-minimo e regole anti-rumore per escludere prezzi iniziali troppo bassi e cali quantita 1->0 o 2->0.
- Aggiunta alla pagina Trend la metrica Pressione, che combina prezzo Cardmarket stabile e calo di disponibilita CardTrader come segnali separati, senza confrontare direttamente i prezzi dei due marketplace.
- Aggiunta alla pagina Trend la metrica Finestra early, che cerca la confluenza temporale tra aumento iniziale Cardmarket, aumento iniziale CardTrader e calo copie CardTrader, penalizzando i movimenti gia esplosi.
- Aggiunto lo script backtest-trend-early-window per simulare retrospettivamente se le carte poi confermate sarebbero comparse nella Finestra early nei giorni precedenti.
- Aggiunto lo script backtest-trend-early-window-pnl per simulare profit/loss ipotetico della Finestra early, con una copia acquistata alla prima apparizione, valutazione Cardmarket/CardTrader e stress test fee.
- Aggiunto lo script analyze-trend-confirmed-profile per partire dalle carte confermate, leggere i giorni precedenti e ricavare distribuzioni comuni di CM, CT, quantita, listing, confluenza e ROI netto.
- Ricalibrata la Finestra early con un punteggio empirico derivato dai confermati profittevoli: maggiore peso a pressione quantita/listing, segnale fresco, CT entry entro soglia e range CM/CT coerenti.
- Aumentato il numero di risultati caricabili in Trend: Conferme ora mostra fino a 500 righe invece della sola top 100, mantenendo Candidate come bacino totale prima del limite.
- Aggiunta alla pagina Trend la metrica Conferme, che mostra carte e prodotti con aumento separato sia su Cardmarket sia su CardTrader nello stesso periodo, senza confrontare direttamente i livelli prezzo tra marketplace.
- Rafforzate le metriche Trend rendendo Occasioni e Squeeze meno sensibili agli outlier, deduplicando Quantita per carta/prodotto e separando Momentum dai semplici movimenti prezzo.
- Aggiunte alla pagina Trend le viste aggregate Set e TCG, ordinate con score percentuale su aumenti, pressione disponibilita e conferme, per evitare bias verso giochi o set con piu carte/prodotti.
- Arricchite le viste Set e TCG con copie/listing comparabili a inizio e fine periodo, delta assoluto e delta percentuale, distinguendo i numeri robusti dai totali grezzi influenzabili da nuovi set o import.
- Aggiunta in Trend una schermata tecnica inline per carta/prodotto con serie allineate di prezzo Cardmarket, prezzo CardTrader, copie CardTrader e listing CardTrader nello stesso periodo.
- Aggiunto in Trend il salvataggio dei segnali carta/prodotto come trend personali monitorati, con snapshot di entry price, score, percentuali CM/CT e riapertura rapida dell'analisi tecnica.
- Trasformati i Trend salvati in un Portafoglio segnali con prezzo CardTrader attuale, P/L stimato, ROI, giorni dal salvataggio e stati watching/comprata/ignorata/archiviata.
- Spostata la gestione completa del Portafoglio segnali in /trend/portfolio, lasciando nella pagina Trend solo una card riepilogo con link alla vista operativa.
- Corretto il calcolo ROI/P&L dei Trend salvati: entry e valore corrente CardTrader usano sempre la stessa metrica selezionata, senza confrontare minimo con media o trend.
- Riorganizzata la pagina Trend come workspace tecnico: risultati scrollabili, analisi tecnica laterale sticky, riga selezionata evidenziata e guida contestuale per ogni metrica.
- Aggiunta nel pannello Analisi tecnica di Trend una scheda della carta/prodotto selezionato con nome, set, dettaglio e link diretto alla scheda.
- Aggiunta l'immagine della carta/prodotto nella scheda selezionata sopra l'analisi tecnica di Trend e nei risultati della ricerca libera.
- Aggiunta in Trend una ricerca libera per cercare carte/prodotti fuori dai risultati algoritmici e aggiungerli manualmente al monitoraggio con snapshot prezzi correnti.
- Ottimizzata la ricerca libera di Trend spostandola su API server e riusando parsing, traduzioni e ranking della barra di ricerca globale, evitando timeout da query client troppo ampie.
- Aggiunto nelle righe Trend e nella scheda Analisi tecnica un breakdown 'Motivo segnale' con componenti CM, CT, copie, listing, confluenza, freschezza e rischio movimento avanzato.
- Aggiunti in Trend i filtri Qualita segnale: Tutti, Early puliti, Confermati, Rischiosi, Calo copie, CM + CT e Freschi.
- Aggiunto in Trend il filtro Qualita segnale Profilo forte, basato sul backtest operativo della Finestra early, per isolare i segnali acquistabili da quelli solo tecnici.
- Aggiunta in Trend la classificazione operativa dei segnali early: Profilo forte, Monitorare, Borderline e Rischioso/tardi, visibile sia nella lista sia nell'analisi tecnica.
- Aggiunta in Trend la Sintesi operativa della Finestra early con conteggio Profilo forte/Monitorare/Borderline/Rischiosi, capitale stimato per acquistare una copia dei segnali forti e distribuzione per TCG.
- Estesa la Sintesi operativa Trend con vista Profilo forte piu concreta: percentuale capitale/risultati per TCG, ticket medio e top 5 segnali comprabili ora con accesso diretto all'analisi tecnica.
- Esteso lo script backtest-trend-early-window-pnl con filtri fromDate/toDate per simulare l'acquisto dei segnali in uno snapshot storico preciso.
- Aggiunto lo script analyze-trend-target-windows per misurare ROI CardTrader netto a +7/+15/+30 giorni dalle carte confermate e ricavare target prudenziali.
- Stabilizzato il bootstrap auth client: il provider non resta piu bloccato sul caricamento se Supabase Auth tarda a risolvere la sessione iniziale.
- Aggiornate le pagine deck e museum per leggere i prezzi tramite la nuova API bulk, evitando query dirette duplicate dal client.
- Aggiornate le guide prezzo Cardmarket multi-game per Digimon, Dragon Ball Super, Lorcana, Magic, One Piece, Pokemon, Riftbound e Yu-Gi-Oh!.
- Aggiornato il README con setup PostgreSQL locale, comandi local:postgres e note operative sul fallback a Supabase.
Ottimizzazione venduti eBay
16 giugno 2026Milestones
Outlier eBay esclusiDati Pro protettiMatcher piu pulito
- Aggiunto lo stato excluded_price_outlier per conservare le inserzioni eBay anomale senza usarle nei segnali prezzo.
- Aggiornato refresh_ebay_price_signals con filtro robusto per variante basato su mediana e IQR, separando sample_count, included_count ed excluded_count.
- Esclusi automaticamente dai match validi i chaser pack, mystery pack, booster pack e pack simili che possono contenere il nome della carta ma non rappresentano una singola carta venduta.
- Protette le policy RLS dei sold item globali, dei match price-included e dei segnali ebay_price_signals dietro can_access_pro.
- Aggiornate le pagine Admin Venduti eBay, Admin eBay Price e il pannello Pro della scheda carta per gestire e mostrare gli outlier esclusi.
Venduti eBay e segnali prezzo
15 giugno 2026Milestones
Import venduti eBay automaticoMatch stabile via WantValidazione automatica inserzioniModello globale sold item + match
- Reso automatico l'import dei venduti eBay dalla schermata Watch quando una query viene aperta, rimuovendo la scelta manuale dal bottone Carica venduti.
- Collegati i venduti eBay alla Want associata alla Watch, copiando il soggetto stabile card_print/catalog_product invece di dipendere dal testo modificabile della query.
- Estesa la tabella ebay_sold_listings con attributi prezzo dedicati: language_code, card_state, grading_company, grade, source_reason, match_status e match_confidence.
- Aggiunta validazione automatica delle inserzioni vendute confrontando titolo eBay con nome carta/prodotto, numero carta, set, lingua, stato raw/graded, casa di gradazione e voto.
- Introdotti stati di match auto_verified, needs_review, rejected e pending per separare le inserzioni utilizzabili nei prezzi da quelle importate solo per audit.
- Separato il modello dati in ebay_sold_items globale deduplicato e ebay_sold_item_matches contestuale, cosi la stessa vendita puo essere riusata da piu Want o collezioni con esiti di match diversi.
- Aggiunto feedback venditore strutturato sui venduti eBay e regola price_signal_status per escludere dai prezzi automatici i venditori sotto il 98% di feedback positivo.
- Aggiunta pagina Admin eBay Price per vedere le card print popolate dai venduti eBay, con inserzioni raw per lingua e gradate per casa/voto.
- Aggiunta pagina Pricing per distinguere funzioni gratuite, piano Collector Pro e opzione Power/Shop.
- Aggiunta pagina Admin API interne per documentare route disponibili, metodi, input/output, dipendenze e rischi operativi.
- Migliorata la visualizzazione delle carte in collezione mostrando lingua, condizione e dettagli graded con badge normalizzati e meno ridondanti.
- Estesa la visualizzazione intelligente di lingua, condizione e graded anche a Collection 2.0.
- Aggiunta cache ebay_price_signals con refresh admin per salvare mediane prezzo eBay deduplicate per card print, lingua, raw/graded, casa e voto.
- Trasformata la scheda carta 2.0 in una vista completa con segnali prezzo eBay, venduti eBay inclusi, prezzi e quantita CardTrader e storico Cardmarket.
- Corretta la scheda carta 2.0 per leggere prezzi e venduti dal server, evitando che RLS o policy non applicate nascondano dati gia importati.
- Riorganizzata la scheda carta 2.0 mettendo subito in evidenza mediana eBay, prezzo CardTrader, disponibilita CardTrader, Cardmarket e grafici, con dettagli espandibili per l'analisi.
- Separata la scheda carta 2.0 tra vista Free con soli prezzi medi CardTrader/Cardmarket e pannello Pro autenticato per storico, quantita, segnali eBay e venduti.
- Aggiunti ruoli piattaforma Pro e Business, con Owner come ruolo con accesso completo e gate dedicato can_access_pro per le funzioni a pagamento.
- Mantenuta la scrittura legacy su ebay_sold_listings per compatibilita con la pagina Admin Venduti eBay.
- Aggiunto backfill SQL idempotente per migrare i venduti legacy nel nuovo modello globale item + match.
Scanner 2.0 e ricerca localizzata
8 giugno 2026Milestones
Scanner 2.0 piu veloceCrop carte moderneRicerca localizzata
- Aggiunta pagina Admin Traduzioni carte per visualizzare le traduzioni Magic con nome originale e nome localizzato.
- Estesa la ricerca carte globale e catalogo per trovare le carte anche tramite i nomi tradotti salvati in card_translations.
- Nascosta la pagina dedicata Prodotti 2.0 dalla sidebar, con redirect verso Collection 2.0.
- Estesa la ricerca set globale e catalogo per trovare i set tramite il nome italiano salvato in localized_names.
- Indicizzato nello scanner il set CardTrader ct_4318 e aggiornato lo script scanner:index-test-sets per accettare anche alias ct_* oltre agli UUID interni.
- Reso piu robusto lo Scanner 2.0 caricando l'env server anche nei servizi scanner e mostrando l'errore API reale quando il match fallisce.
- Aggiornata la API Scanner 2.0 per risolvere filtri set ct_* in UUID interni e non nascondere piu gli errori Supabase dietro il messaggio generico.
- Ottimizzata la ricerca embedding dello Scanner 2.0 separando calcolo vettoriale e metadati carta, evitando timeout quando si analizzano tutti i set indicizzati.
- Ridotte le query DB dello Scanner 2.0 durante una scansione riusando in memoria gli embedding gia letti per ogni tipo e filtro.
- Evitata la query globale sugli embedding dello Scanner 2.0: con tutti i set selezionati ora il backend legge gli embedding set-per-set usando gli indici esistenti.
- Migliorato il crop dello Scanner 2.0 per foto di carte su sfondi neutri o tappetini grigi, aggiungendo un candidato dedicato senza rimuovere i fallback esistenti.
- Velocizzata la scansione carta dello Scanner 2.0 limitando i tentativi iniziali ai crop migliori, usando una sola rotazione primaria, riducendo le immagini debug e rendendo l'OCR dettagli opt-in.
- Aggiunta cache in memoria degli embedding scanner indicizzati, con embedding gia parsati e invalidazione sugli upsert, riducendo molto le scansioni successive senza filtro set.
- Rimosso temporaneamente il gate di accesso dalla pagina Scanner 2.0 per consentire test da telefono in ambiente dev.
Admin pianificazione e graded showcase
7 giugno 2026Milestones
Admin pianificazione operativaGraded Showcase avanzatoAccount e profilo community rifinitiNotifiche globaliAdmin logs e feedbackMazzi e Mazzi 2.0Validazione mazzi per TCGLint globale ripulitoFeedback con screenshot
- Migliorata la sezione Admin pianificazione: blocchi piu compatti ed espandibili, salvataggio esplicito, eliminazione persistente, riordino degli script interni e salvataggio delle modifiche ai singoli step.
- Aggiornati i report delle run completate per mostrare nei blocchi Catalogo CardTrader anche i set nuovi trovati o aggiunti.
- Integrato il Graded Showcase in Collection 2.0 con apertura dedicata dalla sezione gradate e lista completa delle slab della collezione.
- Ridisegnato il Graded Showcase con modal piu ricca, selezione della slab, KPI rapidi e render realistici differenziati per PSA, BGS, CGC e GRAAD.
- Rifiniti i render slab: GRAAD con label chiara e pattern esagonale, PSA con bordo rosso marcato senza certificato sovrapposto, BGS con bumper nero e logo separato nella zona trasparente, CGC con label nero-verde.
- Ridisegnata la pagina Account con hero compatta, sessione integrata, avatar in evidenza e layout a due blocchi per profilo e preferenze.
- Migliorata la pagina Profilo Community con anteprima pubblica, stato pubblico/privato, controlli di visibilita piu ordinati e sezione posizione/mappa piu leggibile.
- Aggiunto un centro notifiche globale in alto a destra per nuove inserzioni Watch e richieste di scambio ricevute, con badge, pannello compatto e stato letto salvato localmente.
- Corretta l'hydration del centro notifiche renderizzandolo solo dopo il mount client, evitando mismatch tra server e browser.
- Aggiunta sezione Admin Log modifiche con tabella admin_activity_logs, RPC dedicate, timeline filtrabile e tracciamento delle modifiche admin su ruoli, metadati catalogo e categorie prodotto.
- Aggiunta sezione Admin Feedback con tabella user_feedback_reports, RPC di lettura admin, filtri per stato/tipo e cambio stato rapido delle segnalazioni.
- Aggiunto widget feedback globale in basso a destra per permettere agli utenti autenticati di inviare bug, richieste di modifica, idee e contesto della pagina corrente.
- Aggiunta la nuova gestione Mazzi con schema Supabase dedicato, RLS owner-only, lista mazzi, creazione/modifica/eliminazione, dettaglio mazzo, sezioni main deck, sideboard e mancanti/wishlist.
- Integrata la gestione Mazzi con la collezione scansionata: ricerca carte possedute, aggiunta manuale di carte non possedute, merge automatico delle duplicazioni, quantita, spostamento sezione, copie mancanti e statistiche di completamento.
- Ridisegnata l'interfaccia Mazzi in stile operativo e aggiunta Mazzi 2.0 nel namespace /v2 con hero dedicata, metriche aggregate, pannello creazione compatto e card mazzo con progress bar.
- Estesa la gestione Mazzi con formati strutturati per Magic, Pokemon e Yu-Gi-Oh!, sezioni dinamiche per formato e warning di validazione base su limiti main deck, sideboard, extra deck, commander e copie massime.
- Resa obbligatoria la scelta del TCG in creazione mazzo e filtrata la selezione gioco ai soli TCG supportati dalla configurazione mazzi.
- Aggiornato il dettaglio mazzo per filtrare le carte proposte in base al TCG scelto e per mantenere visibili eventuali sezioni legacy gia salvate.
- Ripulito il lint globale del progetto correggendo errori React/JSX puntuali, senza refactor funzionali, e mantenendo verdi lint e typecheck.
- Esteso il widget feedback con allegato screenshot opzionale su Supabase Storage e anteprima cliccabile nella sezione Admin Feedback.
- Esteso il Log modifiche admin con eventi per avvio, completamento, fallimento e stop richiesto degli import, piu avvio e spegnimento del Watch Bot.
- Aggiunta la pagina Prodotti 2.0 per visualizzare i prodotti posseduti e gestire quantita/rimozione, con accesso dedicato dalla sidebar Collector 2.0.
- Aggiornata Collection 2.0 con controlli compatti per aumentare, diminuire o rimuovere carte e prodotti sealed dalla collezione.
- Corretto l'errore runtime Performance.measure nella scheda prodotto 2.0 legato alla label della page function.
- Resa piu robusta l'apertura dei prodotti sealed dalla Collection 2.0 verso la scheda prodotto 2.0.
- Aggiunti modifica compatta e rimozione per le carte graded in Collection 2.0, con editor espandibile per stato, casa e voto.
- Estesa la pagina Admin Metadati catalogo per mostrare i localized_names salvati su ogni set e nel dettaglio metadati.
Collector 2.0: collection, valuation, convention e museum
6 giugno 2026Milestones
Prezzi source_id multi-varianteCollection 2.0 completamento setWantlist 2.0 polishValutazione 2.0 hero unificataConvention 2.0 operativaMuseum 2.0 emotional galleryHome 2.0 command center
- Aggiunta migrazione rapida prezzi con source_id su price_current, price_history e price_snapshots, indici unici aggiornati per distinguere varianti Cardmarket/CardTrader e vista price_metrics_current estesa con source_id.
- Raffinata la scheda carta per mostrare correttamente prezzi Cardmarket multi-variante in blocchi separati e ordinati in modo deterministico per source_id.
- Aggiornata Collection 2.0 con filtro TCG, set espandibili, caricamento di tutti i set, nomi set completi, conteggi stabili e card mancanti ordinate nel punto corretto del set.
- Aggiunto stato visuale dei set completi con bordo e badge dedicati, piu barre di completamento coerenti anche prima dell'espansione del set.
- Migliorata l'impaginazione di gradate e prodotti sealed in Collection 2.0, mostrando tutti gli elementi senza contenitori scrollabili inutili e con layout piu compatto.
- Aggiornata la hero di Collection 2.0 con KPI totali fissi per carte, gradate e sealed, indipendenti dai filtri attivi.
- Rimosso il contenitore esterno della Wantlist 2.0 e uniformati card, font, dimensioni, bordi e spaziature agli altri layout Collector 2.0.
- Unificata la hero di Valutazione 2.0 con il blocco valori e filtri, mantenendo la disposizione precedente ma con bordi e raccordi coerenti.
- Reso il radar valore piu compatto rimuovendo la colonna azione, rendendo cliccabile la carta e correggendo l'overflow orizzontale.
- Aggiunti filtri prodotto effettivi in Valutazione 2.0 e mostrate le immagini dei prodotti, rendendo operativi anche i filtri dupes, trade e want.
- Creata Convention 2.0 nel namespace v2 e aggiunta alla sidebar Collector 2.0.
- Migliorata Convention 2.0 con ricerca piu precisa, supporto ai prodotti sealed, card gia selezionate visibili come ON, risultati sopra gli elementi selezionati e card compatte su griglia a due colonne.
- Uniformato lo stesso comportamento compatto anche ai want item di Convention 2.0 e rimosso il blocco overview, spostando il comando Open showcase in una posizione piu utile.
- Ridisegnata Museum 2.0 come galleria emozionale: scena principale con carte in cornice, spotlight dei pezzi migliori, prodotti sealed compatti e modalita Boxed/Full dedicate.
- Collassata la search bar in Museum 2.0 lasciando una sola icona per riaprirla, cosi la galleria usa piu spazio visivo.
- Confermata la versione Boxed di Museum 2.0 e rifinita separatamente la versione Full con carte grail/preferite piu grandi, rail gradate trasparente, disposizione piu densa e migliore uso dello spazio verticale.
- Trasformata /v2 da redirect a Home 2.0 operativa con command center, KPI in hero, shortcut alle sezioni principali, ultime aggiunte, focus preferite e set quasi completati.
- Reso lo switch Classic/Collector 2.0 una preferenza di navigazione senza redirect automatico, cosi la pagina cambia solo quando si clicca una voce della sidebar.
Collector 2.0 e dashboard v2
2 giugno 2026Milestones
Community 2.0 promossaCommunity 2.0 width tuningValutazione 2.0 previewValutazione 2.0 chart polishLayout mode switchValutazione 2.0 full widthNamespace Collector 2.0Scanner 2.0 namespace v2Wantlist 2.0 previewWatch 2.0 previewCustom Binders 2.0 previewAdmin metadati catalogoControllo Watch Bot adminGestione ruoli utentiTrend riservato adminRoute v2 isolateConsolidamento accessi
- Promossa Community 2.0 a nuova pagina /community e mantenuta la versione precedente raggiungibile da /communityold.
- Rimosso il padding laterale duplicato dalla nuova Community 2.0, lasciando la larghezza gestita dal contenitore globale dell'app.
- Creata preview /valuationv2 con layout dashboard operativo: summary alto, radar valore tabellare, salute prezzi, top mover, opportunita e trend storico, riusando la logica dati della Valutazione attuale.
- Rifinito il grafico storico di /valuationv2 con area fill, griglia, label compatte, range min/max e tooltip hover piu leggibile.
- Sostituito lo switch tema in alto a destra con il controllo Boxed/Full per passare dal layout centrato alla vista full page persistente.
- Rimosso il limite interno di larghezza da /valuationv2, cosi in modalita Full la dashboard usa tutta l'area disponibile.
- Aggiunta la sezione /v2 con Community 2.0 e Valutazione 2.0, piu uno switch in sidebar per passare tra navigazione Classic e Collector 2.0.
- Aggiunto alias /v2/scanner per mantenere attiva la navigazione Collector 2.0 quando si apre Scanner 2.0.
- Creata preview /v2/wants con dashboard operativa per watch attive, target, filtri, priorita, insight laterali e prodotti desiderati, mantenendo /wants come versione classica.
- Allineata Wantlist 2.0 ai token Collector per background, hover e bordi, mantenendo separata la versione classica.
- Creata Watch 2.0 su /v2/watch con layout radar, KPI, filtri, gruppi query e insight laterali, mantenendo /watch come versione classica.
- Aggiunto alias /v2/wants/watch/[id] per modificare le query watch restando nel namespace Collector 2.0.
- Aggiornata la sidebar Collector 2.0 con Watch 2.0 su /v2/watch.
- Creata Custom Binders 2.0 su /v2/binders con libreria binder, workbench slot, placement panel e quick find, mantenendo /collection/binders come versione classica.
- Aggiunta sezione admin /admin/catalog-metadata per gestire copertine dei game, copertine dei set, categoria set e data di pubblicazione, con salvataggio tramite RPC admin dedicate.
- Aggiunto controllo admin del Watch Bot con avvio/stop dal pannello, parametri interval/limit query/item, rimozione lock temporaneo e fallback Windows per fermare il worker locale.
- Aggiunta gestione owner dei ruoli piattaforma: user standard, tester con accesso Collector 2.0, admin con accesso admin e owner con assegnazione ruoli.
- Limitata la pagina Trend agli utenti admin/owner e nascosta la voce di menu agli utenti senza permessi admin.
- Isolate le versioni nuove Community e Scanner nel namespace /v2, trasformando /community e /scanner in redirect verso le versioni classiche e nascondendo Admin dalla sidebar ai non-admin.
- Consolidati ruoli, gating Collector 2.0, visibilita Admin/Trend e separazione tra percorsi classici e namespace /v2 per chiudere la sessione con una navigazione coerente.
Hardening prezzi Cardmarket
1 giugno 2026Milestones
Cardmarket price history hardeningAccount e profilo app separatiProfilo Community dedicatoNavigazione globale ripulitaAchievements spostati nei Set GoalsNavigazione mobile focalizzataTypeScript globale ripulitoCommunity discovery rifocalizzataCommunity trade requests MVPCommunity richieste scambio inboxCommunity v2 previewCommunity v2 accessibileCommunity v2 layout coerenteCommunity v2 hero rifinitaCollection count hardeningMuseum load hardeningValuation load hardening
- Aggiunto audit Cardmarket price refs per confrontare gli idProduct importati con gli ID Cardmarket dichiarati sulle carte e produrre report dei mismatch.
- Aggiunto rebuild Cardmarket price history da archivi locali, con import cronologico, clear batched e supporto a range date/giochi per rigenerare current e history.
- Importer prezzi Cardmarket reso piu difensivo: non usa piu metadata.id/source_id come Cardmarket ID e valida external_refs e mappe locali contro gli ID Cardmarket espliciti dell'entity.
- Vista price_metrics_current corretta per separare prezzo valore da floor: trend/avg alimentano base_value_price e low resta base_floor_price.
- Ricostruita la base Cardmarket current/history dagli archivi price guide, lasciando solo pochi mismatch residui low-value da gestire con manutenzione completa futura.
- Aggiunto link da Scan Beta allo Scanner 2.0 su /scanner per rendere piu rapido il passaggio al nuovo flusso visual search.
- Ridisgnata la pagina Account: profilo app, avatar, username, sessione e preferenze collezione sono separati dal profilo Community.
- Creato schema user_profiles con bucket avatar Supabase e RLS owner-only per gestire immagine profilo e identita app.
- Spostato il profilo Community su /community/profile, mantenendo posizione/mappa e visibilita pubblica fuori dalle impostazioni Account.
- Aggiunto menu utente nel top bar con avatar circolare, nome utente, accesso ad Account/Profilo Community e logout.
- Ripulita la sidebar rimuovendo Settings/Profile, Favorites e Achievements come voci principali.
- Spostati gli achievements dalla pagina Collection alla pagina /collection/goals insieme ai Set Goals, rimuovendo spazio e calcoli dedicati dalla collezione.
- Rinominato il gruppo sidebar Profile in System e ridotta la bottom navigation mobile a Home, Search, Collection, Scanner e Community.
- Risolti gli errori TypeScript globali su relazioni Supabase, returnTo nullable, carrello selezioni e script import CardTrader.
- Rifocalizzata la pagina Community sui match reali: filtri gioco applicati a disponibili/wantlist, match in evidenza prima della mappa e rimosse feature mock come gruppi/negozi.
- Aggiunto MVP delle richieste scambio Community con tabella community_trade_requests, RLS per utenti coinvolti e form di proposta dal profilo pubblico utente.
- Aggiunta sezione Richieste scambio nella pagina Community con inbox ricevute/inviate e azioni rapide per accettare, rifiutare o annullare le proposte.
- Creata pagina sperimentale /communityv2 per confrontare un redesign completo della Community senza rimuovere la versione attuale.
- Riallineata /communityv2 al mockup dashboard full-page, usando elementi Collector, pannelli tondi e proporzioni piu ampie fuori dal contenitore centrale.
- Aggiunti margini interni alla dashboard Community v2 e riutilizzata la mappa a tile OpenStreetMap della Community attuale.
- Corretta Community v2 per distinguere le colonne Ha/Cerca usando disponibilita e wantlist reali dell'utente pubblico, e abilitata la lettura degli avatar dei profili community pubblici.
- Aggiunto accesso diretto a /communityv2 dalla toolbar della Community attuale per confrontare rapidamente le due versioni.
- Rientrata Community v2 in un contenitore centrato e coerente con le altre pagine, mantenendo una larghezza massima ampia per mappa e tabelle.
- Sostituito l'header minimale di Community v2 con la scheda introduttiva della Community attuale: titolo Collector Community, stato posizione e azioni rapide.
- Rimosso il collo di bottiglia nel caricamento della pagina Collection: gli item vengono letti a pagine da 1000 righe e il totale usa il count exact, evitando conteggi troncati quando la collezione cresce.
- Applicata la stessa logica paginata alla pagina Museum per caricare tutte le carte e tutti i prodotti della collezione, con totali set letti a chunk invece di fermarsi ai primi risultati.
- Applicato il caricamento paginato anche alla pagina Valutazione per includere tutte le carte, tutti i prodotti e tutta la wantlist nei calcoli, con lookup dei prodotti spezzato a chunk.
Scanner e copertura prezzi admin
31 maggio 2026Milestones
Copertura prezzi adminScanner visual search piu robustoTrend cache e finestre operativeData quality e RPC ottimizzate
- Aggiunta pagina admin /admin/price-coverage con grafico per TCG della copertura Cardmarket e CardTrader su carte, prodotti e totale catalogo.
- Aggiunta RPC admin_get_price_coverage() in scripts/sql/admin.sql per calcolare in Postgres i conteggi di catalogo, fonte prezzo e copertura con entrambe le fonti.
- Scanner visual search esteso con crop prospettico conservativo dal bordo giallo, utile per raddrizzare foto storte senza sostituire i crop gia affidabili.
- Ottimizzata la RPC admin_get_price_coverage() con CTE materializzate e indici parziali sui prezzi validi Cardmarket/CardTrader per ridurre i timeout della pagina Copertura prezzi.
- Migliorata la UI catalogo con preview prodotti nelle sezioni admin, home, collezione e wantlist, piu una sezione preferiti nel museum.
- Aggiunta lightbox animata riutilizzabile per immagini carta e prodotto, con risoluzione automatica delle immagini CardTrader da preview a qualita piena.
- Suddiviso il caricamento della copertura prezzi per TCG con RPC admin_get_price_coverage_for_game(), avanzamento progressivo e gestione dei risultati parziali.
- Rifattorizzata la RPC di copertura prezzi per i TCG grandi separando scope diretti/via set, riducendo OR e CTE materializzate che causavano timeout su Pokemon e Magic.
- Ridotta la concorrenza del caricamento copertura prezzi e configurato statement_timeout dedicato sulle RPC di copertura per evitare timeout dei TCG piu grandi.
- Ottimizzata la RPC admin_get_data_quality() anticipando il campionamento sui check piu pesanti e aggiungendo timeout dedicato.
- Ottimizzato il caricamento della pagina Trend con indice price_history per lookup entity/captured_at, timeout RPC dedicati e limite iniziale piu leggero.
- Aggiunta cache price_trend_movers_cache e lettura cached per la sezione movers della pagina Trend, evitando il ricalcolo live dello storico a ogni apertura.
- La pagina Trend filtra le analisi prezzo su una fascia operativa, escludendo micro-prezzi e outlier oltre 1000 EUR.
- Ricostruita la pagina Trend con una sola RPC attiva per vista, gestione cache vuota e caricamento metadati separato.
- Estesa la cache Trend con finestre 1/3 giorni, punti prezzo intermedi in JSON e disponibilita CardTrader da quantity_total/valid_quantity_total.
Scanner visual search POC
30 maggio 2026Milestones
Scanner 2.0 visual searchSchema scanner_visual_searchEmbedding e ranking immaginiPreprocessing crop e OCR assistito
- Aggiunta pagina /scanner per caricare una singola carta, filtrare i set indicizzati e visualizzare candidati con conferma manuale.
- Creato schema scanner_visual_search con embedding carte, scansioni e feedback, piu script scanner:index-test-sets per indicizzare i set test configurati via SCANNER_TEST_SET_IDS.
- Implementati embedding full-card e artwork basati su fingerprint immagine locale con Sharp/Jimp e ricerca cosine in memoria sui set test.
- Aggiunto preprocessing immagini con crop carta, crop artwork, correzione rotazione, preview del flusso immagini e toggle remove.bg per confrontare il comportamento con e senza rimozione sfondo.
- Migliorato il matching con crop server-side multipli e ranking aggregato tra crop, rotazioni, full-card e artwork, correggendo i casi di sfondi difficili e artwork condivisi.
- Integrato reranking OCR opzionale nello scanner visuale: il client legge crop mirati per nome, collector number, fascia bassa e area set/edizione, e l'API usa questi hint per distinguere stampe con artwork condiviso.
- Il collector number OCR viene normalizzato anche nei formati zero-padded del DB, ad esempio 15/62 -> 015 e 27/62 -> 027, per separare holo/non-holo quando il numero identifica la variante.
- Il flusso immagini dello scanner mostra anche i crop OCR usati, cosi si puo verificare dove il parser sta leggendo nome, numero e dettagli di stampa.
Community geolocalizzata e mappa utenti
29 maggio 2026Milestones
Profili Community con posizione controllataGeocoding automatico da indirizzoMappa utenti interattivaBase eventi e incontri
- Profilo Community esteso con posizione privata, posizione pubblica approssimata e raggio incontri configurabile, separando i dati sensibili da quelli visibili agli altri utenti.
- Aggiunta tabella `user_community_private_locations` con RLS owner-only per salvare indirizzo, citta, regione, paese, CAP e coordinate private senza esporle pubblicamente.
- Aggiunta API autenticata `/api/community/geocode` per calcolare automaticamente latitudine/longitudine da citta, regione, paese e CAP tramite geocoding, senza chiedere all'utente di inserire coordinate manuali.
- Pagina `/community` aggiornata con pannello posizione: salvataggio indirizzo, geocodifica, scelta visibilita pubblica, label pubblica e raggio incontri.
- Mappa Community resa interattiva con tile reali, zoom, pan, reset vista, marker utenti e label geografiche piu leggibili.
- Rendering mappa corretto su pan/zoom usando proiezione Web Mercator coerente, evitando marker sfalsati rispetto alla posizione reale.
- Stile mappa aggiornato con tile OpenStreetMap filtrati per integrarsi meglio con il tema dell'app, mantenendo attribution e URL tile configurabili via env.
- Aggiunta base dati per eventi Community e partecipanti, utile per organizzare scambi, incontri e appuntamenti legati alla mappa utenti.
Community, prodotti sealed e admin operativo
28 maggio 2026Milestones
Community pubblica controllata da privacyProdotti sealed gestibili come entita di collezioneRicerca prodotti dedicataValutazione prodotti separata dalle carteMuseum centrato sulle carte con riga prodotti compattaAdmin operativo con run, schedule e Watch Bot
- Nuova sezione `/community` con tab `Utenti`, `Disponibili` e `Wantlist` per visualizzare profili pubblici, carte/prodotti disponibili per vendita/scambio e wantlist pubbliche.
- Aggiunto profilo Community con privacy esplicita: `Profilo pubblico`, `Mostra vendita/scambio` e `Mostra wantlist` sono controlli separati.
- Creata migration `scripts/sql/community.sql` con tabella `user_community_profiles`, trigger `updated_at`, indici e policy RLS per esporre solo dati resi pubblici.
- Community riusa le selezioni gia esistenti di Convention: `user_convention_trade_items` per vendita/scambio e `user_convention_wants` per wantlist pubblica, evitando una seconda tabella marketplace.
- La pagina Community esclude l'utente corrente dalle liste pubbliche, lasciando il proprio profilo modificabile solo nel pannello personale.
- Navigazione aggiornata con voce `Community` nella sidebar e nella bottom navigation mobile.
- Pagina `/catalog/products` aggiunta per cercare prodotti sealed/non-card con filtri game/categoria, prezzi Cardmarket/CardTrader e azioni rapide collezione/wantlist.
- Azioni prodotto stabilizzate usando il provider auth globale, evitando chiamate `auth.getUser()` per ogni card prodotto e il relativo lock contention Supabase.
- Pagina `/collection` ripulita dai riferimenti prezzo delle carte e concentrata su inventario, quantita, duplicati, binder e gestione prodotti.
- Pagina `/valuation` estesa con prodotti sealed in sezione separata dalle carte, KPI dedicati, top prodotti e link alle schede prodotto.
- Scheda prodotto singolo estesa con prezzo Cardmarket, prezzo CardTrader e grafico storico come per le carte.
- Pagina `/museum` aggiornata con prodotti sealed in una riga compatta in fondo, lasciando in risalto Grails, set vicini al completamento e ultime carte aggiunte.
- Pagina `/guide` aggiornata per includere Community, prodotti sealed, schede prodotto, valutazione prodotti e flussi operativi attuali.
- Aggiunto comando `sync:cardtrader:game:simple`: sync lineare per game CardTrader che importa set, carte e prodotti usando `sets.source/source_id`, saltando gli elementi gia presenti.
- Aggiunta sezione `/admin` protetta da `admin_users`, con KPI catalogo, ultime carte inserite, ultimi import, stato Watch aggregato, quota API eBay, utenti registrati e categorie CardTrader saltate.
- Aggiunta pagina `/admin/products` per filtrare i prodotti sealed per TCG/categoria e spostarli manualmente tra sottocategorie con drag and drop admin-only.
- Aggiunta pagina `/admin/data-quality` con controlli admin-only su prodotti/carte senza immagini, set senza carte, duplicati source/source_id e copertura prezzi.
- Aggiunto Import Control Center admin per lanciare da UI il sync catalogo CardTrader whitelisted, con dry-run/import reale, parametri game/max set/delay, solo set senza carte, output scrollabile e registrazione in admin_import_runs.
- Dry-run CardTrader arricchito con report di verifica espandibile per set: carte/prodotti da inserire, gia presenti, categorie saltate e riepilogo aggregate per controllare l'import prima del run reale.
- Category map CardTrader modificabile da admin: caricamento/salvataggio di recommendedCardCategoryIds, recommendedSealedCategoryIds e mapping category_id -> product_category_slug direttamente dalla UI.
- Import Control esteso ai prezzi CardTrader e Cardmarket, con job whitelisted, dry-run, limiti operativi, raw snapshots opzionali, price types e logging esito in admin_import_runs.
- Importer prezzi Cardmarket dotato di CARDMARKET_PRICE_DRY_RUN per verificare matching, conteggi e righe prezzo previste senza scrivere price_current, price_history o price_snapshots.
- Aggiunta pagina admin dedicata alle run registrate, con stato evidenziato, dettaglio JSON apribile/copiabile, informazioni specifiche per sync Cardmarket e tempi di inizio/fine con durata totale.
- Aggiunta pagina admin di pianificazione import con calendario mensile cliccabile, assegnazione di script o blocchi ai singoli giorni e creazione di blocchi sequenziali riutilizzabili nello schedule.
- Aggiunta dashboard admin `/admin/watch` per analizzare stato Watch Bot, quota eBay, query attive/stale/duplicate, risultati ricevuti e possibili risparmi di chiamate tramite deduplicazione interna.
CardTrader prezzi + Trend operativo
27 maggio 2026Milestones
Prezzi CardTrader integratiTrend operativo multi-modalitaPerformance pagine core migliorataGuida piattaforma introdotta
- Pagina `/trend` estesa con modalità operative separate: Movimenti, Occasioni, Momentum e Squeeze per leggere rialzi, sconti rispetto al minimo e accelerazioni su medie Cardmarket.
- Aggiunte RPC SQL dedicate per opportunità prezzo: `get_price_opportunities()`, `get_price_supply_squeeze()` e `get_price_momentum_opportunities()`.
- Vista `price_metrics_current` arricchita con metriche Cardmarket `avg1`, `avg7`, `avg30` e relative varianti/foil per supportare segnali di momentum senza leggere tutto lo storico.
- Pagina `/trend` resa più stabile lato UX: cache dei risultati per modalità/filtro e fallback più chiari quando una RPC non è disponibile o va in timeout.
- Nuovo importer CardTrader prezzi: legge `external_refs(card_print)`, interroga marketplace per expansion/blueprint, filtra listing validi Mint/Near Mint e salva una riga compatta in `price_current` con `source='cardtrader'`.
- Importer CardTrader configurato per non scrivere `price_history`: lo storico verrà gestito con una funzione dedicata come per il price guide Cardmarket.
- Import CardTrader normalizzato su `captured_at` giornaliero a mezzanotte UTC per evitare più prezzi nello stesso giorno.
- Scheda carta aggiornata con riquadro `Prezzi CardTrader`: minimo valido, mediana valida, listing/quantità validi, seller, listing Zero e messaggi distinti per carta mappata senza prezzo o mapping assente.
- Scheda carta riorganizzata: rimosso il riquadro dettagli e spostato CardTrader accanto a Cardmarket per confronto immediato.
- Scheda prodotto singolo riallineata allo standard della scheda carta: back floating, immagine sticky, header full-width, riepilogo laterale e sezioni coerenti per prezzi e dettagli prodotto.
- Nuova pagina `/guide` nella stessa area del changelog: panoramica informativa della piattaforma, funzionalita principali e descrizione operativa delle pagine.
- Performance pagina carta migliorata: la query `external_refs` CardTrader viene eseguita solo come fallback quando manca il prezzo CardTrader, riducendo il render server delle schede gia prezzate.
- Performance dettaglio set migliorata: rimossa la query prezzi debug dalla lista carte, parallelizzati count/carte/prodotti sealed e stabilizzati i provider owned/want della vista set.
- Performance home migliorata: caricamenti iniziali parallelizzati e calcolo completion dei set recenti consolidato in batch invece di query ripetute per singolo set.
- Performance `/trend`, `/valuation` e `/collection` migliorata: rimosse query `count: exact` non necessarie, ridotte chiamate duplicate e parallelizzati i chunk prezzo/storico dove possibile.
- Script `scripts/sql/post_import_optimize.sql` esteso con indici per ricerca, catalogo set, collection, wantlist, convention, external refs e statistiche planner post-import.
Trend prezzi globale
25 maggio 2026Milestones
Tool Trend globaleRPC mover su storico compattoCopertura prezzi auditabileCarte e prodotti nello stesso motore trend
- Nuova pagina tool /trend nella sezione Tools: mostra trend prezzi Cardmarket per carte/prodotti con periodo, Base/Variante, salite, discese e link diretti a schede catalogo.
- Aggiunta funzione SQL get_price_trend_movers() per calcolare in Postgres i mover globali e i contatori aggregati (total_movers, salite, discese, delta medio) senza campionamento lato browser.
- Aggiunti indici idx_price_history_trend_lookup e idx_price_current_trend_lookup per rendere veloce il calcolo trend su price_history e price_current.
- Pagina /trend ottimizzata: carica una prima lista leggera da price_current e usa la RPC per contatori globali, evitando paginazione client su centinaia di migliaia di entita.
- Pipeline prezzi estesa con audit audit:cardmarket:prices, collegato allo sync Cardmarket, per controllare copertura prezzi e anomalie base-zero/variante.
Valuation UI density
24 maggio 2026Milestones
Valuation piu compattaAnalisi Base/FoilOpportunita operativeExport CSV
- Sezione driver variazione prezzo in `/valuation` resa più compatta: sostituita la tabella larga con lista a due colonne, meno righe e riepilogo sintetico per carta.
- Pagina `/valuation` estesa con selettore Base/Foil: KPI, grafico, top card e driver variazione possono usare `trend_price` oppure `trend_foil_price`.
- Driver variazione prezzo separati in due colonne dedicate a maggiori aumenti e maggiori discese.
- KPI principali di `/valuation` estesi con delta di periodo per valore totale, duplicati e trade/sell, calcolati dal primo storico disponibile nel range selezionato.
- Pagina `/valuation` estesa con opportunità operative: wantlist in calo e trade/sell in rialzo, rispettando periodo, game e Base/Foil.
- Opportunità operative di `/valuation` rese azionabili con link rapidi a scheda carta, wantlist e trade/sell, filtri soglia e delta KPI anche per il valore wantlist.
- Pagina `/valuation` estesa con breakdown della variazione per game e set, calcolato dagli stessi driver del grafico e ordinato per impatto sul delta.
- Grafico di `/valuation` reso selezionabile per metrica (`Totale`, `Dupes`, `Trade/Sell`, `Wantlist`) e opportunità operative riorganizzate in tab `Acquisto`, `Vendita`, `Rischio`.
- Aggiunti export CSV in `/valuation` per breakdown, driver variazione e opportunità operative.
- Pagina `/wants` riorganizzata separando le carte con watch attiva in una sezione dedicata e raggruppando il resto per set con righe compatte.
- Importer Cardmarket aggiornato per normalizzare i prezzi *-holo nei campi Variante/Foil e ignorare gli zeri base quando esiste una variante valida.
Price History compatto + UI andamento prezzi
23 maggio 2026Milestones
Schema prezzi compattoStorico operativo su price_historyGrafici prezzo su dettaglio cartaValuation collegata allo storico
- Schema prezzi esteso con `price_current` (una riga corrente per entità con tutte le metriche prezzo) e `price_history` (storico compatto per import/captured_at), mantenendo `price_snapshots` come raw ingest compatibile.
- Importer prezzi aggiornato per popolare `price_current` e `price_history` con upsert compatti e raw ingest disattivato di default tramite `CARDMARKET_WRITE_RAW_SNAPSHOTS=false`.
- Aggiunta funzione SQL `sync_compact_prices_from_snapshots()` per backfill delle nuove tabelle compatte partendo dagli snapshot già importati.
- Importer prezzi reso più resiliente sugli upsert compatti: se un batch bulk fallisce, viene diviso in blocchi più piccoli per recuperare le righe valide e isolare solo gli errori reali.
- Output console dell'import prezzi alleggerito: di default stampa avanzamento compatto ogni 10k righe e summary finale; il log dettagliato resta disponibile con `CARDMARKET_VERBOSE=true`.
- Script SQL prezzi ripulito dal vecchio rollup giornaliero raw: lo storico operativo resta concentrato su `price_history`, mentre `price_current` mantiene il valore corrente compatto.
- Aggiunto comando unico `sync:cardmarket:prices` per archiviare i price guide correnti, scaricare i nuovi file e lanciare gli import multi-game con una data business unica.
- UI prezzi migrata dalle snapshot raw alle tabelle compatte: catalogo, dettagli carta/prodotto, collezione, museo e valutazione leggono `price_current` per il valore corrente e `price_history` per lo storico.
- Dettaglio carta esteso con grafico dell'andamento prezzo `trend`, basato su `price_history`, con ultimo valore, minimo, massimo e delta percentuale.
- Grafico prezzo nel dettaglio carta esteso con selettore Base/Foil per confrontare lo storico `trend_price` e `trend_foil_price`.
- Pagina `/valuation` estesa con sezione driver variazione prezzo: mostra le carte in collezione che hanno contribuito ad aumenti o discese del valore nel periodo selezionato.
Price Pipeline hardening + multi-game import ops
22 maggio 2026Milestones
Import prezzi multi-game stabilizzatoMatch resolver corretto su metadata arrayRetry automatici su errori transient DB/PostgRESTWorkflow operativo unico per export/import per game
- Refactor di `scripts/import-cardmarket-prices.ts` per supportare una pipeline di matching a livelli: map file carte, map file prodotti, `external_refs` e fallback metadata opzionale.
- Aggiunti flag env operativi: `CARDMARKET_ENABLE_DB_METADATA_FALLBACK`, `CARDMARKET_PRELOAD_PAGE_SIZE`, `CARDMARKET_REQUEST_TIMEOUT_MS` per gestire carichi piccoli/grandi senza timeout.
- Corretto bug critico nel fallback metadata: prima veniva usato solo il primo valore di `card_market_ids`; ora vengono processati tutti gli ID dell'array (riduzione forte degli unmatched nei run reali).
- Aggiunto retry con exponential backoff su query DB e upsert (errori transient di schema cache/fetch/timeout) con nuove env `CARDMARKET_DB_RETRY_MAX_ATTEMPTS` e `CARDMARKET_DB_RETRY_BASE_DELAY_MS`.
- Consolidata la strategia di dedup import su `price_snapshots` tramite chiave conflitto `entity_type,entity_id,source,price_type,captured_at` e `captured_at` stabile dal file guide.
- Introdotto workflow completo per game switch: export mapping card/product per slug, import prezzi per game e comandi standardizzati per reset env e run sequenziali.
- Aggiunto downloader price guide con manifest fallback (`data/cardmarket/price_guide_links.json`) per gestire blocchi HTTP sulla pagina indice e mantenere download mirati ai game presenti nel DB.
- Aggiornata UI catalog/card per visibilità prezzi e indicatori di presenza prezzi, con fix di stabilità layout su card grid (riduzione glitch/spostamento bottoni).
- Documentate verifiche di copertura match per game (guide_total/db_total/matched/unmatched) per distinguere chiaramente gap di mapping da errori di pipeline.
- Collection overview estesa con metriche valore basate su prezzo `trend`: valore totale carte possedute, valore duplicati calcolato solo sulle copie oltre la prima e valore carte marcate come disponibili in trade/sell (Convention Mode).
- Museum aggiornato: sezione Grails ordinata per valore `trend` decrescente (carte più costose in cima) con prezzo trend visibile su ogni card.
- Collection overview estesa con card `Valore Wantlist`: somma del prezzo trend sulle carte desiderate (`user_wants`), usando `max_quantity` quando valorizzato.
- Nuova pagina analitica `/valuation` con KPI dedicati (valore totale, dupes, trade/sell, wantlist, copertura prezzi), top carte per valore e breakdown per gioco/set.
- In `/valuation` aggiunto grafico in testata con andamento del valore collezione nel tempo (serie `trend`), con range min/max e confronto inizio/fine periodo.
- In `/valuation` aggiunti controlli operativi per analisi: switch periodo `30d/90d/180d` e filtro per game, con aggiornamento dinamico di grafico e KPI.
- Nel grafico di `/valuation` aggiunto indicatore delta percentuale del periodo selezionato (`+/- %`) con colore up/down.
- Aggiunta modalità preview senza login per verifiche rapide UI: `/collection?preview=1` e `/valuation?preview=1` (con dataset demo nel grafico di valutazione).
- Navigazione aggiornata con voce `Valutazione` nella sezione Tools della sidebar.
Watch Worker diretto + UI Watch configurabile
19 maggio 2026Milestones
Worker Watch in-repoLoop schedulato con lock anti-overlapRisultati raggruppati per queryWatch configurabile da wantlist
- Sostituito il flusso legacy bridge/adapter con worker diretto in-repo scripts/python/watch_worker.py (eBay -> Supabase).
- Il worker ora legge user_watch_queries attive, salva su user_watch_results via RPC e aggiorna last_run_at/last_error.
- Aggiunti lock anti-overlap e modalita loop (--loop --interval-seconds) per schedulazione continua.
- Implementati filtri operativi nel worker: region, min_feedback, min_feedback_percent, max_age_days, oltre a bin_only, min/max_price, country.
- Nuova pagina /watch con filtri, ordinamento, KPI e preview immagine inserzione da raw_payload.
- Risultati Watch ora raggruppati visivamente per query attiva, inclusa vista affiancata per multi-query.
- Aggiunta configurazione watch per singola want in app/wants/watch/[id]/page.tsx con edit query/site/target/currency/active.
- Aggiunti pulsanti Configura watch nella wantlist (card e prodotti) per creare/modificare query partendo dalla want.
Collector Core + Collector Watch Integration Sprint
18 maggio 2026Milestones
Inizio sprint: 2026-05-18Fine sprint: 2026-05-25Unificazione piattaforma Core + WatchPriorità strategica massima della settimana
- Avviato blocco separato e prioritario per integrare `Collector Core` e `Collector Watch` come unico sistema operativo del progetto.
- Obiettivo del blocco: collegare gestione collezione, monitoraggio, workflow operativi e future automazioni sotto una roadmap unica.
- Questo sprint viene trattato come iniziativa principale rispetto alle altre attività in corso.
- Aggiunto scaffold tecnico iniziale per l'integrazione: script Python `scripts/python/collector_watch_bridge.py` che esporta `user_wants` da Supabase in payload JSON normalizzato per Collector Watch.
Convention / Trade Mode MVP
18 maggio 2026Milestones
Setup evento e budgetSelezione trade/sell dalla collectionSelezione wanted da wantlistOverview mobile-first da mostrare in fiera
- Milestone strategica principale: stiamo connettendo i due blocchi core dell'ecosistema (`Collector Core` + `Collector Watch`) per unire gestione collezione e monitoraggio operativo in un unico flusso.
- Nuova pagina `app/convention/page.tsx` protetta da login, pensata per uso in convention/card show con UX rapida e leggibile.
- Event Setup introdotto con modalità (`trade_only`, `buy_only`, `sell_only`, `trade_buy`, `trade_sell`, `open`), budget opzionale e valuta (default EUR).
- Sezione `Available for Trade / Sale`: elenco da `user_collection_items` (card + product) con toggle `On/Off` e `quantity_available` vincolata alla quantità posseduta.
- Sezione `Looking For`: elenco da `user_wants` (card + product) con toggle `On/Off`, target price e metadati utili (lingua/condizione/stato quando presenti).
- Convention Overview con count immediati (trade items e wants selezionati) e riepilogo modalità/budget in formato facile da mostrare ad altri collezionisti.
- Nuova schermata `app/convention/showcase/page.tsx` pensata per mostrare rapidamente a venditori/collezionisti cosa è disponibile per trade/sale e cosa si sta cercando.
- Layout showcase rifinito in split responsive desktop (`2/3` carte a sinistra, `1/3` prodotti a destra) con fallback stacked su mobile.
- Nuova migration `scripts/sql/convention_mode.sql` con tabelle `user_convention_profiles`, `user_convention_trade_items`, `user_convention_wants`, trigger `updated_at`, indici e policy RLS complete per isolamento utente.
- Catalogo set aggiornato con layout split desktop in `app/catalog/sets/[id]/page.tsx`: area principale carte (`2/3`) + colonna sealed products (`1/3`) sticky, con fallback stacked su mobile.
- Pagina dettaglio set resa full-width (breakout dal `max-w-7xl` del layout) per usare tutta la larghezza disponibile invece di comprimere i prodotti a destra.
- Corretto overflow/layout sul dettaglio set: rimosso il breakout viewport che causava sovrapposizione con sidebar e uscita a destra schermo.
- Aggiustata larghezza full-page del dettaglio set con breakout calibrato sull'area contenuto desktop (`w-[calc(100vw-...)]`) per mantenere spazio laterale senza coprire sidebar.
- Rollback layout catalogo set al comportamento precedente: niente split fisso cards/products e niente breakout width, sealed products riportati sotto la griglia/lista carte.
Convention Mode (mobile-first quick workflow)
18 maggio 2026Milestones
Pagina dedicata ConventionRicerca rapida + filtri operativiStatus collezione/wantlist immediatoQuick add +1 da mobile
- Aggiunta pagina `app/convention/page.tsx` ottimizzata per fiere/eventi: UI compatta, card grandi, azioni essenziali e riduzione elementi non critici.
- Ricerca veloce per nome/numero con debounce corto e fallback cache locale (`localStorage`) per continuità d'uso in contesti mobili instabili.
- Quick status per ogni carta (`OWNED` / `WANTED` / `MISSING`) con quantità, favorito e stato wanted caricati in batch senza query N+1.
- Quick filters operativi: `All`, `Missing only`, `Wanted only`, `Trade duplicates`, `Favorites`.
- Rapid add con azione `+1` direttamente dal risultato ricerca per inserimento veloce in collezione.
- Shortcut diretto a `Scan Beta` e link rapidi a `Open` e `Want` per completare il flusso convention in pochi tap.
- Navigazione aggiornata con voce `Convention` in sidebar e bottom navigation mobile.
Collector App UX + Custom Binder visual workflow
17 maggio 2026Milestones
Navigation app-like con sidebarSearch experience centraleCustom Binder completo (DB + UI)Binder Placement Mode visualeCard Location integrata in Collection/Card Detail
- Refactor navigazione principale da top-navbar a layout web-app con sidebar persistente e bottom nav mobile.
- Riorganizzate sezioni sidebar in gruppi Core/Tools/Profile con active state premium, spacing e leggibilità migliorati.
- Search globale potenziata con dropdown portal, filtri per tipo (Carte/Set/Prodotti), ranking migliorato e focus command-style.
- Fix compatibilità layout Next.js: `AppSidebar` e `MobileBottomNav` gestiti in `Suspense` per evitare regressioni runtime/build.
- Uniformata esperienza visuale scrollbar/overlay e sistemato comportamento scroll pagina vs sidebar nei layout autenticati.
- Aggiunto schema SQL `scripts/sql/custom_binders.sql` con tabelle `user_binders` e `user_binder_cards`, trigger `updated_at`, indici e policy RLS complete.
- Nuova pagina `app/collection/binders/page.tsx` con creazione binder personalizzati, quick find posizione e assegnazione carte.
- Evoluzione binder UX in modalità visuale: pagine + slot cliccabili, placement rapido, move/remove e fallback form tecnico mantenuto.
- Nuovo bottone `Add to Binder` (modal compatta) in card detail e collection per assegnazione veloce binder/page/slot con preview posizione attuale.
- Nuovo badge location binder (`Binder · Page · Slot`) su collection e card detail con deep-link diretto alla pagina/slot del binder.
- Corretto join Supabase relazione binder (`user_binders(...)`) per allineamento schema cache ed eliminazione errore runtime.
- Introdotta vista dedicata binder in `app/collection/binders/[id]/page.tsx` con navigazione pagina/slot e stile album coerente con i binder set.
- Abilitato drag & drop in placement mode per trascinare carte possedute direttamente negli slot del custom binder.
- Aggiunta rimozione carta dal binder direttamente dallo slot (`Remove`) senza impatto sulla collection.
- Supporto binder con griglia personalizzata (`2x2`, `3x3`, `4x3`) con salvataggio su `user_binders.grid_cols/grid_rows` e rendering dinamico slot.
- Semplificato il fallback form: ora usato solo per creazione nuovo binder (rimossa assegnazione carte dal fallback).
- Risolti errori hydration/accessibilità: no nesting link-in-link e button-in-button nelle viste collection/binder.
- Aggiunta azione di eliminazione custom binder dalla pagina `/collection/binders` con conferma utente (`Del`).
- Migliorata UX cancellazione binder: conferma inline a 2 step con contatore carte assegnate (`Elimina (N)?` + `Sì/No`).
- Aggiunto script separato `scripts/test-cardtrader-blueprints-italian.ts` per testare richieste CardTrader con parametri lingua (`language` / `pokemon_language`) senza modificare il flusso import principale.
- Aggiunto script `scripts/test-cardtrader-marketplace-italian.ts` per verificare sulle API marketplace se i nomi listati cambiano con richiesta lingua italiana.
Mapping sealed Pokémon: fallback nomi per category_id null
17 maggio 2026Milestones
Riduzione prodotti non mappatiFallback naming più robusto su sealedAllineamento categorie dashboard/import
- Aggiornato `scripts/sql/catalog_products_product_category.sql` con mapping diretto categorie CardTrader Pokémon (`61/60/66/67/68/69/59/190`).
- Esteso mapping sealed One Piece (`game_id=15`) con categorie CardTrader (`194/193/195/256/201/200/257`) per ridurre classificazioni in `other`.
- Affinato mapping One Piece: `category_id=200` e `257` riclassificati da `bundle` a `accessory` (playmat/dice).
- Aggiunte regole fallback name-based per prodotti senza `metadata.category_id` (es. `blister`, `checklane blister`, `build & battle`, `prerelease pack`, `trainer toolkit`, `display box`, `collector chest`).
- Rafforzata la classificazione verso `booster_pack`, `booster_box`, `bundle`, `starter_deck` e `collection_box` per ridurre `other/unmapped` dopo import sealed.
Scan Beta (OCR testuale + matching catalogo con conferma utente)
16 maggio 2026Milestones
Nuova pagina Scan BetaOCR testuale on-demandMatching fuzzy con rankingAzioni post-match con conferma utente
- Introdotta pagina `Scan Beta` con upload immagine + supporto camera (`capture=environment`) e preview locale.
- OCR implementato in modalità leggera con caricamento lazy del motore solo nella pagina scan (nessun impatto sul bundle globale).
- Nessun salvataggio permanente immagine: file usato solo in sessione per estrazione testo.
- Parsing OCR beta per estrarre campi candidati: nome carta, collector number, set code, set name, lingua e rarità.
- Campi OCR resi modificabili manualmente per correggere casi di testo incompleto/sfocato e rilanciare la ricerca.
- OCR beta migliorato con preprocess immagine (grayscale + contrast), lingua `eng+ita` e doppio pass (full image + crop centrale).
- Parser OCR reso più robusto: priorità ai collector number in formato frazione (`x/yyy`), filtro token rumorosi (`TCG/HP/LV/STAGE`) e fallback filename più pulito.
- Parser OCR migliorato per carte Pokémon/classiche: usa la riga header con `HP` per il nome carta e preferisce l'ultimo collector number in formato `x/yyy` (es. `6/102`) ignorando `#130`/anni.
- Nome carta OCR migliorato con euristica su testo più grande (bbox parole Tesseract) combinata con regole header `HP` per aumentare accuratezza su carte vecchie/nuove.
- Matching scan migliorato per numeri carta rumorosi con query fuzzy aggiuntiva su `card_number` (`ILIKE`) oltre al match esatto.
- Aggiunto selettore tema globale fisso in alto a destra (`Classic` / `Light`) con switch live e persistenza in localStorage.
- Matching su catalogo con ranking fuzzy e priorità: (1) collector+set code, (2) collector+set name, (3) nome+set, (4) nome only.
- Risultati scan mostrano immagine, nome carta, set, collector number, TCG, rarità e confidence label (High/Medium/Low).
- Azioni per ogni match: `Add to Collection`, `Add to Wantlist`, `Open Card`, senza auto-import e senza automatch definitivo.
Set Page: integrazione Sealed Products + selezione mista
15 maggio 2026Milestones
Set page estesa con prodotti sealed collegatiCarrello sticky con selettore Carte/ProdottiAzioni collection/wantlist sui prodotti
- Aggiunta sezione dedicata "Sealed Products" nella pagina set, separata dalla checklist carte e senza impatto su binder/completion/missing.
- Card prodotto arricchita con immagine, tipo prodotto, set/TCG, stato owned e quantità posseduta.
- Abilitato Add/Remove in collection per prodotti (`item_type = 'product'`) con gestione quantità e stato già posseduto.
- Abilitato Add/Remove in wantlist per prodotti (`item_type = 'product'`) dalla sezione sealed.
- Aggiunto toggle di selezione sui sealed products (coerente con le carte) per includerli nel carrello sticky.
- Refactor del selection cart provider: supporto item misti (`card` + `product`) con id distinti e operazioni toggle/increment/decrement/remove compatibili.
- Aggiornata sticky selection bar con filtri "Tutto / Carte / Prodotti", badge tipo item e azione wantlist unificata (+/-) su selezione corrente.
- Mantenuto invariato il flusso bulk add carte (`/collection/add-selection`) per non alterare il comportamento card-only esistente.
- Wantlist estesa con sezione prodotti desiderati (cards + prodotti convivono nella stessa pagina).
- Collection estesa con sezione prodotti posseduti e gestione quantità/rimozione direttamente da UI.
- Home aggiornata con indicatori prodotti (owned/wanted) e blocco "Prodotti recenti" per i sealed appena aggiunti.
- Fallback immagini prodotti uniformato su wantlist/collection/home (`image_url` -> `metadata.image_url` -> `metadata.image.url`) per coprire prodotti con immagine solo nei metadati.
- Estratta utility condivisa `resolveProductImage()` in `lib/product-image.ts` per evitare duplicazioni logiche tra pagine.
Stabilizzazione DB post-import (performance + affidabilità)
13 maggio 2026Milestones
Timeout 57014 risolti su catalogo/searchBaseline indici post-import consolidataMappatura sealed Lorcana normalizzata
- Aggiunti/validati indici su card_prints per query ad alto volume (filtri game/set e paginazione catalogo carte).
- Aggiunti indici trigram (pg_trgm) su name di card_prints, sets e catalog_products per rendere stabile e veloce la ricerca globale con ILIKE.
- Eseguito ANALYZE sulle tabelle principali per aggiornare le statistiche del planner e ridurre i timeout intermittenti.
- Creato script SQL unico post-import (`scripts/sql/post_import_optimize.sql`) per applicare in modo ripetibile ottimizzazioni e analyze dopo import massivi.
- Aggiornata mappatura category_id -> product_category_id per Lorcana sealed nel backfill SQL (starter/pack/box/bundle/collection).
- Importer carte migliorato con log esplicito degli errori card-level (expansion_id, set, blueprint_id, nome carta, messaggio DB).
Search globale avanzata + ottimizzazioni catalogo
12 maggio 2026Milestones
Global Search con filtri tipo risultatoPerformance catalogo set stabilizzataFeature temporaneamente disattivate (safe mode)Snapshot TCG importati
- Ricerca live globale migliorata con filtri in testa (Tutti, Carte, Espansioni/Set, Prodotti) e risultati raggruppati per tipo.
- Ranking ricerca migliorato per combinazioni nome + set, nome + numero, set + numero, con priorità su match più rilevanti.
- Risultati ricerca ora mostrano tipo, nome, contesto set/TCG e immagine (placeholder quando assente).
- Ottimizzata la pagina catalogo set per evitare timeout e mantenere navigazione fluida anche con dataset grandi.
- Disattivati temporaneamente nella lista set i conteggi carte per-set e la mini completion card per privilegiare velocità e stabilità.
- Disattivati anche i contatori nella selezione TCG (hero catalogo + card TCG + header TCG) per ridurre il carico query lato catalogo.
- Normalizzato mapping category_id -> product_category_id anche per categorie sealed Magic più frequenti (importer + backfill SQL).
- Sezione TCG importati (stato attuale): Pokémon, One Piece, Dragon Ball Super, Magic: The Gathering.
Pipeline dati multi-TCG
11 maggio 2026Milestones
Pipeline import per singolo gamePipeline import multi-gameUpsert conservativi e incrementali
- Nuovi script import per game singolo e batch multi-game con supporto game IDs richiesti.
- Import incrementale con upsert su set/carte/external_refs e protezione dati locali esistenti tramite riuso set già presenti.
- Logging per game con conteggi: set importati/riusati, carte importate, carte saltate, duplicati rilevati ed errori.
- Nuovo import sealed su catalog_products con separazione da card_prints, link set/tcg quando disponibili ed external_refs.
- Pre-analisi categorie estesa: mappa category_id su più set, classificazione logica card/sealed/unknown e report JSON.
- Import prodotti aggiornato con mapping su product_categories interne e valorizzazione automatica di product_category_id (fallback other).
- Aggiunta migrazione SQL per collegamento strutturale catalog_products → product_categories con backfill categorie sui prodotti già importati.
- Nuovo orchestratore full import per singolo game: pre-analisi categorie, import set/carte e import prodotti sealed in sequenza automatica.
Preferiti, Goals, Binder e Graded Show
10 maggio 2026Milestones
Favorites (⭐) + Recently AddedSet Completion + AchievementsSet multi-select UX unificataQuality pass microcopy + navigazioneWantlist smart sortingSet Goals DB + Goals BoardGraded Show realisticoCollection Museum
- Favorites estesi in Collection/Card Detail/Home con toggle rapido e sezione dedicata.
- Recently Added evoluto: badge New + timeline giornaliera (oggi/ieri/data) basata su created_at (48h).
- Set Completion badges e Collection Achievements consolidati con progressione visuale coerente.
- Set multi-select rifinito: toggle affidabile su card, selezione non possedute, action bar globale unificata e fix provider/runtime.
- Pass UX globale: coerenza microcopy IT, frecce/separatori, link di ritorno contestuali e glossario interno nel changelog.
- Binder migliorato: animazione pagina più naturale e leggibile (rimossa overlay rettangolare, flip diretto sulla pagina).
- Wantlist smart sorting introdotto (smart/priorità/target/recenti/nome) con ordinamento coerente nelle viste.
- Collection aggiornata con Set Goals avanzati + Next Best Set + persistenza su user_set_goals con feedback salvataggio.
- Nuova pagina /collection/goals: board High/Normal/Low con sorting smart, quick actions, drag&drop e controllo touch 'Sposta a'.
- Graded Show introdotto e rifinito: vetrina slab realistica con texture vetro/noise/sheen e label avanzata.
- Collection Museum introdotto come istanza visuale premium della collezione (Grails, Set vicini al completamento, Ultime aggiunte) con accesso rapido da Home e header.
Progressione set, missing cards & Binder
9 maggio 2026Milestones
Virtual Binder / Album ViewSet Completion (progress bar e percentuale)Missing Cards (Owned/Missing/Wanted + azioni)Home = Collector Progression HubCollection = Control Center
- UI status colors (Owned/Wanted/Missing) con priorità stati.
- Binder popup: overlay full-screen, chiusura su backdrop/Esc, navigazione ←/→, dimensioni ridotte e animazione page-turn.
- Filtri set: All / Owned / Missing / Wantlist e quick actions sulle carte mancanti.
- Home ripensata come hub di progressione: Continue Collecting, set quasi completati, missing highlights e accesso rapido al Binder.
- Collection ripensata come Control Center: overview compatta, ricerca live, filtri rapidi e navigazione per set con progress e accesso Binder.
- Wantlist ripensata come wishlist personale: focus su chase cards, target price e note; filtri essenziali e viste Cards/Gruppi.
- Catalogo e Card Detail resi più visual/premium: catalogo carte come archive, pagina carta come showcase con stato owned/wanted e accesso Binder.
Collezione riorganizzata & bulk add
6 maggio 2026Milestones
Collection Dashboard (organizzata per TCG e Set)Bulk Add (selezione multipla + carrello)
- Dashboard /collection con metriche e rendering scalabile organizzato per TCG e set (collapsible).
- Doppia vista Lista/Griglia in collezione con controlli quantity e delete mantenuti.
- Selezione multipla dal catalogo e carrello temporaneo per aggiungere più carte con le stesse condizioni.
Wantlist e pagina account
5 maggio 2026Milestones
Wantlist (Want/Wanted + pagina wants)Account Preferences (default aggiunta carte)
- Feature Want: bottone Want/Wanted con toggle e pagina /wants con dettagli (target price, max qty, note).
- Pagina /catalog/cards/[id]/want aggiornata con form avanzato e prefill da user_preferences.
- Pagina /account per preferenze utente (default TCG/lingua/condizione/stato) con salvataggio persistente.
Home multi-TCG, catalogo & ricerca
4 maggio 2026Milestones
Home multi-TCG + navigazione principaleGlobal Search liveCatalogo TCG → Set
- Homepage trasformata in dashboard multi-TCG (cards per game con conteggi set/carte e CTA Esplora).
- Catalogo riorganizzato: selezione TCG e lista set filtrata via query param (game=slug).
- Barra di ricerca globale live con debounce, dropdown risultati e navigazione rapida alla carta.
- Miglioramenti UX: link rapidi coerenti tra Home/Catalogo/Collezione/Carta/Account.