Fields & Floors Collectors
eBay에서 번호가 매겨진 스포츠 카드들을 인쇄본·사인·신인 여부·가격으로 검색하고, 검색을 저장해 새 카드가 등록되면 이메일 알림을 받는다
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기README 전체를 불러오는 중입니다. 아래는 저장된 발췌입니다.
Pipeline privé de listing Pokémon en volume. Photos → identification → pricing → eBay + TCGplayer. Un seul utilisateur, une seule machine. Double-clique Demarrer.bat. Il vérifie la configuration, construit l'application, lance les deux process et ouvre le navigateur. Arreter.bat coupe tout. Il affiche aussi une adresse réseau : l'app est accessible depuis n'importe quel appareil de la maison — téléphone, tablette — pour reviewer ailleurs que devant le PC.README 전문 보기 ↗
Pipeline privé de listing Pokémon en volume. Photos → identification → pricing → eBay + TCGplayer. Un seul utilisateur, une seule machine.
Double-clique Demarrer.bat.
Il vérifie la configuration, construit l'application, lance les deux process et ouvre
le navigateur. Arreter.bat coupe tout.
Il affiche aussi une adresse réseau (http://192.168.x.x:3000) : l'app est accessible
depuis n'importe quel appareil de la maison — téléphone, tablette — pour reviewer
ailleurs que devant le PC.
Aucun mot de passe, et c'est un choix (
CLAUDE.md: pas d'auth multi-utilisateur). Tout appareil du réseau peut ouvrir l'application, envoyer des lots et modifier l'inventaire. Chez toi, c'est ce qu'on veut. Sur un réseau que tu ne contrôles pas, ne lance pasDemarrer.bat.
Prérequis, une seule fois : copier .env.example en .env.local et renseigner
DATABASE_URL.
| À quoi ça sert | |
|---|---|
| Envoyer | Glisser le dossier du scanner. Recto-verso par défaut. |
| Lots | Ce que devient chaque envoi. Fermeture avec réconciliation. |
| Review | Identifier ce que la machine n'a pas su résoudre. Tout au clavier. |
| Vérifier | Auditer ce que la machine a décidé seule, et corriger. |
| Inventaire | Ce que tu possèdes. Recherche, filtres, valeur totale. |
| Prix | Éditer la grille tarifaire avec preview en direct et net après frais. |
| Diagnostic | Le taux de lecture OCR par ère — l'expérience 1bis, en continu. |
| Santé | Huit métriques. Si c'est vert, tu peux aller dormir. |
La review est la page qui compte. C'est le seul endroit où le système coûte du
temps humain. Tout s'y fait au clavier — ? affiche les raccourcis.
photos ──► /upload ──► appariement recto/verso ──► empreintes + embedding
│
┌─────────────────────┴──────────────┐
│ niveau 1 empreintes connues │
│ niveau 2 OCR + catalogue + CLIP │
│ niveau 3 /review (humain) │
└─────────────────────┬──────────────┘
▼
inventaire (SKU, qté)
│
pricing ────┴──── canaux
Le variant se décide à l'envoi, pas après. Une photo à plat ne permet pas de distinguer un reverse holo d'un normal, et l'écart de prix va de 5 à 20 fois. Trie tes reverse holos à part et fais-en un lot séparé.
pnpm verify # typecheck + tests + build + les 9 pages rendues
pnpm dev # développement, rechargement à chaud
pnpm build && pnpm start # production locale
pnpm test # 381 tests
pnpm typecheck
node --import tsx worker/index.ts # le worker, à part
pnpm smokecharge vraiment les neuf pages. Il existe parce que/pricinga renvoyé 500 pendant deux étapes complètes avec un build vert : un build qui compile n'est pas une page qui charge.
Jamais
npx tsxpour le worker. Ctrl+C tue le wrapper npx, pas le process node : le worker survit, continue de surveiller le dossier, et produit des résultats incohérents qu'on met du temps à comprendre.
pnpm seed:catalog # 20 444 cartes depuis pokemon-tcg-data
pnpm seed:embeddings # embeddings CLIP, ~25 cartes/s
pnpm reset:data --confirm # efface scans/inventaire/lots, GARDE le catalogue
pnpm backup # sauvegarde + vérification immédiate
pnpm loadtest 2000 200 # test de charge, worker en parallèle
pnpm golden:export # constitue le golden set depuis les reviews faites
Elles traversent les vrais chemins HTTP, contrairement au test de charge qui
dépose dans l'inbox. Elles écrivent dans la base : pnpm reset:data --confirm
après. L'application et le worker doivent tourner.
pnpm repetition 40 # 80 pages, appariement, réconciliation exacte
pnpm edge # dix formats de scanner, dont deux fichiers corrompus
pnpm course # six envois SIMULTANÉS vers le même lot
pnpm seed:volume 15000 # remplit la base au volume cible (--purge pour effacer)
⚠ pnpm seed:volume écrit beaucoup. Pense à --purge : c'est en oubliant
l'équivalent que la base est passée en lecture seule le 5 septembre.
CLAUDE.md — invariants et non-objectifs. À lire avant de toucher au code.docs/01-architecture-and-data-model.md — schéma completdocs/02-ingest-and-matching.md — le cœur du systèmedocs/03-pricing.md, docs/04-channels.mddocs/05-production.md — observabilité, tests, sauvegardesdocs/06-ui.md — système visueldocs/07-premier-test.md — ce que tu fais au premier vrai lotdocs/08-nuit-du-5-septembre.md puis docs/09-matinee-du-5-septembre.md —
ce qui a changé, et les vingt-six pannes trouvées en exécutantdocs/runbooks.md — quand ça cassePROMPTS.md — l'ordre de build et les expériencesFait : ingestion (dossier surveillé et upload), appariement recto/verso, empreintes pHash/dHash, embeddings CLIP sur 20 392 cartes, résolution à trois niveaux, UI de review, pricing complet, export TCGplayer, observabilité, sauvegarde restaurable.
Mesuré : 80 cartes/minute sur un lot réel, 400 pages uploadées en 8 s, mémoire du worker stable entre 500 et 800 Mo sur 800 cartes, 0 job mort. À 15 000 SKUs et 15 000 scans, les neuf pages rendent entre 6 et 303 ms. Niveau 1 sur 120 000 empreintes : 45 à 62 ms.
Limite connue : le quota de base du plan gratuit Supabase est de 500 Mo, et
known_fingerprints gagne une ligne d'environ 2,9 ko par scan résolu. Cela donne
trois à cinq mois avant que la base passe en lecture seule — auquel cas le pipeline
s'arrête net. Le tableau de santé surveille la taille et avertit à 80 %.
En attente de données réelles :
lib/config/fees.ts).
Le net affiché est étiqueté comme estimation.fetchEbayComps() rend une liste vide : la source de ventes passées dépend de
l'expérience 1. estimateValue retombe sur TCGplayer seul, ce qui est correct.tcg_sku_id est vide : ces IDs ne s'obtiennent qu'en exportant le catalogue
TCGplayer. Sans eux, l'export CSV écarte toutes les lignes — visiblement, avec la
raison.pnpm golden:export les récolte au fil des
reviews.Ce que ce système ne fera jamais — voir CLAUDE.md §7. Chaque ligne est une
décision prise, pas un manque à combler.