Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
429c519237 | ||
|
|
c00b3a7ad8 |
@@ -28,6 +28,36 @@ BGG has no bulk import and no write API. Cataloging a few hundred games by hand
|
|||||||
|
|
||||||
Every stage is idempotent and resumable: kill it mid-run, restart, lose nothing. All artifacts are flat CSV/JSON files you can inspect and edit.
|
Every stage is idempotent and resumable: kill it mid-run, restart, lose nothing. All artifacts are flat CSV/JSON files you can inspect and edit.
|
||||||
|
|
||||||
|
## What it looks like
|
||||||
|
|
||||||
|
**The Pipeline page** — every stage is a card with live counts and a Run button; blockers (missing token, stub-data lock) are banners, not surprises.
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
**Photos** — drag shelf photos in; boxes the vision model saw but couldn't read become illustrated reshoot tickets with shelf directions a human can follow.
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
**Titles** — every read off the shelves, alphabetized with status and source photos. This is the proofreading checkpoint: edit misreads, split multi-copy lines, remove non-games.
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
**Review** — keyboard-first decisions on ambiguous matches, editions, and cross-photo merges (with veto). Here: everything resolvable is reviewed, 106 titles parked awaiting the API token.
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
**Queue** — exactly what upload will do before it does it, and a permanent log of every attempt ever made.
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
**Library** — the enriched collection browser (board games and RPGs), waiting for real BGG data to fill its shelves.
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
**Help** — the whole flow, every page, every status, and every keyboard shortcut, documented in-app.
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
## Requirements
|
## Requirements
|
||||||
|
|
||||||
- macOS or Linux, Python 3.12+, [uv](https://docs.astral.sh/uv/)
|
- macOS or Linux, Python 3.12+, [uv](https://docs.astral.sh/uv/)
|
||||||
|
|||||||
@@ -6,5 +6,46 @@
|
|||||||
{
|
{
|
||||||
"match": "DOCTOR WHO THE GAME OF TIME",
|
"match": "DOCTOR WHO THE GAME OF TIME",
|
||||||
"title_raw": "DOCTOR WHO THE card GAME"
|
"title_raw": "DOCTOR WHO THE card GAME"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"match": "CAPTAIN MARVEL SECRET SKRULLS",
|
||||||
|
"confidence": "high"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"match": "CHECKERS",
|
||||||
|
"title_raw": "Super Mario CHECKERS",
|
||||||
|
"confidence": "high"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"match": "DOCTOR WHO THE card GAME",
|
||||||
|
"confidence": "high"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"match": "DUNGEONS & DRAGONS",
|
||||||
|
"confidence": "high"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"match": "Huggermugger",
|
||||||
|
"confidence": "high"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"match": "Patch Work",
|
||||||
|
"confidence": "high"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"match": "The Ain't It Cool Trivia Game",
|
||||||
|
"title_raw": "The Rocky Horror Trivia Game",
|
||||||
|
"confidence": "high"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"match": "Verdant",
|
||||||
|
"confidence": "high"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"match": "Wiz-War",
|
||||||
|
"photos": [
|
||||||
|
"IMG_4502.jpeg"
|
||||||
|
],
|
||||||
|
"confidence": "high"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
|||||||
@@ -58,5 +58,11 @@
|
|||||||
"photos": [
|
"photos": [
|
||||||
"IMG_4517.jpeg"
|
"IMG_4517.jpeg"
|
||||||
]
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": "Super Mario CHECKERS",
|
||||||
|
"photos": [
|
||||||
|
"IMG_4507.jpeg"
|
||||||
|
]
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
|||||||
@@ -159,7 +159,7 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"title_raw": "Patch Work",
|
"title_raw": "Patch Work",
|
||||||
"confidence": "medium",
|
"confidence": "high",
|
||||||
"publisher_hint": "",
|
"publisher_hint": "",
|
||||||
"edition_hint": "",
|
"edition_hint": "",
|
||||||
"year_hint": null,
|
"year_hint": null,
|
||||||
@@ -260,7 +260,7 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"title_raw": "Wiz-War",
|
"title_raw": "Wiz-War",
|
||||||
"confidence": "medium",
|
"confidence": "high",
|
||||||
"publisher_hint": "",
|
"publisher_hint": "",
|
||||||
"edition_hint": "",
|
"edition_hint": "",
|
||||||
"year_hint": null,
|
"year_hint": null,
|
||||||
@@ -455,19 +455,6 @@
|
|||||||
],
|
],
|
||||||
"title_normalized": "labyrinth"
|
"title_normalized": "labyrinth"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"title_raw": "CHECKERS",
|
|
||||||
"confidence": "medium",
|
|
||||||
"publisher_hint": "",
|
|
||||||
"edition_hint": "",
|
|
||||||
"year_hint": null,
|
|
||||||
"language_hint": "English",
|
|
||||||
"art_notes": "Top-left corner box, red/black checkered pattern visible",
|
|
||||||
"source_photos": [
|
|
||||||
"IMG_4507.jpeg"
|
|
||||||
],
|
|
||||||
"title_normalized": "checkers"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"title_raw": "Super Mario Checkers Collector's Edition",
|
"title_raw": "Super Mario Checkers Collector's Edition",
|
||||||
"confidence": "high",
|
"confidence": "high",
|
||||||
@@ -758,7 +745,7 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"title_raw": "Huggermugger",
|
"title_raw": "Huggermugger",
|
||||||
"confidence": "low",
|
"confidence": "high",
|
||||||
"publisher_hint": "",
|
"publisher_hint": "",
|
||||||
"edition_hint": "",
|
"edition_hint": "",
|
||||||
"year_hint": null,
|
"year_hint": null,
|
||||||
@@ -770,8 +757,8 @@
|
|||||||
"title_normalized": "huggermugger"
|
"title_normalized": "huggermugger"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"title_raw": "The Ain't It Cool Trivia Game",
|
"title_raw": "The Rocky Horror Trivia Game",
|
||||||
"confidence": "medium",
|
"confidence": "high",
|
||||||
"publisher_hint": "",
|
"publisher_hint": "",
|
||||||
"edition_hint": "",
|
"edition_hint": "",
|
||||||
"year_hint": null,
|
"year_hint": null,
|
||||||
@@ -780,7 +767,7 @@
|
|||||||
"source_photos": [
|
"source_photos": [
|
||||||
"IMG_4514.jpeg"
|
"IMG_4514.jpeg"
|
||||||
],
|
],
|
||||||
"title_normalized": "ain t it cool trivia game"
|
"title_normalized": "rocky horror trivia game"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"title_raw": "ART NOUVEAU ARTISTRY",
|
"title_raw": "ART NOUVEAU ARTISTRY",
|
||||||
@@ -849,7 +836,7 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"title_raw": "CAPTAIN MARVEL SECRET SKRULLS",
|
"title_raw": "CAPTAIN MARVEL SECRET SKRULLS",
|
||||||
"confidence": "medium",
|
"confidence": "high",
|
||||||
"publisher_hint": "Marvel",
|
"publisher_hint": "Marvel",
|
||||||
"edition_hint": "",
|
"edition_hint": "",
|
||||||
"year_hint": null,
|
"year_hint": null,
|
||||||
@@ -928,7 +915,7 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"title_raw": "DOCTOR WHO THE card GAME",
|
"title_raw": "DOCTOR WHO THE card GAME",
|
||||||
"confidence": "medium",
|
"confidence": "high",
|
||||||
"publisher_hint": "",
|
"publisher_hint": "",
|
||||||
"edition_hint": "",
|
"edition_hint": "",
|
||||||
"year_hint": null,
|
"year_hint": null,
|
||||||
@@ -941,7 +928,7 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"title_raw": "DUNGEONS & DRAGONS",
|
"title_raw": "DUNGEONS & DRAGONS",
|
||||||
"confidence": "medium",
|
"confidence": "high",
|
||||||
"publisher_hint": "TSR",
|
"publisher_hint": "TSR",
|
||||||
"edition_hint": "",
|
"edition_hint": "",
|
||||||
"year_hint": null,
|
"year_hint": null,
|
||||||
@@ -1319,7 +1306,7 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"title_raw": "Verdant",
|
"title_raw": "Verdant",
|
||||||
"confidence": "medium",
|
"confidence": "high",
|
||||||
"publisher_hint": "AEG",
|
"publisher_hint": "AEG",
|
||||||
"edition_hint": "",
|
"edition_hint": "",
|
||||||
"year_hint": null,
|
"year_hint": null,
|
||||||
@@ -1628,5 +1615,44 @@
|
|||||||
"IMG_4566.jpeg"
|
"IMG_4566.jpeg"
|
||||||
],
|
],
|
||||||
"title_normalized": "alice is missing silent role playing game"
|
"title_normalized": "alice is missing silent role playing game"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title_raw": "ETHERFIELDS KITTENBURG EXPANSION",
|
||||||
|
"confidence": "high",
|
||||||
|
"publisher_hint": "Awaken Realms",
|
||||||
|
"edition_hint": "Expansion by Adrian Krawczyk",
|
||||||
|
"year_hint": null,
|
||||||
|
"language_hint": "English",
|
||||||
|
"art_notes": "Dark reddish-brown background with a large anthropomorphic cat figure in ornate robe, surrounded by smaller kittens, gothic fantasy style artwork",
|
||||||
|
"source_photos": [
|
||||||
|
"IMG_4570.jpeg"
|
||||||
|
],
|
||||||
|
"title_normalized": "etherfields kittenburg expansion"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title_raw": "BOTANY EXPANSION TANTALIZING TREES",
|
||||||
|
"confidence": "high",
|
||||||
|
"publisher_hint": "Dux Somnium",
|
||||||
|
"edition_hint": "Expansion",
|
||||||
|
"year_hint": null,
|
||||||
|
"language_hint": "English",
|
||||||
|
"art_notes": "Dark green box with gold ornate border, gold tree illustration",
|
||||||
|
"source_photos": [
|
||||||
|
"IMG_4571.jpeg"
|
||||||
|
],
|
||||||
|
"title_normalized": "botany expansion tantalizing trees"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title_raw": "BOTANY EXPANSION PERILOUS PERFUMES POISONOUS, CARNIVOROUS, PARASITIC AND BIZARRE PLANTS",
|
||||||
|
"confidence": "high",
|
||||||
|
"publisher_hint": "Dux Somnium",
|
||||||
|
"edition_hint": "Expansion",
|
||||||
|
"year_hint": null,
|
||||||
|
"language_hint": "English",
|
||||||
|
"art_notes": "Dark purple/plum box with gold ornate border, gold carnivorous plant illustration",
|
||||||
|
"source_photos": [
|
||||||
|
"IMG_4571.jpeg"
|
||||||
|
],
|
||||||
|
"title_normalized": "botany expansion perilous perfumes poisonous carnivorous parasitic and bizarre plants"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
|||||||
|
After Width: | Height: | Size: 332 KiB |
|
After Width: | Height: | Size: 748 KiB |
|
After Width: | Height: | Size: 489 KiB |
|
After Width: | Height: | Size: 346 KiB |
|
After Width: | Height: | Size: 366 KiB |
|
After Width: | Height: | Size: 364 KiB |
|
After Width: | Height: | Size: 588 KiB |